matlab - MATLAB中具有初始条件的差分方程
问题描述
我有这个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)');
解决方案
递归方程的一般情况提供了给定输出和先前输出(以及当前和先前输入)之间的关系。由于先前的输出也将依赖于先前的输出,因此您必须在某处切断链。这就是初始条件允许您通过在某个初始时间点固定值来执行的操作。例如对于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
推荐阅读
- android - 如何在代码中设置两个视图背景颜色相同/相等
- python - Chrome 显示“数据;。” 使用 selenium 登录时在地址栏中
- eclipse - 原因:java.lang.ClassNotFoundException:无法加载请求的类:oracle.jdbc.driver.OracleDriver
- snowflake-cloud-data-platform - 4层嵌套Json,如何展平?
- python-3.x - Python中的多部分POST请求
- django - Django DecimalField max_digits 的最大值是多少?
- php - 读取简单的 API 返回空白屏幕?
- javascript - 使用评估时不同操作系统中的 Puppeteer 错误
- javascript - 如何将加载屏幕添加到网站
- html - 为什么 flex-direction: row 在列中渲染项目?