Bootstrap

数字信号处理及MATLAB仿真(2)——离散系统

        上回书说到如何来编写一些简单的离散时间序列,今天咱们就来谈谈一些关于常系数差分方程的操作吧。

        说到这里咱们对于常系数差分方程可能最关心的就是怎么去求解了。

        其中最关键的部分就是filter函数,可以用来计算系统在输入信号为x的输出信号y。大家学过这个函数的可能会有个疑问——filter函数不是一个用来滤波函数吗?对于这个我只能说问的好。因为答案往往就在疑问的背后,其实filter函数的具体工作原理是基于差分方程的数学运算。它根据输入信号x以及系数向量a和b,按照差分方程的规则逐步计算输出信号y的每个样本值。在计算过程中,会考虑输入信号的当前和过去样本值,以及输出信号的过去样本值,以得到符合差分方程关系的输出结果。这种计算方式能够模拟离散系统对输入信号的响应。需要注意的是,在使用filter函数时,要确保a向量的第一个元素不为零,否则需要对ba的元素进行相应的处理。

        来看两个例子吧。一个是一阶的方程求解,还有一个是二阶方程的求解。程序如下。

%差分方程的求解
%差分方程为y[n]-0.5y[n-1]=x[n]。

clear all
clc

% 定义差分方程系数
a = [1, -0.5]; % y[n] 的系数
b = 1;         % x[n] 的系数

% 生成输入信号 x[n](这里用正弦波示例)
n = 0:99;
x = sin(2*pi*0.1*n);

% 使用 filter 函数求解差分方程
y = filter(b, a, x);

% 绘制输入信号和输出信号
figure;
subplot(2,1,1);
plot(n, x);
xlabel('n');
ylabel('x[n]');
title('输入信号');

subplot(2,1,2);
plot(n, y);
xlabel('n');
ylabel('y[n]');
title('输出信号');

% 显示差分方程
disp('差分方程:');
disp('y[n] - 0.5y[n-1] = x[n]');

%%

% 定义差分方程系数
a = [1, -1.5, 0.7]; % y[n] 的系数
b = [1, 0.5];       % x[n] 的系数

% 生成输入信号 x[n](这里用正弦波示例)
n = 0:99;
x = sin(2*pi*0.1*n);

% 使用 filter 函数求解差分方程
y = filter(b, a, x);

% 绘制输入信号和输出信号
figure;
subplot(2,1,1);
plot(n, x);
xlabel('n');
ylabel('x[n]');
title('输入信号');

subplot(2,1,2);
plot(n, y);
xlabel('n');
ylabel('y[n]');
title('输出信号');

% 显示差分方程
disp('差分方程:');
disp('y[n] - 1.5y[n-1] + 0.7y[n-2] = x[n] + 0.5x[n-1]');

        运行结果:

        结果大概就这样了,大家细细比较还是有那么点区别。但是具体一点的区别,大家可以用双零分解的方法去求求,验证一下,理论和实际之间还是有区别的。

        接下来看看,单位冲激响应怎么搞,核心是impz函数,在 MATLAB 中,impz函数用于计算并返回数字滤波器的单位冲激响应。差分方程为y[n] - 1.5y[n-1] + 0.7y[n-2] = x[n] + 0.5x[n-1],程序如下图。

%单位冲激响应
%差分方程为y[n] - 1.5y[n-1] + 0.7y[n-2] = x[n] + 0.5x[n-1]

% 定义差分方程系数
a = [1, -1.5, 0.7]; % y[n] 的系数
b = [1, 0.5];       % x[n] 的系数

% 计算单位冲激响应
[h, n] = impz(b, a);

% 绘制单位冲激响应
figure;
stem(n, h);
xlabel('n');
ylabel('h[n]');
title('单位冲激响应');
grid on;

% 显示差分方程
disp('差分方程:');
disp('y[n] - 1.5y[n-1] + 0.7y[n-2] = x[n] + 0.5x[n-1]');

       首先,定义了差分方程中与y[n] 的系数 a 和 x[n] 的系数 b 。然后,使用 impz函数计算单位冲激响应 h以及对应的时间索引 n。接下来,通过 stem函数绘制单位冲激响应的图形xlabel 和 ylabel 分别设置了横纵坐标的标签,title 给出了图形的标题,grid on 显示网格。最后,使用 disp 函数显示了定义的差分方程。运行这段代码,将会得到单位冲激响应的图形。结果如下图所示。

今天主要讲的就是离散时间系统,结合例子理解更加的合适。

欲知后事如何,且听下回分解。OVO........

;