基于Matlab的SSB信号调制和解调(内附源码)

news/2025/1/3 17:40:36/

详细原理可参考课设报告:基于matlab的SSB信号调制、传输、解调的仿真-行业报告文档类资源-CSDN下载

调制采用了滤波法和相移法。
代码中有注释,无子函数,可以直接运行。
压缩包中包含了具体的课设报告,里面有详细的原理说明,运行截图、结果分析等。

matlab代码和运行结果如下:

%信号参数设置
%设置基带信号为100Hz,载波信号为1kHz
fm=100;fc=10^3;    %信号频率fm,载波频率fc
Fs=10^4;     %采样频率Fs
wc=2*pi*fc;
wm=2*pi*fm;
T = 1/Fs; % 采样间隔
L=2*10^4; % 信号长度
t = (0:L-1)*T ; 
f = Fs*(0:(L/2))/L;

%基带信号时域
sm=cos(wm*t);
figure('Name','基带信号');
subplot(211);
plot(t,sm);
title('基带信号时域');
xlabel('t');
axis([0 1 -2 2]);
grid on


%基带信号频域
S1=fft(sm);
P1b=abs(S1/L);
%得到单边
P1a = P1b(1:L/2+1);
P1a(2:end-1) = 2*P1a(2:end-1);
subplot(212);
plot(f,P1a);      %SSB信号频域波形
xlabel('Frequency(HZ)');
title('基带信号频域波形 ');
axis([0 150 0 1])
grid on;

%载波信号
sc=cos(wc*t);
figure('Name','载波信号');
subplot(211);
plot(t,sc);
title('载波信号时域');
xlabel('t');
axis([0 1 -2 2]);
grid on
%频域
Sc=fft(sc);
Pcb=abs(Sc/L);
%得到单边
Pca = Pcb(1:L/2+1);
Pca(2:end-1) = 2*Pca(2:end-1);
subplot(212);
plot(f,Pca);      %频域波形
xlabel('Frequency(HZ)');
title('载波信号频域波形 ');
axis([500 1500 0 1])
grid on;

%调制
%滤波法
% 先得到一个DSB信号, 即将调制信号与载波信号相乘
s2 = cos(wc*t).*sm;
%频域图
S2=fft(s2);
P2b=abs(S2/L);
%得到单边
P2a = P2b(1:L/2+1);
P2a(2:end-1) = 2*P2a(2:end-1);
figure('name','滤波法'); 
subplot(211);
plot(f,P2a);      %滤波法调制信号频域波形
title('生成的DSB信号');
axis([850 1200 0 1])

% 低通滤波
fp1=[800 1000];fs1=[700 1100];
Fs2=Fs/2;
Wp=fp1/Fs2; Ws=fs1/Fs2;
Rp=1; Rs=30;
[n,Wn]=cheb2ord(Wp,Ws,Rp,Rs);
[b1,a1]=cheby2(n,Rs,Wn);
s3=filter(b1,a1,s2);%经过filter滤波之后得到的数据y则是经过带通滤波后的信号数据
%频域图
S3=fft(s3);
P3b=abs(S3/L);
%得到单边 
P3a = P3b(1:L/2+1);
P3a(2:end-1) = 2*P3a(2:end-1);
subplot(212);
plot(f,P3a);      %滤波法调制信号频域波形
axis([850 1200 0 1])
title('低通滤波变成SSB信号') ;
grid on ;

%相移法
%SSB调制信号频域
figure('name','相移法');
%使用
s4=modulate(sm,fc,Fs,'amssb')/2;       %对调制信号进行调制
S4 = fft(s4);
P4b = abs(S4/L);
%得到单边 
P4a = P4b(1:L/2+1);
P4a(2:end-1) = 2*P4a(2:end-1);
plot(f,P4a);      %相移法调制信号频域波形
axis([850 1200 0 1])
title('相移法生成SSB信号') ;
grid on;


%模拟传输,对信号进行加噪,将已调信号嵌入方差为 0.1 的高斯白噪声中。
%对信号进行加噪
cur = size(s4); 
s5 = s4 + 0.5*randn(size(t));
S5=fft(s5);
P5b = abs(S5/L); 
P5a = P5b(1:L/2+1);
P5a(2:end-1) = 2*P5a(2:end-1);
figure('name','传输-加噪');
plot(f,P5a);     % 加噪后频域波形
axis([500 1000 0 1])
xlabel('Frequency(HZ)');
title('加噪频域波形 ');
grid on;


