关于matlab中用fft分析信号频谱为何要乘2/N的思考

 注意到用matlab分析信号频谱时必须要乘个2/N才能得到正确的幅度谱幅值,如下:


A=50;       % A 幅度值
fs=500; % fs 采样率
F=50;   % F 频率,小于采样率的一半(奈奎斯特)
N=100;   % N 采样个数
dt=1/fs;    %时间间隔
t=0:dt:(N-1)*dt;    %时间向量
freqPixel=fs/N;     %频率分辨率,即点与点之间频率单位
y=A*sin(2*pi*F*t);	%正弦波
%信号频谱
freq=fft(y,N)*2/N;%做离散傅里叶
freq_d=abs(fftshift(freq));
w=(-N/2:1:N/2-1)*fs/N; %双边  
plot(w,freq_d);

关于matlab中用fft分析信号频谱为何要乘2/N的思考_第1张图片

可以看到结果正确

之后查询书本发现,我之前以为信号x(n)的DFT变换X(K)的幅值就是其频谱幅值,这个想法是错误的!

首先,DFT的定义为: X\left ( K \right )=\sum _{n=0}^{N-1}x(n)W_{N}^{kn}

由于W_{N}^{kn}的周期性,所以DFT具有隐含周期性,X(K)实质上是x(n)的以N为周期延拓的序列x((n))N的离散傅里叶级数的频谱特性,故要搞清楚DFT与其模拟信号频谱的关系还要从周期序列傅里叶变换入手;

e^{jwn} \leftrightarrow \sum _{r=-\propto }^{\propto }2\pi \delta (w-w_{0}-2\pi r),则有

x((n))_{N}=\frac{1}{N}\sum _{n=0}^{N-1}X(k)e^{jwn}\leftrightarrow \sum _{k=0}^{N-1}\frac{2\pi X(k)}{N}\sum _{r=-\propto }^{\propto }\delta (w-\frac{2\pi }{N}k-2\pi r)=\frac{2\pi }{N}\sum _{k=-\propto }^{\propto }X(k)\delta (w-\frac{2\pi }{N}k)

 即

X(e^{jw})=\frac{2\pi }{N}\sum _{k=-\propto }^{\propto }X(k)\delta (w-\frac{2\pi }{N}k)

到这一步可以看出,模拟信号傅里叶变换是将信号以正弦信号为形式的各次谐波,而正弦信号的傅里叶变换与其DFT之间正好差一个2/N的系数

cos(w_{0}n)\leftrightarrow \pi \sum _{r=-\propto }^{\propto }[\delta (w-w_{0}-2\pi r+\delta (w+w_{0}-2\pi r]

以上只是我的个人理解,如有错误还请指正,谢谢阅读!

你可能感兴趣的:(matlab,fft,matlab)