【问题标题】:Why is the product of the two output from one system and its inverse not equal to 1?为什么一个系统的两个输出的乘积和它的倒数不等于1?
【发布时间】:2021-09-21 06:50:15
【问题描述】:

我在 Matlab 中使用 filter() 函数来模拟一个系统及其逆。然而,当我试图验证逆系统是否按应有的方式工作时,我发现 H(z)H_i(Z) 不等于 1,这与逆系统的性质不符。这是我的代码:

function y2 = Inverse()

b = [2 0 0.5];
a = [1 0 -0.25];

fprintf('2y(n)+0.5y(n-2) = x(n)-0.25x(n-2)\n')
N = 30 ;
n =[0: N-1] ;
x = 0.8.^n;

y = filter(b,a,x);
subplot(3,2,1);stem(x,y);

y1 = filter(a,b,x);
subplot(3,2,2);stem(x,y1);

y2 = y.*y1;
end

在我看来,y2 应该是所有向量的向量。我是否在代码中犯了任何错误或误解了逆系统?

【问题讨论】:

  • 您在任何时候都没有计算H(z)*H_i(Z),您是在乘以过滤器的输出,而不是过滤器。这背后有一个完整的测量理论领域,除其他外,傅里叶变换、Z 变换等。它对我来说有点生疏,但 AFAIK 你不能随心所欲地乘法,傅里叶空间中的操作是不一样的比他们在信号空间中
  • 谢谢。看来我过滤器()的用法错误。

标签: matlab vector filter signals


【解决方案1】:

filter() 函数过滤输入数据-在您的情况下为“x”-w.r.t 您提供的过滤器系数,“b”和“a”。尽管在解释诸如过滤器之类的系统方面可能有一些优点——控制系统在这方面充当低通滤波器——通过 filter() 函数检查它们是无效的。您想看到的内容可以在以下代码中看到:

num = [2 0 0.5];
den = [1 0 -0.25];

sys    = tf(num, den);
invSys = inv(sys);

prod = sys*invSys
gain = minreal(prod)

>>

prod =
 
  2 s^4 - 0.125
  -------------
  2 s^4 - 0.125
 
Continuous-time transfer function.


gain =
 
  1
 
Static gain.

如您所见,逆系统与实际系统的乘积产生一对相同的分子和分母。如您所料,这种系统的最小实现为 1。

您可以使用系统“sys”作为过滤器,但要注意它是开环不稳定的。如果你想玩弄滤波器,Simulink 的数字滤波器设计器工具有一个很棒的可视化界面,你可以将滤波器系数导出到工作区,以便你可以将它们与滤波器一起使用:

filter(exported_num, exported_den, noisyData);

【讨论】:

    猜你喜欢
    • 2019-01-31
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    相关资源
    最近更新 更多