Stosowanie ważenia A.

11

Chcę obliczyć głośność danego sygnału i natknąłem się na ten wątek . Jestem nieco zdezorientowany, jeśli chodzi o aspekt A-Weighting. Nie mogę publikować zdjęć, ale myślę, że ta witryna ma formułę, której potrzebuję. (Wa = 10 log ...)

Nie rozumiem, jak właściwie używać tego w moim programie. Jeśli foznacza częstotliwość, to prawdopodobnie mogę zakodować wartości, ponieważ pozostaną one stałe. W takim przypadku, w jaki sposób mogę zastosować Wado moich przykładowych wartości i jakich wartości używam? Czy obliczam widmo mocy, aby uzyskać WINDOW_SIZE/2wartości i pomnożyć każdą wartość w paśmie częstotliwości przez odpowiednią wstępnie obliczoną Wawartość, czy jest to niewłaściwy sposób? Z góry dziękuję.

TryNCode
źródło

Odpowiedzi:

8

Tak, możesz zakodować wartości na stałe, wykonać FFT swojego sygnału i pomnożyć przez wartości zakodowane na stałe, a następnie uzyskać amplitudę w dziedzinie częstotliwości z twierdzenia Parsevala ( przykład ).

Możesz także zaimplementować filtr cyfrowy i zrobić to w dziedzinie czasu. Oto kod Matlab i moje tłumaczenie na Python .

Należy zauważyć, że transformacja dwuliniowa powoduje, że filtr cyfrowy rozwija się szybciej niż filtr analogowy, co powoduje błędy pomiaru przy częstych próbkach. Prostym rozwiązaniem jest najpierw próbkowanie danych, więc rozbieżność jest zminimalizowana. Inne podejścia do projektowania filtrów tutaj: http://dsp.stackexchange.com/q/36077/29

endolit
źródło
Dzięki, rozumiem to trochę lepiej. W twoim przykładzie Parseval, czy rms_flat jest równaniem RMS (SQRT(x1^2 + x2^2...xn^2/n))i jaka jest różnica między rms_flat sygnału i rms_flat FFT?
TryNCode,
@ExpAns: Tak, rms_flat()jest po prostu sqrt(mean(absolute(a)**2)). /nJest na zewnątrz. Wartości RMS sygnału i FFT są takie same, z wyjątkiem współczynnika skalowania.
endolith,