gpt4 book ai didi

audio - FFT的返回值(系数)的单位是什么?

转载 作者:行者123 更新时间:2023-12-02 22:50:01 29 4
gpt4 key购买 nike

我的应用程序对原始音频信号执行FFT(所有麦克风读数均为values中的16位整数值,即1024个单元)。它首先根据16位对读数进行归一化。然后提取频率为400Hz的幅度。

int sample_rate = 22050;
int values[1024];
// omitted: code to read 16bit audio samples into values array

double doublevalues[1024];
for (int i = 0; i < 1024; i++) {
doublevalues[i] = (double)values[i] / 32768.0; // 16bit
}

fft(doublevalues); // inplace FFT, returns only real coefficients

double magnitude = 400.0 / sample_rate * 2048;
printf("magnitude of 400Hz: %f", magnitude);

当我尝试这种情况并生成400Hz信号以查看 magnitude的值时,如果没有400Hz信号,则该值约为0,而当存在400Hz信号时,其值将上升至30或40。
magnitude字段的单位或含义是什么?令我惊讶的是,即使我将原始信号归一化为-1 .. + 1之间,它也大于1。

最佳答案

这取决于您使用的是FFT,因为在缩放方面存在不同的约定。最常见的约定是将输出值缩放N,其中N是FFT的大小。因此,1024点FFT的输出值将是相应输入值的1024倍。进一步的复杂性是,对于实数到复数FFT,人们通常会忽略FFT的对称上半部分,这很好(因为它是共轭对称的),但是如果这样做,则需要考虑2的因数。

FFT缩放的其他常见约定是(a)不缩放(即已去除N的因数)和(b)sqrt(N),有时用于FFT与IFFT的对称缩放行为(每一个中的sqrt(N)方向)。

由于sqrt(1024)== 32,因此可能正在使用带有sqrt(N)缩放比例的FFT例程,因为对于单位量级的正弦波输入,您似乎看到的值约为30。

关于audio - FFT的返回值(系数)的单位是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17882184/

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