• 通信原理实践(二)——幅度调制


    一、幅度调制,并画出时域和频域波形

    1、代码如下:

    function [ p_n ] = AM_func( N,fs,fm,Am,fc,Ac,Ma )
    %UNTITLED 此处显示有关此函数的摘要
    %   此处显示详细说明
    % N = 3000; % 长度
    % fs = 48e3; % 采样率
    % fm = 300; % 调制信号频率
    % Am = 0.5; % 调制信号幅度
    % fc = 8e3; % 载波频率
    % Ac = 1; % 载波幅度
    % A0      %直流分量
    
    A0 = Am / Ma;
    
    %%
    %时域波形,第一小题
    t = (0:N-1)'/fs; % 时间t
    m_t = Am*sin(2*pi*fm*t); % 产生调制信号
    c_t = Ac*cos(2*pi*fc*t); % 产生载波信号
    s_t = (m_t + A0) .* c_t; % 调制
    
    figure()
    subplot(1,3,1);
    plot(t, s_t , 'b'); % 绘波形
    xlabel('time');
    ylabel('amplitude');
    title('时域波形');
    
    %%
    %绘制功率谱,第二小题
    L = length(s_t);               % 取得序列长度
    u = fftshift(fft(s_t ));       % 离散傅里叶变换,求频谱
    u_pow = pow2db(abs(u).^2);     % 幅度转为dB
    w = (0:L-1)'*fs/L - 1/2*fs;    % 横坐标-频率
    
    subplot(1,3,2);
    plot(w, u_pow);
    grid on;
    xlabel('frequency(Hz)');
    ylabel('magnitude(dB)');
    title('功率谱');

    2、结果分析

        由于已经封装成一个函数,按照函数说明进行参数设置即可完成幅度调制的功能。波形图如下:

    AM_func(3000,48e3,300,0.5,8e3,1,0.3)

    image

    二、频率谱分析——计算AM调制效率

    1、代码展示:

        代码需要放在上面代码的后面,或者基于上者的数据

    u_pow_decsend = sort( abs(u),'descend');
    p_all = sum( abs(u).^2 );
    p_main = p_all - max(abs(u)).^2 * 2;
    p_n = p_main / p_all * 100;

    2、结果分析:

       一般来说AM调制最大调制效率为33%,且是在Ma=1的情况下取得。

    三、非相干解调——包络检波

    1、代码展示

        代码需要放在上面代码的后面,或者基于上者的数据

    b = fir1(80, 2000/(fs/2));               % 设计截止频率为2KHz的FIR低通滤波器,如何截止频率设为300,则无法显示600Hz的波形,即可以检验出过调制的波形
    s_t = s_t .* (s_t > 0);
    filtered_t = filter(b,1,s_t);        % 滤波
    demod_t = filtered_t - sum(filtered_t)/length(filtered_t);
    
    subplot(1,3,3);
    plot(t, demod_t , 'b'); % 绘制解调波形
    xlabel('time');
    ylabel('amplitude');
    title('包络检波之后的波形');

    2、结果分析

        这边的滤波器需要设计好,两个参数的后者的范围是0~1,表示频率对于fs/2的归一化频率。

    image

    四、相干解调

    1、代码展示

        已封装成函数,可直接调用

    function [] = jt_func( N,fs,fm,Am,fc,Ac,Ma,fc_c,phi_c )
    %UNTITLED5 此处显示有关此函数的摘要
    %   此处显示详细说明
    % %发送端参数声明
    % N = 3000; % 长度
    % fs = 48e3; % 采样率
    % fm = 300; % 调制信号频率
    % Am = 0.5; % 调制信号幅度
    % fc = 8e3; % 载波频率 
    % Ac = 1; % 载波幅度
    % Ma = 10;
    
    % 
    % %接收端参数声明
    % fc_c = 8e3;  % 本地振荡器频率
    % phi_c = 0;   % 本地振荡器初相
    
    %%
    %发送端产生波形
    A0 = Am / Ma;
    t = (0:N-1)'/fs; % 时间t
    m_t = Am*sin(2*pi*fm*t); % 产生调制信号
    c_t = Ac*cos(2*pi*fc*t); % 产生载波信号
    s_t = (m_t + A0) .* c_t; % 调制
    
    %%
    %接收端解调波形
    r_t = s_t;
    figure()
    subplot(1,3,1);
    plot(t, r_t , 'b'); % 绘波形
    xlabel('time');
    ylabel('amplitude');
    title('时域波形');
    
    c_t = cos(2*pi*fc_c*t+phi_c); % 本地振荡器波形
    mix_t = r_t .* c_t; % 混频
    subplot(1,3,2);
    plot(t, mix_t , 'b');   % 绘制混频波形
    xlabel('time');
    ylabel('amplitude');
    title('混频后的波形');
    
    b = fir1(20, fc/(fs/2)); % 设计截止频率为fcFIR低通滤波器
    filtered_t = filter(b,1,mix_t); % 滤波
    demod_t = filtered_t - sum(filtered_t)/length(filtered_t);
    % 去除DC分量
    subplot(1,3,3);
    plot(t, demod_t ,'b' ); % 绘制解调波形
    xlabel('time');
    ylabel('amplitude');
    title('滤波后的波形');
    
    end

    2、结果分析

    image

    五、模拟幅度调制、解调过程——音频

    1、代码如下:

        主要是播放声音这个函数使用audioplayer,可以停止声音播放,否则。。。。。

    clc,clear;
    
    [m_t,fs] = audioread('MayDay.mp3');   % 得到音频信号以及采样率
    
    N = length(m_t);                      % 调制信号长度
    Am = max(m_t);                        % 音频信号最大幅度
    fc = 200e3;                           % 载波频率
    Ac = 1;                               % 载波幅度
    Ma = 0.3; 
    A0 = Am / Ma;
    
    t = (0:N-1)'/fs; % 时间t
    c_t = Ac*cos( 2*pi*fc*t ); % 产生载波信号
    s_t = (m_t + A0) .* c_t; % 调制
    
    r_t = s_t;
    figure()
    subplot(1,3,1);
    plot(t, r_t , 'b'); % 绘波形
    xlabel('time');
    ylabel('amplitude');
    title('时域波形');
    
    c_t = cos(2*pi*fc*t); % 本地振荡器波形
    mix_t = r_t .* c_t; % 混频
    subplot(1,3,2);
    plot(t, mix_t , 'b');   % 绘制混频波形
    xlabel('time');
    ylabel('amplitude');
    title('混频后的波形');
    
    b = fir1(20,fs/4/(fs/2)); % 设计截止频率为fcFIR低通滤波器
    filtered_t = filter(b,1,mix_t); % 滤波
    demod_t = filtered_t - sum(filtered_t)/length(filtered_t);
    % 去除DC分量
    subplot(1,3,3);
    plot(t, demod_t ,'b' ); % 绘制解调波形
    xlabel('time');
    ylabel('amplitude');
    title('滤波后的波形');
    
    player = audioplayer(demod_t, fs);
    play(player);

    2、结果展示:

    image

  • 相关阅读:
    【Robot Framework】List 的相关使用方法
    robot framework ——关键字run keyword if 如何在一个条件下接多个执行语句,以及如何写复杂条件句-关键字Run Keywords和and
    Robotframework之页面元素操作功能
    selenium之 下拉选择框Select
    selenium修改readonly属性的元件
    Robotframework之Python的自定义库
    python 元类详解
    从<<JavaScript权威指南>>抄下来的一个例子
    链接
    Python+selenium之获取文本值和下拉框选择数据
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4886868.html
Copyright © 2020-2023  润新知