как инженер-программист я сталкиваюсь с некоторыми трудностями при работе над проблемой обработки сигналов. У меня нет большого опыта в этой области.
Что я пытаюсь сделать, так это сэмплировать звук окружающей среды с частотой дискретизации 44100 и для окон фиксированного размера, чтобы проверить, существует ли определенная частота (20 кГц )и выше порогового значения.
Вот что я делаю в соответствии с идеальным ответом в Как извлечь информацию о частоте из сэмплов из PortAudio с помощью FFTW в C
102400 сэмплов (2320 мс )собираются из аудиопорта с частотой дискретизации 44100.Примерные значения находятся в диапазоне от 0,0 до 1,0
int samplingRate = 44100;
int numberOfSamples = 102400;
float samples[numberOfSamples] = ListenMic_Function(numberOfSamples,samplingRate);
Размер окна или размер БПФ: 1024 отсчета (23,2 мс)
int N = 1024;
Количество окон 100
int noOfWindows = numberOfSamples / N;
Разделение сэмплов на noOfWindows (100 )окон, каждое из которых имеет размер N (1024 )сэмплов
float windowSamplesIn[noOfWindows][N];
for i:= 0 to noOfWindows -1
windowSamplesIn[i] = subarray(samples,i*N,(i+1)*N);
endfor
Применение оконной функции Ханнинга к каждому окну
float windowSamplesOut[noOfWindows][N];
for i:= 0 to noOfWindows -1
windowSamplesOut[i] = HanningWindow_Function(windowSamplesIn[i]);
endfor
Применение БПФ к каждому окну (действительное преобразование в сложное выполняется внутри функции БПФ)
float frequencyData[noOfWindows][samplingRate/2];
for i:= 0 to noOfWindows -1
frequencyData[i] = RealToComplex_FFT_Function(windowSamplesOut[i], samplingRate);
endfor
На последнем шаге я использую функцию БПФ, реализованную по этой ссылке :http://www.codeproject.com/Articles/9388/How-to-implement-the-FFT-algorithm. ; потому что я не могу реализовать функцию БПФ с нуля.
В чем я не уверен, так это в том, что при подаче N (1024 )отсчетов функции БПФ в качестве входных данных в качестве выходных данных возвращаются значения SampleRate/2 (22050 )децибел. Это то, что делает функция БПФ?
Я понимаю, что из-за частоты Найквиста я могу определить не более половины частоты частоты дискретизации. Но возможно ли получить значения в децибелах для каждой частоты до частоты дискретизации/2 (22050 )Гц?
Спасибо, Вахит