文章目录
-
-
- 序列的运算
-
- 例1: 集合平均示例
-
- 假设原始未受干扰的信号为s[n] = 2[n(0.9)n], 传输过程中有噪声d[n]随机产生,对比信号受噪声影响前后,并进行50次测量后求得集合平均
- 例2: 序列的基本运算
-
- 计算两输入序列的相加、相乘、卷积运算结果,并进行输出与绘制
序列的运算
例1: 集合平均示例
假设原始未受干扰的信号为s[n] = 2[n(0.9)n], 传输过程中有噪声d[n]随机产生,对比信号受噪声影响前后,并进行50次测量后求得集合平均
% Program 2_1
%
% Generation of the ensemble average
% ----------------------------------
R = 50;
n = 0: R-1;
s = 2*n.*(0.9.^n); % Generate the uncorrupted signal
d = rand(R, 1) - 0.5; % Generate the random noise
subplot(2, 2, 1)
stem(n, s);
set(gca, 'ytick', 0:8);
xlabel('Time index n');
ylabel('Amplitude');
title('Uncorrupted signal');
subplot(2, 2, 2)
stem(n, d);
xlabel('Time index n');
ylabel('Amplitude');
title('Noise');
x1 = s + d';
subplot(2, 2, 3)
stem(n, x1);
set(gca, 'ytick', 0:8);
xlabel('Time index n');
ylabel('Amplitude');
title('Corrupted signal');
for n = 1: 50
d = rand(R, 1) - 0.5;
x = s + d';
x1 = x1 + x;
end
x1 = x1 / 50;
subplot(2, 2, 4)
stem(n, x1);
set(gca, 'ytick', 0:8);
xlabel('Time index n');
ylabel('Amplitude');
title('Ensemble average');
- 图像与代码解释
- 将整个代码使用四个绘制图描述整个过程:
- 左上角图一表示未受到噪声影响的原始信号;
- 右上角图二表示随机产生的噪声信号;
- 左下角图三表示受到噪声影响后的信号;
- 右下角图四表示经过50次测量后的集合平均
- 实现原始给定信号序列的描述与绘制;
- 使用rand产生随机地噪声信号并绘制;
- 对应位置进行噪声与原始信号的相加,绘制受噪声影响的信号;
- 进行50次的噪声产生与信号影响,并将50次的影响结果进行集合平均,将最终平均后的图像进行绘制
- 结论: 集合平均后的信号和原始未受干扰信号基本一致
例2: 序列的基本运算
计算两输入序列的相加、相乘、卷积运算结果,并进行输出与绘制
% Program 2_2
%
% Sequence basic operation
% ---------------------------
a = input('Type in the first sequence = ');
b = input('Type in the second sequence = ');
u0 = a + b;
M0 = length(a) - 1;
n0 = 0: 1: M0;
disp('output sequence a[n] + b[n] =');
disp(u0)
subplot(3, 1, 1);
stem(n0, u0)
xlabel('Time index n');
ylabel('Amplitude');
title('a[n] + b[n]');
str0 = [repmat('(', length(a), 1) num2str(n0') repmat(', ', length(a), 1) num2str(u0') repmat(')', length(a), 1)];
text(n0, u0, cellstr(str0));
u1 = a.*b;
M1 = length(a) - 1;
n1 = 0: 1: M1;
disp('output sequence a[n] · b[n] =');
disp(u1)
subplot(3, 1, 2);
stem(n1, u1)
xlabel('Time index n');
ylabel('Amplitude');
title('a[n] · b[n]');
str1 = [repmat('(', length(a), 1) num2str(n1') repmat(', ', length(a), 1) num2str(u1') repmat(')', length(a), 1)];
text(n1, u1, cellstr(str1));
u2 = conv(a, b);
M2 = length(u2) - 1;
n2 = 0: 1: M2;
disp('output sequence a[n] * b[n] =');
disp(u2)
subplot(3, 1, 3);
stem(n2, u2)
xlabel('Time index n');
ylabel('Amplitude');
title('a[n] * b[n]');
str2 = [repmat('(', length(u2), 1) num2str(n2') repmat(', ', length(u2), 1) num2str(u2') repmat(')', length(u2), 1)];
text(n2, u2, cellstr(str2));
- 图像与代码解释
- 将整个代码实现绘制的图像分为三个图展示:
- 图一表示两个序列进行相加后的绘制结果显示;
- 图二表示两个序列进行相乘后的绘制结果显示;
- 图三表示两个序列进行卷积后的绘制结果显示;
- 使用input语句获取键盘输入的数据;
- 对相加序列信号进行绘制;
- 对相乘序列信号进行绘制;
- 对卷积序列信号进行绘制:
- 卷积计算之后得到的序列长度与原始长度不一定相等,需要使用两卷积序列的长度计算得到;
- 使用conv进行卷积运算;
- 使用text函数语法将各个点的数据信息显示在绘制图像中,方便对绘制结果进行检查与结果比对