MATLAB中具有初始条件的差分方程

时间:2019-03-28 13:14:55

标签: matlab filter signal-processing

我有初始条件为y[n] + a1 y[n − 1] = x[n]的差分方程y(-1) = 0,我已经按照如下方法实现了,但是我不知道如何实现初始条件y(-1) = 0,我不被允许使用Matlab中的内置功能,例如filticfilter

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)');

1 个答案:

答案 0 :(得分:1)

递归方程的一般情况提供了给定输出和先前输出(以及当前和先前输入)之间的关系。由于先前的输出也将取决于早期的输出,因此您必须在某些地方切断链。这就是初始条件允许您通过在某个初始时间点固定值来执行的操作。例如,对于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