现代信号处理-经典功率谱估计<改进后>

本文介绍了功率谱估计方法的改进,包括基于周期图法的Pwelch法、BT法下的分段方法及MTM法。通过MATLAB实现并比较了各种方法的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:《改进后》是基于《改进前》的后续

前言

在周期图法和BT法中,功率谱估计的原信号设为高斯白噪声,因为BT法必须用在广义平稳随机过程,所以现有的函数只有周期图法的函数,所以前半部分中,两种方法我都用单一样本表示,改进前的matlab程序全都是从原始公式开始写,这样可以更方便地了解两种方法的内部过程。最后也会给出功率谱估计的质量:偏差和方差。

而在改进方法中,我们直接用Pwelch函数来实现分段的周期图法;而由于没有直接的分段的BT法公式(可能是因为BT法只能用在广义平稳过程中,又或者BT法效果没有周期法好),所以在单一样本的基础上,先进行分段处理,每段再各自利用BT法处理,最后再求平均,来实现分段的BT法。第三个方法是利用MTM法来实现分辨率和方差的平衡。

一、功率谱估计方法(改进前)

1.周期图法

2.BT法

3.周期图法和BT法的关系

4.功率谱估计的质量

改进前的这些谱估计方法在上一节已描述,本节介绍改进方法。


二、功率谱估计的改进

分段方法主要分为两大类:Bartlett平均法和Welch平均法。Bartlett平均法是不重叠的分段法,而Welch平均法是重叠的分段法。
1.基于周期图法下的分段方法可以利用Pwelch函数来描述,
也有的程序会用psd函数,但我help了一下,显示如下,说明还是以pwelch函数为主吧!
在这里插入图片描述
2.基于BT法的分段方法没有可以直接调用的函数,本文结合BT法和两种分段法从基础公式来分析,也顺便了解一下非重叠分段和重叠分段的区别。

为了对比各个方法,以下程序的基础都建立在x有20000个点,
FFT个数为20000点,Fs=1; n=0:N-1,且公式为:
x=cos(0.3*pi*n)+cos(0.32*pi*n)+randn(size(n));

1.Pwelch法(周期图法下的分段方法)

此方法是可以直接调用函数Pwelch,本文调用的是:
[pxx,f] = pwelch(x,window,noverlap,Nfft,Fs)
其中输入参数的涵义是:

  • x:被估计的信号

  • window:为了使功率谱变得平滑而加的窗函数,默认hamming窗
    窗函数查询

  • noverlap:表示两段之间的重叠个数

  • Nfft:表示fft的点数,Nfft> X,默认值为256点

  • Fs:表示采样频率,实际频率f(Hz)/Fs=归一化频率w(rad/s)/2pi

输出参数:

  • pxx:功率谱
  • f:横坐标,范围[0 pi*Fs]

若想查看其他形式,help一下即可。

如果使用boxcar窗,并且NOVERLAP=0,则可得到Bartlett法的平均周期图。

%% 周期图法的分段方法
clc;close all;clear;
N=20000; Nfft=20000; Fs=1; n=0:N-1;
x=cos(0.3*pi*n)+cos(0.32*pi*n)+randn(size(n));
M=256;                  %%注意M的取值,过小时会导致分别率过小
%% Bartlett平均法
window1=boxcar(M); noverlap1=0;        
figure;
subplot(2,1,1);
[Pxx1,f]=pwelch(x,window1,noverlap1,Nfft);
plot(f/pi,Pxx1);grid on;title('基于周期图法的Bartlett平均法');
%为了方便看出线谱位置(pi前面的系数),将f除以pi。
%如果使用boxcar窗,且NOVERLAP=0,则可得到Bartlett法的平均周期图
%% Welch平均
window2=hamming(M); noverlap2=M/2;
[Pxx2,f]=pwelch(x,window2,noverlap2,Nfft);
subplot(2,1,2);
plot(f/pi,Pxx2);grid on;title('基于周期图法的Bartlett平均法');

在这里插入图片描述
这里值得注意的是:不能将窗函数的点数设太小,否则可能导致分辨率过小导致分辨不出这两个频率。当M=64,结果如下:
在这里插入图片描述

2.BT法下的分段方法

由于没有基于BT法的分段函数,以下是人为将其分段,再将结果做平均。为了做一组对照实验,还加入了一组不分段的数(但是这个数用的是分段后的其中一段,其实在点数是不公平的,分辨率会不如点数多的情况,但点数多了方差又会很大)。

%% BT法的分段方法
clc;clear all;close all;
N=20000;              %%当分段数不多时,可能分辨率不够,将增大N点即可
K=200;                %%分段数目
M=N/K;                %%每段的采样点数
n=1:N;
x1=cos(0.3*pi*n)+cos(0.32*pi*n)+randn(size(n));
for k=1:K
    x(k,:)=x1(M*k-M+1:M*k);
end
%% Bartlett平均法
for i=1:K
    [rx_BT(i,:),lags]=xcorr(x(i,:),'coeff');
    sf_BT(i,:)=fftshift(abs(fft(rx_BT(i,:))));
