MATLAB中带初始条件的差分方程

MATLAB中带初始条件的差分方程,matlab,filter,signal-processing,Matlab,Filter,Signal Processing,我有这个差分方程y[n]+a1y[n− 1] =x[n]初始条件y(-1)=0我已经实现了如下,但我不知道如何实现初始条件y(-1)=0我不允许使用Matlab中的内置函数,如filtec或filter clc; clear; close all; x = zeros(1,20); x(1) = 1; a1 = -0.8; N = length(x); % Length of input signal y = zeros(size(x)); % Allocate space for outut

我有这个差分方程
y[n]+a1y[n− 1] =x[n]
初始条件
y(-1)=0
我已经实现了如下,但我不知道如何实现初始条件
y(-1)=0
我不允许使用Matlab中的内置函数,如
filtec
filter

clc;
clear;
close all;
x = zeros(1,20);
x(1) = 1;
a1 = -0.8;

N = length(x); % Length of input signal
y = zeros(size(x)); % Allocate space for outut

y(1) = -a1*x(1); % First sample, assuming x(0) = 0
%y(1) = 0; % First sample, assuming x(0) = 0

for n=2:N % Remaining samples
    y(n) = -a1*y(n-1) + x(n);
end

nn=-1:18;
stem(nn,x,'b');
hold on
stem(nn,y,'r');
box on
axis([-1 20 -1.5 1.5]);
xlabel('n');
ylabel('x(n) och y(n)');
legend('x(n)','y(n)');

递推方程的一般情况提供了给定输出和先前输出(以及当前和先前输入)之间的关系。由于以前的输出也依赖于以前的输出,因此必须在某个地方切断链。这就是初始条件允许您通过在某个初始时间点固定值来执行的操作。例如,对于
n=0
,给定的递推方程将产生

y[0] + a1 y[0 − 1] = x[0]
或同等地

y[0] = x[0] - a1 y[-1]
初始条件
y[-1]=0
允许您删除以前的输出依赖项,并将表达式简化为

y[0] = x[0] - a1 * 0
     = x[0]
转换为Matlab常用的基于1的数组索引将为您提供以下内容:

y(1) = x(1); % First sample, assuming y(0) = 0

for n=2:N % Remaining samples
    y(n) = -a1*y(n-1) + x(n);
end

你可能想创建一个、一个或类似的东西。另外,不应该因为你的初始条件而
x(1)=-1
吗?你用
y(1)=0注释掉的行解决了你的问题-你为什么要注释掉这个?你不会在任何地方更新
x(n)
,所以它都是零,但对于第一个元素,这似乎不是期望的行为?@Wolfie我不明白它就在那里,当我运行该行时,输出信号只是0。我已经使用内置命令
filter
测试了代码。代码的绘图与使用
filter
的绘图不同,因此在某些地方我做了一些不正确的事情,导致它们不同。