计算递归方程的问题

信息处理 matlab
2022-02-06 04:17:19

当我试图求解方程时,我遇到了这个错误:

试图访问 x(101);索引超出范围,因为 numel(x)=100。

实际上原方程是![![在此处输入图像描述

所以我使用“i+1”而不是“i”来避免以下错误:

试图访问 y(0);index 必须是正整数或逻辑整数。

n=[1:100];
yy=zeros(1,99);
xx=zeros(1,99);
y=[1 yy];
x=(.5).^n;
for i=n

  y(i)=.5*y(i-1)+2*x(i)+4*x(i-1)
end

通过将i初始化为 2解决了错误

改进后的代码是:

yy=zeros(1,99);
xx=zeros(1,99);
y=[1 yy];
x=(.5).^n;
 for n=2:100

 y(n)=.5*y(n-1)+2*x(n)+4*x(n-1);
end

但是 **y(n)** 的结果与我在纸上得到的不同。

2个回答

很抱歉这样回答,但我无法发表评论,因为我的声誉不够,但我想提供帮助。

它是一个过滤器,你可以比仅仅构建一个算法(当然在 Matlab 中)更容易、更快地做到这一点。为了对滤波器设计有充分的了解,需要较长的文章才能涵盖所有概念。

但是,我可以帮助您了解您应该涵盖哪些主题。

请查看 FIR/IIR 过滤器(您的递归方程基本上是一个 IIR 过滤器)和 Z-Transform 主题。

如果您需要更快地了解 IIR 滤波器,本讲座将为您提供一些信息。

当求解 LCCDE

k=0N1aky[nk]=k=0M1bkx[nk]

,通过递归a0=1n0

y[n]=k=1N1aky[nk]+k=0M1bkx[nk]

您还必须知道那些索引集的初始y[n]x[n]max(N,M)n1

大多数情况下,对于 LTI、因果系统,这些初始值被视为零,因此

y[0]=b0x[0]

当计算机使用一些循环处理通过递归方程求解 LCCDE 时,您必须考虑此初始条件计算。