【DSP】时域中的离散时间信号 -- MATLAB实现序列的运算

文章目录

      • 序列的运算
        • 例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');

  • 绘制图像

  • 图像与代码解释
    1. 将整个代码使用四个绘制图描述整个过程:
      • 左上角图一表示未受到噪声影响的原始信号;
      • 右上角图二表示随机产生的噪声信号;
      • 左下角图三表示受到噪声影响后的信号;
      • 右下角图四表示经过50次测量后的集合平均
    2. 实现原始给定信号序列的描述与绘制;
    3. 使用rand产生随机地噪声信号并绘制;
    4. 对应位置进行噪声与原始信号的相加,绘制受噪声影响的信号;
    5. 进行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));
  • 输出结果

【DSP】时域中的离散时间信号 -- MATLAB实现序列的运算_第1张图片

  • 绘制图像

  • 图像与代码解释
    1. 将整个代码实现绘制的图像分为三个图展示:
      • 图一表示两个序列进行相加后的绘制结果显示;
      • 图二表示两个序列进行相乘后的绘制结果显示;
      • 图三表示两个序列进行卷积后的绘制结果显示;
    2. 使用input语句获取键盘输入的数据;
    3. 对相加序列信号进行绘制;
    4. 对相乘序列信号进行绘制;
    5. 对卷积序列信号进行绘制:
      • 卷积计算之后得到的序列长度与原始长度不一定相等,需要使用两卷积序列的长度计算得到;
      • 使用conv进行卷积运算;
    6. 使用text函数语法将各个点的数据信息显示在绘制图像中,方便对绘制结果进行检查与结果比对

你可能感兴趣的:(数字芯片研发,#,DSP,matlab,DSP,数字信号处理,离散时间信号)