Matlab通信仿真系列——幅度调制之单边带调制SSB

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等
在这里插入图片描述
本节目录

一、单边带调制SSB
二、滤波法
1、滤波法生成单边带信号
2、滤波法的matlab仿真验证
三、相移法
1、相移法生成单边带信号
2、相移法的matlab仿真验证
四、Matlab源码
1、滤波法的matlab仿真验证源码
2、相移法的matlab仿真验证源码
3、SSB信号的解调仿真源码

本节内容
一、单边带调制SSB

DSB信号的上、下两个边带是完全对称的,都携带了调制信号的全部信息,因此仅传输其中一个边带即可,这种只传输一个边带的通信方式称为单边带通信。单边带信号的产生方式通常有两种,一是滤波法,二是相移法。
二、滤波法
1、滤波法生成单边带信号
产生SSB信号最直观的方法是让双边带信号通过一个边带滤波器,保留所需要的一个边带,滤除不要的边带。
在这里插入图片描述

LSSB调制,即下边带调制,将滤波器的H(ω)设计成理想低通滤波器图b,可以取出下边带信号频谱。
USSB调制,即上边带调制,将滤波器的H(ω)设计成理想高通滤波器图a,可以取出上边带信号频谱。
在这里插入图片描述

SSB信号的带宽是DSBSC信号和AM信号带宽的1/2,和消息信号带宽相同,即Bssb=fH,SSB信号的功率为Pssb=Ps/4,Ps为消息信号功率。
2、滤波法的matlab仿真验证

matlab代码示例:
消息信号是[-3 3]均匀分布的随机整数,
产生的时间间隔为1/10s,
用LSSB和USSB方法调制载波cos2πfct。
fc=100,0≤t≤10;求:
①消息信号和已调信号的频谱
②已调信号的功率和消息信号的功率

在这里插入图片描述

仿真图形与上述理论图形一致。
功率计算中Pc_low=0.9928;Pc_high=0.9810;Ps=3.93;Ps/4=0.9825
两种方式滤波器存在一定得到差异,SSB信号的功率为P≈Ps/4。
在这里插入图片描述

三、相移法
1、相移法生成单边带信号

在这里插入图片描述

2、相移法的matlab仿真验证

matlab代码示例:
消息信号是[-3 3]均匀分布的随机整数,
产生的时间间隔为1/10s,
用移相法方法调制载波cos2πfct,
形成LSSB和USSB信号。fc=100,0≤t≤10;求:
①消息信号和已调信号的频谱
②已调信号的功率和消息信号的功率

在这里插入图片描述
在这里插入图片描述

功率计算中Pc_low=0.9389;Pc_high=0.9389;Ps=3.81;Ps/4=0.9525
移相法得到的LSSB和USSB信号功率一致,SSB信号的功率为P≈Ps/4。
在这里插入图片描述

四、SSB信号的解调仿真
SSB信号是抑制载波的已调信号,它的包络不能直接反映调制信号的变化,需要采用相干解调。
在这里插入图片描述

上式中,信号通过低通滤波器后,后两项将被滤除,正比于消息信号的低频分量m(t)/4被解调出来。

matlab代码示例:
消息信号是[-3 3]均匀分布的随机整数,
产生的时间间隔为1/2s,
用相移法调制载波cos2πfct,
生成USSB和LSSB信号。fc=300,0≤t≤5;求:
①用同步检波解调该信号,
低通滤波器的截止频率为100Hz,增益为4,
绘制原始信号和解调信号
②调制信号通过awgn信道,信噪比为20dB,
绘制解调后的信号与原始信号

在这里插入图片描述
在这里插入图片描述

五、Matlab源码
1、滤波法的matlab仿真验证源码

