上机练习题目(3)
1. 利用 tfe 函数进行系统辨识,并与理想结果进行比较。
提示:
MATLAB 函数工具箱提供了 tfe 函数用来实现基于经典谱估计的系统辨识。
调用方式:
(1)Txy=tfe(x,y,NFFT,Fs,window) 使用 welch 平均周期图法,根据输入变量 x
和输出变量 y 来估计系统的传递函数。参数 NFFT 用来指定 FFT 运算所采用的
点数。
如果 x 和 y 都是实信号、NFFT 为偶数,则 Txy 的长度为 NFFT/2+1;
如果 x 和 y 都是实信号、NFFT 为奇数,则 Txy 的长度为(NFFT+1)/2;
如果 x 或 y 是复信号,则 Txy 的长度为 NFFT;
参数 window 用来指定所采用的窗函数。窗函数的长度必须与向量 x 的长度一样
大。
(2)[Txy,f]=tfe(x,y,NFFT,Fs,window,noverlap) 返回和传递函数的估计同样大
小、一一对应的线性频率 f。参数 noverlap 用来指定数据分段间重叠的样本数。
(3)tfe(x,y,...dflag) 参数 dflag 用来指定对 x 和 y 的预处理方式,其取值有
dflag=linear:去掉加窗数据中的最佳直线拟合;
dflag=mean:去掉加窗数据中的均值;
dflag=none:不做处理。
(4)tfe(…) 没有输出参数,在当前图形窗口里绘制出传递函数的估计结果图。
以上这些参数的默认值分别为:
NFFT=256;
Fs=2;
noverlap=0;
window=hanning(NFFT);
dflag=none。
本题中,可以产生一个白噪声(可用 randn 函数产生),使其通过一个线性系统
(可用 filter 函数产生),得到输出 y 即为平稳随机信号。然后利用 tfe 函数估计。
并将估计结果与理想传递函数(可用 freqz 函数求幅频响应)比较。
【参考答案】
Fs=2000;
NFFT=256;
n=0:1/Fs:1;
x=randn(size(n));
b=ones(1,5)/5;
y=filter(b,1,x);
[h,f]=tfe(x,y,NFFT,Fs,256,128,’none’);
h0=freqz(b,1,f,Fs);
subplot(2,1,1)
plot(f,abs(h0))
title(‘理想传递函数的幅频曲线’)
xlabel(‘频率(Hz)’)
subplot(2,1,2)
plot(f,abs(h))
title(‘估计的传递函数幅频曲线’)
xlabel(‘频率(Hz)’)
2.分别用 Yule-Walker 法、Burg 法、协方差法进行 AR 模型的功率谱估计,并进
行比较。
提示:Yule-Walker 法可以直接调用函数 pyulear 函数实现;
Burg 法可以直接调用函数 pburg 函数实现;
协方差法可以直接调用函数 pmcov 函数实现;
以上函数的具体调用方式查看 matlab 帮助信息。
【参考答案】
Yule-Walker 法和 Burg 法的程序可以参考第 4 章 4.3 节课件。
下面是协方差法的程序(程序中将方差法和协方差法进行了比较)。
Fs=1000;
h=fir1(20,0.3);
r=randn(1024,1);
x=filter(h,1,r);
[p1,f]=pcov(x,20,[],Fs);
[p2,f]=pmcov(x,20,[],Fs);
pxx1=10*log10(p1);
pxx2=10*log10(p2);
plot(f,pxx1,’:’,f,pxx2,’-’);
xlabel(‘幅值(dB)’);
ylabel(‘功率谱估计’);
legend(‘协方差法’,’改进的协方差法’);