end
rx_BT_AV=sum(rx_BT)/K;
sf_BT_AV=sum(sf_BT)/K;
lags1=lags/M;       %%使横轴为单位为[0 0.5]
figure;
subplot(3,2,1);
plot(lags,rx_BT(1,:));title('未分段的自相关函数');
subplot(3,2,2);
plot(lags1,sf_BT(1,:));title('未分段的功率谱密度');grid on;
axis([0 +inf -inf +inf]);
subplot(3,2,3);
plot(lags,rx_BT_AV);title('基于BT法的Bartlett分段平均的自相关函数');
subplot(3,2,4);
plot(lags1,sf_BT_AV);title('基于BT法的Bartlett分段平均的功率谱密度');grid on;
axis([0 +inf -inf +inf]);

%% Welch平均
for i=1:1:K-1
    [rx_BT1(2*i-1,:),lags]=xcorr(x(i,:),'coeff');
    [rx_BT1(2*i,:),lags]=xcorr([x(i,M/2+1:M),x(i+1,1:M/2)],'coeff');
end
    [rx_BT1(2*K-1,:),lags]=xcorr(x(K,:),'coeff');
    [rx_BT1(2*K,:),lags]=xcorr([x(K,M/2+1:M),x(1,1:M/2)],'coeff');   
for i=1:2*K
        sf_BT1(i,:)=fftshift(abs(fft(rx_BT1(i,:))));
end
rx_BT1_AV=sum(rx_BT1)/(2*K);
sf_BT1_AV=sum(sf_BT1)/(2*K);
subplot(3,2,5);
plot(lags,rx_BT1_AV);title('基于BT法的Welch分段平均的自相关函数');
subplot(3,2,6);
plot(lags1,sf_BT1_AV);title('基于BT法的Welch分段平均的功率谱密度');grid on;
axis([0 +inf -inf +inf]);

在这里插入图片描述

3.MTM法

MTM法也称多窗口法,它没有使用带通滤波器,而是使用一组最优滤波器来计算估计值,这些最优FIR滤波器是由一组离散扁平类球体序列(DPSS,也叫Slepian)得到的。
在函数中,MTM提供了一个时间-带宽参数(时间和带宽的乘积NM),我们可以用它来平衡方差和分辨率。NM越大,会有更多的功率谱估计值,方差会越小。每一组数据都可以根据自己的需求,找到最适合的参数来平衡方差和分辨率。

%% MTM法
clc;clear all;close all;
N=20000; Nfft=20000; Fs=1; n=0:N-1;
x=cos(0.3*pi*n)+cos(0.32*pi*n)+randn(size(n));
[pxx1,f]=pmtm(x,4,Nfft,Fs);
figure;
subplot(2,1,1);plot(f,pxx1);title('多窗口法(MTM)NW=4');grid on;
[pxx2,f]=pmtm(x,2,Nfft,Fs);
subplot(2,1,2);plot(f,pxx2);title('多窗口法(MTM)NW=2');grid on;

在这里插入图片描述

总结

可以根据以上三种方法的功率谱看出:
1.基于BT法的估计质量最差(怪不得没有函数表示基于BT法),并且当N减小到2000,不能分别出两个频率(可以复制后改值验证)。MTM法的估计质量最优。
2.Bartlett平均法和Welch平均法分段段数不同,但是效果相差不是很大,但是pwelch函数里窗函数的点数会影响分辨率。

现代信号谱分析 ·目录 第1章 基本概念 1.1 引言 1.2 确定信号的能量谱密度 1.3 随机信号的功率谱密度 1.4 功率谱密度的性质 1.5 谱估计问题 1.6 补充内容 1.7 习题 第2章 非参数化方法 2.1引言 2.2 周期图和相关图方法 2.3 用FFT计算周期图 2.4 周期图法的性质 2.5 Blackman-Tukey方法 2.6 窗函数设计中需考虑的问题 2.7 其他改进的周期图方法 2.8 补充内容 2.9 习题 第3章 有理谱估计的参数化方法 3.1引言 3.2 有理谱信号 3.3ARMA过程的协方差结构 3.4AR信号 3.5Yule-Walker方程的阶递推解法 3.6MA信号 3.7ARMA信号 3.8 多变量ARMA信号 3.9 补充内容 3.10 习题 第4章 线谱估计的参数化方法 4.1引言 4.2 噪声中的正弦信号模型 4.3 非线性最小二乘方法 4.4 高阶Yule-Walker方法 4.5 Pisarenko和MUSIC方法 4.6 最小模方法 4.7 ESPRIT方法 4.8 前向-后向方法 4.9 补充内容 4.10 习题 第5章 滤波器组方法 5.1 引言 5.2 周期图的滤波器组解释 5.3 改进的滤波器组方法 5.4 Capon方法 5.5 用滤波器组进一步解释周期图 5.6 补充内容 5.7 习题 第6章 空域方法 6.1引言 6.2 阵列模型 6.3 非参数化方法 6.4 参数化方法 6.5 补充内容 6.6 习题 附录A 线性代数和矩阵分析工具 附录B Cramer-Rao界分析工具 附录C 模型阶数选择方法 附录D 部分习题答案 参考文献
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值