% 带通滤波
% 带通范围:890~910Hz
fp1=[899,901];fs1=[890 905];
Fs2=Fs/2;
Wp=fp1/Fs2; Ws=fs1/Fs2;
Rp=1.1; Rs=10;
[n,Wn]=cheb2ord(Wp,Ws,Rp,Rs);
[b1,a1]=cheby2(n,Rs,Wn);
s6=filter(b1,a1,s5); %经过filter滤波之后得到的数据y则是经过带通滤波后的信号数据
S6=fft(s6);
P6b = abs(S6/L); 
P6a = P6b(1:L/2+1);
P6a(2:end-1) = 2*P6a(2:end-1);
figure('name','接收-带通滤波')
plot(f,P6a);     % 加噪后频域波形
axis([500 1000 0 1])
xlabel('Frequency(HZ)');
title('带通频域波形 ');
grid on;

%解调
figure('name','解调');
subplot(211);
%幅度解调,单边带。乘以 y频率正弦曲线并使用..fc应用五阶巴特沃斯低通滤波器filtfilt
%{
x = y.*cos(2*pi*fc*t);
[b,a] = butter(5,fc*2/fs);
x = filtfilt(b,a,x);
%}
s7=demod(s6,fc,Fs,'amssb');         %对SSB信号进行解调
S7=fft(s7);
P7b = abs(S7/L); 
P7a = P7b(1:L/2+1);
P7a(2:end-1) = 2*P7a(2:end-1);
plot(f,P7a);     % 解调后频域波形
axis([0 110 0 1])
xlabel('Frequency(HZ)');
title('解调频域波形 ');
grid on;
subplot(212);
plot(t,s7);                              %解调后的时域波形
title('解调后的时域波形');
xlabel('t');
subplot(2,1,2);
axis([0 1 -2 2]);
grid on;

figure('name','比较调制和解调')
subplot(211) ; 
plot(t,sm);
title('基带信号时域');
xlabel('t');
axis([0 1 -2 2]);
subplot(212);
plot(t,s7*4);                              %解调后的时域波形
title('解调后的时域波形');
xlabel('t');
axis([0 1 -2 2]);
grid on;


%计算系统性能
%SSB_6(fm,sm)
disp('计算系统性能')
%n0 = 5*10^-15    % 定义高斯白噪声的参数n0
%计算系统性能子函数
syms n0
B = fm; % 带宽
Ni = n0*B ;
No = 1/4*Ni; 
mo = 1/4*sm;
So = mean(mo.^2);
Si = 1/4*mean(sm.^2);
disp('输入信噪比:')
ans1 = Si./Ni % 输入信噪比
disp('输出信噪比:')
ans2 = So./No  % 输出信噪比
disp('制度增益')
Gssb = ans2./ans1  % 制度增益
 

运行结果:

 

 

 

 

 

 

 

 


http://www.ppmy.cn/news/783494.html

相关文章

p5面试题

面试题 1. python 的内存管理 引用计数,变量的赋值只是对对象的引用,删除一个变量就减少了一个引用。 垃圾回收,当对象的引用计数为0时,对象会被垃圾回收,释放内存。自动的垃圾回收是需要一定的阈值条件,…

舵机的相关原理与控制原理

舵机的相关原理与控制原理 在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。 舵机是一种位置(角度)伺服的驱…

Linux环境下批量执行队列任务

一,任务脚本 下面是一个玩具Python代码,从参数中读取城市和日期信息,在该城市该日期参数下进行数据挖掘 import sys arg sys.argv[1] city,date arg.split(" ") print(f"data mining task{city}, date{date}")python…

02-MySQL-基础篇-SQL通用语法及分类

SQL通用语法及分类 前言SQL通用语法SQL分类 前言 本篇来学习下SQL通用语法及分类 SQL通用语法 SQL语句可以单行或多行书写,以分号结尾。SQL语句可以使用空格/缩进来增强语句的可读性。MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。注释&…

MySQL基操例题

Ⅰ创建数据库使用create语句: create database 数据库名; Ⅱ创建表同理: create table if not exists 表名 ( 字段名 数据类型 主键 约束, 字段名 数据类型 主键 约束) 设置存储引擎和字符集; …

MySQL 分库分表方案,总结的非常好!

前言 公司最近在搞服务分离,数据切分方面的东西,因为单张包裹表的数据量实在是太大,并且还在以每天60W的量增长。之前了解过数据库的分库分表,读过几篇博文,但就只知道个模糊概念, 而且现在回想起来什么都是…

网络性能测试玛卡巴卡

测试拓扑设计:由DUT上的4个端口组成一个测试块,要求这4个端口必须具有相同的MOL。其中两个端口作为源发送端口,两个作为目标接受端口。 DUT100%负载 50%负载 接收端口1发送端口1 501负载 非拥塞100%负载 接收端口2测试设备 发送端口2 100%负载…