最近在做信号与信息处理实验,正巧用到了功率谱分析,把自己用FFT做功率谱分析的心得写下来分享给大家,头一回写博客,有问题大家指正。
对0~t时间内的一段信号按照fs频率进行采样,得到N点样本。假设N为2的整数次幂。下面对N点信号进行FFT双边功率谱密度分析。
首先,对N点样本进行FFT变换得到的是N点的DFT。其中频域的N点,对应的就是抽样频率fs,而且频域是关于N/2点对称的。(这是根据离散傅里叶变换的周期性得到的。)
然后,频域序列和自身的共轭相乘。
最后,还要除以序列的长度N点。
解释:根据随机信号的功率谱密度公式,中是对(-T,T)上的时间序列做傅里叶变换,也就是将时间序列截断后的傅里叶变换。公式中的数学期望是针对随机信号而言的,由于我们是对一段已知信号的功率谱分析,公式中的期望就不必使用,公式化简为。
FFT序列和自身共轭相乘得到的就是模的平方项。
最后一步除以N,是对应公式中的2T。
下面贴上matlab官方的一段代码及我本人的一些注释:
t = 0:.001:.25;
x = sin(2*pi*50*t) + sin(2*pi*120*t);
y = x + 2*randn(size(t));
plot(y(1:50))
title('Noisy time domain signal')
Y = fft(y,251);
%离散傅里叶变换
Pyy = Y.*conj(Y)/251;
%得到功率谱值
f = 1000/251*(0:127);
%根据频率轴的对称性,设置图像横坐标
plot(f,Pyy(1:128))
title('Power spectral density')
xlabel('Frequency (Hz)')
plot(f(1:50),Pyy(1:50))
title('Power spectral density')
xlabel('Frequency (Hz)')
最后做一点补充,至于为什么关于频率轴对称,那是因为抽样以后频域进行了fs的周期延拓,我们最终只取了主值N段。