完整word版,msk的调制解调MATLAB源代码
matlab中mskmod函数
matlab中mskmod函数MATLAB中的mskmod函数是用于生成最小频移键控(Minimum Shift Keying,MSK)调制信号的函数。
MSK是一种连续相位调制(CPM)技术,常用于数字通信系统中。
mskmod函数的语法为:matlab.y = mskmod(x,fc,fs,phasedev)。
其中,x是输入的数字信号序列,fc是载波频率,fs是采样率,phasedev是相位偏移。
mskmod函数将输入的数字信号序列进行MSK调制,并返回调制后的连续时间信号。
下面从多个角度来解释mskmod函数的参数和功能:1. 输入信号序列(x),mskmod函数接受一个数字信号序列作为输入。
该序列通常是一串离散的二进制数字,表示要传输的信息。
2. 载波频率(fc),fc参数指定了MSK调制中使用的载波频率。
它是一个标量值,通常以赫兹(Hz)为单位。
3. 采样率(fs),fs参数表示采样率,即每秒采样的样本数。
它是一个标量值,通常以赫兹(Hz)为单位。
采样率决定了数字信号在时间上的离散程度。
4. 相位偏移(phasedev),phasedev参数表示相位偏移,用于调制信号的相位调制指数。
它是一个标量值,通常以弧度为单位。
相位偏移决定了信号的相位变化速度。
5. 输出信号(y),mskmod函数返回一个连续时间的信号,表示经过MSK调制后的信号。
该信号可以通过调用plot函数进行绘制,以便观察调制后的波形。
总结起来,mskmod函数是MATLAB中用于生成最小频移键控调制信号的函数。
它接受输入信号序列、载波频率、采样率和相位偏移作为参数,并返回经过MSK调制后的连续时间信号。
这个函数在数字通信系统中应用广泛,可以用于模拟和分析MSK调制技术的性能。
MSK的调制解调原理
2Ts Ik cos(
Ik
cos(
t
2Ts
Ik cos(
)
) cos ct
t
2Ts
)
ak
差 分 编码
ck
串/并 变换
振荡
f
1 4Ts
振
荡
f fc
带 通 滤波
MSK 信号
sin(
t
2Ts
)
t
2Ts )
相移 90°
延迟 Ts
Qk
Qk sБайду номын сангаасn(
Qk sin(
t
2Ts
) sin ct
1 2Ts
(1.1-10) (1.1-11) (1.1-12) (1.1-13)
由此可得频率间隔为 f f 2 f 1 MSK 信号的调制指数为 h= fTs =
1 2
当取 N=1,m=0 时,MSK 信号的时间波形如图 1.1 所示
图 1.1 MSK 信号的时间波形 对第 k 个码元的相位常数 k 的选择应保证 MSK 信号相位在码元转换时刻是连续的。 根据这 一要求,由式(1.1-2)可以得到相位约束条件为:
差分编码(英文名称:differential encoding)指的是对数字数据流,除第一个元素外,将其中各元素都表示 为各该元素与其前一元素的差的编码。 对上述差分编码进行通信行业重新定义,如下: 通信中的差分编码,差分编码输入序列{an},差分编码输出序列{bn},二者都为{0、1}序列,则差分编码输 出结果为bn=an异或bn-1,并不是bn=an异或an-1(即所谓的:对数字数据流,除第一个元素外,将其中各 元素都表示为各该元素与其前一元素的差的编码。这么定义是不准确的。)。前者多用在2DPSK调制,后 者多用在MSK调制预编码。同时后者是码反变换器的数学表达式,即用来解差分编码用的。
MATLAB的MSK软件解调方法
一种基于 MATLAB的 MSK软件解调方法
(3)
Q ( t)
=
π uk co sxk sin 2Tb t
=
qk ·s ( t)
可以将 cos π t和 sin π t ,看作是 I支路和 Q
2 Tb
2 Tb
支路的加权波形 ,即 c ( t) 和 s ( t) ;而 co sxk 和 uk co sxk 看作是 I支路和 Q 支路的数据 ,即 ik 和 qk 。根据 uk 和 xk 的特点对 ik 和 qk 进行数学分析可以得到以下结
(7)
fs
由此可见 ,计算非线性相位分量 < ( i) 必须确知
载频 fc 。 3. 3 基于 MATLAB 的 M SK信号的解调
针对该合成波提取其相位信息如图 3中上图所
示 ,在一定的码元宽度内 ,相位变化的斜率是固定的 ,
并且斜率的极性与码的极性相对应 , (下转第 27页 )
B igC lassID = Request. Form ( "B igC lassID " ) if B igC lassID = 0 or B igC lassID = " " then %> < scrip t language = javascrip t >
移键控 ( FSK)和相移键控 ( PSK) 3 种 。在实际应用 中 ,都是采用这几种基本调制类型改进或综合而成 的技术 ,基本上可分为两类 :一类是线性调制技术 , 主要有相移键控 、四相相移键控 (QPSK) 、π /4 - 差分 四相相移键控 (π /4 - DQPSK) 和多电平相移键控 等 。这几种调制方式由于线性要求高 ,因此对设备 的要求较高 ,但它们可获得较高的频率利用率 。另 一类是恒定包络 (连续相位 )调制技术 ,主要有最小 频移键控 (M SK) 、高斯最小频移键控 ( GM SK) 、高斯 频移键控 ( GFSK)和受控调频 ( TFM )等 。
MSK调制解调
目录1 绪论 (1)1.1 数字通信的发展 (1)1.2研究MSK数字通信系统的意义 (1)1.3通信系统仿真的意义 (1)2 MSK系统调制解调原理 (3)2.1 MSK调制原理 (3)2.2 MSK解调原理 (5)2.3 MSK的抗噪声性 (6)2.4 MSK功率谱密度 (7)3 MATLAB仿真设计与系统分析 (9)3.1 MATLAB简介 (9).3.2 MSK信号的调制 (9)3.3 MSK解调实现 (10)3.4叠加噪声的MSK系统 (10)4 MSK系统分析 (11)4.1 MSK信号的时域调制解调分析 (11)4.2 MSK频域分析 (12)4.3 加噪声系统分析 (12)4.4误码率分析 (13)5 总结 (14)致谢 (15)参考文献: (16)附录:MSK信号调制解调的源程序代码 (17)1 绪论1.1 数字通信的发展通信按照传统的理解就是信息的传输与交换,为了传递消息,各种消息需要转换成电信号,消息与电信号之间必须建立单一的对应关系,否则在接收端就无法复制出原来的消息。
通常,消息被载荷到电信号的某一参量上,如果电信号的该参量携带着离散消息,则该参量必将是离散取值的。
这样的信号就称为数字信号。
如果电信号的参量连续取值,则称这样的信号为模拟信号。
按照信道中传输的是模拟信号还是数字信号,可以相应地把通信系统分为两类:数字通信系统和模拟通信系统。
自1844年5月24日莫尔斯在华盛顿和巴尔的摩之间发送世界上斯一份电报以来 ,电报通信已经经历了150多年。
但是长期以来,由于电报通信不如电话通信方便,作为数字通信主要形式的电报却比1876年贝尔发明的电话发展缓慢。
直到20世纪60年代已后,数字通信才日益兴旺起来,数字通信迅速发展的基本原因是它与模拟通信相比,更能适应对通信技术越来越高的要求。
第一数字传输抗干扰能力强,尤其是在中中继时,数字信号可以再生而消除噪声的积累;第二,传输差错可以控制,从而改善了传输的质量;第三,便于使用现代数字信号处理技术来对数字信息进行处理;第四,数字信息易于做高保密性的加密处理;第五,数字通信可以综合传递各种消息,使通信系统功能增强。
调制 解调 matlab
调制解调matlab在通信系统中,调制和解调是两个基本而重要的过程。
调制是将要传输的信息信号(通常称为基带信号)转化为适合在信道中传输的已调信号。
而解调则是接收端从已调信号中恢复出原始的信息信号。
Matlab是一款广泛应用的科学计算软件,提供了大量的工具箱和函数来支持调制与解调的实现和分析。
首先,对于调制过程,Matlab中的通信工具箱提供了多种调制方式,如幅度调制(AM)、频率调制(FM)和相位调制(PM)等。
用户可以通过调用相应的函数来实现不同类型的调制。
例如,使用ammod 函数可以实现幅度调制,fmmod函数可以实现频率调制,pmmod函数可以实现相位调制。
这些函数通常接受基带信号和调制参数作为输入,并输出已调信号。
在调制过程中,用户还可以自定义调制参数,如调制深度、调制频率等,以满足特定的需求。
此外,Matlab还支持多种调制方式的组合和级联,以实现更复杂的调制方案。
对于解调过程,Matlab同样提供了相应的解调函数,如amdemod函数用于幅度解调,fmdemod函数用于频率解调,pmdemod函数用于相位解调。
这些函数接受已调信号和解调参数作为输入,并输出恢复出的基带信号。
在解调过程中,用户需要注意与调制过程相对应的解调参数设置,以确保正确恢复出原始信号。
此外,Matlab还支持多种解调算法的实现,如非相干解调和相干解调等,用户可以根据实际需求选择合适的解调方式。
除了基本的调制和解调函数外,Matlab还提供了丰富的信号处理和分析工具,如频谱分析、时域分析、误码率分析等,帮助用户对调制和解调过程进行更深入的研究和优化。
总之,Matlab作为一款强大的科学计算软件,在调制和解调方面提供了丰富的功能和工具,使得用户可以方便地进行调制与解调的实现和分析。
通过合理利用Matlab的功能和工具,用户可以更加高效地进行通信系统的设计和优化,推动通信技术的发展和应用。
在未来,随着通信技术的不断演进和创新,Matlab将继续发挥重要作用,为用户提供更加便捷和高效的调制与解调解决方案。
BASK BPSK QPSK MSK调制解调原理以及Matlab代码
目录第一部分仿真的参数设置 (1)第二部分BASK调制与解调 (2)第三部分BPSK调制与解调 (6)第四部分QPSK调制与解调 (10)第五部分MSK调制与解调 (14)第六部分误码率随信噪比变化 (18)参考文献 (20)Matlab代码 (21)BASK (21)BPSK (24)QPSK (27)MSK (31)误码率随着信噪比变化 (35)第一部分仿真的参数设置仿真过程中应用到的参数设置以及相应的解释如表1所示[1]。
表1. 参数设置及其解释第二部分BASK调制与解调BASK调制解调的概要过程如图2.1所示。
图2.1 BASK调制解调原理图首先,信源随机产生1000个二进制(1/0)码并画出其频谱图,如图2.2所示。
图2.2 信源信号的时域波形和频谱图随后,用10Hz的载波频率去调制信源信号完成BASK调制,调制后的时域波形及其频谱如图2.3所示。
可以看到,调制后的频率确搬移到了10Hz处。
图2.3 BASK已调信号的时域波形与频谱图而后,已调信号进入信噪比为20dB的高斯信道。
接收端接收到经过信道信号,其时域波形和频谱如图2.4所示,可以看出分布在整个时间轴上的噪声信号。
图2.4 已调信号经过高斯信道后的时域波形和频谱图接收端接收到信号后,通入BASK解调模块,先乘上载波,获得一个拥有两个频率(10-10;10+10)的信号,其时域波形与频谱图如图2.5所示。
图2.5 BASK解调后的信号时域波形与频谱图而后通入低通滤波器滤除高频载波,时域波形与频谱图如图2.6所示,可以看出此时20Hz处无功率谱密度。
图2.6 通入LPF后的时域波形和频谱图最后将信号进行判决,与信源信号进行对比,如图2.7所示,其误码率为2.14%(如图6.6所示)。
图2.7 信宿恢复信号与信源产生信号波形图对比第三部分BPSK调制与解调BPSK与BASK调制与解调原理基本相同,主要的区别在于信源码是双极性码。
其基本原理如图3.1所示。
【谷速软件】matlab源码- MSKGMSK调制解调
1、MSK调制原理
MSK称为最小移频键控,是移频键控(FSK)的一种改进型。
这里“最小”指的是能以最小的调制指数(即0.5)获得正交信号,它能比PSK传送更高的比特速率。
二进制MSK信号的表达式可写为:
输入数据NRZ,然后通过CPLD电路实现差分编码及串/并转换,得到I k、Q k 两路数据。
波形选择地址生成器是根据接受到的数据(I k或Q k)输出波形选择的地址。
EEPROM(各种波形数据存储在其中)根据CPLD输出的地址来输出相应的数据,然后通过D/A转换器得到我们需要的基带波形,最后通过乘法器调制,运放求和就得到了我们需要的MSK调制信号。
在MSK调制中,成形信号取出原理为:由于成形信号只有两种波形选择,因此当前数据取出的成形信号只与它的前一位数据有关。
如果当前数据与前一位数据相同,输出的成形信号就相反(如果前一数据对应波形1,那么当前数据对应波形2);如果当前数据与前一位数据相反,输出的成形信号就相同(如果前一数据对应波形1,那么当前数据仍对应波形1)。
调制解调matlab仿真源码
一、概述调制解调技术是无线通信中的重要组成部分,它能够将数字信号转换成模拟信号,通过无线信道传输,并在接收端将模拟信号转换成数字信号。
在通信系统中,调制解调技术的准确性和稳定性对整个系统的性能起着至关重要的作用。
而Matlab作为一种强大的数学计算软件,其仿真源码能够帮助工程师们更好地理解调制解调原理,优化系统设计。
二、调制解调技术概述1. 调制技术调制技术是指利用某种载波信号来传送信息信号的过程。
常见的调制技术包括幅度调制(AM)、频率调制(FM)和相位调制(PM)等。
2. 解调技术解调技术是指将调制后的信号还原成原始信号的过程。
解调技术根据调制技术的不同可以分为幅度解调、频率解调和相位解调等。
三、调制解调Matlab仿真源码1. 调制仿真源码在Matlab中,可以利用Simulink工具箱进行调制仿真源码的编写。
对于AM调制可以通过搭建AM调制系统模型,设置载波频率、调制信号频率和调制指数等参数,然后进行仿真验证调制效果。
另外,Matlab还提供了丰富的调制函数库,如ammod()函数用于进行AM调制,fmmod()函数用于进行FM调制,pmmod()函数用于进行PM调制等。
工程师们可以通过编写简单的脚本文件调用这些函数,实现调制仿真源码的编写。
2. 解调仿真源码同样地,在Matlab中可以利用Simulink工具箱进行解调仿真源码的编写。
对于AM解调可以通过搭建AM解调系统模型,设置解调信号频率和解调环节参数,然后进行仿真验证解调效果。
Matlab还提供了一系列的解调函数库,如amdemod()函数用于进行AM解调,fmdemod()函数用于进行FM解调,pmdemod()函数用于进行PM解调等。
工程师们同样可以通过编写简单的脚本文件调用这些函数,实现解调仿真源码的编写。
四、调制解调Matlab仿真实例下面我们以AM调制解调为例,展示如何使用Matlab编写调制解调仿真源码。
1. AM调制仿真源码``` matlab设置参数fc = 1000; 载波信号频率fm = 100; 调制信号频率ka = 1; 调制指数t = 0:0.001:1; 时间范围生成调制信号m_t = cos(2*pi*fm*t); 调制信号c_t = cos(2*pi*fc*t); 载波信号s_t = (1+ka*m_t).*c_t; AM调制信号绘制调制信号图像subplot(3,1,1);plot(t,m_t);title('调制信号');绘制载波信号图像subplot(3,1,2);plot(t,c_t);title('载波信号');绘制AM调制信号图像subplot(3,1,3);plot(t,s_t);title('AM调制信号');```2. AM解调仿真源码``` matlab设置解调参数fs = xxx; 采样频率t = 0:1/fs:1; 时间范围s_t = (1+ka*m_t).*c_t; AM调制信号解调信号y = amdemod(s_t,fc,fs,0,ka);t = 0:1/fs:1; 时间范围绘制解调信号图像subplot(2,1,1);plot(t,m_t);title('调制信号');绘制解调信号图像subplot(2,1,2);plot(t,y);title('解调信号');```通过上述实例,我们可以清晰地了解到如何利用Matlab编写调制解调的仿真源码,从而深入理解调制解调原理,优化系统设计。
基于MATLAB的MSK调制解调实现
《基于MA TLAB的MSK调制解调实现》第1 页共15 页基于MATLAB的MSK调制解调实现摘要通过这次课程设计熟悉MATLAB中M文件的使用方法,并在掌握MSK调制解调原理的基础上,编写出MSK调制解调程序。
绘制出MSK信号解调前后在时域和频域中的波形,并观察解调前后频谱有何变化以加深对MSK信号解调原理的理解。
对信号叠加噪声,并进行解调,绘制出解调前后信号的时频波形,改变噪声功率进行解调,分析噪声对信号传输造成的影响。
该课程设计使用的平台为MATLAB,当输入随机序列后能够得到正确的仿真结果。
同时课本上的理论识得到验证。
关键词时频波形;M文件;MATLAB7.1;调制解调1 引言本课程设计主要用于MSK信号的调制与解调,同时进一步了解MSK信号的的解调调制原理以及其性能。
再次基础上进一步对信号叠加噪声,并绘制相应波形,同时进行分析。
1.1 课程设计目的利用MATLAB集成环境下的M文件,编写程序来实现MSK的调制解调,并绘制出解调前后的时域和频域波形及叠加噪声时解调前后的时频波形,根据运行结果和波形来分析该解调过程的正确性及信道对信号传输的影响。
通过这次课程设计进一步加深了我对最小二进制相移键控(MSK)调制解调性能的理解与掌握,同时将课堂上学到的理论知识用于实践。
增强了我在模拟仿真方面的能力,为以后系统开发和通信系统仿真打下了良好的基础。
1.2课程设计要求通过课程设计,掌握M文件的使用,同时进一步加深MSK调制解调的原理,在此基础上编写出MSK调制解调的程序。
并绘制出MSK信号解调前后在时域和频域中的波形,观察解调前后频谱有何变化以加深对MSK信号解调原理的理解。
通过这一些之后再加上噪声,对信号解调,并绘制出解调前后信号的时频波形,改变噪声功率进行解调,分析噪声对信号传输造成的影响。
1.3课程设计步骤先定义MSK输入信号的参数然后用dmod函数做输入的调制,之后画相应的频谱图。
再用dedmod做解调输出。
msk信号差分解调matlab代码
msk信号差分解调matlab代码MSK信号差分解调是通信领域中的一种重要技术,它能够有效地提高信号的传输质量和可靠性。
在实际的通信系统中,我们通常使用MATLAB来进行MSK信号差分解调的相关操作,本文将详细介绍MSK信号差分解调的MATLAB代码实现。
1. MSK信号的生成在进行MSK信号差分解调之前,我们首先需要生成MSK信号。
MSK 信号具有连续相位变化,采用2FSK调制方式,在带宽利用率相等的情况下,MSK信号的传输速度比2FSK信号快一倍。
在MATLAB中,我们可以使用“mskmod”函数来生成MSK信号。
下面是MATLAB代码示例:fs = 10000; %采样率为10000HzT = 1/fs; %采样周期fc = 1000; %载波频率为1000Hzfd = 500; %调制信号频率为500Hzt = 0:T:1-T; %信号持续时间为1sm = cos(2*pi*fd*t); %调制信号为正弦波x = mskmod(m,fc,fs); %生成MSK信号其中,fs为采样率,T为采样周期,fc为载波频率,fd为调制信号频率,t为信号的时间向量,m为调制信号,x为生成的MSK信号。
2. MSK信号的差分解调差分解调是一种常用的信号解调方式,其原理是取相邻两个信号样本之间的差值,从而消除相邻两个样本间的相位变化,使信号恢复为原始调制信号。
在MATLAB中,我们可以使用“diffdemod”函数来进行差分解调。
下面是MATLAB代码示例:y = diffdemod(x,fc,fs,pi/2); %差分解调其中,y为解调后得到的调制信号。
3. 结果的可视化为了更加直观地观察MSK信号和解调后得到的调制信号,我们可以使用MATLAB的“subplot”函数,将两张图像画在同一张画布上面。
下面是MATLAB代码示例:subplot(2,1,1); %在一张画布上面画两张图像plot(t,m); %绘制调制信号title('Modulated Signal');ylabel('Amplitude');grid on;subplot(2,1,2);plot(t,y); %绘制解调信号title('Demodulated Signal');xlabel('Time(s)');ylabel('Amplitude');grid on;通过上述MATLAB代码,我们就能够将生成的MSK信号进行差分解调,并将原始调制信号和解调信号的波形图像进行可视化比较。
msk调制matlab
fprintf(fid,'%d\t%e\t%f\t%f\t\n',ebn0,noe/nod,noe,nod); % fprintf: built in function
fclose(fid);
%******************** end of file ***************************
nod2=length(data1); % length: built in function
noe=noe+noe2;
nod=nod+nod2;
fprintf('%d\t%e\n',iii,noe2/nod2); % fprintf: built in function
end % for iii=1:nloop
% Updata fading counter
itnd1 = itnd1+ itnd0;
%********************* Add White Gaussian Noise (AWGN) **********************
[ich3,qch3]= comb(ifade,qfade,attn);% add white gaussian noise
%****************************** Data file ***********************************
ber = noe/nod;
fprintf('%d\t%d\t%d\t%e\n',ebn0,noe,nod,noe/nod); % fprintf: built in function
msk的调制解调MATLAB源代码
msk的调制解调MATLAB源代码function out = delay(data,n,sample_number)%data:延迟的数据%n:延迟码元个数%sample_number:码元采样个数out = zeros(1,length(data));out(n*sample_number+1:length(data)) =data(1:length(data)-n*sample_number);function [data_diff] = difference(data)%差分编码%********************************************************** ****************%data 输入信号%data_diff 差分编码后信号%********************************************************** ****************%--------------------------------------------------------------------------data_diff = zeros(1,length(data));data_diff(1) = 1 * data(1); %1为差分编码的初始参考值for i = 2:length(data)data_diff(i) = data_diff(i-1) * data(i);end%********************************************************** ****************function [signal_out,I_out,Q_out] =mod_msk(data,data_len,sample_number,Rb)%MSK基带调制%********************************************************** ****************% data 调制信号% data_len 码元个数% sample_number 每个码元采样点数% Rb 码元速率% signal_out 基带调制输出% I_out I路输出% Q_out Q路输出%********************************************************** ****************% data_len = 10; %码元个数% sample_number = 8; %采样点数% Rb = 16000; %码元速率% data1 = randint(1,data_len);% data = 2*data1-1; %传输的序列Tb = 1/Rb; %码元时间fs = Rb*sample_number; %采样速率%--------------------------------------------------------------------------%差分编码[data_diff] = difference(data);%********************************************************** ****************%--------------------------------------------------------------------------%并串转换,延时I(1) = 1; %fai0 = 0,cos(fai0) = 1for i = 1:2:data_lenQ(i) = data_diff(i);Q(i+1) = data_diff(i);endfor i = 2:2:data_lenI(i+1) = data_diff(i);I(i) = data_diff(i);endfor i = 1:sample_numberI1(i:sample_number:data_len*sample_number) =I(1:data_len);Q1(i:sample_number:data_len*sample_number) =Q(1:data_len);end%********************************************************** ****************%--------------------------------------------------------------------------%乘加权函数t=1/fs:1/fs:data_len*Tb;I_out = I1 .* cos(pi*t/2/Tb);Q_out = Q1 .* sin(pi*t/2/Tb);%********************************************************** ****************%--------------------------------------------------------------------------%调制信号产生signal_out = I_out + j*Q_out;%********************************************************** ****************% %--------------------------------------------------------------------------% %画图% subplot(221)% plot(data,'.-');title('MSK传输的数据');xlabel('时间');ylabel('幅度')% subplot(222)% plot(data_diff,'.-');title('差分后的数据');xlabel('时间');ylabel('幅度')% subplot(223)% plot(I1,'.-');title('加权前I路');xlabel('时间');ylabel('幅度');% subplot(224)% plot(Q1,'.-');title('加权前Q路');xlabel('时间');ylabel('幅度');%% figure(2)% subplot(221)% plot(cos(pi*t/2/Tb),'.-');title('加权函数cos(πt/(2Tb))');xlabel('时间');ylabel('幅度')% subplot(222)% plot(sin(pi*t/2/Tb),'.-');title('加权函数sin(πt/(2Tb))');xlabel('时间');ylabel('幅度')% subplot(223)% plot(I_out,'.-');title('加权后I路');xlabel('时间');ylabel('幅度');% subplot(224)% plot(Q_out,'.-');title('加权后Q路');xlabel('时间');ylabel('幅度');% %******************************************************** ******************function [signal_out,I_out,Q_out,phase] =mod_msk2(data,data_len,sample_number,Rb)%MSK基带调制%********************************************************** ****************% data 调制信号% data_len 码元个数% sample_number 每个码元采样点数% Rb 码元速率% signal_out 基带调制输出% I_out I路输出% Q_out Q路输出%**************************************************************************% data_len = 10; %码元个数% sample_number = 8; %采样点数% Rb = 16000; %码元速率% data1 = randint(1,data_len);% data = 2*data1-1; %传输的序列Tb = 1/Rb; %码元时间fs = Rb*sample_number; %采样速率%--------------------------------------------------------------------------%采样for i = 1:sample_numberdata_sample(i:sample_number:data_len*sample_number) = data;end%********************************************************** ****************%--------------------------------------------------------------------------%计算相位phase = zeros(1,data_len*sample_number);phase(1) = data_sample(1) * pi/2/sample_number;for i = 2:data_len*sample_numberphase(i) = phase(i-1) + data_sample(i-1) *pi/2/sample_number;end%********************************************************** ****************%--------------------------------------------------------------------------%I/QI_out = cos(phase);Q_out = sin(phase);%********************************************************** ****************%--------------------------------------------------------------------------%调制信号产生signal_out = I_out + j*Q_out;%********************************************************** ****************%MSK调制,差分解调方法一clear allclose all%--------------------------------------------------------------------------%参数设置data_len = 10000; %码元个数sample_number = 8; %采样个数Rb = 24000; %码元速率fc = 96000; %载波频率%********************************************************** ****************%--------------------------------------------------------------------------%随机产生传输信号data=rand_binary(data_len);%********************************************************** ****************%--------------------------------------------------------------------------%MSK基带调制[signal_out,I_out,Q_out] =mod_msk(data,data_len,sample_number,Rb);%********************************************************** ****************%--------------------------------------------------------------------------%中频搬移multi = fc/Rb;I_temp=interp(I_out,multi);Q_temp=interp(Q_out,multi);Fs=fc*sample_number;t=1/Fs:1/Fs:length(I_temp)*1/Fs;signal_i=I_temp.*cos(2*pi*fc*t);signal_q=Q_temp.*sin(2*pi*fc*t);signal_mod=I_temp.*cos(2*pi*fc*t)-Q_temp.*sin(2*pi*fc*t); %********************************************************** ****************%--------------------------------------------------------------------------%加噪声for SNR = 0:8signal_mod1 = awgn(signal_mod,SNR);%--------------------------------------------------------------------------%去载波N=300; % 滤波器的阶数为(N+1)F=[0,fc-1000,fc+1000,Fs/2]*2/Fs;A=[1,1,0,0];lpf=firls(N,F,A);[amp_lpf,w]=freqz(lpf);I_dem=signal_mod1.*cos(2*pi*fc*t)*2;I_dem=conv(I_dem,lpf);I_dem=I_dem(N/2+1:N/2+length(I_temp));Q_dem=signal_mod1.*sin(2*pi*fc*t)*2;Q_dem=conv(Q_dem,lpf);Q_dem=-Q_dem(N/2+1:N/2+length(I_temp));I_dem_out=zeros(1,length(I_dem)/multi); % 抽取 Q_dem_out=zeros(1,length(Q_dem)/multi);for i=1:length(I_dem_out)I_dem_out(i)=I_dem(multi*(i-1)+1);Q_dem_out(i)=Q_dem(multi*(i-1)+1);end;%****************************************************** ********************%--------------------------------------------------------------------------%差分解调demod_data = zeros(1,data_len);demod_data(1) = Q_dem_out(sample_number);for i = 2:data_lendemod_data(i) =Q_dem_out(i*sample_number)*I_dem_out((i-1)*sample_number) - I_dem_out(i*sample_number)*Q_dem_out((i-1)*sample_number); end%****************************************************** ********************%--------------------------------------------------------------------------%判决demod_data = demod_data>0;demod_data = 2*demod_data-1;%****************************************************** ********************%--------------------------------------------------------------------------%计算误码率[num,ber(SNR+1)]=symerr(demod_data,data);%****************************************************** ********************end%********************************************************** ****************%--------------------------------------------------------------------------%误码率曲线semilogy([0:8],ber,'r*-');%********************************************************** ****************%--------------------------------------------------------------------------%误码率理论值snr = 0:0.1:8;for i = 1:length(snr)snr1(1,i) = 10^(snr(1,i)/10);ps(1,i) = 1/2 * erfc(sqrt(snr1(1,i)));pe(1,i) = 2 * ps(1,i);endhold onsemilogy([0:.1:8],pe);%********************************************************** ****************%MSK调制,差分解调方法二clear allclose all%--------------------------------------------------------------------------%参数设置data_len = 10000; %码元个数sample_number = 8; %采样个数Rb = 24000; %码元速率fc = 96000; %载波频率%**************************************************************************%--------------------------------------------------------------------------%随机产生传输信号data=rand_binary(data_len);%********************************************************** ****************%--------------------------------------------------------------------------%MSK基带调制[signal_out,I_out,Q_out] =mod_msk(data,data_len,sample_number,Rb);%********************************************************** ****************%--------------------------------------------------------------------------%中频搬移multi = fc/Rb;I_temp=interp(I_out,multi);Q_temp=interp(Q_out,multi);Fs=fc*sample_number;t=1/Fs:1/Fs:length(I_temp)*1/Fs;signal_i=I_temp.*cos(2*pi*fc*t);signal_q=Q_temp.*sin(2*pi*fc*t);signal_mod=I_temp.*cos(2*pi*fc*t)-Q_temp.*sin(2*pi*fc*t); %********************************************************** ****************%--------------------------------------------------------------------------%加噪声for SNR = 0:8signal_mod1 = awgn(signal_mod,SNR);%--------------------------------------------------------------------------%去载波N=300; % 滤波器的阶数为(N+1)F=[0,fc-1000,fc+1000,Fs/2]*2/Fs;A=[1,1,0,0];lpf=firls(N,F,A);[amp_lpf,w]=freqz(lpf);I_dem=signal_mod1.*cos(2*pi*fc*t)*2;I_dem=conv(I_dem,lpf);I_dem=I_dem(N/2+1:N/2+length(I_temp));Q_dem=signal_mod1.*sin(2*pi*fc*t)*2;Q_dem=conv(Q_dem,lpf);Q_dem=-Q_dem(N/2+1:N/2+length(I_temp));I_dem_out=zeros(1,length(I_dem)/multi); % 抽取 Q_dem_out=zeros(1,length(Q_dem)/multi);for i=1:length(I_dem_out)I_dem_out(i)=I_dem(multi*(i-1)+1);Q_dem_out(i)=Q_dem(multi*(i-1)+1);end;%****************************************************** ********************%--------------------------------------------------------------------------%差分解调demod_data = zeros(1,data_len);demod_data(1) = Q_dem_out(sample_number);for i = 2:2:data_lendemod_data(i) =-I_dem_out(i*sample_number)*Q_dem_out((i-1)*sample_number); endfor i = 3:2:data_lendemod_data(i) =Q_dem_out(i*sample_number)*I_dem_out((i-1)*sample_number); end%****************************************************** ********************%--------------------------------------------------------------------------%判决demod_data = demod_data>0;demod_data = 2*demod_data-1;%****************************************************** ********************%--------------------------------------------------------------------------%计算误码率[num,ber(SNR+1)]=symerr(demod_data,data);%****************************************************** ********************end%********************************************************** ****************%--------------------------------------------------------------------------%误码率曲线semilogy([0:8],ber,'r*');%********************************************************** ****************%--------------------------------------------------------------------------%误码率理论值snr = 0:0.1:8;for i = 1:length(snr)snr1(1,i) = 10^(snr(1,i)/10);ps(1,i) = 1/2 * erfc(sqrt(snr1(1,i)));pe(1,i) = 2 * ps(1,i);endhold onsemilogy([0:.1:8],pe);%********************************************************** ****************%MSK调制,解调clear allclose all%--------------------------------------------------------------------------%参数设置data_len = 30000; %码元个数sample_number = 8; %采样个数Rb = 24000; %码元速率fc = 96000; %载波频率%********************************************************** ****************%--------------------------------------------------------------------------%随机产生传输信号data = rand_binary(data_len);%********************************************************** ****************%--------------------------------------------------------------------------%MSK基带调制[signal_out,I_out,Q_out] =mod_msk(data,data_len,sample_number,Rb);%********************************************************** ****************%--------------------------------------------------------------------------%中频搬移multi = fc/Rb;I_temp=interp(I_out,multi);Q_temp=interp(Q_out,multi);Fs=fc*sample_number;t=1/Fs:1/Fs:length(I_temp)*1/Fs;signal_i=I_temp.*cos(2*pi*fc*t);signal_q=Q_temp.*sin(2*pi*fc*t);signal_mod=I_temp.*cos(2*pi*fc*t)-Q_temp.*sin(2*pi*fc*t); % signal_mod1=real((I_temp+j*Q_temp).*exp(j*2*pi*fc*t)); %********************************************************** ****************%--------------------------------------------------------------------------%加噪声for SNR = 0:8signal_mod1 = 0.01 * awgn(signal_mod,SNR);%--------------------------------------------------------------------------%去载波N=300; % 滤波器的阶数为(N+1)F=[0,fc-1000,fc+1000,Fs/2]*2/Fs;A=[1,1,0,0];lpf=firls(N,F,A);[amp_lpf,w]=freqz(lpf);I_dem=signal_mod1.*cos(2*pi*fc*t)*2 .* cos(pi*t*Rb/2); I_dem=conv(I_dem,lpf);I_dem=I_dem(N/2+1:N/2+length(I_temp));Q_dem=signal_mod1.*sin(2*pi*fc*t)*2 .* sin(pi*t*Rb/2); Q_dem=conv(Q_dem,lpf);Q_dem=-Q_dem(N/2+1:N/2+length(I_temp));I_dem_out=zeros(1,length(I_dem)/multi); % 抽取 Q_dem_out=zeros(1,length(Q_dem)/multi);for i=1:length(I_dem_out)I_dem_out(i)=I_dem(multi*(i-1)+1);Q_dem_out(i)=Q_dem(multi*(i-1)+1);end;%****************************************************** ********************%--------------------------------------------------------------------------%解调,判决demod_data = zeros(1,data_len);for i = 1:data_lenI_dem1(i) = I_dem_out(i*sample_number)>0;Q_dem1(i) = Q_dem_out(i*sample_number)>0;endfor i = 1:2:data_lenm1(i) = Q_dem1(i);endfor i = 2:2:data_lenm1(i) = I_dem1(i);endm1 = 2*m1-1;%****************************************************** ********************%--------------------------------------------------------------------------%差分解码demod_data = zeros(1,data_len);demod_data(1) = 1 * m1(1);for i = 2:data_lendemod_data(i) = m1(i-1) * m1(i);end%****************************************************** ********************%--------------------------------------------------------------------------%计算误码率[num,ber(SNR+1)]=symerr(demod_data,data);%****************************************************** ********************end % /for snr%**************************************************************************%--------------------------------------------------------------------------%误码率曲线semilogy([0:8],ber,'r*-');%********************************************************** ****************%--------------------------------------------------------------------------%误码率理论值snr = 0:0.1:8;for i = 1:length(snr)snr1(1,i) = 10^(snr(1,i)/10);ps(1,i) = 1/2 * erfc(sqrt(snr1(1,i)));pe(1,i) = 2 * ps(1,i);endhold onsemilogy([0:.1:8],pe);%********************************************************** ****************function [data_binary,data_binary1]=rand_binary(data_len); %随机产生一个二进制序列作为仿真用的消息序列%********************************************************** ****************%data 序列长度%data_binary 产生的二进制序列%********************************************************** ****************%--------------------------------------------------------------------------data1=randn(1,data_len);data_binary=zeros(1,data_len); data_binary1=zeros(1,data_len); for i=1:data_lenif data1(i)<0data_binary(i)=-1;data_binary1(i)=0;elsedata_binary(i)=1;data_binary1(i)=1;endend。
细注释的matlab gmsk调制解调原 理仿真源码
细注释的matlab gmsk调制解调原理仿真源码GMSK (Gaussian Minimum Shift Keying) 是一种常用的调制解调技术,主要应用于数字通信系统中。
它采用高斯滤波器来平滑信号的频率转移,并且具有较低的带宽。
本文将介绍GMSK调制解调的原理,并给出MATLAB仿真源码。
GMSK调制的原理是将数字信号转换为连续相位频移键控信号,并通过高斯滤波器实现平滑转移。
具体步骤如下:1. 将数字信号进行差分编码,即将连续的比特流进行差分运算,得到符号流。
2. 将符号流进行高斯滤波,生成平滑的频率转移曲线。
3. 将频率转移曲线进行相位调制,得到连续相位频移键控信号。
GMSK解调的原理是将接收到的连续相位频移键控信号还原为数字信号。
具体步骤如下:1. 将接收到的信号进行频率解调,得到频率转移曲线。
2. 将频率转移曲线进行低通滤波,去除高频噪声。
3. 将滤波后的信号进行差分解码,得到解调后的数字信号。
下面给出MATLAB的GMSK调制解调的仿真源码:```MATLAB% GMSK调制解调仿真源码clear;clc;% 参数设置fs = 100e3; % 采样率T = 1/fs; % 采样周期Ts = 1e-3; % 符号周期fc = 10e3; % 载波频率BT = 0.3; % 带宽-符号时间积N = Ts/T; % 每个符号的采样点数M = 2; % 每个符号的比特数% 生成符号序列bits = randi([0 M-1], 1, 100); % 随机生成100个比特 symbols = bi2de(reshape(bits, M, length(bits)/M).', 'left-msb'); % 按照每M个比特组成一个符号% GMSK调制t = (0:T:(N*Ts)-T); % 时间序列s = gmskmod(symbols, fc, fs, BT, 'gray'); % GMSK调制 % GMSK解调r = gmskdemod(s, fc, fs, BT, 'gray'); % GMSK解调r_symbols = reshape(de2bi(r, M, 'left-msb').', 1, length(bits)); % 解调得到的比特流% BER计算num_errors = sum(bits ~= r_symbols);BER = num_errors / length(bits);% 结果显示fprintf('比特误码率(BER): %f', BER);```上述源码中,首先设置了相关的参数,比如采样率、符号周期等。
MSK调制解调
目录1 绪论 (1)1.1 数字通信的发展 (1)1.2研究MSK数字通信系统的意义 (1)1.3通信系统仿真的意义 (1)2 MSK系统调制解调原理 (3)2.1 MSK调制原理 (3)2.2 MSK解调原理 (5)2.3 MSK的抗噪声性 (6)2.4 MSK功率谱密度 (7)3 MATLAB仿真设计与系统分析 (9)3.1 MATLAB简介 (9).3.2 MSK信号的调制 (9)3.3 MSK解调实现 (10)3.4叠加噪声的MSK系统 (10)4 MSK系统分析 (11)4.1 MSK信号的时域调制解调分析 (11)4.2 MSK频域分析 (12)4.3 加噪声系统分析 (12)4.4误码率分析 (13)5 总结 (14)致谢 (15)参考文献: (16)附录:MSK信号调制解调的源程序代码 (17)1 绪论1.1 数字通信的发展通信按照传统的理解就是信息的传输与交换,为了传递消息,各种消息需要转换成电信号,消息与电信号之间必须建立单一的对应关系,否则在接收端就无法复制出原来的消息。
通常,消息被载荷到电信号的某一参量上,如果电信号的该参量携带着离散消息,则该参量必将是离散取值的。
这样的信号就称为数字信号。
如果电信号的参量连续取值,则称这样的信号为模拟信号。
按照信道中传输的是模拟信号还是数字信号,可以相应地把通信系统分为两类:数字通信系统和模拟通信系统。
自1844年5月24日莫尔斯在华盛顿和巴尔的摩之间发送世界上斯一份电报以来 ,电报通信已经经历了150多年。
但是长期以来,由于电报通信不如电话通信方便,作为数字通信主要形式的电报却比1876年贝尔发明的电话发展缓慢。
直到20世纪60年代已后,数字通信才日益兴旺起来,数字通信迅速发展的基本原因是它与模拟通信相比,更能适应对通信技术越来越高的要求。
第一数字传输抗干扰能力强,尤其是在中中继时,数字信号可以再生而消除噪声的积累;第二,传输差错可以控制,从而改善了传输的质量;第三,便于使用现代数字信号处理技术来对数字信息进行处理;第四,数字信息易于做高保密性的加密处理;第五,数字通信可以综合传递各种消息,使通信系统功能增强。
用MATLAB建模实现信号的调制解调(DOC)
用MATLAB 建模实现信号的调制解调1. 实验要求用MATLAB 的调制解调建模实现信号的调制解调过程,需要文字报告、波形图。
(本文选用AM 、FM 调制进行仿真分析)2. 实验原理2.1 AM 调制解调的原理 2.1.1AM 调制信号的产生标准调幅(AM )是指用信号m(t)去控制载波c(t)的振幅,是已调信号的包络按照m(t)的规律线性变化的过程,u(t)=(A0+a*m(t))*c(t)。
调制过程如图2.1所示。
图2.1 AM 调制模型2.1.2 AM 的解调调制的逆过程叫解调,调制是一个频谱搬移过程,它是将低频信号的频谱搬移到载频位置。
解调就是从已调信号的频谱中,将位于载频的信号频谱搬移回来。
调制和解调都完成频谱搬移,各种调幅都是利用乘法器实现的,因此可以设想,在收端也可以利用乘法器进行解调[1]。
已调信号u(t)乘以本地载波c(t),再通过低通滤波器得到解调信号dem(t)=u(t)*c(t)。
如图所示,解调后dem(t)=A0/2+m(t)/2,所以在解调后要重新缩放。
另一种解调方法,包络解调由于包络检波器电路简单,检波效率高,几乎所有调幅(AM )式接收机都采用这种电路,如图2.3所示为包络检波模型。
在MATLAB 中我们使用hilbert()函数找出已调信号包络dem(t) A0+m(t)。
找出包络后也要重新缩放,最终解调出基带信号m(t)。
c(t)A0 m(t)u(t)相干解调模型2.2 FM 调制解调的原理 2.2.1FM 调制信号的产生角度调制是频率调制和相位调制的总称。
角度调制是使正弦载波信号的角度随着基带调制信号的幅度变化而改变。
调频信号可以被看作调制信号在调制前先积分的调相信号。
这意味着先对m(t)积分,再将结果作为调相器的输入即可得到调频信号。
相反,先微分m(t),再将结果作为调频器的输入也可得到调相信号。
在模拟蜂窝移动通信中,调频是更为普遍应用的角度调制,这是因为FM 不管信号的幅度如何,抗干扰能力都很强,而在调幅中,正如前面所说的那样,抗干扰能力要弱得多[10]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
msk的调制解调MATLAB源代码function out = delay(data,n,sample_number)%data:延迟的数据%n:延迟码元个数%sample_number:码元采样个数out = zeros(1,length(data));out(n*sample_number+1:length(data)) =data(1:length(data)-n*sample_number);function [data_diff] = difference(data)%差分编码%************************************************************************* *%data 输入信号%data_diff 差分编码后信号%************************************************************************* *%--------------------------------------------------------------------------data_diff = zeros(1,length(data));data_diff(1) = 1 * data(1); %1为差分编码的初始参考值for i = 2:length(data)data_diff(i) = data_diff(i-1) * data(i);end%************************************************************************* *function [signal_out,I_out,Q_out] =mod_msk(data,data_len,sample_number,Rb)%MSK基带调制%************************************************************************* *% data 调制信号% data_len 码元个数% sample_number 每个码元采样点数% Rb 码元速率% signal_out 基带调制输出% I_out I路输出% Q_out Q路输出%************************************************************************* *% data_len = 10; %码元个数% sample_number = 8; %采样点数% Rb = 16000; %码元速率% data1 = randint(1,data_len);% data = 2*data1-1; %传输的序列Tb = 1/Rb; %码元时间fs = Rb*sample_number; %采样速率%--------------------------------------------------------------------------%差分编码[data_diff] = difference(data);%************************************************************************* *%--------------------------------------------------------------------------%并串转换,延时I(1) = 1; %fai0 = 0,cos(fai0) = 1for i = 1:2:data_lenQ(i) = data_diff(i);Q(i+1) = data_diff(i);endfor i = 2:2:data_lenI(i+1) = data_diff(i);I(i) = data_diff(i);endfor i = 1:sample_numberI1(i:sample_number:data_len*sample_number) = I(1:data_len);Q1(i:sample_number:data_len*sample_number) =Q(1:data_len);end%************************************************************************* *%--------------------------------------------------------------------------%乘加权函数t=1/fs:1/fs:data_len*Tb;I_out = I1 .* cos(pi*t/2/Tb);Q_out = Q1 .* sin(pi*t/2/Tb);%************************************************************************* *%--------------------------------------------------------------------------%调制信号产生signal_out = I_out + j*Q_out;%************************************************************************* *% %--------------------------------------------------------------------------% %画图% subplot(221)% plot(data,'.-');title('MSK传输的数据');xlabel('时间');ylabel('幅度') % subplot(222)% plot(data_diff,'.-');title('差分后的数据');xlabel('时间');ylabel('幅度') % subplot(223)% plot(I1,'.-');title('加权前I路');xlabel('时间');ylabel('幅度');% subplot(224)% plot(Q1,'.-');title('加权前Q路');xlabel('时间');ylabel('幅度');%% figure(2)% subplot(221)% plot(cos(pi*t/2/Tb),'.-');title('加权函数cos(πt/(2Tb))');xlabel('时间');ylabel('幅度')% subplot(222)% plot(sin(pi*t/2/Tb),'.-');title('加权函数sin(πt/(2Tb))');xlabel('时间');ylabel('幅度')% subplot(223)% plot(I_out,'.-');title('加权后I路');xlabel('时间');ylabel('幅度');% subplot(224)% plot(Q_out,'.-');title('加权后Q路');xlabel('时间');ylabel('幅度');% %********************************************************************** ****function [signal_out,I_out,Q_out,phase] =mod_msk2(data,data_len,sample_number,Rb)%MSK基带调制%************************************************************************* *% data 调制信号% data_len 码元个数% sample_number 每个码元采样点数% Rb 码元速率% signal_out 基带调制输出% I_out I路输出% Q_out Q路输出%************************************************************************* *% data_len = 10; %码元个数% sample_number = 8; %采样点数% Rb = 16000; %码元速率% data1 = randint(1,data_len);% data = 2*data1-1; %传输的序列Tb = 1/Rb; %码元时间fs = Rb*sample_number; %采样速率%--------------------------------------------------------------------------%采样for i = 1:sample_numberdata_sample(i:sample_number:data_len*sample_number) = data;end%************************************************************************* *%--------------------------------------------------------------------------%计算相位phase = zeros(1,data_len*sample_number);phase(1) = data_sample(1) * pi/2/sample_number;for i = 2:data_len*sample_numberphase(i) = phase(i-1) + data_sample(i-1) * pi/2/sample_number; end%************************************************************************* *%--------------------------------------------------------------------------%I/QI_out = cos(phase);Q_out = sin(phase);*%--------------------------------------------------------------------------%调制信号产生signal_out = I_out + j*Q_out;%************************************************************************* *%MSK调制,差分解调方法一clear allclose all%--------------------------------------------------------------------------%参数设置data_len = 10000; %码元个数sample_number = 8; %采样个数Rb = 24000; %码元速率fc = 96000; %载波频率*%--------------------------------------------------------------------------%随机产生传输信号data=rand_binary(data_len);%************************************************************************* *%--------------------------------------------------------------------------%MSK基带调制[signal_out,I_out,Q_out] =mod_msk(data,data_len,sample_number,Rb);%************************************************************************* *%--------------------------------------------------------------------------%中频搬移multi = fc/Rb;I_temp=interp(I_out,multi);Q_temp=interp(Q_out,multi);Fs=fc*sample_number;t=1/Fs:1/Fs:length(I_temp)*1/Fs;signal_i=I_temp.*cos(2*pi*fc*t);signal_q=Q_temp.*sin(2*pi*fc*t);signal_mod=I_temp.*cos(2*pi*fc*t)-Q_temp.*sin(2*pi*fc*t);%************************************************************************* *%--------------------------------------------------------------------------%加噪声for SNR = 0:8signal_mod1 = awgn(signal_mod,SNR);%--------------------------------------------------------------------------%去载波N=300; % 滤波器的阶数为(N+1) F=[0,fc-1000,fc+1000,Fs/2]*2/Fs;A=[1,1,0,0];lpf=firls(N,F,A);[amp_lpf,w]=freqz(lpf);I_dem=signal_mod1.*cos(2*pi*fc*t)*2;I_dem=conv(I_dem,lpf);I_dem=I_dem(N/2+1:N/2+length(I_temp));Q_dem=signal_mod1.*sin(2*pi*fc*t)*2;Q_dem=conv(Q_dem,lpf);Q_dem=-Q_dem(N/2+1:N/2+length(I_temp));I_dem_out=zeros(1,length(I_dem)/multi); % 抽取Q_dem_out=zeros(1,length(Q_dem)/multi);for i=1:length(I_dem_out)I_dem_out(i)=I_dem(multi*(i-1)+1);Q_dem_out(i)=Q_dem(multi*(i-1)+1);end;%********************************************************************** ****%--------------------------------------------------------------------------%差分解调demod_data = zeros(1,data_len);demod_data(1) = Q_dem_out(sample_number);for i = 2:data_lendemod_data(i) =Q_dem_out(i*sample_number)*I_dem_out((i-1)*sample_number) -I_dem_out(i*sample_number)*Q_dem_out((i-1)*sample_number);end%********************************************************************** ****%--------------------------------------------------------------------------%判决demod_data = demod_data>0;demod_data = 2*demod_data-1;%********************************************************************** ****%--------------------------------------------------------------------------%计算误码率[num,ber(SNR+1)]=symerr(demod_data,data);%********************************************************************** ****end%************************************************************************* *%--------------------------------------------------------------------------%误码率曲线semilogy([0:8],ber,'r*-');%************************************************************************* *%--------------------------------------------------------------------------%误码率理论值snr = 0:0.1:8;for i = 1:length(snr)snr1(1,i) = 10^(snr(1,i)/10);ps(1,i) = 1/2 * erfc(sqrt(snr1(1,i)));pe(1,i) = 2 * ps(1,i);endhold onsemilogy([0:.1:8],pe);%************************************************************************* *%MSK调制,差分解调方法二clear allclose all%--------------------------------------------------------------------------%参数设置data_len = 10000; %码元个数sample_number = 8; %采样个数Rb = 24000; %码元速率fc = 96000; %载波频率%************************************************************************* *%--------------------------------------------------------------------------%随机产生传输信号data=rand_binary(data_len);%************************************************************************* *%--------------------------------------------------------------------------%MSK基带调制[signal_out,I_out,Q_out] =mod_msk(data,data_len,sample_number,Rb);%************************************************************************* *%--------------------------------------------------------------------------%中频搬移multi = fc/Rb;I_temp=interp(I_out,multi);Q_temp=interp(Q_out,multi);Fs=fc*sample_number;t=1/Fs:1/Fs:length(I_temp)*1/Fs;signal_i=I_temp.*cos(2*pi*fc*t);signal_q=Q_temp.*sin(2*pi*fc*t);signal_mod=I_temp.*cos(2*pi*fc*t)-Q_temp.*sin(2*pi*fc*t);%************************************************************************* *%--------------------------------------------------------------------------%加噪声for SNR = 0:8signal_mod1 = awgn(signal_mod,SNR);%--------------------------------------------------------------------------%去载波N=300; % 滤波器的阶数为(N+1) F=[0,fc-1000,fc+1000,Fs/2]*2/Fs;A=[1,1,0,0];lpf=firls(N,F,A);[amp_lpf,w]=freqz(lpf);I_dem=signal_mod1.*cos(2*pi*fc*t)*2;I_dem=conv(I_dem,lpf);I_dem=I_dem(N/2+1:N/2+length(I_temp));Q_dem=signal_mod1.*sin(2*pi*fc*t)*2;Q_dem=conv(Q_dem,lpf);Q_dem=-Q_dem(N/2+1:N/2+length(I_temp));I_dem_out=zeros(1,length(I_dem)/multi); % 抽取Q_dem_out=zeros(1,length(Q_dem)/multi);for i=1:length(I_dem_out)I_dem_out(i)=I_dem(multi*(i-1)+1);Q_dem_out(i)=Q_dem(multi*(i-1)+1);end;%********************************************************************** ****%--------------------------------------------------------------------------%差分解调demod_data = zeros(1,data_len);demod_data(1) = Q_dem_out(sample_number);for i = 2:2:data_lendemod_data(i) =-I_dem_out(i*sample_number)*Q_dem_out((i-1)*sample_number);endfor i = 3:2:data_lendemod_data(i) =Q_dem_out(i*sample_number)*I_dem_out((i-1)*sample_number);end%********************************************************************** ****%--------------------------------------------------------------------------%判决demod_data = demod_data>0;demod_data = 2*demod_data-1;%********************************************************************** ****%--------------------------------------------------------------------------%计算误码率[num,ber(SNR+1)]=symerr(demod_data,data);%********************************************************************** ****end%************************************************************************* *%--------------------------------------------------------------------------%误码率曲线semilogy([0:8],ber,'r*');%************************************************************************* *%--------------------------------------------------------------------------%误码率理论值snr = 0:0.1:8;for i = 1:length(snr)snr1(1,i) = 10^(snr(1,i)/10);ps(1,i) = 1/2 * erfc(sqrt(snr1(1,i)));pe(1,i) = 2 * ps(1,i);endhold onsemilogy([0:.1:8],pe);%************************************************************************* *%MSK调制,解调clear allclose all%--------------------------------------------------------------------------%参数设置data_len = 30000; %码元个数sample_number = 8; %采样个数Rb = 24000; %码元速率fc = 96000; %载波频率%************************************************************************* *%--------------------------------------------------------------------------%随机产生传输信号data = rand_binary(data_len);%************************************************************************* *%--------------------------------------------------------------------------%MSK基带调制[signal_out,I_out,Q_out] =mod_msk(data,data_len,sample_number,Rb);%************************************************************************* *%--------------------------------------------------------------------------%中频搬移multi = fc/Rb;I_temp=interp(I_out,multi);Q_temp=interp(Q_out,multi);Fs=fc*sample_number;t=1/Fs:1/Fs:length(I_temp)*1/Fs;signal_i=I_temp.*cos(2*pi*fc*t);signal_q=Q_temp.*sin(2*pi*fc*t);signal_mod=I_temp.*cos(2*pi*fc*t)-Q_temp.*sin(2*pi*fc*t);% signal_mod1=real((I_temp+j*Q_temp).*exp(j*2*pi*fc*t));%************************************************************************* *%--------------------------------------------------------------------------%加噪声for SNR = 0:8signal_mod1 = 0.01 * awgn(signal_mod,SNR);%--------------------------------------------------------------------------%去载波N=300; % 滤波器的阶数为(N+1) F=[0,fc-1000,fc+1000,Fs/2]*2/Fs;A=[1,1,0,0];lpf=firls(N,F,A);[amp_lpf,w]=freqz(lpf);I_dem=signal_mod1.*cos(2*pi*fc*t)*2 .* cos(pi*t*Rb/2);I_dem=conv(I_dem,lpf);I_dem=I_dem(N/2+1:N/2+length(I_temp));Q_dem=signal_mod1.*sin(2*pi*fc*t)*2 .* sin(pi*t*Rb/2);Q_dem=conv(Q_dem,lpf);Q_dem=-Q_dem(N/2+1:N/2+length(I_temp));I_dem_out=zeros(1,length(I_dem)/multi); % 抽取Q_dem_out=zeros(1,length(Q_dem)/multi);for i=1:length(I_dem_out)I_dem_out(i)=I_dem(multi*(i-1)+1);Q_dem_out(i)=Q_dem(multi*(i-1)+1);end;%********************************************************************** ****%--------------------------------------------------------------------------%解调,判决demod_data = zeros(1,data_len);for i = 1:data_lenI_dem1(i) = I_dem_out(i*sample_number)>0;Q_dem1(i) = Q_dem_out(i*sample_number)>0;endfor i = 1:2:data_lenm1(i) = Q_dem1(i);endfor i = 2:2:data_lenm1(i) = I_dem1(i);endm1 = 2*m1-1;%********************************************************************** ****%--------------------------------------------------------------------------%差分解码demod_data = zeros(1,data_len);demod_data(1) = 1 * m1(1);for i = 2:data_lendemod_data(i) = m1(i-1) * m1(i);end%********************************************************************** ****%--------------------------------------------------------------------------%计算误码率[num,ber(SNR+1)]=symerr(demod_data,data);%********************************************************************** ****end % /for snr%************************************************************************* *%--------------------------------------------------------------------------%误码率曲线semilogy([0:8],ber,'r*-');%************************************************************************* *%--------------------------------------------------------------------------%误码率理论值snr = 0:0.1:8;for i = 1:length(snr)snr1(1,i) = 10^(snr(1,i)/10);ps(1,i) = 1/2 * erfc(sqrt(snr1(1,i)));pe(1,i) = 2 * ps(1,i);endhold onsemilogy([0:.1:8],pe);%************************************************************************* *function [data_binary,data_binary1]=rand_binary(data_len);%随机产生一个二进制序列作为仿真用的消息序列%************************************************************************* *%data 序列长度%data_binary 产生的二进制序列%************************************************************************* *%--------------------------------------------------------------------------data1=randn(1,data_len);data_binary=zeros(1,data_len);data_binary1=zeros(1,data_len);for i=1:data_lenif data1(i)<0data_binary(i)=-1;data_binary1(i)=0;elsedata_binary(i)=1;data_binary1(i)=1;end end。