一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【数字信号调制】基于matlab GUI数字频带(ASK+PSK+QAM)调制仿真 【含Matlab源码 483期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、数字频带调制简介

1 绪论
调制:把消息信号寄托到载波的某个参数上,形成已调信号。
解调:调制的逆过程,从已调信号中恢复消息信号。

2 调制的目的
无线通信中,匹配信道特性,提高发射信号的频率,减小天线尺寸;频谱搬移,一条信道中同时传输多路信号,多路复用,提高信道利用率;扩展信号带宽,提高系统抗干扰能力;实现带宽与信噪比的互换(有效性和可靠性);利用电话线将PC机接入Internet,需要翻译模/数信号。

3 调制的分类
3.1 涉及的信号
消息信号,又称调制信号、基带信号;
载波:运载工具,常用的是正弦波、脉冲序列;
已调信号:受调载波,载有消息信号的信息,具有多种形式。
3.2 可以从不同角度分类
按调制信号的类型:模拟调制/数字调制
按已调信号的频谱结构:线性调制/非线性调制
按正弦载波的受调参量:幅度调制/频率调制/相位调制
按载波信号的类型:连续波调制/脉冲调制

4 幅度调制
4.1 一般模型
(1)理论基础:傅里叶变换
(2)一般模型
幅度调制:消息信号控制正弦载波的幅度。
方法:用消息信号通过相乘器乘上载波信号,再通过带通滤波器(时域卷积滤波器特性)。
举例:AM、DSB、SSB、VSB。

4.2 常规双边带调幅AM
t 域:已调信号的波形,调制/解调方法
f 域:已调信号的频谱,带宽B
AM信号的包络正比于消息信号的规律,因此可以采用简单的**包络检波方法(非相干解调)**解调;
频谱由载波、上边带USB、下边带LSB组成。带宽BAM=2fH;
幅度调制又称为线性调制;
应用:中短波调幅广播。
缺点:功率利用率低,最多达到50%

4.3 抑制载波双边带DSB
频谱由上边带USB、下边带LSB组成,没有了载波分量。带宽BDSB=BAM=2fH;
调制效率可达100%。
采用相干解调:
方法:用消息信号通过想乘器乘上相干载波信号,再通过低通滤波器(时域卷积滤波器特性)。
要求:载波同步(相干载波和载波信号同频同相)

4.4 单边带调制SSB
只传输一个边带,频带利用率高。带宽BSSB=BAM/2=fH;在频谱拥挤的通信场合,如短波通信、多路载波电话系统。低功耗特性。使用于移动通信系统。
缺点:设备复杂,存在技术难点,需要相干解调。

4.5 残留边带调制VSB
残留边带滤波器特性:在载频处具有互补对称特性;介于单边带与双边带之间的方案。

5 角度调制
正弦载波有三个参量:幅度、频率、相位。都可以携带消息信号。
其中,频率(FM)和相位(PM)都称为角度调制。
频率调制(FM)
幅度恒定,对瞬时相位对t求微分,得到瞬时角频率。
调频的频谱由载频分量wc两侧的无数多对边频wc±nwm组成,其幅度取决于mf;
理论上,调频的带宽无穷大;
实际中,用卡森公式计算FM带宽:BFM=2(mf+1)fm。fm为调制信号的最高频率
FM调制为非线性调制。FM解调也称鉴频 ,采用微分电路+包络检波实现。
FM的特点和应用
特点:幅度不变,包络恒定。
优势:抗噪能力强;
代价:占用较大信道带宽,频谱利用率低;
应用:高质量或信道噪声大的场合。如卫星通信、移动通信、微波通信等。

6 抗噪声性能
性能指标:输出信噪比、制度增益
输入信噪比:Ni=n0B。n0是噪声的单边功率谱密度,B=2fH是带宽,是基带带宽的2倍。

