通信原理实践(二)——幅度调制
一、幅度调制,并画出时域和频域波形
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)
二、频率谱分析——计算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的归一化频率。
四、相干解调
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、结果分析
五、模拟幅度调制、解调过程——音频
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、结果展示: