Menerapkan A-weighting

11

Saya ingin menghitung kenyaringan sinyal yang diberikan dan saya telah menemukan utas ini . Saya sedikit bingung tentang aspek A-Weighting-nya. Saya tidak dapat memposting gambar, tetapi saya pikir situs ini memiliki formula yang saya butuhkan. (Wa = 10 log ...)

Yang tidak saya mengerti adalah bagaimana cara menggunakannya di program saya. Jika fsingkatan dari frekuensi, maka mungkin saya bisa meng-hardcode nilai-nilai karena mereka akan tetap konstan. Jika itu masalahnya, bagaimana cara saya menerapkan Wanilai sampel saya dan nilai apa yang saya gunakan? Apakah saya menghitung spektrum daya untuk mendapatkan WINDOW_SIZE/2nilai dan mengalikan setiap nilai dalam pita frekuensi dengan Wanilai pra-hitung yang relevan atau apakah itu cara yang salah untuk melakukannya? Terima kasih sebelumnya.

TryNCode
sumber

Jawaban:

8

Ya, Anda bisa meng-hardcode nilai-nilai, melakukan FFT dari sinyal Anda, dan mengalikannya dengan nilai-nilai hardcode, kemudian mendapatkan amplitudo dalam domain frekuensi dari teorema Parseval ( contoh ).

Anda juga dapat menerapkan filter digital dan melakukannya dalam domain waktu. Ini kode Matlab dan terjemahan saya ke Python .

Perhatikan bahwa transformasi bilinear menyebabkan filter digital lebih cepat roll-off daripada filter analog, memperkenalkan kesalahan pengukuran pada laju sampel umum. Perbaikan sederhana adalah dengan meng-upample data terlebih dahulu, sehingga perbedaan diminimalkan. Pendekatan desain filter lainnya di sini: http://dsp.stackexchange.com/q/36077/29

endolit
sumber
Terima kasih, saya memahaminya sedikit lebih baik. Dalam contoh Parseval Anda, apakah rms_flat persamaan RMS (SQRT(x1^2 + x2^2...xn^2/n))dan apa perbedaan antara rms_flat dari sinyal dan rms_flat dari FFT?
TryNCode
@ExpAns: Ya, rms_flat()adil sqrt(mean(absolute(a)**2)). Ada /ndi luar. Nilai RMS dari sinyal dan FFT adalah sama kecuali untuk faktor penskalaan.
endolith