一、获取代码方式

获取代码方式1:
完整代码已上传我的资源: 【数字信号调制】基于matlab GUI FSK调制+解调【含Matlab源码 645期】

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

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

二、FSK简介

1 FSK时域信号
数字频率调制(FM)是利用载波的频率传输信息的一种调制方式,其中最简单的是二进制频移键控(2FSK)。FM分为非连续相位FSK和连续相位FSK(CPFSK),两者的区别在于码元转换时刻的载波相位是否连续。
2FSK信号波形如下图所示,信号可以看成是频载为f1和f2的两个振幅键控信号的合成,2FSK信号可表示为:

式中,

式中,A是载波振幅,Tb为数字码元周期,{bn}为所传送的数字序列。

相位连续的FSK信号在码元转换时刻的相位是连续的,波形如下图所示。

此时调频信号可以表示为:

式中,fc是未调载波的频率,\delta fd是频偏因子。当m(t)为归一化基带信号时,\delta fd为峰值频偏,令

式中,h为调制指数或频移指数。

2 相关系数与频谱特性
设FSK信号在一个码元期间内的波形为:

这两个信号波形的相关系数定义为:

式中,

则带入上式有:

通常

则相关系数简化为:

其波形变化图如下所示:

从图中可以看出,两个信号的相关系数在k*pi的时候为零,也就是说它们具有正交特性。

CPFSK信号的功率谱形状直接由调制指数h确定。当h=0.5时,功率谱曲线为单峰;当h=0.715时,功率谱曲线呈现双峰;当h=1时,功率谱曲线的双峰变成了两条线状谱,且每条线状谱所占的功率都是信号功率的1/4,与离散相位2FSK信号的功率谱曲线相同;当h>1时,双峰的距离逐渐增加。

3 非相干解调
3.1相乘微分型AFC环解调法
AFC环是一个负反馈系统,从电路结构上看,AFC环主要由三种结构形式,比较广泛的是相乘微分型AFC环路。其架构如下图所示:

如果接收信号与本振信号存在频差,则在一定时间间隔内必然存在相差,将鉴相器输出的相位误差信号微分后,得到反映频差的误差信号,此信号经环路滤波器平滑处理后,控制VCO/NCO的振荡频率向输入信号频率靠近,最终使得频差近似为零。
设输入信号

VCO输入信号



显然有

当输入信号为单载波信号时,

故有

上式反映了输入信号和VCO输出信号的频差。对于FSK信号来讲,上式即为调制信号,对其进行滤波判决,即可完成FSK信号的解调。

3.2 包络检波解调法
2FSK信号的包络检波法解调方框图如下,可以视为由两路2ASK解调电路组成。这里的两个带通滤波器起分路作用,用以分开两路2ASK信号。上支路对应


下支路对应

经包络检测后分别取出他们的包络m1(t)和m2(t)。将两路滤波后的包络信号相减,在经过抽样判决,当判决值大于等于0时,判决为1,否则判决为0;

4 相干解调原理
4.1最佳FSK相干解调器
最佳解调器结构如下图所示,在接收端产生一直信号s1(t)和s2(t)的波形,分别将其与输入波形y(t)在相乘器中相乘,再进行积分。在t=Tb时刻,将两积分器的结果取样,并在比较器中比较判决。因为解调器是对接收码元逐个进行处理的,故在每个码元的终止时刻,在取样之后要将积分器清零,以便接着处理下一个码元。

相干载波s1(t)和s2(t)通常需要采用载波锁相环路提取,位同步信号则需要专门的位同步锁相环路提取。

4.2 易于实现的FSK相干解调器
4.1中的结构难以实现,通常采用下图结构实现:

FSK相干解调与ASK相干解调相似,FSK只是在用带通滤波器将信号分成上下两路后,在判决输出前增加一个减法器即可。

三、部分源代码

function varargout = GUI_2FSK(varargin)
% GUI_2FSK MATLAB code for GUI_2FSK.fig
%      GUI_2FSK, by itself, creates a new GUI_2FSK or raises the existing
%      singleton*.
%
%      H = GUI_2FSK returns the handle to a new GUI_2FSK or the handle to
%      the existing singleton*.
%
%      GUI_2FSK('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in GUI_2FSK.M with the given input arguments.
%
%      GUI_2FSK('Property','Value',...) creates a new GUI_2FSK or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before GUI_2FSK_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to GUI_2FSK_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help GUI_2FSK% Last Modified by GUIDE v2.5 30-Nov-2018 14:09:53% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @GUI_2FSK_OpeningFcn, ...'gui_OutputFcn',  @GUI_2FSK_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 GUI_2FSK is made visible.
function GUI_2FSK_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 GUI_2FSK (see VARARGIN)% Choose default command line output for GUI_2FSK
handles.output = hObject;i=20;                %二级制基带数据个数
fc=1000;             %抽样频率
j=i*fc;
s=round(rand(1,i));     %产生二级制基带数
t=linspace(0,i,j);
f1=10;               %载波1频率
f2=30;               %载波2频率
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%产生基带信号
s1=t;
for n=1:iif s(n)<1;for m=j/i*(n-1)+1:j/i*ns1(m)=0;endelsefor m=j/i*(n-1)+1:j/i*ns1(m)=1;endend
ends2=t;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%基带信号求反for n=1:j;if s1(n)>=1;s2(n)=0;elses2(n)=1;endend;%figure(1);subplot(411);plot(t,s1);title('基带信号');axis([0,i,-1,2]);%subplot(412);plot(t,s2);title('基带信号求反');axis([0,i,-1,2]);F1=cos(2*pi*f1*t);    %载波信号1F2=cos(2*pi*f2*t);    %载波信号2%subplot(413);plot(t,F1);title('载波信号1');Fsk=s1.*F1+s2.*F2;    %2Fsk调制%figure(2);subplot(311);plot(t,Fsk);title('2FSK调制信号')  SNR_dB=15;          %定义信噪比
SNR=10^(SNR_dB/10);  %定义线性信噪比
Ps=1;                %发射功率
Pn=Ps/SNR;           %噪声方差
F3=cos(2*pi*f1*t+pi/4);
F4=cos(2*pi*f2*t+pi/4);
Fsk1=s1.*F3+s2.*F4;
t1=length(t);
z=sqrt(Pn/2)*randn(1,t1);
h=1;              %AWGN信道下,信道增益h=1
Fskh=Fsk1*h+z;       %通过AWGN信道后产生pi/4的相移
%subplot(312);plot(t,z);       %噪声波形        title('噪声波形')%subplot(313);plot(t,Fskh);title('通过信道加噪声后的接受信号');   axis([0,i,-1,1]);b1=fir1(101,[10/500 15/500]);    %设置带通滤波器参数
b2=fir1(101,[30/500 40/500]);
Fskh1=filter(b1,1,Fskh);              %经过带通滤波器后的信号
Fskh2=filter(b2,1,Fskh);
%figure(3);subplot(211);plot(t,Fskh1);title('经过带通滤波器b1后的波形');axis([0,i,-1,1]);%subplot(212);plot(t,Fskh2);title('经过带通滤波器b2后的波形');FskH1=Fskh1.*Fskh1;
FskH2=Fskh2.*Fskh2; %经过相乘器
%figure(4);subplot(211);plot(t,FskH1);title('经过相乘器后Fskh1的波形')%subplot(212);plot(t,FskH2);title('经过相乘器后Fskh2的波形')bn=fir1(101,[2/500 10/500]);   %设置低通滤波器参数
st1=filter(bn,1,FskH1);           %经过低通滤波器
st2=filter(bn,1,FskH2);%figure(5) ;subplot(211);plot(t,st1);title('经过低通滤波器bn后的波形')%subplot(212);plot(t,st2);title('经过低通滤波器bn后的波形')%判决
st1_sum=zeros(1,i);
st2_sum=zeros(1,i);
for p=1:i           %抽样判决,在每一个基带代码带宽内按抽样频率抽样并相加比较for j=1000*(p-1)+1:1000*pst1_sum(p)=st1_sum(p)+st1(j);st2_sum(p)=st2_sum(p)+st2(j);endif(st1_sum(p)>=st2_sum(p))s_est(p)=1;else  s_est(p)=0;end
ends3=t;                %解调后的基带信号
for n=1:iif s_est(n)<1;for m=j/i*(n-1)+1:j/i*ns3(m)=0;endelsefor m=j/i*(n-1)+1:j/i*ns3(m)=1;endend
end
%figure(6);subplot(211);plot(t,st);title('经过抽样判决器后的波形')%subplot(212);plot(t,Fskh);title('原始的波形');axis([0,i,-1,1]);%%%%%%%%%%%%%%%%%实际误码率曲线和理论误码率对比
PBSUM=0;
for n=1:10  %信噪比循环for m=1:1000     %蒙特卡洛循环SNR=n;
Ps=100;     %发射功率
Pn=Ps/SNR;
z=sqrt(Pn/2)*randn(1,t1);  %噪声方差
h=1;
Fskh=Fsk1*h+z;       %通过AWGN信道后产生pi/4的相移b1=fir1(101,[10/500 15/500]);
b2=fir1(101,[30/500 40/500]);  %设置带通参数
Fskh1=filter(b1,1,Fskh);
Fskh2=filter(b2,1,Fskh);            %经过带通滤波器后的信号
FskH1=Fskh1.*Fskh1;
FskH2=Fskh2.*Fskh2;          %经过相乘器

四、运行结果







五、matlab版本及参考文献

1 matlab版本
2014a

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

【数字信号调制】基于matlab GUI FSK调制+解调【含Matlab源码 645期】相关推荐

  1. 【光学】基于matlab GUI杨氏双缝干涉【含Matlab源码 001期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI杨氏双缝干涉[含Matlab源码 001期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费 ...

  2. 【人脸识别】基于matlab GUI人数统计【含Matlab源码 2121期】

    ⛄一.人数统计简介(附课程作业报告) 1 课题背景 本课题为基于matlab的人数统计系统.近年来,很多行业对人流信息有极大的需求,如汽车公交站,地铁站台,商场出入口等.通过人数统计系统可以方便.可靠 ...

  3. 基于SSM的仓库管理系统(含完整源码+论文)

    后端框架:SSM 数据库:MySQL 开发工具:IDEA/Eclipse 系统介绍:本系统是基于SSM框架进行设计,MySQL作为底层数据库,前端采用bootstrap 模块大致介绍:包括库存管理.出 ...

  4. 【条形码识别】基于matlab GUI二维条形码识别【含Matlab源码 607期】

    ⛄一.二维条形码识别简介 采用数字图像处理技术对二维条码进行识别, 是二维条形码识别中较常用的方法, 它在处理污损的条形码方面有光电识别方法无法比拟的优势.另外图像式识别方法对识别角度的要求没有光电识 ...

  5. 【数字信号】基于DTMF双音多频电话拨号仿真含Matlab源码

    1 简介 DTMF信号是音频电话中的拨号信号,本文介绍了基于MATLAB的DTMF信号产生与检测的流程,重点分析了DTMF信号检测中的戈泽尔算法原理及参数选择.​ 2 部分代码 t1='123A';t ...

  6. 【心电信号】基于matlab GUI心电信号预处理【含Matlab源码 938期】

    ⛄一.心电信号预处理方法简介 理论知识参考文献:心电信号预处理方法研究 ⛄二.部分源代码 function varargout = kaishi(varargin) gui_Singleton = 1 ...

  7. matlab svm 语音识别,【情感识别】基于matlab支持向量机(SVM)的语音情感识别【含Matlab源码 543期】...

    一.简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数 ...

  8. fsk调制解调实验报告 matlab,基于MATLAB的-FSK调制与解调-通信原理实验

    <基于MATLAB的-FSK调制与解调-通信原理实验>由会员分享,可在线阅读,更多相关<基于MATLAB的-FSK调制与解调-通信原理实验(2页珍藏版)>请在人人文库网上搜索. ...

  9. 【数字信号】基于matlab GUI多音双频(DTMF)拨号音频解码仿真系统【含Matlab源码 1084期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数字信号]基于matlab GUI多音双频(DTMF)拨号音频解码仿真系统[含Matlab源码 1084期] 点击上面蓝色字体,直接付费 ...

  10. 【数字信号】基于matlab GUI电话按键识别【含Matlab源码 2382期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数字信号]基于matlab GUI电话按键识别[含Matlab源码 2382期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

最新文章

  1. 【剑指Offer】23、二叉搜索树的后序遍历序列
  2. 搜索插入位置—leetcode35
  3. Java技术:为什么不推荐使用BeanUtils属性转换工具
  4. 基于nchan打造百万用户的聊天室
  5. JSP 简介(转载)
  6. linux中兴上网客户端,中兴新支点N-Print,简单高效Linux桌面操作系统网络打印方案...
  7. html 将光标移动到某行,如何将QTextBrowser(其中包含html表)的光标移动到PyQt5中的特定行?...
  8. python教程视频哪个好-Python教学视频哪个好?老男孩Python培训
  9. C语言电话薄登录系统,求助 哈稀表编电话薄程序(c语言) 算法
  10. 远程服务器返回错误 (411) 所需的长度。
  11. Jfinal的七牛云存储插件:qiniuPlugin for jfinal.
  12. Atlas初步了解 [转]
  13. 使用QT调用FFMPEG库部署到Android设备、完成视频音频应用开发
  14. 如何在阿里云上购买域名并备案Iot studio
  15. 把PC上的蓝牙适配器模拟成蓝牙GPS(转贴)
  16. 百度翻译API错误码大全(建议收藏)
  17. java 模拟天眼查登陆,模拟天眼查登陆问题
  18. 居然可以用jQuery实现360度汽车产品3D旋转展示酷炫特效 使用你的小鼠标来试试吧
  19. 成功解决data too long for column 'name' at row 1
  20. php中switch语句的理解,php中switch语句的使用详解

热门文章

  1. D 洛谷 P3602 Koishi Loves Segments [贪心 树状数组+堆]
  2. hdu 4128 Running relay (线性规划转半平面交)
  3. .NET CF获取当前dll及其调用程序的文件名和完全路径
  4. 卡尔曼滤波(Kalman filtering)算法学习小记
  5. This is why you don’t think you’re creative 你为什么会觉得自己没有创造力?
  6. 190120每日一句
  7. vs2013 mfc资源在另一个编辑器中打开
  8. Atitit 2019技术趋势与没落技术 目录 1.1. abcdAtitit 技术领域趋势 abcd研究总结AI(人工智能)BlockChain(区块链)、Cloud(云)、和Data(大数据)
  9. Atitit orm 之道 艾龙著 1. 一、ORM的由来 1 2. ORM的组成:      2 3.  常见的ORM框架:      3 4. 、ORM与数据持久化的关系 3 5. Atitit
  10. Atitit easyui翻页组件与vue的集成解决方案attilax总结