Компенсация частотной характеристики микрофона в БПФ - PullRequest
1 голос
/ 11 июля 2011

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

20 -2.7
50 +0.5
100 +0.7
135 +0.7
190 +1.4
250 +1
370 +0.9
550 +1
700 +0.6
1000 +0.5
1500 +0.4
2000 +0.5
2800 +0.6
2900 +0.4
3000 +0.5
4000 -0.2
4300 -0.2
5600 +0.7
6150 +0.6
12000 +3.5
13000 +3.5
20000 -1.5

Я могу просто применить калибровку после БПФ и до его отображения на экране.

Моя проблемаэто: как я должен интерполировать между этими значениями, которые, по сути, являются просто точками выбора всей частотной характеристики микрофона?Наивным подходом может быть определение жестких прямоугольных полос вокруг этих точек и, для каждой частоты в БПФ, выбрать ту или иную калибровочную линию для применения к этой частоте.Однако это приведет к видимым скачкам на графике БПФ.Другим решением может быть использование линейной интерполяции, но я все еще не уверен, что это лучший способ.

Существует ли "стандартный" способ сделать это, что делают такие программы, как устройства Smaart или FFT?Как лучше всего создать непрерывную кривую из этих нескольких фиксированных точек?

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Я бы аппроксимировал обратный фильтр для частотной характеристики отклика микрофона, используя какой-либо метод, например, методы Винера или LMS, или просто применил наивный подход (см. Комментарии) и применил бы его к записанному сигналу перед вычислениемБПФ.Если это не вариант, я бы пошел с линейной интерполяцией точек, так как я не понимаю, почему это вызвало бы какие-либо "видимые скачки".

1 голос
/ 11 июля 2011

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

...