700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 使用FFT估计信号功率谱 功率谱密度

使用FFT估计信号功率谱 功率谱密度

时间:2022-06-17 14:51:11

相关推荐

使用FFT估计信号功率谱 功率谱密度

前言

功率谱和功率谱密度是信号处理中常见的两个概念,而且很容易混淆,因此在学习之余总结一下,与君共勉。

功率谱(Power Spectrum,PS)

功率谱是用来描述功率信号的,表示信号在每个频率分量上的功率,单位是w(或dB)。根据维纳—辛钦定理可知:一段信号的功率谱等于其自相关函数的傅里叶变换。

因此计算功率谱有两种方法:

1)直接法:信号傅里叶变换的平方/区间长度;

2)相关函数法:信号自相关函数的傅里叶变换。

功率谱密度(Power Spectrum Density,PSD)

功率谱密度和功率谱是不同的概念。功率谱密度表征的是单位频带内的信号功率,单位是w/Hz(或dB/Hz)。

FFT方法估计PS、PSD

功率谱和功率谱密度都与傅里叶变换有着紧密的联系,本文主要针对频率成分不随时间变化的平稳信号,采用FFT方法获取PS、PSD估计,以下代码仅供学习参考。

1)首先仿真生成一段信号

fs = 32000;N = 1024;t = 0:1/fs:(N-1)/fs;freq = 8000;x = cos(2*pi*freq*t) + randn(size(t))/sqrt(2);

2)加窗(是否加窗取决于实际情况),进行傅里叶变换

win = hamming(N);xw = 1.586*x.*win.'; % 海明窗修正系数xdft = fft(xw);xdft = xdft(1:N/2+1);

由于这里添加了海明窗,为了使加窗后信号能量保证不变,因此需要加入一个能量修正系数。

3)计算功率谱

psx = (1/N) * abs(xdft).^2;psx(2:end-1) = 2*psx(2:end-1);

由于信号是实数值信号,只需要对正负频率之一进行功率估计,并且零频率 (DC) 和奈奎斯特频率不会出现两次。为了保持总功率不变,同时在两组(正频率和负频率)中出现的所有频率乘以2。

4)绘图

fb = 0:fs/N:fs/2;figureplot(fb/1e3,10*log10(psx))grid ongrid minortitle("Power Spectrum Using FFT")xlabel("Frequency (kHz)")ylabel("Power (dB)")

5)计算功率谱密度,绘图

psdx = (1/(fs*N)) * abs(xdft).^2;psdx(2:end-1) = 2*psdx(2:end-1);figureplot(fb/1e3,10*log10(psdx))grid ongrid minortitle("Power Spectrum Density Using FFT")xlabel("Frequency (kHz)")ylabel("Power/Frequency (dB/Hz)")

对比验证

为了验证上述方法的计算结果是否正确,接下来使用MATLAB的periodogram函数绘制周期图进行对比。

figureplot(fb/1e3,10*log10(psdx),'r-.'), hold onperiodogram(x,win,N,fs) grid ongrid minortitle("Power Spectrum Density")legend('FFT','Periodogram')xlabel("Frequency (kHz)")ylabel("Power/Frequency (dB/Hz)")

二者的曲线重合,再来看一下最大误差:

maxerr = max(psdx' - periodogram(x,win,N,fs));

<< maxerr =-3.6629e-12

显然,对比结果验证了上述方法计算PS、PSD的正确性。

结语

需要注意的部分主要是窗函数修正系数,以及总功率乘以因子,感兴趣的可以继续深入了解,也欢迎与我私信交流。

总结不易,点个赞吧(●'◡'●)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。