信号与系统实验3:离散时间系统特性分析

这是信号与系统的实验报告。我信号与系统总共就扣了几分,也不知道是期末扣的,还是实验扣的。即使全是实验扣的,这实验也算做的挺好的。于是把报告发出来给大家参考。 这是第三个实验,离散时间系统特性分析

实验目的

  1. 深入理解单位样值相应,离散系统的频率响应的概念;

  2. 掌握通过计算机进行求得离散系统的单位样值相应,以及离散系统的频率响应的方法。

实验原理

对于离散系统的单位样值而言,在实际处理过程中,不可能选取无穷多项的取值。往往是选取有限项的取值,当然这里会产生一个截尾误差,但只要这个误差在相对小一个范围里,可以忽略不计。

另外,在一些实际的离散系统中,往往不是事先就能得到描述系统的差分方程的,而是通过得到系统的某些相应值,则此时系统的分析就需借助计算机的数值处理来进行,得到描述系统的某些特征,甚至进而得到描述系统的数学模型。

本实验首先给出描述系统的差分方程,通过迭代的方法求得系统的单位样值响应,进而求得该离散系统的频率响应。限于试验条件,虽然给出了系统方程,但处理的方法依然具有同样的实际意义。

具体的方法是:

1.在给定系统方程的条件下,选取激励信号为\(\delta(n)\),系统的起始状态为零状态,通过迭代法,求得系统的单位样值响应\(h(n)(n=0,1,\cdots,N)\)

2.利用公式 \[ H(e^{j\Omega})=\sum_{n=0}^Nh(n)e^{-j\Omega n},\Omega\in[0,2\pi] \] 计算系统的频率响应。

实验内容

求单位样值响应

已知系统: \[ y(n)-1.3y(n-1)-0.4y(n-2)=x(n-1) \] 求单位样值响应。

可以用迭代法求解,迭代公式为: \[ y(n)=x(n-1)+1.3y(n-1)+0.4y(n-2) \]

求系统幅频响应

利用公式 \[ H(e^{j\Omega})=\sum_{n=0}^Nh(n)e^{-j\Omega n},\Omega\in[0,2\pi] \] 计算系统的频率响应。

需要注意,计算出的\(H(e^{j\Omega})\)是一个复数,但是C语言对复数的支持并不是很好,因此我们可以分别计算实部和虚部。有:

\[ \Re\left[H(e^{j\Omega})\right]=\sum_{k=0}^{10}h(k)\cos(-\Omega k)\\\\ \Im\left[H(e^{j\Omega})\right]=\sum_{k=0}^{10}h(k)\sin(-\Omega k)\\\\ \text{Amp}=|H(e^{j\Omega})|=\sqrt{\Re ^2+\Im ^2}\\\\ \varphi=\arctan(\frac{\Re\left[H(e^{j\Omega})\right]}{\Im\left[H(e^{j\Omega})\right]}) \]

实验代码及其流程图

实验流程图如下:

234

实验代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include "arrayToPPM2.hpp"
#define MAXN 1000
using namespace std;
const double PI = acos(-1.0);

int x[MAXN];
double h[MAXN], t[MAXN];

double h_(int x) {
if (x < 0)
return 0;
else
return h[x];
}

int main() {
x[0] = 1;

for (int i = 1; i <= 10; ++i) {
t[i] = i;
h[i] = x[i - 1] + 1.3 * h_(i - 1) - 0.4 * h_(i - 2);
}
for (int i = 0; i <= 10; ++i) {
printf("%.8f\n", h[i]);
}
double w[MAXN], amp[MAXN], phi[MAXN];
int cnt = 0;
for (double i = 0; i <= 2 * PI; i += 0.1 * PI) {
double a = 0.0, b = 0.0;
for (int j = 0; j <= 10; ++j) {
a += h[j] * cos(-1 * j * i);
b += h[j] * sin(-1 * j * i);
}
double tem_phi = atan2(b, a);
w[cnt] = i;
amp[cnt] = sqrt(a * a + b * b);
phi[cnt] = tem_phi;
++cnt;
}
PPMdata background, axis, grid, line;
background = makePPMdata(255, 255, 251);
axis = makePPMdata(28, 28, 28);
grid = makePPMdata(189, 192, 186);
line = makePPMdata(0, 92, 175);
Graph H(1000, 1000, 5.0, 0.0, 13, 5, 1, 1, line, grid, background, axis, "response.ppm");
Graph A(1000, 1000, PI, 5.0, 2.5 * PI, 20, 1, 1, line, grid, background, axis, "amp-fre.ppm");
Graph P(1000, 1000, PI, 0.0, 2.5 * PI, 8, 1, 1, line, grid, background, axis, "pha-fre.ppm");
A.drawXY(w, amp, cnt);
P.drawXY(w, phi, cnt);
H.drawXY(t, h, 11);
for (int i = 0; i < cnt; ++i) {
printf("%8.4f %8.4f %8.4f\n", w[i], amp[i], phi[i]);
}
return 0;
}

实验结果

系统单位样值响应

\(n\) \(\delta(n)\) \(h(n)\)
0 1 0.000000
1 0 1.000000
2 0 1.300000
3 0 1.290000
4 0 1.157000
5 0 0.988100
6 0 0.821730
7 0 0.673009
8 0 0.546220
9 0 0.440882
10 0 0.354659

响应-时间图如下

response

系统幅频和相频特性

\(\Omega\) \(\text{Amp}(\Omega)\) \(\varphi(\Omega)\)
0.0000 8.5716 0.0000
0.3142 6.1182 -1.3645
0.6283 2.1370 -2.1140
0.9425 1.7731 -2.2523
1.2566 0.7426 -2.7356
1.5708 0.9027 -2.5992
1.8850 0.3754 -3.0217
2.1991 0.6304 -2.8331
2.5133 0.2467 -3.1356
2.8274 0.5384 -3.0404
3.1416 0.2124 3.1416
3.4558 0.5384 3.0404
3.7699 0.2467 3.1356
4.0841 0.6304 2.8331
4.3982 0.3754 3.0217
4.7124 0.9027 2.5992
5.0265 0.7426 2.7356
5.3407 1.7731 2.2523
5.6549 2.1370 2.1140
5.9690 6.1182 1.3645
6.2832 8.5716 0.0000

幅频曲线如下:

amp-fre

相频曲线如下:

pha-fre

实验总结

\(0\)时对应的是低频,\(\pi\)时对应的是高频,通过幅频特性曲线可以看出,本系统是离散的低通滤波器。


信号与系统实验3:离散时间系统特性分析
https://suzumiyaakizuki.github.io/2022/06/22/信号报告3/
作者
SuzumiyaAkizuki
发布于
2022年6月22日
许可协议