clc;
close all;
clear all;
% 20181120
% ----------------
% by 吕冬治
% -----------------
% 此程序用于现代通信原理中的
% 模拟线性调制部分双边带调幅中的
% 常规双边带调幅(AM)的仿真实现
% 仿真给出了调制与解调过程
% 并分析了在不同的信噪比的条件下
% 利用demod()函数实现解调的解调性能分析
%% 信号参数
fm = 1e3; % 调制信号频率
fc = 10e3; % 载波频率
fs = 200e3; % 采样频率
Am = 1; % 调制信号幅度
A = 2; % 直流分量
N = 1e3; % 采样点数
K = N-1;
n = 0:K;
f = n*fs/N; % 频率
t = 0:1/fs:K/fs; % 信号时长
wm = 2*pi*fm; % 调制信号角频率
wc = 2*pi*fc; % 载波信号角频率
thm = 0; % 起始相位
thc = 0;
%% 信号调制
yt = Am*cos(wm*t+thm); % 调制信号
fft_yt = abs(fft(yt));
figure(1)
subplot(211);
plot(t,yt);
xlabel('时间/s');
ylabel('幅值');
grid on;
title('频率为100Hz的调制信号LV');
subplot(212);
plot(f(1:N/2),fft_yt(1:N/2));
xlabel('频率/Hz');
ylabel('幅值');
grid on;
title('调制信号频谱');
y0 = A+yt; % 带有直流分量的调制信号
yc = cos(2*pi*fc*n/fs); % 载波信号
fft_yc = abs(fft(yc));
figure(2)
subplot(211);
plot(t,yc);
xlabel('时间/s');
ylabel('幅值');
grid on;
title('频率为10kHz的载波信号LV');
subplot(212);
plot(f(1:N/2),fft_yc(1:N/2));
xlabel('频率/Hz');
ylabel('幅值');
grid on;
title('载波信号频谱');
sig_AM = y0.*yc; % 已调制信号
fft_sig_AM = abs(fft(sig_AM));
figure(3)
subplot(211);
plot(t,sig_AM);
xlabel('时间/s');
ylabel('幅值');
grid on;
title('已调制信号LV');
subplot(212);
plot(f(1:N/2),fft_sig_AM(1:N/2));
xlabel('频率/Hz');
ylabel('幅值');
grid on;
title('已调制信号频谱');
%% 解调
sig = demod(sig_AM,fc,fs,'am'); % 对AM调制信号进行解调
fft_sig = abs(fft(sig)); % 对AM解调信号进行傅里叶变换
figure(4)
subplot(2,1,1);
plot(t,sig);
xlabel('时间/s');
ylabel('幅值');
axis([0 5e-3 0 2]);
grid on;
title('AM解调信号波形LV');
subplot(2,1,2);
plot(f(1:N/2),fft_sig(1:N/2));
xlabel('频率/Hz');
ylabel('幅值');
axis([0 1e5 0 500]);
grid;
title('AM解调信号频谱');
%% 加噪声
sig_noise_AM = awgn(sig_AM,3); % 添加信噪比为6dB的高斯白噪声
fft_sig_noise_AM = abs(fft(sig_noise_AM)); % 对AM解调信号进行傅里叶变换
sig_noise_AM2 = awgn(sig_AM,18); % 添加信噪比为15dB的高斯白噪声
fft_sig_noise_AM2 = abs(fft(sig_noise_AM)); % 对AM解调信号进行傅里叶变换
figure(5)
subplot(2,1,1);
plot(t,sig_noise_AM);
xlabel('时间/s');
ylabel('幅值');
grid on;
title('添加信噪比为3dB噪声后的AM信号LV');
subplot(2,1,2);
plot(f(1:N/2),fft_sig_noise_AM(1:N/2));
xlabel('频率/Hz');
ylabel('幅值');
grid;
title('添加信噪比为3dB噪声后的AM信号频谱');
figure(7)
subplot(2,1,1);
plot(t,sig_noise_AM2);
xlabel('时间/s');
ylabel('幅值');
grid on;
title('添加信噪比为18dB噪声后的AM信号LV');
subplot(2,1,2);
plot(f(1:N/2),fft_sig_noise_AM2(1:N/2));
xlabel('频率/Hz');
ylabel('幅值');
grid;
title('添加信噪比为18dB噪声后的AM信号频谱');
%% 解调
sig_noise = demod(sig_noise_AM,fc,fs,'am'); % 对AM调制信号进行解调
fft_sig_noise = abs(fft(sig_noise)); % 对AM解调信号进行傅里叶变换
sig_noise2 = demod(sig_noise_AM2,fc,fs,'am'); % 对AM调制信号进行解调
fft_sig_noise2 = abs(fft(sig_noise2)); % 对AM解调信号进行傅里叶变换
figure(6)
subplot(2,1,1);
plot(t,sig_noise);
xlabel('时间/s');
ylabel('幅值');
axis([0 5e-3 0 2]);
grid on;
title('添加3dB噪声后AM解调信号LV');
subplot(2,1,2);
plot(f(1:N/2),fft_sig_noise(1:N/2));
xlabel('频率/Hz');
ylabel('幅值');
axis([0 1e5 0 500]);
grid;
title('添加3dB噪声后AM解调信号频谱');
figure(8)
subplot(2,1,1);
plot(t,sig_noise2);
xlabel('时间/s');
ylabel('幅值');
axis([0 5e-3 0 2]);
grid on;
title('添加18dB噪声后AM解调信号LV');
subplot(2,1,2);
plot(f(1:N/2),fft_sig_noise2(1:N/2));
xlabel('频率/Hz');
ylabel('幅值');
axis([0 1e5 0 500]);
grid;
title('添加18dB噪声后AM解调信号频谱');