Разностное уравнение с начальным условием в MATLAB - PullRequest
1 голос
/ 28 марта 2019

У меня есть это разностное уравнение y[n] + a1 y[n − 1] = x[n] с начальным условием y(-1) = 0, и я реализовал это следующим образом, но я не понимаю, как реализовать начальное условие y(-1) = 0 Мне не разрешено использовать встроенную функцию в Matlab вроде filtic или 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)');

1 Ответ

1 голос
/ 28 марта 2019

Общий случай рекуррентного уравнения обеспечивает связь между данным выходом и предыдущим выходом (а также текущим и предыдущим входами).Так как предыдущий вывод также будет зависеть от более ранних выходов, вы должны где-то обрезать цепочку.Это то, что позволяет сделать начальное условие, фиксируя значения в некоторый начальный момент времени.Например, для 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...