FFT 的比例输出 (MATLAB)
Scale output of FFT (MATLAB)
我正在使用 MATLAB 中的 FFT 命令对音频 (.wav) 数据进行一些傅立叶变换。输入值是介于 -1.0 和 1.0
之间的数字
我的理解是对FFT的输出取绝对值(模)后,得到的值应该是有幅度单位的,但实际值在千位左右。这没有意义,因为理论上我应该能够对傅里叶分量求和以获得原始信号。我觉得输出也应该在 0 和 1 之间,所以这里是什么?我的猜测是 FFT 算法将它夸大了,但我不确定使用什么值来缩小它。
FFT 是一种用于计算离散傅里叶变换 (DFT) 的算法。 inverse DFT (IDFT) 在其定义中有一个 1/N 比例因子。也许这就是让您感到困惑的原因。来自维基百科:
DFT(从有限序列x到傅立叶系数X):
IDFT(从X回到x):
因此,只需将 ifft
应用于 fft
的结果,您就会得到原始结果。例如:
>> x = linspace(-1,1,5)
x =
-1.0000 -0.5000 0 0.5000 1.0000
>> y = fft(x)
y =
0 -1.2500 + 1.7205i -1.2500 + 0.4061i -1.2500 - 0.4061i -1.2500 - 1.7205i
>> abs(y)
ans =
0 2.1266 1.3143 1.3143 2.1266 %// note values greater than 1
>> ifft(y)
ans =
-1.0000 -0.5000 0.0000 0.5000 1.0000
事实上,IDFT 可以 expressed in terms of the DFT 应用复共轭和参考比例因子。用F表示DFT,用F-1表示IDFT,用*,[=表示复共轭19=]
在上面的例子中,
>> 1/numel(y) * conj(fft(conj(y)))
ans =
-1.0000 -0.5000 0.0000 0.5000 1.0000
在 Matlab 中使用以下代码从 1 缩放到(大致)0。
dataDFT=abs(fft(data)); % Take the complex magnitude of the fft of your data
dataDFTScaled=dataDFT/max(dataDFT); % Divide by the maximum value
您不希望它缩放到零,因为那样会导致无法在对数图上查看。
我正在使用 MATLAB 中的 FFT 命令对音频 (.wav) 数据进行一些傅立叶变换。输入值是介于 -1.0 和 1.0
之间的数字我的理解是对FFT的输出取绝对值(模)后,得到的值应该是有幅度单位的,但实际值在千位左右。这没有意义,因为理论上我应该能够对傅里叶分量求和以获得原始信号。我觉得输出也应该在 0 和 1 之间,所以这里是什么?我的猜测是 FFT 算法将它夸大了,但我不确定使用什么值来缩小它。
FFT 是一种用于计算离散傅里叶变换 (DFT) 的算法。 inverse DFT (IDFT) 在其定义中有一个 1/N 比例因子。也许这就是让您感到困惑的原因。来自维基百科:
DFT(从有限序列x到傅立叶系数X):
IDFT(从X回到x):
因此,只需将 ifft
应用于 fft
的结果,您就会得到原始结果。例如:
>> x = linspace(-1,1,5)
x =
-1.0000 -0.5000 0 0.5000 1.0000
>> y = fft(x)
y =
0 -1.2500 + 1.7205i -1.2500 + 0.4061i -1.2500 - 0.4061i -1.2500 - 1.7205i
>> abs(y)
ans =
0 2.1266 1.3143 1.3143 2.1266 %// note values greater than 1
>> ifft(y)
ans =
-1.0000 -0.5000 0.0000 0.5000 1.0000
事实上,IDFT 可以 expressed in terms of the DFT 应用复共轭和参考比例因子。用F表示DFT,用F-1表示IDFT,用*,[=表示复共轭19=]
在上面的例子中,
>> 1/numel(y) * conj(fft(conj(y)))
ans =
-1.0000 -0.5000 0.0000 0.5000 1.0000
在 Matlab 中使用以下代码从 1 缩放到(大致)0。
dataDFT=abs(fft(data)); % Take the complex magnitude of the fft of your data
dataDFTScaled=dataDFT/max(dataDFT); % Divide by the maximum value
您不希望它缩放到零,因为那样会导致无法在对数图上查看。