【 MATLAB 】使用 MATLAB 求某输入的稳态响应

举报
李锐博恩 发表于 2021/07/15 07:37:57 2021/07/15
【摘要】 稳态响应是在本科,更确切地说是在考研时候经常接触的,例如电路基础、信号与系统中就常有稳态响应这个词。 今天在补习MATLAB数字信号处理时,突然碰到稳态响应,一脸懵逼,感觉并不理解什么是稳态响应了,也许之前也没有懂过吧。 百度百科对概念进行了解释: 稳态响应是指当足够长的时间之后,系统对于固定的输入,有了一个较为稳定的输出。 在某一输入信号的作用后,时间趋于无穷大时系...

稳态响应是在本科,更确切地说是在考研时候经常接触的,例如电路基础、信号与系统中就常有稳态响应这个词。

今天在补习MATLAB数字信号处理时,突然碰到稳态响应,一脸懵逼,感觉并不理解什么是稳态响应了,也许之前也没有懂过吧。

百度百科对概念进行了解释:

稳态响应是指当足够长的时间之后,系统对于固定的输入,有了一个较为稳定的输出。

在某一输入信号的作用后,时间趋于无穷大时系统的输出状态称为稳态。

下面就一起来体会这个稳态响应吧。


LTI 系统对复指数信号的响应

好久之前写过的一篇博文上:线性时不变系统(LTI)对复指数信号的响应(数字信号处理的特征值与特征函数)

就已经说明了线性时不变系统对于复指数信号的响应,简单地说,输入序列经过线性时不变系统之后的响应就是在该频率处的系统频率响应乘以该复指数信号。

即,如果系统的频率响应为H(e^{jw})x(n) = e^{jw_0n}经过系统的响应如下:

y(n) = H(e^{jw_0})\times e^{jw_0n}


对正弦序列的响应

设输入序列为 x(n) = A cos(w_0n + \theta_0)

系统的频率响应为: H(e^{jw})

正弦序列可以表示成复指数序列之和,这样就可以利用LTI系统对复指数序列的响应,求得LTI系统对正弦序列的响应。如下:

这就得到了如下结论:

LTI系统对正弦序列的响应是相同频率w0的另一个正弦序列,其幅值被\left | H(e^{jw_0})\right |所倍增,而相位则相移\angle H(e^{jw_0}),即

y(n) = A \left | H(e^{jw_0})\right | cos(w_0n +\theta_0 + \angleH(e^{jw_0}))

这个响应称为稳态响应,用y_{ss}(n)表示。


案例1

求由脉冲响应h(n)= (0.9)^nu(n)所表征的系统频率响应H(e^{jw}),画出幅度和相位响应。

题解:

很简单,根据DTFT的公式就可以直接求出该脉冲响应的离散时间傅里叶变换:

H(e^{jw})=\frac{1}{1-0.9e^{-jw}}

MATLAB脚本如下:


  
  1. clc
  2. clear
  3. close all
  4. k = 0:500;
  5. w = (pi/500)*k;
  6. X = exp(j*w)./( exp(j*w) - 0.9*ones(1,501) );
  7. magX = abs(X);
  8. angX = angle(X);
  9. realX = real(X);
  10. imagX = imag(X);
  11. subplot(2,1,1);
  12. plot(w/pi,magX);
  13. title('Magnitude Part');
  14. xlabel('w/pi');ylabel('Magnitude');
  15. grid
  16. subplot(2,1,2);
  17. plot(w/pi,angX);
  18. title('Angle Part');
  19. xlabel('w/pi');ylabel('Radians');
  20. grid


系统的频率响应求出来了,那么现在的这个案例就是给定一个输入,求其稳态响应。

案例2

案例1的系统,输入是0.1u(n),求稳态响应y_{ss}(n)

题解:

在稳态,输入是一常数序列(或者w_0=\theta_0=0的正弦序列),然后输出是:

y_{ss}(n)=0.1H(e^{j0})=0.1\times10= 1


案例3

一LTI系统由下面的差分方程表征:

y(n)=0.8y(n-1)+x(n)

1.求频率响应H(e^{jw})

2.对输入x(n)=cos(0.05\pi n)u(n)计算并画出稳态响应y_{ss}(n)

题解:

1.由差分方程求解频率响应太好求了,分子分母系数都给出了,可以直接写出频率响应,如果在z变换中成为有理转移函数。

这里直接给出频率响应:

H(e^{jw})=\frac{1}{1-0.8e^{-jw}}=\frac{e^{jw}}{e^{jw}-0.8}

2.在稳态下,输入是x(n)=cos(0.05\pi n),其频率为w_0=0.05\pi,\theta_0=0,系统的频率响应应该是:

H(e^{j0.05\pi})=\frac{1}{1-0.8e^{-j0.05\pi}}=4.0928e^{-j0.5377}

因此,y_{ss}(n)=4.0928cos(0.05\pin-0.5377)=4.0928cos[0.05\pi(n-3.42)]

也就是说,在输出端该正弦被放大了4.0928倍,移位了3.42个样本。

下面用MATLAB脚本验证:


  
  1. clc
  2. clear
  3. close all
  4. b = 1;
  5. a = [1,-0.8];
  6. n = [0:100];
  7. x = cos(0.05*pi*n);
  8. y = filter(b,a,x);
  9. subplot(2,1,1)
  10. stem(n,x);
  11. title('Input sequence')
  12. xlabel('n');ylabel('x(n)');
  13. subplot(2,1,2)
  14. stem(n,y);
  15. title('Output sequence');
  16. xlabel('n');ylabel('y(n)');

可见,幅度和相位都变化了。

最后,关于filter函数的介绍见博文:

【 MATLAB 】filter 函数介绍(一维数字滤波器)

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/83381910

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。