Громкость звука на определенной частоте (C#)

Я не понимаю, почему громкость определяется частотой не так, как ожидалось.

Я посылаю звуки на свой микрофон с несколькими заданными частотами по очереди. Затем я выполняю БПФ буфера микрофона. При выходе из БПФ у меня есть массив комплексных чисел. Чтобы узнать громкость звука на заданной частоте, я смотрю на свой массив, номер элемента в этом массиве получаю так:

MyFrequency = n*SamplingRate/SizeOfArray.

Далее я получаю величину комплексного числа

(sqrt(Re^2+Im^2)

Если я прав, это показывает мне громкость звука на этой частоте. Но это значение сильно меняется в зависимости от частоты. Если я ошибаюсь, объясните мне, что мне нужно сделать, чтобы исправить мою ошибку. Если я прав, объясните мне, почему эти значения так сильно меняются.


person Alexander Mashin    schedule 06.11.2012    source источник


Ответы (1)


Применяете ли вы оконную функцию перед БПФ? Если нет, то вы увидите эффекты спектральной утечки, и величина в любом данном бине БПФ будет быть правильным только в том случае, если исходная частота является точной долей частоты дискретизации.

person Paul R    schedule 06.11.2012
comment
Нет, я не использую оконную функцию. Если я использую, например, hanning window, у меня не возникнет этой проблемы? - person Alexander Mashin; 06.11.2012
comment
Да - в этом весь смысл - вам нужна оконная функция до БПФ. Окно Ханнинга (фон Ханна) должно подойти. - person Paul R; 06.11.2012