随心就动 发表于 2013-6-14 15:54

Matlab中幅频函数和相频函数的误差比较

本帖最后由 牛小贱 于 2014-3-31 22:59 编辑

用tfe函数求系统频率响应函数时,相频函数的误差要比幅频函数的误差大很多,大家讨论一下原因。注:tfe已被TFESTIMATE函数取代。
给定一个系统(传递函数),首先绘制幅频和相频函数;然后给系统一个脉冲输入,求得系统脉冲响应,再用tfe求系统幅频和相频函数;可以对比幅频函数和相频函数的误差。
程序
N=4*400;
fs=400;
n=0:N-1;
t=n/fs;
x=zeros(1,N);
x(101)=fs;
x(102)=fs;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 生成脉冲输入信号
b=;
a=;
w=linspace(0,200*2*pi,401);
=bode(b,a,w);
w_hz=(w/(2*pi))';
H_s = tf(b,a);
y=lsim(H_s,x,t);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 生成脉冲输出信号
subplot(221);
plot(w_hz,mag);
title('幅频函数图');
grid;
subplot(222);
plot(w_hz,ph);
title('相频函数图');
grid;

N_fft=256;
window=hanning(N_fft);
noverlap=N_fft/2;
dflag='none';
=tfe(x,y,N_fft,fs,window,noverlap,dflag);
subplot(223);
plot(f,abs(Txy));
xlabel('Frequency / Hz')
ylabel('Magnitude')
title('幅频函数');
grid;
subplot(224);
plot(f,angle(Txy)/pi*180);
xlabel('Frequency / Hz')
ylabel('Phase / Degree')
title('相频函数');
grid;


ChaChing 发表于 2013-6-14 16:31

建议直接贴代码, 不然我这边下载打开后会是乱码

随心就动 发表于 2013-6-14 18:40

ChaChing 发表于 2013-6-14 16:31 static/image/common/back.gif
建议直接贴代码, 不然我这边下载打开后会是乱码

没有啊,txt的文档在百度网盘上可以直接查看,我试了一下也可以下载的

ChaChing 发表于 2013-6-15 17:55

随心就动 发表于 2013-6-14 18:40 static/image/common/back.gif
没有啊,txt的文档在百度网盘上可以直接查看,我试了一下也可以下载的

LS可能不清楚我是使用繁体的!
原先的txt档下载后, 就是看到许多乱码! 原因我也不清楚
反正好像也没几行, 直接贴上好像比较好! 不是吗?

相频函数工作上较少接触, 个人也没研究学习过, 真还不清楚LS差异缘由
直觉上, 感觉应该不全然tfestimate造成!? 或许是lsim造成的!?

同待高人路过! 或许信号版块有人知道!
若有心得亦请分享下, 让我学习下

随心就动 发表于 2013-6-15 19:21

ChaChing 发表于 2013-6-15 17:55 static/image/common/back.gif
LS可能不清楚我是使用繁体的!
原先的txt档下载后, 就是看到许多乱码! 原因我也不清楚
反正好像也没几行 ...

发帖子用附件习惯了,请见谅。

用tfestimate造和lsim得到的幅频函数有很好精度,应该不是lsim造成的,并且我对比过lsim和用simulink得到的数据,两者吻合的很好。

我发现tfestimate处理脉冲响应得到的相频函数在最后一个频率相位总是pi(即-pi),表现为相频函数发生跳变,我用测试的脉冲激励信号同样出现了这一跳变现象,原因暂时还没有找到。
页: [1]
查看完整版本: Matlab中幅频函数和相频函数的误差比较