余弦波产生
function signal = cosx(A, fc, t1, t2, fs)
t = t1 : 1/fs : t2;
signal = A * cos(2 * pi * fc * t);
end
A为振幅,fc为频率,t1、t2分别为截至时间,fs为采样率。
AM信号
AM信号产生
AM调制程序
function signal = AM(mt, ct)
A = abs(min(mt));
signal = (mt + 1.5 * A) .* ct;
end
mt为调制信号,ct为载波信号。
实验主程序
clc;clear;
%%参数设定
A1 = sqrt(2); A2 = 2;
fc1 = 10; fc2 = 1000;
fs = 10000;
t1 = -0.5; t2 = 0.5;
t = t1 : 1/fs : t2;
%% 调制信号与载波设定
mt = cosx(A1, fc1, t1, t2, fs);
ct = cosx(A2, fc2, t1, t2, fs);
%% 调制
yam = AM(mt, ct);
%% 解调
xam = coherent(yam, ct, 5 * fc1, fc2 / 3, fs);
%% 频谱分析
HM = fft(mt); %调制信号FFT
HS = fft(ct); %载波信号FFT
HAM = fft(yam); %已调信号FFT
% Hxam = fft(xam); %解调信号FFT
NF = length(HAM);
nf = 0 : 1/NF : 1 - 1/NF; f = nf * fs;
%% 画图
figure(1);
subplot(2, 3, 1);plot(t, mt,'LineWidth', 1.2);title('调制信号时域波形')
subplot(2, 3, 2);plot(t, ct,'LineWidth', 1.2);title('载波信号时域波形')
subplot(2, 3, 3);plot(t, yam,'LineWidth', 1.2);title('AM信时域波形')
subplot(2, 3, 4);plot(f, abs(HM),'LineWidth', 1.2);title('调制信号频谱')
subplot(2, 3, 5);plot(f, abs(HS),'LineWidth', 1.2);title('载波信号频谱')
subplot(2, 3, 6);plot(f, abs(HAM),'LineWidth', 1.2);title('AM信号频谱')
% figure(2);
% subplot(2, 1, 1);plot(t, xam);title('AM解调信号时域波形')
% subplot(2, 1, 2);plot(f, abs(Hxam));title('AM解调信号频谱')
实验结果
AM信号频谱含有纯载波分量,而只有两个边带分量携带信息,所以AM调制方式的功率利用率较低。
AM信号解调
滤波器设计
function Hd = LPF(fpass, fstop, fs)
%LPF 返回离散时间滤波器对象。
% MATLAB Code
% Generated by MATLAB(R) 23.2 and Signal Processing Toolbox 23.2.
% Generated on: 14-Aug-2024 14:31:40
% Butterworth Lowpass filter designed using FDESIGN.LOWPASS.
% All frequency values are in Hz.
Fs = fs; % Sampling Frequency
Fpass = fpass; % Passband Frequency
Fstop = fstop; % Stopband Frequency
Apass = 1; % Passband Ripple (dB)
Astop = 80; % Stopband Attenuation (dB)
match = 'stopband'; % Band to match exactly
% Construct an FDESIGN object and call its BUTTER method.
h = fdesign.lowpass(Fpass, Fstop, Apass, Astop, Fs);
Hd = design(h, 'butter', 'MatchExactly', match);
% [EOF]
相干解调程序
function signal = coherent(y, s, fpass, fstop, fs)
lowpass = LPF(fpass, fstop, fs);
signal = y .* s;
signal = filter(lowpass, signal);
end
实验主程序
clc;clear;
%%参数设定
A1 = sqrt(2); A2 = 2;
fc1 = 10; fc2 = 1000;
fs = 10000;
t1 = -0.5; t2 = 0.5;
t = t1 : 1/fs : t2;
%% 调制信号与载波设定
mt = cosx(A1, fc1, t1, t2, fs);
ct = cosx(A2, fc2, t1, t2, fs);
%% 调制
yam = AM(mt, ct);
%% 解调
xam = coherent(yam, ct, 5 * fc1, fc2 / 3, fs);
%% 频谱分析
HM = fft(mt); %调制信号FFT
HS = fft(ct); %载波信号FFT
HAM = fft(yam); %已调信号FFT
Hxam = fft(xam); %解调信号FFT
NF = length(HAM);
nf = 0 : 1/NF : 1 - 1/NF; f = nf * fs;
%% 画图
figure(1);
subplot(2, 3, 1);plot(t, mt,'LineWidth', 1.2);title('调制信号时域波形')
subplot(2, 3, 2);plot(t, ct,'LineWidth', 1.2);title('载波信号时域波形')
subplot(2, 3, 3);plot(t, yam,'LineWidth', 1.2);title('AM信时域波形')
subplot(2, 3, 4);plot(f, abs(HM),'LineWidth', 1.2);title('调制信号频谱')
subplot(2, 3, 5);plot(f, abs(HS),'LineWidth', 1.2);title('载波信号频谱')
subplot(2, 3, 6);plot(f, abs(HAM),'LineWidth', 1.2);title('AM信号频谱')
figure(2);
subplot(2, 1, 1);plot(t, xam);title('AM解调信号时域波形')
subplot(2, 1, 2);plot(f, abs(Hxam));title('AM解调信号频谱')
实验结果
可看出解调信号中含有直流分量,可以理解为AM信号的调制信号必须恒为正值,所以AM的调制信号一定含有直流分量,所以解调后的信号也含有直流分量。
DSB信号
DSB信号产生
DSB调制程序
function signal = DSB(mt, ct)
signal = mt .* ct;
end
实验主程序
clc;clear;
%%参数设定
A1 = sqrt(2); A2 = 2;
fc1 = 10; fc2 = 1000;
fs = 10000;
t1 = -0.5; t2 = 0.5;
t = t1 : 1/fs : t2;
%% 调制信号与载波设定
mt = cosx(A1, fc1, t1, t2, fs);
st = cosx(A2, fc2, t1, t2, fs);
%% 调制
y = DSB(mt, st);
%% 解调
x = coherent(y, st, 5 * fc1, fc2 / 3, fs);
%% 频谱分析
HM = fft(mt); %调制信号FFT
HS = fft(st); %载波信号FFT
Hy = fft(y); %已调信号FFT
% Hx = fft(x); %解调信号FFT
NF = length(Hy);
nf = 0 : 1/NF : 1 - 1/NF; f = nf * fs;
%% 画图
figure(1);
subplot(2, 3, 1);plot(t, mt);title('调制信号时域波形')
subplot(2, 3, 2);plot(t, st);title('载波信号时域波形')
subplot(2, 3, 3);plot(t, y);title('DSB信时域波形')
subplot(2, 3, 4);plot(f, abs(HM));title('调制信号频谱')
subplot(2, 3, 5);plot(f, abs(HS));title('载波信号频谱')
subplot(2, 3, 6);plot(f, abs(Hy));title('DSB信号频谱')
% figure(2);
% subplot(2, 1, 1);plot(t, x);title('DSB解调信号时域波形')
% subplot(2, 1, 2);plot(f, abs(Hx));title('DSB解调信号频谱')
实验结果
DSB信号的频谱不含载波成分,所以功率利用率为1,所以DSB也称作抑制载波的调制方式,频谱成分由上下边带组成。
DSB信号解调
相干解调程序相同。
实验主程序
clc;clear;
%%参数设定
A1 = sqrt(2); A2 = 2;
fc1 = 10; fc2 = 1000;
fs = 10000;
t1 = -0.5; t2 = 0.5;
t = t1 : 1/fs : t2;
%% 调制信号与载波设定
mt = cosx(A1, fc1, t1, t2, fs);
st = cosx(A2, fc2, t1, t2, fs);
%% 调制
y = DSB(mt, st);
%% 解调
x = coherent(y, st, 5 * fc1, fc2 / 3, fs);
%% 频谱分析
HM = fft(mt); %调制信号FFT
HS = fft(st); %载波信号FFT
Hy = fft(y); %已调信号FFT
Hx = fft(x); %解调信号FFT
NF = length(Hy);
nf = 0 : 1/NF : 1 - 1/NF; f = nf * fs;
%% 画图
figure(1);
subplot(2, 3, 1);plot(t, mt);title('调制信号时域波形')
subplot(2, 3, 2);plot(t, st);title('载波信号时域波形')
subplot(2, 3, 3);plot(t, y);title('DSB信时域波形')
subplot(2, 3, 4);plot(f, abs(HM));title('调制信号频谱')
subplot(2, 3, 5);plot(f, abs(HS));title('载波信号频谱')
subplot(2, 3, 6);plot(f, abs(Hy));title('DSB信号频谱')
figure(2);
subplot(2, 1, 1);plot(t, x);title('DSB解调信号时域波形')
subplot(2, 1, 2);plot(f, abs(Hx));title('DSB解调信号频谱')
实验结果
DSB解调后的信号不含直流成分,因为实验中DSB的调制信号为纯交流信号,不含直流成分。
SSB信号
SSB信号产生
产生原理
SSB信号产生可以使用滤波法,也可以使用相移法,本实验使用相移法。
希尔伯特变换器:就是一个宽带相移器,将每个频率成分都相移pi/2。
具体操作,将调制信号和载波通过希尔伯特变换器后相乘得到y1,将调制信号和载波相乘得到y2,
y = y1 + y2得到保留下边带的SSB信号,y = y1 - y2得到保留上边带的SSB信号。
调制程序
function signal = SSB(mt, ct, mod)
sth = imag(hilbert(st));
mth = imag(hilbert(mt));
if mod == 0
signal = (1/2) * mt .* ct - (1/2) * mth .* sth;
end
if mod == 1
signal = (1/2) * mt .* ct + (1/2) * mth .* sth;
end
end
注意:matlab中的hilbert(x) 是得到信号x的解析信号,解析信号的虚部才是数学意义上信号x的希尔伯特变换。
实验主程序
%截图保存路径 H:\OneDrive\learn\experimental\principle of communication
clc;clear;
%%参数设定
A1 = sqrt(2); A2 = 2;
fc1 = 10; fc2 = 1000;
fs = 10000;
t1 = -0.5; t2 = 0.5;
t = t1 : 1/fs : t2;
%% 调制信号与载波设定
mt = cosx(A1, fc1, t1, t2, fs);
st = cosx(A2, fc2, t1, t2, fs);
%% 调制
mod = 0; %保留上边带
%mod = 1; %保留下边带
y = SSB(mt, st, mod);
%% 解调
x = coherent(y, st, 5 * fc1, fc2 / 3, fs);
%% 频谱分析
HM = fft(mt); %调制信号FFT
HS = fft(st); %载波信号FFT
Hy = fft(y); %已调信号FFT
% Hx = fft(x); %解调信号FFT
NF = length(Hy);
nf = 0 : 1/NF : 1 - 1/NF; f = nf * fs;
%% 画图
figure(1);
subplot(2, 3, 1);plot(t, mt);title('调制信号时域波形')
subplot(2, 3, 2);plot(t, st);title('载波信号时域波形')
subplot(2, 3, 3);plot(t, y);title('SSB信时域波形')
subplot(2, 3, 4);plot(f, abs(HM));title('调制信号频谱')
subplot(2, 3, 5);plot(f, abs(HS));title('载波信号频谱')
subplot(2, 3, 6);plot(f, abs(Hy));title('SSB信号频谱')
% figure(2);
% subplot(2, 1, 1);plot(t, x);title('SSB解调信号时域波形')
% subplot(2, 1, 2);plot(f, abs(Hx));title('SSB解调信号频谱')
实验结果
该实验保留上边带,所以已调信号只有 10 + 1000 Hz这一个中心频率而没有 1000 - 10 Hz这个中心频率。
SSB解调
采用相干解调
实验主程序
%截图保存路径 H:\OneDrive\learn\experimental\principle of communication
clc;clear;
%%参数设定
A1 = sqrt(2); A2 = 2;
fc1 = 10; fc2 = 1000;
fs = 10000;
t1 = -0.5; t2 = 0.5;
t = t1 : 1/fs : t2;
%% 调制信号与载波设定
mt = cosx(A1, fc1, t1, t2, fs);
st = cosx(A2, fc2, t1, t2, fs);
%% 调制
mod = 0; %保留上边带
%mod = 1; %保留下边带
y = SSB(mt, st, mod);
%% 解调
x = coherent(y, st, 5 * fc1, fc2 / 3, fs);
%% 频谱分析
HM = fft(mt); %调制信号FFT
HS = fft(st); %载波信号FFT
Hy = fft(y); %已调信号FFT
Hx = fft(x); %解调信号FFT
NF = length(Hy);
nf = 0 : 1/NF : 1 - 1/NF; f = nf * fs;
%% 画图
figure(1);
subplot(2, 3, 1);plot(t, mt);title('调制信号时域波形')
subplot(2, 3, 2);plot(t, st);title('载波信号时域波形')
subplot(2, 3, 3);plot(t, y);title('SSB信时域波形')
subplot(2, 3, 4);plot(f, abs(HM));title('调制信号频谱')
subplot(2, 3, 5);plot(f, abs(HS));title('载波信号频谱')
subplot(2, 3, 6);plot(f, abs(Hy));title('SSB信号频谱')
figure(2);
subplot(2, 1, 1);plot(t, x);title('SSB解调信号时域波形')
subplot(2, 1, 2);plot(f, abs(Hx));title('SSB解调信号频谱')
实验结果
解调信号同样没有直流成分,原因和DSB相同,但SSB信号占用的带宽为AM和DSB的0.5倍。