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

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

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

原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4886868.html