AM DSB SSB VSB(幅度调制)
相干解调器:线性解调,信号和噪声可以分开处理。
双边带和单边带调制的抗噪声性能相同。
小信噪比时,信号被干扰为噪声,产生门限效应。原因是包络检波的非线性解调作用。
信噪比固定。
FM(角度调制)
FM系统可以通过增加传输带宽来改善抗噪声性能(信噪比)。

总结
频谱利用率 SSB>VSB>DSB/AM>FM
抗噪声性能:FM>DSB/SSB>VSB>AM
设备复杂度:AM最简,DSB/FM次之,SSB最复杂

三、部分源代码

function varargout = digital_modulation(varargin)
%DIGITAL_MODULATION
%Author: leslieyao
%leslieyao2000@yahoo.com.cn
%Loja (Ecuador)
%For more information, visit: www.miniyao.cn
%Last Modified by GUIDE v2.5 25-Jan-2019 22:07:45% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @digital_modulation_OpeningFcn, ...'gui_OutputFcn',  @digital_modulation_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before digital_modulation is made visible.
function digital_modulation_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to digital_modulation (see VARARGIN)hold off;axes(handles.axes1);h=[1 1 0 1 0 0 1 1 1 0];hold off;bit=[];for n=1:2:length(h)-1;if h(n)==0 & h(n+1)==1se=[zeros(1,50) ones(1,50)];elseif h(n)==0 & h(n+1)==0se=[zeros(1,50) zeros(1,50)];elseif h(n)==1 & h(n+1)==0se=[ones(1,50) zeros(1,50)];elseif h(n)==1 & h(n+1)==1se=[ones(1,50) ones(1,50)];endbit=[bit se];endplot(bit,'LineWidth',1.5);grid on;axis([0 500 -1.5 1.5]);
%*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-axes(handles.axes3)hold off;fc=30;g=[1 1 0 1 0 0 1 1 1 0]; %modulanten=1;while n<=length(g)if g(n)==0tx=(n-1)*0.1:0.1/100:n*0.1;p=(1)*sin(2*pi*fc*tx);plot(tx,p,'LineWidth',1.5);grid on;hold on;else tx=(n-1)*0.1:0.1/100:n*0.1;p=(2)*sin(2*pi*fc*tx);plot(tx,p,'LineWidth',1.5);grid on;hold on;endn=n+1;end% Choose default command line output for digital_modulation
handles.output = hObject;% Update handles structure
guidata(hObject, handles);% UIWAIT makes digital_modulation wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = digital_modulation_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;% --- Executes on button press in random.
function random_Callback(hObject, eventdata, handles)
% hObject    handle to random (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
a=round(rand(1,10)); %genarar bits aleatorios
ran=[a(1),a(2),a(3),a(4),a(5),a(6),a(7),a(8),a(9),a(10)];
set(handles.bit1,'String',ran(1));
set(handles.bit2,'String',ran(2));
set(handles.bit3,'String',ran(3));
set(handles.bit4,'String',ran(4));
set(handles.bit5,'String',ran(5));
set(handles.bit6,'String',ran(6));
set(handles.bit7,'String',ran(7));
set(handles.bit8,'String',ran(8));
set(handles.bit9,'String',ran(9));
set(handles.bit10,'String',ran(10));%*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
handles.bits=ran;h=handles.bits;
axes(handles.axes1)
hold off;
bit=[];
for n=1:2:length(h)-1;if h(n)==0 & h(n+1)==1se=[zeros(1,50) ones(1,50)];elseif h(n)==0 & h(n+1)==0se=[zeros(1,50) zeros(1,50)];elseif h(n)==1 & h(n+1)==0se=[ones(1,50) zeros(1,50)];elseif h(n)==1 & h(n+1)==1se=[ones(1,50) ones(1,50)];endbit=[bit se];
end
plot(bit,'LineWidth',1.5);grid on;
axis([0 500 -1.5 1.5]);%*-*-*-*-*-*-*-*-*-*-*-*-
hold off;
axes(handles.axes3);
cod=get(handles.select_mod,'Value');
switch cod
%*-*-*-*Modulation ASK*-*-*-*-*-*-*-*-*case 1hold off;axes(handles.axes3)fc=30;g=handles.bits; %modulanten=1;while n<=length(g)if g(n)==0tx=(n-1)*0.1:0.1/100:n*0.1;p=(1)*sin(2*pi*fc*tx);plot(tx,p,'LineWidth',1.5);grid on;hold on;
%    axis([0 n*2/fc -3 3]);else tx=(n-1)*0.1:0.1/100:n*0.1;p=(2)*sin(2*pi*fc*tx);plot(tx,p,'LineWidth',1.5);grid on;hold on;endn=n+1;end%*-*-*-*-*-*-*-Modulation OOK*-*-*-*-*-*-*-*-*-case 2hold off;axes(handles.axes3);t=0:0.001:1;m=1;fc=30;g=handles.bits; %modulanten=1;while n<=length(g)tx=(n-1)*1/length(g):0.001:n*1/length(g);p=(g(n))*sin(2*pi*fc*tx);plot(tx,p,'LineWidth',1.5);hold on;axis([0 (n)*1/length(g) -1.5 1.5]);grid on;n=n+1;end
%*-*-*-*-*-*-*-Modulation BPSK*-*-*-*-*-*-*-*-*-*-*-case 3axes(handles.axes3)hold off;g=handles.bits;fc=10;n=1;while n<=length(g)if g(n)==0 %0 is -1tx=(n-1)*0.1:0.1/100:n*0.1;p=(-1)*sin(2*pi*fc*tx);plot(tx,p,'LineWidth',1.5);grid on;hold on;elsetx=(n-1)*0.1:0.1/100:n*0.1;p=(1)*sin(2*pi*fc*tx);plot(tx,p,'LineWidth',1.5);grid on;hold on;endn=n+1;end%*-*-*-*-*-Modulation QPSK-*-*-*-*-*case 4axes(handles.axes3)hold off;g=handles.bits;t=0:2*pi/99:2*pi;cp=[];sp=[];mod=[];mod1=[];for n=1:2:9;if g(n)==0 & g(n+1)==1;die=sqrt(2)/2*ones(1,100);die1=-sqrt(2)/2*ones(1,100);elseif g(n)==0 & g(n+1)==0;die=-sqrt(2)/2*ones(1,100);die1=-sqrt(2)/2*ones(1,100);elseif g(n)==1 & g(n+1)==0;die=-sqrt(2)/2*ones(1,100);die1=sqrt(2)/2*ones(1,100);elseif g(n)==1 & g(n+1)==1;die=sqrt(2)/2*ones(1,100);die1=sqrt(2)/2*ones(1,100);endc=cos(t);s=sin(t);cp=[cp die];    %Amplitude cosinosp=[sp die1];   %Amplitude sinomod=[mod c];    %cosino carrier (Q)mod1=[mod1 s];  %sino carrier   (I)endbpsk=cp.*mod+sp.*mod1;plot(bpsk,'LineWidth',1.5);grid on;title('QPSK modulation')axis([0 500 -1.5 1.5]); %-*-*-*-*Modulation 8PSK*-*-*-*-*-*-*-case    5axes(handles.axes3)hold off;g=[handles.bits 0 0];t=0:2*pi/149:2*pi;cp=[];sp=[];mod=[];mod1=[];bit=[];
for n=1:3:length(g);if g(n)==0 & g(n+1)==1 & g(n+2)==1die=cos(pi/8)*ones(1,150);die1=sin(pi/8)*ones(1,150);se=[zeros(1,50) ones(1,50) ones(1,50)];elseif g(n)==0 & g(n+1)==1 & g(n+2)==0die=cos(3*pi/8)*ones(1,150);die1=sin(3*pi/8)*ones(1,150);se=[zeros(1,50) ones(1,50) zeros(1,50)];elseif g(n)==0 & g(n+1)==0  & g(n+2)==0die=cos(5*pi/8)*ones(1,150);die1=sin(5*pi/8)*ones(1,150);se=[zeros(1,50) zeros(1,50) zeros(1,50)];elseif g(n)==0 & g(n+1)==0  & g(n+2)==1die=cos(7*pi/8)*ones(1,150);die1=sin(7*pi/8)*ones(1,150);se=[zeros(1,50) zeros(1,50) ones(1,50)];elseif g(n)==1 & g(n+1)==0  & g(n+2)==1die=cos(-7*pi/8)*ones(1,150);die1=sin(-7*pi/8)*ones(1,150);se=[ones(1,50) zeros(1,50) ones(1,50)];elseif g(n)==1 & g(n+1)==0  & g(n+2)==0die=cos(-5*pi/8)*ones(1,150);die1=sin(-5*pi/8)*ones(1,150);se=[ones(1,50) zeros(1,50) zeros(1,50)];elseif g(n)==1 & g(n+1)==1  & g(n+2)==0die=cos(-3*pi/8)*ones(1,150);die1=sin(-3*pi/8)*ones(1,150);se=[ones(1,50) ones(1,50) zeros(1,50)];elseif g(n)==1 & g(n+1)==1  & g(n+2)==1die=cos(-pi/8)*ones(1,150);die1=sin(-pi/8)*ones(1,150);se=[ones(1,50) ones(1,50) ones(1,50)];endc=cos(t);s=sin(t);cp=[cp die];    %Amplitude cosinosp=[sp -die1];   %Amplitude sinomod=[mod c];    %cosino carrier (Q)mod1=[mod1 s];  %sino carrier   (I)
end

四、运行结果

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.

【数字信号调制】基于matlab GUI数字频带(ASK+PSK+QAM)调制仿真 【含Matlab源码 483期】相关推荐

  1. 【图像加密】基于matlab GUI正交拉丁方置乱+混沌图像加密解密【含Matlab源码 636期】

    ⛄一.正交拉丁方置乱及混沌系统简介 0 引言 随着通讯技术的飞速发展, 越来越多的领域需要传送数字图像信号, 因此信息的传送安全问题显得越来越重要.通常应用于数字图像通信的两种保护技术为:数字水印技术 ...

  2. 【图像加密】基于matlab GUI正交拉丁方置乱算法图像加解密【含Matlab源码 182期】

    ⛄一.正交拉丁方置乱简介 0 引言 随着通讯技术的飞速发展, 越来越多的领域需要传送数字图像信号, 因此信息的传送安全问题显得越来越重要.通常应用于数字图像通信的两种保护技术为:数字水印技术和图像加密 ...

  3. 【时钟识别】基于matlab GUI Hough变换指针式时钟识别【含Matlab源码 2085期】

    ⛄一.简介 1 仪表示数识别流程 基于刻度准确定位的指针式仪表示数识别方法包括预处理.指针检测.刻度定位.油位计表盘中心拟合与仪表读数计算5个部分.该方法无需预先添加任何表盘信息,算法流程如图2所示. ...

  4. 【车辆计数】基于matlab GUI背景差分法道路行驶多车辆检测【含Matlab源码 1911期】

    ⛄一.背景差分法和帧间差分法的车辆运动目标检测简介 1 引言 运动目标检测是从图像序列中检测运动目标.通过运动目标检测可以得到图像中的运动目标,获取图像中的运动信息.运动目标检测在医学辅助诊断.航天航 ...

  5. 【图像融合】基于matlab GUI高斯金字塔+拉普拉斯金字塔彩色图像融合【含Matlab源码 1506期】

    一.区域分割图像融合简介 图像的分解 对源图像进行融合时,首先对图像进行分解,利用拉普拉斯金字塔分解,先对图像进行高斯金字塔分解,然后再进行拉普拉斯金字塔分解. 1 高斯金字塔分解 记源图像为G0,G ...

  6. 【图像加密】基于matlab GUI Logistic混沌图像加密与解密【含Matlab源码 1216期】

    ⛄一.混沌图像加密与解密简介 混沌系统图像加密解密理论部分参考链接: 基于混沌系统的图像加密算法设计与应用 ⛄二.部分源代码 %加密程序 function b=jiami(a,s,h) [m1,n1] ...

  7. Matlab之在城市环境中基于动态占用网格图的的运动规划仿真(附源码)

    目录 一.介绍 二.设置场景和基于网格的跟踪器 三.设置运动规划器 四.结果 五.总结 六.程序 此示例演示如何使用 Frenet 参考路径在城市驾驶场景中执行动态重新规划.在此示例中,将使用本地环境 ...

  8. 基于Matlab生成并可视化多架飞机轨迹仿真(附源码)

    目录 一.介绍 二.插值器选择 三.航点建设 四.场景生成 4.1 轨迹可视化 4.2 轨迹 1 4.3  轨迹 2 4.4  轨迹 3 4.5  轨迹 4 4.6  轨迹 5 4.7  轨迹 6 五 ...

  9. 基于Matlab使用 System 对象模拟惯性测量单元测量仿真(附源码)

    目录 一.默认参数 二.硬件参数调优 三. 随机噪声参数调谐 四.环境参数调整 五.程序 此示例演示如何使用 System 对象模拟惯性测量单元 (IMU) 测量.IMU 可以包括单个传感器的组合,包 ...

  10. 基于Matlab多平台雷达网络生成雷达检测仿真(附源码)

    目录 一.带旋转雷达阵列的机载平台 二.带有两个雷达阵列的机载平台 三.带有矩形雷达阵列的地面平台 四.机载目标 五.雷达探测的生成 六.总结 七.程序 此示例演示如何从多平台雷达网络生成雷达检测.该 ...

最新文章

  1. Grafana 6.0正式发布!新增查询工作流,全新独立Gauge面板
  2. Linux sed Examples--转载
  3. mysql日期加减问题
  4. MySQL查询in操作 查询结果按in集合顺序显示(转)
  5. OpenCV实战【2】HOG+SVM实现行人检测
  6. PWN-PRACTICE-BUUCTF-25
  7. swoole 自定义eof 标记 带返回信息(自己修改)和 不带返回信息的原本demo
  8. 注意!恶意NPM包正在安装勒索软件和密码窃取木马
  9. CISCO路由器连接ADSL之PPPoE配置
  10. C++线程中packaged_tack
  11. 数据结构(一)、二叉树(BT),二叉查找树(BST),平衡二叉树(AVL树)
  12. win10 添加照片查看器
  13. 实验六、contentprovider实验+SQLite数据库的实现
  14. C语言打印杨辉三角的多种方法
  15. NR Qos 映射DRB
  16. 通过快递鸟如何接入申通快递电子面单
  17. 心得体会标题大全_心得体会题目大全
  18. Object.assign()用法小结
  19. SQL报错Every derived table must have its own alias
  20. leafLet入门教程兼leafLet API中文文档参考

热门文章

  1. MySQL/mariadb从删库到跑路——备份
  2. Linux查看端口占用进程
  3. Java自带的keytool命令
  4. 传智播客Java 关键字,标识符,注释
  5. 投稿期刊:机械人机交互图形图象交叉学科
  6. wampserver的下载与安装配置
  7. Atitit 并发技术的选项 attilax总结 艾龙 著 1. 三大并发模型 1 2. 从可读性考虑 优先使用 并行工作者 多线程模式,不要使用异步流水线模式 2 2.1. 多线程模式方便全局
  8. Atitit 文员招募规范 attilax总结
  9. Atitit 财政赤字解决方案
  10. Atitit 信息链(Information Chain)的概念理解 attilax总结