matlab求单边功率谱

求功率谱有好几种方法,本文例两种,一种是先求信号频谱,然后取平方后平均;第二种是用welch法(可指定各种窗)。

rng default;
fs = 1000;   % 采样率
t = 0:1/fs:1-1/fs;
% x = cos(2*pi*50*t)+ randn(size(t));
x = cos(2*pi*50*t);
nfft = length(x);  %指定傅里叶变换的点数(点数越大频率分辨率越高)

figure(1);  %画单边频谱图
sig_dft = abs(fft(x, nfft));
sig_dft(2:end-1) = 2*sig_dft(2:end-1);  %因为只显示单边谱,所以需要把数值*2,折起来
sig_amp = mapminmax(sig_dft/nfft);  %归一化
x1 = (0:nfft-1)*fs/nfft; 
plot(x1(1:250),sig_amp(1:250));  
xlabel('Frequency(Hz)');
ylabel('Amplitude');
title('Single sided Amplitude Spectrum');

figure(2);  %常规方法画单边功率谱
xdft = fft(x);
xdft = xdft(1:nfft/2+1);
psdx = (1/(fs*nfft)) * abs(xdft).^2;
psdx(2:end-1) = 2*psdx(2:end-1);
freq = 0:fs/nfft:fs/2;
semilogy(freq,psdx);  %semilogy以对数方式绘制纵轴

figure(3);  %修正周期图功率谱密度估计方法
[p,f]=pwelch(x, hanning(nfft), nfft/2, nfft, fs);  %指定不同的窗会影响功率谱结果
semilogy(f,
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值