线性常系数差分方程的Matlab递推求解

来源:互联网 发布:iphone怎么传文件到mac 编辑:程序博客网 时间:2024/04/19 23:39

%Matlab信号处理工具箱提供了filter函数,可以实现线性常系数差分方程的递推求解,调用格式如下:
    %yn=filter(B,A,xn,xi)
    %xi=filtic(B,A,ys,xs)
%调用参数xn是输入信号向量,B和A是差分方程(2.5.1b)的系数向量,
%即Σ(k=0到N)ak*y(n-k)=Σ(i=0到M)bk*x(n-i),a0=1
    %B=[b0,b1,…,bM]
    %A=[a0,a1,…,aN]
%其中a0=1,如果a0≠1,则用a0对系数向量B和A归一化。
%xi是与初始条件有关的向量,用xi=filtic(B,A,ys,xs)函数格式计算,
%其中ys和xs是初始化条件向量,即:
        %ys=[y(-1),y(-2),...,y(-N)]
        %xs=[x(-1),x(-2),...,x(-m)]
%如果xn是因果序列,则xs=0,调用时可默认xs,用filtic(B,A,ys,xs)函数
%计算出的xi被称为等效初始条件的输入向量。(默认xs可用filtic(B,A,ys)计算)
%用filter(B,A,xn,xi)函数计算出的yn向量与输入信号和系统的初始状态有关,称为系统的全响应。如果
%系统的初始条件为零,就默认xi=0,调用格式为
        %yn=filter(B,A,xn)
%这样计算出的yn称为系统的零状态响应
    %例2.5.1的matlab程序:y(n)=a*y(n-1)+x(n);x(n)=δ(n),分别求不同初始条件的输出序列yn(1)y(-1)=1;
    %(2)y(-1)=1;(3)y(n)=0(n>0)
a=0.8;ys=1;
xn=[1,zeros(1,30)];
B=1;A=[1,-a];
xi=filtic(B,A,xn);
yn=filter(B,A,xn,xi);
n=0:length(yn)-1;
subplot(1,2,1),stem(n,yn,'.');title('(a)');xlabel('n');ylabel('y(n)');
subplot(1,2,2),stem(n,hn,'.');title('(b)');xlabel('n');ylabel('h(n)');