clear all;
clc;
%信号抽样时间间隔
ts=0.0025
%时间矢量
t=0:ts:10-ts;
%抽样频率
fs=1/ts;
%fft的频率分辨率
df=fs/length(t);
%生成随机数种子的消息序列
msg=randi([-3 3],100,1);
%扩展成取样信号形式
msg1=msg*ones(1,fs/10);
msg2=reshape(msg1.',1,length(t));
%求消息信号的频谱
Pm=fft(msg2)/fs;
f=-fs/2:df:fs/2-df;
subplot(6,1,1);
plot(f,fftshift(abs(Pm)));
title('消息信号频谱');
axis([-200 200 0 5]);
%载波频率
fc=100;
%已调信号
Sdsb=msg2.*cos(2*pi*fc*t);
%已调信号的频谱
Pdsb=fft(Sdsb)/fs;
%低通滤波器的截止频率
f_stop=100;
n_stop=floor(f_stop/df);
%设计低通滤波器
Hlow=zeros(size(f));
Hlow(1:n_stop)=1;
Hlow(length(f)-n_stop+1:end)=1;
%双边带信号通过低通滤波器,获得下边带信号
Plssb=Pdsb.*Hlow;
subplot(6,1,2);
plot(f,fftshift(abs(Pdsb)));
title('Pdsb信号频谱');
axis([-200 200 0 5]);
subplot(6,1,3);
plot(f,fftshift(abs(Hlow)));
title('Hlow信号频谱');
axis([-200 200 0 2]);
subplot(6,1,4);
plot(f,fftshift(abs(Plssb)));
title('LSSB信号频谱');
axis([-200 200 0 5]);
%高通滤波器的截止频率
f_stop=100;
n_stop=floor(f_stop/df);
%设计高通滤波器
Hhigh=zeros(size(f));
Hhigh(n_stop:length(f)-n_stop+1)=1;
%双边带信号通过高通滤波器,获得上边带信号
Pussb=Pdsb.*Hhigh;
subplot(6,1,5);
plot(f,fftshift(abs(Hhigh)));
title('H_high信号频谱');
axis([-200 200 0 2]);
subplot(6,1,6);
plot(f,fftshift(abs(Pussb)));
title('USSB信号频谱');
axis([-200 200 0 5]);

Slssb=real(ifft(Plssb))*fs;
Sussb=real(ifft(Pussb))*fs;
%Slssb已调信号功率
Pc_low=sum(abs(Slssb).^2)/length(Slssb);
%Sussb已调信号功率
Pc_hign=sum(abs(Sussb).^2)/length(Sussb);
%消息信号功率
Ps=sum(abs(msg2).^2)/length(msg2);

2、相移法的matlab仿真验证源码

clear all;
clc;
%信号抽样时间间隔
ts=0.0025
%时间矢量
t=0:ts:10-ts;
%抽样频率
fs=1/ts;
%fft的频率分辨率
df=fs/length(t);
%生成随机数种子的消息序列
msg=randi([-3 3],100,1);
%扩展成取样信号形式
msg1=msg*ones(1,fs/10);
msg2=reshape(msg1.',1,length(t));
%求消息信号的频谱
Pm=fft(msg2)/fs;
f=-fs/2:df:fs/2-df;
subplot(3,1,1);
plot(f,fftshift(abs(Pm)));
title('消息信号频谱');
axis([-200 200 0 5]);
%载波频率
fc=100;
%同相分量
s1=0.5*msg2.*cos(2*pi*fc*t);  
%消息信号的Hilbert变换,imag虚部
hmsg=imag(hilbert(msg2));  
%正交分量
s2=0.5*hmsg.*sin(2*pi*fc*t);
%LSSB
Slssb=s1+s2;
Plssb=fft(Slssb)/fs;
%USSB
Sussb=s1-s2;
Pussb=fft(Sussb)/fs;
subplot(3,1,2);
plot(f,fftshift(abs(Plssb)));
title('LSSB信号频谱');
axis([-200 200 0 3]);
subplot(3,1,3);
plot(f,fftshift(abs(Pussb)));
title('USSB信号频谱');
axis([-200 200 0 3]);


%Slssb已调信号功率
Pc_low=sum(abs(Slssb).^2)/length(Slssb);
%Sussb已调信号功率
Pc_hign=sum(abs(Sussb).^2)/length(Sussb);
%消息信号功率
Ps=sum(abs(msg2).^2)/length(msg2);
3、SSB信号的解调仿真源码

clear all;
clc;
%信号抽样时间间隔
ts=0.0025
%时间矢量
t=0:ts:5-ts;
%抽样频率
fs=1/ts;
%fft的频率分辨率
df=fs/length(t);
f=-fs/2:df:fs/2-df;
%生成随机数种子的消息序列
msg=randi([-3 3],10,1);
%扩展成取样信号形式
msg1=msg*ones(1,fs/2);
msg2=reshape(msg1.',1,length(t));
subplot(5,1,1);
plot(t,msg2);
title('消息信号');
axis([0 5 -5 5]);
%载波频率
fc=300;
%同相分量
s1=0.5*msg2.*cos(2*pi*fc*t);  
%消息信号的Hilbert变换,imag虚部
hmsg=imag(hilbert(msg2));  
%正交分量
s2=0.5*hmsg.*sin(2*pi*fc*t);
%LSSB
Slssb=s1+s2;
%USSB
Sussb=s1-s2;
%LSSB 相干解调
y=Slssb.*cos(2*pi*fc*t);
%LSSB 解调后的频谱
Y=fft(y)./fs;
%USSB 相干解调
y1=Sussb.*cos(2*pi*fc*t);
%USSB 解调后的频谱
Y1=fft(y1)./fs;
%低通滤波器的截止频率
f_stop=100;
n_stop=floor(f_stop/df);
%设计低通滤波器
Hlow=zeros(size(f));
Hlow(1:n_stop)=4;
Hlow(length(f)-n_stop+1:end)=4;
%LSSB 解调信号通过低通滤波器
DEM=Y.*Hlow;
%USSB 解调信号通过低通滤波器
DEM1=Y1.*Hlow;
%最终得到的解调信号LSSB
dem=real(ifft(DEM))*fs;
%最终得到的解调信号USSB
dem1=real(ifft(DEM1))*fs;
subplot(5,1,2);
plot(t,dem);
title('无噪声的解调信号LSSB');
axis([0 5 -5 5]);
subplot(5,1,3);
plot(t,dem1);
title('无噪声的解调信号USSB');
axis([0 5 -5 5]);
%LSSB调制信号经过awgn信道
y3=awgn(Slssb,20,'measured');
%相干解调
y4=y3.*cos(2*pi*fc*t);
%解调后的频谱
Y2=fft(y4)./fs;
%解调信号通过低通滤波器
DEM3=Y2.*Hlow;
%最终得到的解调信号
dem4=real(ifft(DEM3))*fs;
subplot(5,1,4);
plot(t,dem4);
title('信噪比为20dB的解调信号LSSB');
axis([0 5 -5 5]);
%USSB调制信号经过awgn信道
y5=awgn(Sussb,20,'measured');
%相干解调
y6=y5.*cos(2*pi*fc*t);
%解调后的频谱
Y3=fft(y6)./fs;
%解调信号通过低通滤波器
DEM4=Y3.*Hlow;
%最终得到的解调信号
dem5=real(ifft(DEM4))*fs;
subplot(5,1,5);
plot(t,dem5);
title('信噪比为20dB的解调信号USSB')
axis([0 5 -5 5]);
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SSB调制(Single Sideband Modulation)是一种调制技术,它可以将调制信号的频谱压缩到一个频中,从而提高频谱利用率。在Matlab中,可以使用相移法或滤波法来实现SSB调制。 相移法是一种常用的SSB调制方法。在Matlab中,可以使用modulate函数对调制信号进行调制,然后进行FFT变换得到调制信号的频域波形。具体的代码如下所示: ``` s4 = modulate(sm, fc, Fs, 'amssb') / 2; % 对调制信号进行调制 S4 = fft(s4); % 进行FFT变换 P4b = abs(S4 / L); % 得到单边频谱 P4a = P4b(1:L/2+1); P4a(2:end-1) = 2 * P4a(2:end-1); plot(f, P4a); % 绘制相移法调制信号的频域波形 ``` 滤波法是另一种常用的SSB调制方法。在Matlab中,可以先将调制信号与载波信号相乘得到DSB信号,然后进行FFT变换得到DSB信号的频域波形。具体的代码如下所示: ``` s2 = cos(wc * t) .* sm; % 将调制信号与载波信号相乘得到DSB信号 S2 = fft(s2); % 进行FFT变换 P2b = abs(S2 / L); % 得到单边频谱 P2a = P2b(1:L/2+1); P2a(2:end-1) = 2 * P2a(2:end-1); plot(f, P2a); % 绘制滤波法调制信号的频域波形 ``` 对于SSB信号的解调,可以使用demod函数进行解调。具体的代码如下所示: ``` s7 = demod(s6, fc, Fs, 'amssb'); % 对SSB信号进行解调 S7 = fft(s7); % 进行FFT变换 P7b = abs(S7 / L); % 得到单边频谱 P7a = P7b(1:L/2+1); P7a(2:end-1) = 2 * P7a(2:end-1); plot(f, P7a); % 绘制解调后的频域波形 ``` 以上是SSB调制与解调在Matlab中的实现方法。 #### 引用[.reference_title] - *1* *2* *3* [基于MatlabSSB信号调制和解调(内附源码)](https://blog.csdn.net/weixin_53043125/article/details/125914726)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小灰灰的FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值