一、为什么要引入双边带调制(DSB)?
AM信号可表示为:
其中, 就是载波分量,它是一个不携带任何信息的纯正弦波。 如果将直流Ac去掉,即可得到一种高调制效率的调制方式——DSB调制。此时,DSB信号的全部功率都用于信息传输,调制效率是100%。
二、DSB调制与解调的原理
AM(幅度调制)和DSB(双边带调制)密切相关,从表达式上对比两种调制方式更为直观。
DSB调制的表达式为:
与AM调制相比,DSB调制去掉了载波部分,只保留了调制信号,这意味着节省了功率,因为载波部分在接收时并不携带信息。 DSB调制的原理图如下图所示:
但DSB信号的包络不再与调制信号变化规律一致,解调时只能采用相干解调。DSB解调的原理图如下图所示:
三、matlab代码实现
1.DSB.m
% DSB调制解调过程
close all; clc;
%% 基本参数
fm = 100; %基带信号频率
T = 2; %基带信号时长
fs = 20000; %采样频率,满足奈奎斯特采样定理
dt = 1/fs; %采样间隔
N = T/dt; %采样点数
t = 0:dt:(N-1)*dt; %采样点的时间序列,作为横坐标
%% ******************调制信号时域波形******************
Am = 1;%基带信号幅值
mt = Am*cos(2*pi*fm*t); %基带信号时域表达式
figure(1); %创建新图像
subplot(3,2,1); %创建3×2的子图集合,显示在(1,1)位置
plot(t,mt,'Linewidth',1); %绘图,线宽为1
xlabel('时间/t');
ylabel('幅度');
title('调制信号时域波形');
axis([0,0.1,-1.1,1.1]); %横纵坐标范围[xmin,xmax,ymin,ymax]
%% ******************调制信号频域波形******************
[f,mf] = T2F(t,mt);
subplot(3,2,2);
plot(f,mf,'r','Linewidth',1);
xlabel('f/Hz');
ylabel('幅度');
title('调制信号的频谱');
axis([-150,150,-inf,inf]);
%% ******************载波信号时域波形******************
fc = 1000; %载波频率
zaibo = cos(2*pi*fc*t); %载波时域表达式
subplot(3,2,3);
plot(t,zaibo,'Linewidth',1);
xlabel('t/时间');
ylabel('幅度');
title('载波信号时域波形');
axis([0,0.01,-1.1,1.1]);
%% ******************载波信号频域波形******************
[f1,zaibof] = T2F(t,zaibo);
subplot(3,2,4);
plot(f1,zaibof,'r','Linewidth',1);
xlabel('f/Hz');
ylabel('幅度');
title('载波信号的频谱');
axis([-1200,1200,-inf,inf]);
%% ******************DSB波信号时域波形*****************
dsb = mt.*zaibo;
subplot(3,2,5);
plot(t,dsb,'Linewidth',1);
xlabel('t/时间');
ylabel('幅度');
title('DSB调制信号');
axis([0,0.02,-1.5,1.5]);
%% ******************DSB波信号频域波形*****************
[f2,dsbf] = T2F(t,dsb);
subplot(3,2,6);
plot(f2,dsbf,'r','Linewidth',1);
xlabel('f/Hz');
ylabel('幅度');
title('DSB波信号的频谱');
axis([-1500,1500,-inf,inf]);
%% ******************相干解调*****************
%% ****************已调信号与载波信号相乘的时域图***************
SNR = 20;
awgn(dsb,SNR,'measured'); %信道传输,考虑有噪声干扰
st = dsb.*zaibo;
figure(2);
subplot(2,1,1);
plot(t,st,'Linewidth',1);
xlabel('t/时间');
ylabel('幅度');
title('已调信号与载波信号相乘');
axis([0,0.02,-1.5,1.5]);
%% ****************已调信号与载波信号相乘的频谱图***************
[f3,stf] = T2F(t,st);
subplot(2,1,2);
plot(f3,stf,'r','Linewidth',1);
xlabel('f/Hz');
ylabel('幅度');
title('已调信号与载波相乘的频谱');
axis([-150,150,-inf,inf]);
%% ********************解调出来的信号******************
yf = lpf(f3,stf,2*fm); %低通滤波
[t,yt] = F2T(f3,yf); %做IFFT变换
figure(3);
subplot(2,1,1);
plot(t,2*yt,'Linewidth',1);
xlabel('t/时间');
ylabel('幅度');
title('解调出来的信号');
axis([0,0.1,-1.1,1.1]);
%% ***********************原信号***********************
subplot(2,1,2);
plot(t,mt,'g','Linewidth',1);
xlabel('t/时间');
ylabel('幅度');
title('原信号');
axis([0,0.1,-1.1,1.1]);
2.T2F.m
%傅里叶变换
function [f,mf] = T2F(t,mt)
N = length(t); %采样点数
T = t(end); %输入信号的时间最大值为T
df = 1/T; %频谱分辨率
f = -N/2*df:df:N/2*df-df; %频率分布,作频谱图的横坐标
mf = fft(mt); %做FFT
mf = T/N*fftshift(mf); %频谱搬移+归一化
3.F2T.m
%傅里叶逆变换(IFFT)
function [t,yt] = F2T(f,yf)
df = f(2)-f(1);
N = length(f);
fmax = (f(end)-f(1)+df); %不能像T2F里T=t(end)
%因为t是从0开始,
%但f是经过搬移的不是从0开始
dt = 1/fmax;
t = 0:dt:dt*(N-1);
yf = fftshift(yf); %千万别忘!将0-fs频谱搬到-fs/2-fs/2
yt = fmax*ifft(yf); %不要忘记归一化*fmax
yt = real(yt); %取实部
4.lpf.m
%低通滤波器
function yf = lpf(f,sf,B)
N = length(f); %采样点数
df = f(2)-f(1); %频率间隔
ym = zeros(1,N); %创建1×N的全零数组
xm = floor(B/df); %带宽/频率间隔,向下取整,计算需要的采样点数
xm_shift = [-xm:xm-1]+floor(N/2); % 因为前面做FFT将0频率搬移到中心处,
% 因此,低通低频频率相应地搬移fN/2,才是对应的频率点
ym(xm_shift) = 1; % 低通通过频率处幅度为1,其余为0,相当于理想低通
yf = ym.*sf; %信号经过理想低通滤波器
四、结果图
五、思考
1.注意区别F2T.m与T2F.m中fmax与T的求法
fmax = f(end)-f(1)+df ;
T = t(end) ;
t 我们设定起始点为0,因此时间长度为t 的终点。而 f 我们进行了搬移,起始点不为0,只能用差值来计算带宽。另外,还需注意末尾+df,将f(end)的值也包含进去。