找回密码
 注册
Simdroid-非首页
查看: 163|回复: 4

传递函数,相位响应计算的问题求助

[复制链接]
发表于 2011-6-3 21:12:25 | 显示全部楼层 |阅读模式 来自 天津
本帖最后由 liushuangq05 于 2011-6-3 21:30 编辑

各位老师:
       我有个明确的传递函数(图4),用它们做幅频响应图和书上的一致!但是相位响应却和书上的差别很大。所以不知道是不是我没搞明白相位响应的计算问题。
      我是这样计算相位响应的,就是将s替换为i*f(不是i*w,这个我对比了书上的结果,其中w=2*pi*f),然后利用H(s)的虚部和实部的比值的反正切得到,就是利用matlab的angle函数。遗憾的是,这样的结果却不知道是否对(那书上的图可能也不对)。
      所以想让老师们帮指点迷津,不甚感谢。程序如下:
clc;
clear;
clf;
n1=1;
D=[0.02 0.1 0.2 0.707 1.5];
e1=D*n1;
s1=log(0.01);
s2=log(100);
s3=s1:(s2-s1)/100:s2;
s4=exp(s3);
s5=i*s4;
pi2angle=180/pi;

for k=1:1:length(D)
    for m=1:1:length(s5)
         H(m)=-s5(m)^0/(s5(m)^2+2*e1(k)*s5(m)+n1^2);
   
    end
    HH(:,k)=abs(H);         %取模
   
    Hangle(:,k)=pi2angle*angle(H);
  end
HH=20*log10(HH);
subplot(211);
semilogx(s4,(HH(:,1)),'r','LineWidth',2);
hold on
semilogx(s4,(HH(:,2)),'b','LineWidth',2);
semilogx(s4,(HH(:,3)),'c','LineWidth',2);
semilogx(s4,(HH(:,4)),'m','LineWidth',2);
semilogx(s4,(HH(:,5)),'k','LineWidth',2);
grid on
%axis tight
xlabel('角频率/(rad/s)');
ylabel('幅度/dB');
legend('D=0.02','D=0.1','D=0.2','D=0.707','D=1.5','Location','NorthEastOutside')
axis([0.01 100 -45 40]);

subplot(212);
semilogx(s4,Hangle(:,1),'r','LineWidth',2);
hold on
semilogx(s4,Hangle(:,2),'b','LineWidth',2);
semilogx(s4,Hangle(:,3),'c','LineWidth',2);
semilogx(s4,Hangle(:,4),'m','LineWidth',2);
semilogx(s4,Hangle(:,5),'k','LineWidth',2);
grid on
axis tight
xlabel('角频率/(rad/s)');
ylabel('相位/degree');
legend('D=0.02','D=0.1','D=0.2','D=0.707','D=1.5','Location','NorthEastOutside')

figure(2)
semilogx(s4,real(H))
hold on
semilogx(s4,imag(H),':')
hold off

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2011-6-3 21:17:36 | 显示全部楼层 来自 天津
Simdroid开发平台
本帖最后由 liushuangq05 于 2011-6-3 21:24 编辑

上面三个传递函数,只是分子的s的幂次不同。其中1,3是的s是偶数次,2式是奇数次幂!
书上的三个相位响应图的形式跟图1,图3相似,都是由左到右的斜坡。其中图1的纵坐标0~180度;图2为-90~90度,图3为-180~0度。

由于还没有找到由传递函数具体计算相位的明确公式和步骤,所以非常希望大家指点!
回复 不支持

