我有一个随时间变化的信号(a),我将其作为参考。我需要将频率相关的加权因子乘以fft的y轴值;但是,如果我这样做:

xdft = fft(a);
xdft = xdft(1:length(x)/2+1); % only retaining the positive frequencies
freq = Fs*(0:(L/2))/L;


然后plot(freq,xdft)在正确的信号频率下获得〜2000的fft峰值(y轴)。但是原始信号峰值(振幅)约为46。我需要知道数字之间的关系,以便可以对fft值进行加权。

最佳答案

您忘了除以DFT长度。看看this example

考虑到fft的输出很复杂。因此,如果要绘制有功功率谱密度,应将输出乘以其复共轭,如下所示:

Pyy = xdft.*conj(xdft)/L;


编辑:
对于振幅频谱,您应该执行以下操作:

xdft=abs(xdft/L); % same as sqrt(xdft.*conj(xdft))/L
Y=xdft(1:L/2+1); % copy half of data since the other half is redundant
Y(2:end-1) = 2*Y(2:end-1); % correct the amplitudes


编辑2:
只是想指向一本非常好的书(我认为是最好的书),它以一种非常容易理解的方式解释了傅立叶级数的工作原理(以及更多)。

艾伦·奥本海姆(Alan V.Oppenheim),艾伦·S·威尔斯基(Alan S. 1996年。《信号与系统》(第二版)。美国新泽西州上萨德尔河Prentice-Hall公司。

10-07 15:38