以下是老师发的代码:补充即可完成 AM 信号的调制与解调
clear all;
close all;
clc;
%% AM的调制及其解调
fs = 128;
dt = 1/fs;
t = 0: dt : 50;
NFFT = 2^16; %傅里叶变换点数
f = linspace(-fs/2, fs/2, NFFT);
%% 需要同学们自己生成调制信号、载波信号以及已调信号
fm=1;%信号的频率
s_m=cos(2*pi*fm*t); %基带信号
S_m=t2f(s_m,NFFT); %傅里叶变换
fc=10;%载波信号的频率
s_c=cos(2*pi*fc*t); %sin信号
S_c=t2f(s_c,NFFT); %傅里叶变换
s_AM = (1 + s_m) .* s_c;
S_AM = t2f(s_AM, NFFT);
%低通滤波
wc=3*2*pi*fm/fs; %解调器低通滤波器截止频率,3fm
lbf_hn=fir1(32,wc/pi); %低通滤波器系统函数,FIR滤波器
freqz(lbf_hn, 1, 1024, fs);
%% 需要同学自己编写相干解调
s_cor_temp = 2 * s_AM .* s_c;
S_cor_temp = t2f(s_cor_temp, NFFT);
dem_cor_out = filter(lbf_hn, 1, s_cor_temp);
S_cor_out = t2f(dem_cor_out, NFFT);
%% 需要同学自己编写非相干解调
s_uncor_temp = hilbert(s_AM); % 非相干乘法器输出
S_uncor_temp = t2f(s_uncor_temp, NFFT); % 非相干乘法器频域
dem_uncor_out = filter(lbf_hn, 1, s_uncor_temp); % 非相干输出
S_uncor_out = t2f(dem_uncor_out, NFFT); % 非相干频域
%% 画图,至少需要呈现这些图,并能与DSB调制方式、SSB调制方式进行比较
figure;
subplot(3,2,1)
plot(t,s_m); grid on;
xlabel('t(s)')
title('调制信号')
xlim([0, 5]);
subplot(3,2,3)
plot(t,s_c); grid on;
xlabel('t(s)')
title('载波信号')
xlim([0, 5]);
subplot(3,2,5)
plot(t,s_AM);grid on;
xlabel('t(s)')
title('AM信号')
xlim([0, 5]);
subplot(3,2,2)
plot(f,abs(S_m));grid on;
xlabel('f(Hz)')
title('调制信号的幅度-频率特性')
xlim([-4 4]);
subplot(3,2,4)
plot(f,abs(S_c));grid on;
xlabel('f(Hz)')
title('载波信号的幅度-频率特性')
xlim([-15 15]);
subplot(3,2,6)
plot(f,abs(S_AM));grid on;
xlabel('f(Hz)')
title('AM信号的幅度-频率特性')
xlim([-15 15]);
%相干解调信号过程
figure;
subplot(2,2,1);
plot(t, s_cor_temp);grid on;
xlabel('t(s)');xlim([0, 10]);
title('相干解调通过乘法器后时域');
subplot(2,2,3);
plot(t, dem_cor_out);grid on;
xlabel('t(s)');xlim([0, 10]);
title('相干解调输出');
subplot(2,2,2);
plot(f, abs(S_cor_temp));grid on;
xlabel('f(HZ)');xlim([-25, 25]);
title('相干解调通过乘法器后频域');
subplot(2,2,4);
plot(f, abs(S_cor_out));grid on;
xlabel('f(HZ)');xlim([-10, 10]);
title('相干解调输出频域');
%非相干解调信号过程
figure;
subplot(2,2,1);
plot(t, abs(s_uncor_temp));grid on;
xlabel('t(s)');xlim([0, 10]);
title('非相干解调通过乘法器后时域');
subplot(2,2,3);
plot(t, abs(dem_uncor_out));grid on;
xlabel('t(s)');xlim([0, 10]);
title('非相干解调输出');
subplot(2,2,2);
plot(f, abs(S_uncor_temp));grid on;
xlabel('f(HZ)');xlim([-25, 25]);
title('非相干解调通过乘法器后频域');
subplot(2,2,4);
plot(f, abs(S_uncor_out));grid on;
xlabel('f(HZ)');xlim([-10, 10]);
title('非相干解调输出频域');
以下是老师没有发的代码,主要是 AMDSBSSB 调制信号的时域波形和频谱图等
% 调制信号、载波信号时域图
clc, clear, clf;
dt = 0.00001; % 设定步长
T = 0.01; % 设定时长
t = 0: dt: T - dt; % 设定时间
figure;
fm = 1000; % 基带
wm = 2 * pi * fm;
mt = cos(wm * t); % 调制信号
subplot(211);
plot(t, mt);
title('调制信号');
fc = 10000; % 载波中心频率
wc = 2 * pi * fc;
ct = cos(wc * t); % 载波信号
subplot(212);
plot(t, ct);
title('载波信号');
% DSB已调信号、AM已调信号、调制信号时域图
figure;
sDSB = mt .* ct; % DSB 已调信号
subplot(311);
plot(t, sDSB);
title('DSB 已调信号');
xlabel('t(s)');
ylim([-2 2]);
A = 1;
sAM = (A + mt) .* ct; % AM 已调信号
subplot(312);
plot(t, sAM);
title('AM 已调信号');
xlabel('t(s)');
ylim([-2 2]);
subplot(313);
plot(t, mt); % 调制信号
title('调制信号');
xlabel('t(s)');
ylim([-2 2]);
% 不同信号频谱(无噪声)
figure;
subplot(321);
[s, fmt] = T2F(t, mt);
plot(s, abs(fmt));
xlabel('f(kHz)');
title('调制信号频谱');
xlim([-0, 15000]);
subplot(322);
[s, fct] = T2F(t, ct);
plot(s, abs(fct));
xlabel('f(kHz)');
title('载波信号频谱');
xlim([-0, 15000]);
subplot(323);
[s, fdsb] = T2F(t, sDSB);
plot(s, abs(fdsb));
xlabel('f(kHz)');
title('DSB已调信号频谱');
xlim([-0, 15000]);
subplot(324);
[s, fam] = T2F(t, sAM);
plot(s, abs(fam));
xlabel('f(kHz)');
title('AM已调信号频谱');
xlim([-0, 15000]);
subplot(325);
sUSB = 0.5 * (mt .* cos(wc * t) - imag(hilbert(mt)) .* sin(wc * t)); % SSB 上边带
[s, fusb] = T2F(t, sUSB);
plot(s, abs(fusb));
xlabel('f(kHz)');
title('SSB已调信号,上边带频谱');
xlim([-0, 15000]);
subplot(326);
sLSB = 0.5 * (mt .* cos(wc * t) + imag(hilbert(mt)) .* sin(wc * t)); % SSB 下边带
[s, flsb] = T2F(t, sLSB);
plot(s, abs(flsb));
xlabel('f(kHz)');
title('SSB已调信号,下边带频谱');
xlim([-0, 15000]);
% 解调器输出(无噪声)
figure;
yt = sAM .* 2 .* ct; % 乘法器输出
[f1, sf1] = T2F(t, yt); % 傅里叶变换
[t_cor_dem_, cor_dem] = lpf(f1, sf1, 2 * fm); % 低通滤波,得到相关解调信号
[f2, sf2] = T2F(t_cor_dem_, cor_dem); % 傅里叶变换
subplot(311);
plot(f1, abs(sf1));
xlabel('f(kHz)');
title('解调乘法器输出信号频谱');
xlim([0, 50000]);
subplot(312);
plot(f2, abs(sf2));
xlabel('f(kHz)');
title('解调器输出信号频谱');
xlim([0, 50000]);
subplot(313);
plot(mt);
xlabel('t(s)');
title('解调器输出信号');
% 不同相位偏移DSB解调
figure;
yt = sDSB .* 2 .* cos(wc * t + pi / 8); % 乘法器输出
[f, sf] = T2F(t, yt); % 傅里叶变换
[t_cor_dem_, cor_dem] = lpf(f, sf, 2 * fm); % 低通滤波,得到相关解调信号
subplot(221);
plot(t_cor_dem_, cor_dem);
title('解调器输出信号,解调载波相差pi/8');
xlabel('t(s)');
yt = sDSB .* 2 .* cos(wc * t + pi / 4); % 乘法器输出
[f, sf] = T2F(t, yt); % 傅里叶变换
[t_cor_dem_, cor_dem] = lpf(f, sf, 2 * fm); % 低通滤波,得到相关解调信号
subplot(222);
plot(t_cor_dem_, cor_dem);
title('解调器输出信号,解调载波相差pi/4');
xlabel('t(s)');
yt = sDSB .* 2 .* cos(wc * t + pi / 3); % 乘法器输出
[f, sf] = T2F(t, yt); % 傅里叶变换
[t_cor_dem_, cor_dem] = lpf(f, sf, 2 * fm); % 低通滤波,得到相关解调信号
subplot(223);
plot(t_cor_dem_, cor_dem);
title('解调器输出信号,解调载波相差pi/3');
xlabel('t(s)');
yt = sDSB .* 2 .* cos(wc * t + pi / 2); % 乘法器输出
[f, sf] = T2F(t, yt); % 傅里叶变换
[t_cor_dem_, cor_dem] = lpf(f, sf, 2 * fm); % 低通滤波,得到相关解调信号
subplot(224);
plot(t_cor_dem_, cor_dem);
title('解调器输出信号,解调载波相差pi/2');
xlabel('t(s)');
axis([0, 0.01, -0.5, 0.5]);
% 实验扩展1、AM和DSB信号的功率谱的区别是什么?
% 百度答案:
% AM为普通振幅调制,DSB为双边带调制。
% 相同点:
% (1)都是振幅调制。
% (2)AM调制和双边带DSB调制所占带宽基本相同。
% 主要不同点:
% (1)包络不同。AM波的包络正比于调制信号f(t),而DSB波的包络则正比于|f(t)|。
% (2)DSB调制存在反相。既DSB信号的高频载波相位在调制电压零交点处(调幅电压正负交替时)要突变180度。DSB信号的相位反映了调制信号的极性。因此,严格的讲DSB信号已非单纯的振幅调制信号,而是既调幅又调相的信号。
% (3)AM调制有调幅度,而DSB则不存在调幅度的说法。
% (4)DSB调制功率利用率高于AM。这是由于DSB信号不含载波。
% 实验扩展2、采用相干解调时,接收端的本地载波与发送载波同频不同相时,对解调性能有何影响?
% 相位差越接近垂直,解调器输出的解调信号幅度和原信号相差越大