gpt4 book ai didi

audio - 将音频样本从时域转换为频域

转载 作者:行者123 更新时间:2023-12-04 14:31:46 27 4
gpt4 key购买 nike

作为一名软件工程师,我在处理信号处理问题时遇到了一些困难。我在这方面没有太多经验。

我尝试做的是以44100采样率和固定大小的窗口对环境声音进行采样,以测试特定频率(20KHz)是否存在并且高于阈值。

这是我根据 How to extract frequency information from samples from PortAudio using FFTW in C 中的完美答案所做的

从音频端口以 44100 采样率收集 102400 个样本(2320 毫秒)。样本值介于 0.0 和 1.0 之间

int samplingRate = 44100;
int numberOfSamples = 102400;
float samples[numberOfSamples] = ListenMic_Function(numberOfSamples,samplingRate);

窗口大小或 FFT 大小为 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

在每个窗口上应用 FFT(在 FFT 函数内部完成实数到复数的转换)
float frequencyData[noOfWindows][samplingRate/2]; 
for i:= 0 to noOfWindows -1
frequencyData[i] = RealToComplex_FFT_Function(windowSamplesOut[i], samplingRate);
endfor

在最后一步中,我使用了此链接中实现的 FFT 函数: http://www.codeproject.com/Articles/9388/How-to-implement-the-FFT-algorithm ;因为我无法从头开始实现 FFT 功能。

我不能确定的是,在将 N (1024) 个样本作为输入提供给 FFT 函数时,将采样率/2 (22050) 分贝值作为输出返回。这是 FFT 函数的作用吗?

据我所知,由于奈奎斯特频率,我最多可以检测到一半的采样率频率。但是是否有可能获得每个频率的分贝值高达采样率/2 (22050) Hz?

谢谢,
瓦希特

最佳答案

How do I obtain the frequencies of each value in an FFT?

从 1024 个样本输入中,您可以获得 512 个有意义的频率级别。

所以,是的,在您的窗口内,您将获得奈奎斯特频率的水平。

您将看到的最低频率级别是 DC (0 Hz),下一个是 SampleRate/1024,或大约 44 Hz,下一个是 2 * SampleRate/1024,依此类推,最高为 512 *采样率/1024 Hz。

关于audio - 将音频样本从时域转换为频域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12029629/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com