【matlab】 GMSK的调制与解调【附详尽注释】
- 简介
- code
1 简介
MSK调制是调制指数为0.5的二元数字频率调制,具有很好的特性,如恒包络、相对窄的带宽、并可以相干检测。MSK【最小频移键控】信号在任一码元间隔内,其相位变化为Π/2,而在码元转换时刻保持相位连续。
然而,MSK信号的相位变化是折线,在码元转换时刻会产生尖角,从而使其频谱特性的旁瓣降缓慢,带外辐射相对较大。移动数字通信中采用高速传输速率时,要求邻道带外辐射低于-(60~80)dB,而MSK信号不能满足功率谱在相邻信道的取值低于主瓣峰值60dB以上的要求,所以需寻求进一步压缩带宽的方法。
为了进一步改善MSK【最小频移键控】的频谱特性,有效的办法是对基带信号进行平滑处理,使调制后的信号相位在码元转换时刻不仅连续而且变化平滑,从而达到改善频谱特性的目的。
GMSK作为MSK的改进型,即是以高斯低通滤波器作为预调滤波基带滤波器的MSK方式,所以称为高斯MSK或GMSK。
2 code【附详尽注释】
% 附录:MATLAB程序
%绘制调制波形00101010
%
clear all;
close all;%******************** Preparation part ************************************
% Ts=1/16000; %基带信号周期为1/16000s,即为16KHzTb=1/32000; %[码元]输入信号周期为Ts/2=1/32000s,即32KHz【奈奎斯特采样】
BbTb=0.5; %取BbTb为0.5,调制指数为0.5的二元数字频率调制
Bb=BbTb/Tb; %3dB带宽 -_-半带宽=码元频率一半-_-!
Fc=32000; %载波频率为32KHz -_-载波频率=码元频率-_-!
Fc_sample=64; %每载波采样64个点
B_num=8; %基带信号为8个码元
Dt=1/(Fc*Fc_sample); %采样间隔[载波周期/采样点数][4.88281250000000e-07]
B_sample=Tb/Dt; %每基带码元采样点数 B_sample=Tb/Dt[输入信号/采样间隔]
t=0:Dt:B_num*Tb-Dt; %仿真时间离散点[采样间隔,码元数*(时间/码元)]
T=Dt*length(t); %仿真时间值[采样间隔*512个采样点]
Ak=[0 0 1 0 1 0 1 0]; %产生8个基带信号[8个比特]
Ak=2*Ak-1; %[多此一举] %单极性码元—>双极性码元
gt=ones(1,B_sample); %每码元对应的载波信号[1*64]
Akk=sigexpand(Ak,B_sample); %码元扩展[64*8->1*512]
temp=conv(Akk,gt); %码元扩展[卷积向量Akk和gt 512+64-1]
Akk=temp(1:length(Akk)); %码元扩展[取出temp变量中前512个,类似于银行存款,第一年存入的钱会一直享受利息值最后一年,第二年存入的钱会一直享受利息值最后一年]%************************* Filter initialization **************************tt=-2.5*Tb:Dt:2.5*Tb-Dt; %{2.5*码元周期}/{采样间隔=[载波周期/采样点数]}
%g(t)=Q[2*pi*Bb*(t-Tb/2)/sqrt(log(2))]-Q[2*pi*Bb*(t+Tb/2)/sqrt(log(2))];
%Q(t)=erfc(t/sqrt(2))/2;
gaussf=erfc(2*pi*Bb*(tt-Tb/2)/sqrt(log(2))/sqrt(2))/2-erfc(2*pi*Bb*(tt+Tb/2)/sqrt(log(2))/sqrt(2))/2;
%the complementary error function erfc(X) is defined as
%erfc=2/sqrt(pi)int_{x}^{+\infty}exp{-t^2}dt
J_g=zeros(1,length(gaussf)); %使J_g 的长度和Gaussf的一样
%************************ SUM GMSK ****************************************for i=1:length(gaussf) %320个点if i==1 J_g(i)=gaussf(i)*Dt; %若不乘以Dt,则最后结果要出错?elseJ_g(i)=J_g(i-1)+gaussf(i)*Dt; %若不乘以Dt,则最后结果要出错?end;
end;J_g=J_g/2/Tb; %若先前循环不乘以Dt,则最后结果要出错?%******************** START CALCULATION ***********************************%计算相位Alpha
Alpha=zeros(1,length(Akk));
k=1; %计算第1个码元的相位
L=0;
for j=1:B_sample %采样点数为64J_Alpha=Ak(k+2)*J_g(j); %第3码元对应乘以J_g矢量第j[1-64]个值Alpha((k-1)*B_sample+j)=pi*J_Alpha+L*pi/2;% 刷新 Alpha512 中 1-64
end;k=2;%计算第2个码元的相位
L=0;
for j=1:B_sample%采样点数为64J_Alpha=Ak(k+2)*J_g(j)+Ak(k+1)*J_g(j+B_sample);%第3码元对应乘以J_g矢量第j[65-128]个值%第4码元对应乘以J_g矢量第j[1-64]个值Alpha((k-1)*B_sample+j)=pi*J_Alpha+L*pi/2;% 刷新 Alpha512 中 65-128
end; k=3;%计算第3个码元的相位
L=0;
for j=1:B_sample%采样点数为64J_Alpha=Ak(k+2)*J_g(j)+Ak(k+1)*J_g(j+B_sample)+Ak(k)*J_g(j+2*B_sample);%第3码元对应乘以J_g矢量第j[129-192]个值 %第4码元对应乘以J_g矢量第j[65-128]个值%第5码元对应乘以J_g矢量第j[1-64]个值Alpha((k-1)*B_sample+j)=pi*J_Alpha+L*pi/2;% 刷新 Alpha512 中 129-192
end; k=4;%计算第4个码元的相位
L=0;%level为0,表示二进制相位轨迹,因而单位递增pi
for j=1:B_sample%采样点数为64J_Alpha=Ak(k+2)*J_g(j)+Ak(k+1)*J_g(j+B_sample)+Ak(k)*J_g(j+2*B_sample)+Ak(k-1)*J_g(j+3*B_sample);%第3码元对应乘以J_g矢量第j[193-256]个值%第4码元对应乘以J_g矢量第j[129-192]个值%第5码元对应乘以J_g矢量第j[65-128]个值%第6码元对应乘以J_g矢量第j[1-64]个值Alpha((k-1)*B_sample+j)=pi*J_Alpha+L*pi/2;% 刷新 Alpha512 中 193-256
end;L=0;%level为0,表示二进制相位轨迹,因而单位递增pi
for k=5:B_num-2if k==5 %计算第5个码元的相位L=0;else %计算第6个码元的相位L=L+Ak(k-3); end;for j=1:B_sample%采样点数为64J_Alpha=Ak(k+2)*J_g(j)+Ak(k+1)*J_g(j+1*B_sample)+Ak(k)*J_g(j+2*B_sample)+Ak(k-1)*J_g(j+3*B_sample)+Ak(k-2)*J_g(j+4*B_sample);
%第3码元对应乘以J_g矢量第j[257-64*5]个值 |%第4码元对应乘以J_g矢量第j[64*4+1-64*5]个值|
%第4码元对应乘以J_g矢量第j[193-64*4]个值 |%第5码元对应乘以J_g矢量第j[193-64*4]个值 |
%第5码元对应乘以J_g矢量第j[129-64*3]个值 |%第6码元对应乘以J_g矢量第j[129-64*3]个值 |
%第6码元对应乘以J_g矢量第j[65-64*2]个值 |%第7码元对应乘以J_g矢量第j[65-64*2]个值 |
%第7码元对应乘以J_g矢量第j[1-64*1]个值 |%第8码元对应乘以J_g矢量第j[1-64*1]个值 |Alpha((k-1)*B_sample+j)=pi*J_Alpha+mod(L,4)*pi/2;% 刷新 Alpha512 中 64*4+1 - 64*5%相位变化+1*pi/2 % 刷新 Alpha512 中 64*5+1 - 64*6end;
end;%B_num-1;
k=B_num-1;%计算第7个码元的相位
L=L+Ak(k-3); %level=0 此时L=1+Ak(4)=1-1=0
for j=1:B_sample%采样点数为64J_Alpha=Ak(k+1)*J_g(j+B_sample)+Ak(k)*J_g(j+2*B_sample)+Ak(k-1)*J_g(j+3*B_sample)+Ak(k-2)*J_g(j+4*B_sample);%第5码元对应乘以J_g矢量第j[64*4+1-64*5]个值 |%第6码元对应乘以J_g矢量第j[64*3+1-64*4]个值 |%第7码元对应乘以J_g矢量第j[64*2+1-64*3]个值 |%第8码元对应乘以J_g矢量第j[64*1+1-64*2]个值 |Alpha((k-1)*B_sample+j)=pi*J_Alpha+mod(L,4)*pi/2;%相位变化+0*pi/2 刷新 Alpha512 中 64*6+1-64*7
end; %B_num;
k=B_num;%计算第8个码元的相位
L=L+Ak(k-3);%level=1 此时L=0+Ak(4)=0+1=1
for j=1:B_sample%采样点数为64J_Alpha=Ak(k)*J_g(j+2*B_sample)+Ak(k-1)*J_g(j+3*B_sample)+Ak(k-2)*J_g(j+4*B_sample);%第6码元对应乘以J_g矢量第j[64*4+1-64*5]个值 |%第7码元对应乘以J_g矢量第j[64*3+1-64*4]个值 |%第8码元对应乘以J_g矢量第j[64*2+1-64*3]个值 |Alpha((k-1)*B_sample+j)=pi*J_Alpha+mod(L,4)*pi/2;%相位变化+1*pi/2 刷新 Alpha512 中 64*7+1-64*8
end; % 基带波形+相位波形+GMSK波形
x=0;
subplot(311)
plot(t/Tb,Akk,t/Tb,x,'r:');% [t/Tb] %单极性码元—>双极性码元 Tb=64*Dt
%Tb:[码元]输入信号周期为Ts/2=1/32000s,即32KHz【奈奎斯特采样】
% t=0:Dt:B_num*Tb-Dt; %仿真时间离散点[采样间隔,码元数*(时间/码元)]
% Dt=1/(Fc*Fc_sample); %采样间隔[载波周期/采样点数][4.88281250000000e-07]
axis([0 8 -1.5 1.5]);
title('基带波形');subplot(312)
plot(t/Tb,Alpha*2/pi);
axis([0 8 min(Alpha*2/pi)-1 max(Alpha*2/pi)+1]);
title('相位波形');S_Gmsk=cos(2*pi*Fc*t+Alpha);%载波频率+相位
subplot(313)
plot(t/Tb,S_Gmsk,t/Tb,x,'r:');
axis([0 8 -1.5 1.5]);
title('GMSK波形');%解调 % 延迟1bt,移相pi/2 GMSK波形 + 相位波形 + GMSK波形
for n=1:512; %延迟1bt,移相pi/2 GMSK波形if n<=B_sample % n<64Alpha1(n)=0; % Alpha 前64 置0elseAlpha1(n)=Alpha(n-B_sample);%右移64end
end
a=[0 1 1 1 1 1 1 1 ];
ak=sigexpand(a,B_sample); %码元扩展[8*64->1*512]% Ak=[0 0 1 0 1 0 1 0]; %产生8个基带信号[8个比特]% Akk=sigexpand(Ak,B_sample); %码元扩展[8*64->1*512]
temp=conv(ak,gt); %码元扩展[卷积向量ak和gt 512+64-1]
ak=temp(1:length(ak)); %码元扩展[取出temp变量中前512个]
S_Gmsk1=cos(2*pi*Fc*(t-Tb)+Alpha1+pi/2).*ak; %延迟1Tb[一个码元周期],移相pi/2
figure
subplot(311)
plot(t/Tb,S_Gmsk1);
axis([0 8 -1.5 1.5]);
title('延迟1Tb,移相pi/2 GMSK波形');xt=S_Gmsk1.*S_Gmsk;
subplot(312)
plot(t/Tb,xt);
axis([0 8 -1.5 1.5]);
title('相乘后波形');%低通滤波
Fs=10000; %采样频率【奈奎斯特准则】
rp=3; rs=50; %通带纹波不超过rp dB %阻带衰减至少rs dB
wp=2*pi*50; ws=2*pi*800;% Passband corner frequency 通带截止频率% Stopband corner frequency 阻带截止频率
[n,wn]=buttord(wp,ws,rp,rs,'s') %巴特沃斯滤波器的阶数和截止频率
% 这个函数返回满足性能所需通带波纹和阻带衰减条件下的最低阶N及截止频率
% in which case Wp and Ws are in radians/second% *****设计一个n阶巴特沃斯模拟低通滤波器。画出其幅度和相位响应*************
[z,p,k]=buttap(n); %Butterworth滤波器原型,返回零点、极点和增益
% H(s) = z(s)/p(s) = k/( (s-p(1))(s-p(2))(s-p(3))...(s-p(1)))
[bp,ap]=zp2tf(z,p,k); %convert to transfer function form
[bs,as]=lp2lp(bp,ap,wn);
[b,a]=bilinear(bs,as,Fs);
y=filter(b,a,xt);
subplot(313)
plot(t/Tb,y,t/Tb,x,'r:');
axis([0 8 -1.5 1.5]);
title('经过低通滤波器后波形');for i=1:8if y(i*B_sample)>0 % 8*64 = 512bt(i)=1elsebt(i)=0end
end
bt=2*bt-1; %解调,反向解码
btt=sigexpand(bt,B_sample); %码元扩展
temp1=conv(btt,gt); %码元扩展
btt=temp1(1:length(btt)); %码元扩展
figure
subplot(311)
plot(bt)
title('抽样值');
axis([0 8 -1.5 1.5]);
subplot(312)
plot(t/Tb,Akk,t/Tb,x,'r:');
axis([0 8 -1.5 1.5]);
title('原基带波形');
subplot(313)
plot(t/Tb,btt,t/Tb,x,'r:');
axis([0 8 -1.5 1.5]);
title('解调后波形');
title('抽样值');
axis([0 8 -1.5 1.5]);
subplot(312)
plot(t/Tb,Akk,t/Tb,x,'r:');
axis([0 8 -1.5 1.5]);
title('原基带波形');
subplot(313)
plot(t/Tb,btt,t/Tb,x,'r:');
axis([0 8 -1.5 1.5]);
title('解调后波形');
【matlab】 GMSK的调制与解调【附详尽注释】相关推荐
- m基于matlab的PCM-FM码同步和GMSK的调制和解调方法,包括多符号检测MSD和Turbo编解码
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 1. 用MATLAB仿真多符号检测(MSD)和Turbo乘积码的编解码, 2. Turbo码同步参数 ...
- fsk调制解调实验报告 matlab,基于MATLAB的-FSK调制与解调-通信原理实验
<基于MATLAB的-FSK调制与解调-通信原理实验>由会员分享,可在线阅读,更多相关<基于MATLAB的-FSK调制与解调-通信原理实验(2页珍藏版)>请在人人文库网上搜索. ...
- 【基于matlab的mqam调制与解调系统】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.正交幅度调制原理 二.QAM的解调和判决 三.16QAM调制解调系统的实现与仿真 总结 前言 提示:这里可以添加本 ...
- 信号的解调与调制matlab,基于MATLAB常用数字信号调制与解调
内容简介: 本科毕业设计 基于MATLAB常用数字信号调制与解调 数字通信|MATLAB|ASK|PSK|FSK|调制与解调|毕业设计 文件格式:word+PPT 本科毕业设计 基于MATLAB常用数 ...
- 信号的调制与解调matlab仿真,基于MATLAB对信号调制与解调的仿真
基于MATLAB对信号调制与解调的仿真 2.3 2PSK的基本原理和调制解调实现 数字相移键控,记作PSK(Phase shift-keying ),二进制相位键控记作2PSK. 2PSK就是根据基带 ...
- matlab显示2dpsk误码率,基于MATLAB的2DPSK调制与解调系统的分析.doc
您所在位置:网站首页 > 海量文档  > 计算机 > matlab 基于MATLAB的2DPSK调制与解调系统的分析. ...
- 用matlab对基带信号进行调频,(很实用很好)用MATLAB实现信号调制与解调调频调相等.doc...
信号调制与解调 [实验目的] 了解用MATLAB实现信号调制与解调的方法. 了解几种基本的调制方法. [实验原理] 由于从消息变换过来的原始信号具有频率较低的频谱分量,这种信号在许多信道中不适宜传输. ...
- matlab dpsk,2DPSK调制与解调matlab(最新整理)
<2DPSK调制与解调matlab(最新整理)>由会员分享,可在线阅读,更多相关<2DPSK调制与解调matlab(最新整理)(5页珍藏版)>请在人人文库网上搜索. 1.- 2 ...
- 基于Matlab的DSB调制解调,课程设计(论文)-基于MATLAB的DSB调制与解调分析.doc
目 录 前言2 1 DSB调制与解调原理3 1.1DSB调制原理3 1.2DSB解调原理与抗噪性能5 2 DSB调制解调分析的MATLAB实现7 2.1正弦波调制7 2.1.1调制信号幅度=0.8×载 ...
- matlab进行fm调制与解调,基于matlab的fm信号调制与解调.doc
基于matlab的fm信号调制与解调.doc 调制就是将基带信号的频谱搬移到信道通带中或者其中的某个频段上的过程,而解调是将信道中来的频带信号恢复为基带信号的反过程.调制的目的是把要传输的模拟信号或数 ...
最新文章
- 【数据库】sqlite3数据库备份、导出方法汇总
- 用正则表达式判断一个二进制数是否能被3整除
- j2ee学习 +“云未来
- ulipad install on 64bit win7 has issue
- exp/expdp中query参数的使用
- 分布式文件系统HDFS,大数据存储实战(一)
- catia怎么将特征参数化_搭建商城网站怎么将页面简洁化?这三个步骤不能少
- ggplot2中显示坐标轴_ggplot2作图:修改图中一切文本的外观
- 全国计算机等级考试准考证下载 怎么弄
- 报错 xxx@1.0.0 dev D:\ webpack-dev-server --inline --progress --configbuild/webpack.dev.conf.js
- 排序算法之二路归并排序
- 关于 centos 7系统,iptables透明网桥实现
- ecshop mysql 标题表_ECSHOP商城全站自定义TITLE标题设置
- html里面的view怎么修改,asp.net mvc 3-在局部视图中修改MVC 3 ViewBag不会保留到_Layout.cshtml...
- linux 版本号 笔记本_2019 年最佳 Linux 笔记本电脑发行版 top10
- 【Tools】XD_Laser安装教程详解
- 山水之道第四境——精灵的飞天之舞
- CNN网络实现手写数字(MNIST)识别 代码分析
- Android 双usb 摄像头支持
- JMicroVision教程-应用于测井岩层电镜图像分析
热门文章
- SaaSpace:2022年4款最好的免费3D打印软件
- “双态IT”架构下的自动化运维
- Windows下的发包工具推荐[Colasoft Packet Builder]含使用教程
- #define c# 报错_天轰穿C#教程之#define和#undef【原创】
- 象牙大钢琴II压缩版-Synthogy Ivory by JR Samples II Kontakt
- 飞船利用计算机进行飞行状态调整属于,“神舟八号”飞船利用计算机进行飞行状态调整属于____。...
- eXosip订阅问题分析
- 基于51单片机的超声波测距带语音播报
- 终于等到离职这一天了--献给准备、犹豫离职中的朋友们!
- 虚拟机安装VMware tools