使用道具 举报

 楼主| 发表于 2011-6-6 18:02:19 | 显示全部楼层 来自 天津
  1. function sysfunction2image
  2. %Accomplished by Sqliu,2011-6-6
  3. clear;
  4. clc;
  5. clf;
  6. close all;

  7. D=[0.02 0.1 0.2 0.707 1.5];
  8. n1=1;
  9. b=[0 1 0]; %分子
  10. %位移,速度,加速度==> b=[1 0 0]; b=[0 1 0]; b=[0 0 1];

  11. for i=1:1:length(D)
  12. D1=D(i);
  13. %D1=0.707;
  14. %D1=e1/n1;
  15. e1=2*n1*D1;
  16. a=[1 e1 n1]; %分母
  17. sys=tf(b,a);
  18. pzmap(sys); %绘制零、极点
  19. [mag,phase,w]=bode(b,a,{0.01 100}); %计算幅频特性和相频特性

  20. N=length(mag);
  21. mags(1:N,i)=20*log10(mag(1:N));
  22. phases(1:N,i)=phase(1:N);
  23. W(1:N,i)=w(1:N);
  24. end

  25. figure('color','w','position',[60 60 700 600]);
  26. subplot(211);
  27. semilogx(W(:,1),(mags(:,1)),'r','LineWidth',2);
  28. hold on
  29. semilogx(W(:,2),(mags(:,2)),'b','LineWidth',2);
  30. semilogx(W(:,3),(mags(:,3)),'c','LineWidth',2);
  31. semilogx(W(:,4),(mags(:,4)),'m','LineWidth',2);
  32. semilogx(W(:,5),(mags(:,5)),'k','LineWidth',2);
  33. grid on
  34. xlabel('角频率/(rad/s)');
  35. ylabel('幅度/dB');
  36. legend('D=0.02','D=0.1','D=0.2','D=0.707','D=1.5','Location','NorthEastOutside')
  37. axis tight;

  38. subplot(212);
  39. semilogx(W(:,1),(phases(:,1)),'r','LineWidth',2);
  40. hold on
  41. semilogx(W(:,2),(phases(:,2)),'b','LineWidth',2);
  42. semilogx(W(:,3),(phases(:,3)),'c','LineWidth',2);
  43. semilogx(W(:,4),(phases(:,4)),'m','LineWidth',2);
  44. semilogx(W(:,5),(phases(:,5)),'k','LineWidth',2);
  45. ylabel('相位(deg)');
  46. xlabel('角频率(rad/sec)');
  47. grid on
  48. axis tight;
  49. legend('D=0.02','D=0.1','D=0.2','D=0.707','D=1.5','Location','NorthEastOutside')


  50. %figure;
  51. %bode(b,a);
  52. %系统特性:|H(w)|=H0*|jw-z1|*|jw-z2|*...*|jw-zm|/(|jw-s1|*|jw-s2|*...*|jw-sp|)
  53. %phi(w)=arg(jw-z1)+arg(jw-z2)+...+arg(jw-zm)-arg(jw-s1)-arg(jw-s2)-...-arg(
  54. %jw-sp)
  55. %其中m为零点个数,p为极点个数。





复制代码



问题基本解决,供参考!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-6-7 09:12:39 | 显示全部楼层 来自 北京
要是能描述一下你解决问题的思路,和大家共享一下,会更好!
回复 不支持

使用道具 举报

 楼主| 发表于 2011-6-13 11:53:16 | 显示全部楼层 来自 天津
问题出在:phi(w)=arg(jw-z1)+arg(jw-z2)+...+arg(jw-zm)-arg(jw-s1)-arg(jw-s2)-...-arg(%jw-sp)这个计算的方程,不能直接对H(s)反正切得到,即expand,sym2poly无法用angle函数直接取代!可参看下面的例子,这是BBVS-60s的地震仪器函数响应。


复制代码

%function sysfunc_example
%Accomplished by Sqliu,2011-6-6
clear;
clc;
clf;
close all;
syms s;
k=1.488009*10^19;   %归一化因子
r=2*pi;
%----零点----------
z1=0/r;
z2=0/r;
z3=(149.067+219.11*i)/r;
z4=(149.067-219.11*i)/r;
z5=(33.4425+264.982*i)/r;
z6=(33.4425-264.982*i)/r;
%----极点----------
p1=(-0.0740369+0.0740592*i)/r;
p2=(-0.0740369-0.0740592*i)/r;
p3=(-7.11489+266.09*i)/r;
p4=(-7.11489-266.09*i)/r;
p5=(-12.3067+248.881*i)/r;
p6=(-12.3067-248.881*i)/r;
p7=(-23.0299-223.483*i)/r;
p8=(-23.0299+223.483*i)/r;
p9=(-34.8891-183.589*i)/r;
p10=(-34.8891+183.589*i)/r;
p11=(-47.2687-130.253*i)/r;
p12=(-47.2687+130.253*i)/r;
p13=(-58.258-66.4236*i)/r;
p14=(-58.258+66.4236*i)/r;
p15=(-64.1115)/r;
%================================
Hs1=k*(s-z1)*(s-z2)*(s-z3)*(s-z4)*(s-z5)*(s-z6)*(2*pi)^6;
Hs2=(s-p1)*(s-p2)*(s-p3)*(s-p4)*(s-p5)*(s-p6)*(s-p7)*(s-p8)*...
    (s-p9)*(s-p10)*(s-p11)*(s-p12)*(s-p13)*(s-p14)*(s-p15)*(2*pi)^15;
Hs1=expand(Hs1);
Hs2=expand(Hs2);
b=sym2poly(Hs1);    %分子
a=sym2poly(Hs2);    %分母
sys=tf(b,a);
pzmap(sys);
[mag,phase,w]=bode(b,a,{0.001 100});
figure('color','w','position',[100 160 700 550]);
subplot(211);
loglog(w,mag,'color','r','Linewidth',3);grid on
axis([0.001 100 0.01 1.5]);
ylabel('Velocity Response');
title('BBVS-60: 数字地震观测系统幅频特性');
subplot(212);
phase=phase-round(max(phase)/360)*360;
semilogx(w,phase,'color','b','Linewidth',3);grid on
axis([0.001 100 -1000 200]);
ylabel('Phase[Degree]');
title('BBVS-60: 数字地震观测系统相频特性');
xlabel('Frequency[Hz]');

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-20 15:08 , Processed in 0.044164 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表