资源描述
《测试信号分析与处理》仿真实验
实验二:采用Welch法作谱估计
1.实验目的:
a. 掌握We l c h算法的概念、应用及特点;
b. 了解谱估计在信号分析中的作用;
c. 能够利用We l c h法对信号作谱估计,对信号的特点加以分析。
2.实验内容:
a. 读入实验数据。
b. 编写一利用We l c h法作谱估计的算法程序。
c. 将计算结果表示成图形的形式,给出信号谱的分布情况图。
3.算法讨论及分析
算法1:直接采用matlab中自相关函数[Px, F]=pwelch(x,, window,Noverlap,Nfft, fs)
式中,x -随机信号,长度为N
Window -选用的窗函数
Noverlap -估计x 的功率谱时每一段叠合的长度
Nfft -对x 作FFT 时的长度
fs -抽样频率
算法2:该算法为有偏估计,利用FFT计算相关函数,
4.实验结果及分析
实验结果如图2-1所示,图2-1中上图为采用算法2,数据点为0~2048,中图也是使用的算法2,但是图中只是绘出1024个点,下图使用算法1,即matlab自带的算法。
图2-1 实验结果图
1 不同的分段点数对Welch谱估计结果有何影响?
分段数K增大,每组数据量M减小,则会造成谱估计的偏差增大,曲线平滑;反之, 曲线起伏激烈, 谱线的尖峰保留。从图2-2中的K值大于图2-3的K值,图2-2中的曲线比图2-3的曲线平滑,但是图2-3的尖峰效果比图2-2好。
图2-2 K =N/1100时的频谱图
图2-3 K=N/3000时的频谱图
2 不同的数据重叠长度Welch对谱估计结果有何影响?
如果数据交叠使用,分段数K 比平均周期图法增大,则估计方差比平均周期图法小,数据交叠长度越大,分段数K越大,则估计方差会越小,图形会变得平滑,如图2-4所示,上图数据重叠度大,K大,则曲线相对平滑。从式(1)也可以看出,式(1)为谱估计的方差。
(1)
图2-4 使用不同的重叠度得到的谱估计图
(上:重叠度为97%,下:重叠度为3%)
3 不同的窗函数对Welch谱估计结果有何影响?
使用窗函数,会使Welch谱估计的图形变得平滑,但是,不同的窗函数不同,则其主瓣宽度不同。主瓣宽度越窄,对信号的主瓣频率辨识效果越好,分辨率较高。从图2-5可以看出,使用矩形窗的分辨率高于汉宁窗。
图2-5 使用不同的窗函数得到的谱估计
(上:矩形窗,下:汉宁窗)
4周期图法与Welch法的谱估计结果有何不同?
周期图法本身的误差就很大,不是无偏估计,而且偏差比较大;welch方法应该会准确一些,它频谱分辨率可能低一些,但估计的方差会小些,所以功率谱看起来平滑一些,另外一个原因是welch方法你是加了窗的。两个估计都是跟准确值有偏差的,只是后者统计方差更小一些,相对更加可靠一点。
5.原程序清单
load Qjt.dat %加载数据
N=length(Qjt); %获得数据的长度
L=1800; %确定每段数据的长度
K=N/L; %在总数据中共取K段,没有重合
%K=2*N/L-1; %在总数据中共取K段,有重合
K=fix(K);
for num=1:1:K %使用循环,提取每段数据
for i=1:1:L
A(i,num)=Qjt((num-1)*L+i); %每段数据占据A阵的一列,没有重合
% A(i,num)=Qjt((num-1)*L/2+i); %每段数据占据A阵的一列,有重合
end
for i2=L+1:1:2048 % 使用循环,补零
A(i2,num)=0;
end
end
for num=1:1:K %使用循环,对每段数据使用矩形窗截取
tempA=A(:,num); %
tempw=boxcar(2048); % 获取窗函数
for i3=1:1:2048 %对每段数据使用矩形窗截取
A(i3,num)=tempA(i3)*tempw(i3);
end
end
for num=1:1:K %对截取之后的数据进行FFT变换,并获得傅里叶变换后的数据模
tempA=A(:,num);
tempFFT=fft(tempA); %对每一段数据进行FFT变换
for i3=1:1:2048 %获取数据FFT变换后的模
Sxi(i3,num)=tempFFT(i3)*conj(tempFFT(i3))/2048;
end
end %循环结束
U=dot(boxcar(2048),boxcar(2048))/2048; %获得修正系数U
tempSUM=0*ones(2048,1);
for num=1:1:K
tempSUM=Sxi(:,num)+tempSUM; %获得数据FFT变换后的功率谱和
end
Sxx=tempSUM/(K*U); %调整系数
subplot(3,1,1);
Sxxi=ones(1024,1);
for inum=1:1:1024
Sxxi(inum)=Sxx(inum);
end
plot(Sxx); %绘制0~2048点的图
[Px,F]=pwelch(Qjt,boxcar(2048),0,2048); %使用pwelch函数计算
subplot(3,1,2);
plot(Sxxi);
subplot(3,1,3);
plot(Px); %绘制pwelch所得的图
6.实验后的体会和建议
通过该实验,通过自己编程,掌握We l c h算法的概念、应用及特点,初步了解谱估计在信号分析中的作用,同时能够利用We l c h法对信号作谱估计,对信号的特点加以分析。此外,熟悉了matlab编程,掌握了一定的matlab的编程技巧。
建议在matlab方面多给一些提示,在编程和了解matlab上投入了较多的精力,但是相比于实验1,在使用matlab上有了较大的进步。
展开阅读全文