MATLAB fft y轴含义

Posted

技术标签:

【中文标题】MATLAB fft y轴含义【英文标题】:MATLAB fft y axis meaning 【发布时间】:2016-04-25 17:25:21 【问题描述】:

我有一个随时间变化的信号 (a),我采用了 fft。我需要将与频率相关的加权因子乘以 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 值进行加权。

【问题讨论】:

【参考方案1】:

您忘记除以 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、Alan S. Willsky 和 ​​S. Hamid Nawab。 1996。信号与系统(第二版)。 Prentice-Hall, Inc. ,上萨德尔河,新泽西州,美国。

【讨论】:

我应该在什么时候除以 DFT 长度?如果我做 ts=0.1; t=0:ts:10; x=10*sin(t); L=长度(t); fs=1/ts; xdft = fft(x); xdft = xdft(1:长度(x)/2+1); xdft=xdft/长度(xdft);频率 = fs*(0:(L/2))/L;情节(频率,abs(xdft));最大值的 y 轴。值不是最大值。 x 的值。 @2one 查看幅度谱的更新。还要考虑奈奎斯特频率和泄漏效应。 为什么 Y[1] 不乘以 2? @SantiagoGil 因为第一个系数是频率 = 0,所以对于所有其他系数来说,没有复共轭部分(在正面总是有一个部分,在你的 "频率”轴)您可以看到它不是负频率,但每个系数(> 0)的“能量”被吐出一半 对于奇数样本大小,是否应该使用 ceil(L/2) 而不是 L/2?

以上是关于MATLAB fft y轴含义的主要内容,如果未能解决你的问题,请参考以下文章

求教matlab FFt变换 几个问题

matlab中disp的用法

matlab 用surf绘制出的曲面上颜色代表的含义

我在matlab上做了一个阶跃函数FFT,但只得到了光谱的一侧(0到无穷大)

matlab 双y轴绘图能否多条线跟你共用一个y轴?

Matlab中的FFT图