Преобразование аудиосэмплов из временной области в частотную

как инженер-программист я сталкиваюсь с некоторыми трудностями при работе над проблемой обработки сигналов. У меня нет большого опыта в этой области.

Что я пытаюсь сделать, так это сэмплировать звук окружающей среды с частотой дискретизации 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 )Гц?

Спасибо, Вахит

6
задан Community 23 May 2017 в 12:10
поделиться