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


    序列的运算

    例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
    • 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
    • 绘制图像

    program2_1

    • 图像与代码解释
      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));
    
    • 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
    • 输出结果

    result2_2

    • 绘制图像

    program2_2

    • 图像与代码解释
      1. 将整个代码实现绘制的图像分为三个图展示:
        • 图一表示两个序列进行相加后的绘制结果显示;
        • 图二表示两个序列进行相乘后的绘制结果显示;
        • 图三表示两个序列进行卷积后的绘制结果显示;
      2. 使用input语句获取键盘输入的数据;
      3. 对相加序列信号进行绘制;
      4. 对相乘序列信号进行绘制;
      5. 对卷积序列信号进行绘制:
        • 卷积计算之后得到的序列长度与原始长度不一定相等,需要使用两卷积序列的长度计算得到;
        • 使用conv进行卷积运算;
      6. 使用text函数语法将各个点的数据信息显示在绘制图像中,方便对绘制结果进行检查与结果比对
  • 相关阅读:
    太坑了,我竟然从RocketMQ源码中扒出了7种导致消息重复消费的原因
    1、C语言(语法结构、数据变量、变量与常量)
    【C语言】你真的懂常量吗?二进制的条条框框你还记得吗?(每日小细节002)
    深度学习模型调参经验
    17 | Spark中的map、flatMap、mapToPair mapvalues 的区别
    mysql explain和DESC性能分析
    七、【Vue-Router】router-link标签的replace属性
    React路由规则的定义、声明式导航、编程式导航
    Linux--多线程(一)
    Redis-key的基本命令和Redis最常用的数据类型:String
  • 原文地址:https://blog.csdn.net/weixin_44321600/article/details/126567783