• 通信原理实验(二):频率调制与解调&信号的插值与抽取


    1.产生FM信号并绘制频域波形

    %% 产生FM信号并绘制时域波形
    fm = 500; % 调制信号频率
    Am = 0.5; % 调制信号幅度
    fc = 5e3; % 载波频率
    Ac = 1; % 载波幅度
    kf = 10000*pi; % 调频灵敏度
    fs = 75e3; % 采样率
    N = 3000; % 样点总数
    t = (0:N-1)'/fs; % 时间t
    m_t = Am*sin(2*pi*fm*t); % 调制信号
    phi_t = kf*cumsum(m_t)/fs; % 相位积分
    s_t = cos(2*pi*fc*t + phi_t); % 已调信号
    plot(t, s_t , 'b'); % 绘波形
    xlabel('time');
    xlim('auto');
    ylabel('amplitude');
    ylim('auto');

    2.绘制频谱图

    %% 绘制频谱图
    L = length(s_t); % 取得序列长度 
    u = fftshift(fft(s_t )); % 离散傅里叶变换,求频谱
    w = (0:L-1)'*fs/L - 1/2*fs; % 横坐标-频率
    figure(2)
    plot(w, abs(u)); % 绘制频谱图 
    grid on; 
    xlabel('frequency(Hz)'); 
    ylabel('magnitude(dB)');

    3.贝塞尔函数值

    %% 贝塞尔函数值
    b=500*N/fs;%计算频域上间隔500Hz对应的点数
    c=1500+10*b+1;%计算fc在频域上对应的位置
    for i=0:1:10
       a(i+1)=abs(u(c+b*i)/N*2);%计算fc+i*fm对应的频谱值
       bessel(i+1)=besselj(i,5);%计算对应的贝塞尔函数值,mf=5
    end
    a
    bessel

    4.FM信号非相干解调

    %FM信号非相干解调
    fc = 5e3; % 载波频率
    fs = 100e3; % 采样率
    N = length(s_t); % 样点数
    [lpf_b,lpf_a] = butter(10, (fc/2)/(fs/2)); % 设计低通滤波器
    t = (0:N-1)'/fs; % 时间t
    r_t = s_t;
    r_d_t = [0;diff(r_t)]; % 求微分
    r_e_t = abs(hilbert(r_d_t)); % 包络检波
    demod_t = filter(lpf_b, lpf_a, r_e_t); % 滤波
    plot(t, demod_t , 'b'); % 绘图

    5.解调调频立体声广播

    %% 调频立体声广播解调 
    clear all;clc;close all
    load 'fm_cap.mat';  %载入FM信号
    fc = 200e3; % 载波频率
    fs = 2e6; % 采样率
    r_t = fm_cap;
    N = length(r_t); % 样点数
    [lpf_b,lpf_a] = butter(10, (fc/2)/(fs/2)); % 设计低通滤波器
    t = (0:N-1)'/fs; % 时间t
    %% 解调
    r_d_t = [0;diff(r_t)]; % 求微分
    r_e_t = abs(hilbert(r_d_t)); % 包络检波
    demod_t = filter(lpf_b, lpf_a, r_e_t); % 滤波
    plot(t, demod_t , 'b'); % 绘图
    %% 信号抽取,使声卡能够播放音频
    demod_t2 = resample(demod_t,48e3,2e6);%按比例降低采样率
    demod_t2=demod_t2/max(demod_t2);%归一化,限制音频幅度范围,否则无法播放
    fs2=48e3;%新采样率
    N2 = length(demod_t2); % 新样点数
    t2 = (0:N2-1)'/fs2; % 新时间t
    plot(t2, demod_t2 , 'b'); % 绘图
    sound(demod_t2,fs2);%播放音频
  • 相关阅读:
    QtDBus快速入门
    论Qt容器与STL
    JS中的!=、== 、!==、===的用法和区别
    JS操作JSON总结
    select2使用方法总结
    Entity Framework插入数据报错:Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
    Windows登录类型及安全日志解析
    <script type="text/html"></script> js模版使用
    在 C# 中,(int) ,Int32.Parse() 和 Convert.toInt32() 三种方法的区别
    关于session,cookie,Cache
  • 原文地址:https://www.cnblogs.com/pursuit1996/p/4912398.html
Copyright © 2020-2023  润新知