GMSK的调制与解调

  • 简介
  • code

1 简介

MSK调制是调制指数为0.5的二元数字频率调制,具有很好的特性,如恒包络、相对窄的带宽、并可以相干检测。MSK【最小频移键控】信号在任一码元间隔内,其相位变化为Π/2,而在码元转换时刻保持相位连续。

然而,MSK信号的相位变化是折线,在码元转换时刻会产生尖角,从而使其频谱特性的旁瓣降缓慢,带外辐射相对较大。移动数字通信中采用高速传输速率时,要求邻道带外辐射低于-(60~80)dB,而MSK信号不能满足功率谱在相邻信道的取值低于主瓣峰值60dB以上的要求,所以需寻求进一步压缩带宽的方法。

为了进一步改善MSK【最小频移键控】的频谱特性,有效的办法是对基带信号进行平滑处理,使调制后的信号相位在码元转换时刻不仅连续而且变化平滑,从而达到改善频谱特性的目的。

GMSK作为MSK的改进型,即是以高斯低通滤波器作为预调滤波基带滤波器的MSK方式,所以称为高斯MSK或GMSK。

2 code【附详尽注释】


      
      
      
      
  1. % 附录:MATLAB程序
  2. %绘制调制波形 00101010
  3. %
  4. clear all;
  5. close all;
  6. %******************** Preparation part ************************************
  7. % Ts= 1/ 16000; %基带信号周期为 1/ 16000 s,即为 16KHz
  8. Tb= 1/ 32000; %[码元]输入信号周期为Ts/ 2= 1/ 32000 s,即 32KHz【奈奎斯特采样】
  9. BbTb= 0. 5; %取BbTb为 0. 5,调制指数为 0. 5的二元数字频率调制
  10. Bb=BbTb/Tb; %3dB带宽 - _-半带宽=码元频率一半- _-!
  11. Fc= 32000; %载波频率为 32KHz - _-载波频率=码元频率- _-!
  12. Fc_sample= 64; %每载波采样 64个点
  13. B_num= 8; %基带信号为 8个码元
  14. Dt= 1/(Fc*Fc_sample); %采样间隔[载波周期/采样点数][ 4.88281250000000e- 07]
  15. B_sample=Tb/Dt; %每基带码元采样点数 B_sample=Tb/Dt[输入信号/采样间隔]
  16. t= 0:Dt:B_num*Tb-Dt; %仿真时间离散点[采样间隔,码元数*(时间/码元)]
  17. T=Dt* length(t); %仿真时间值[采样间隔* 512个采样点]
  18. Ak=[ 0 0 1 0 1 0 1 0]; %产生 8个基带信号[ 8个比特]
  19. Ak= 2*Ak- 1; %[多此一举] %单极性码元—>双极性码元
  20. gt=ones( 1,B_sample); %每码元对应的载波信号[ 1* 64]
  21. Akk=sigexpand(Ak,B_sample); %码元扩展[ 64* 8-> 1* 512]
  22. temp=conv(Akk, gt); %码元扩展[卷积向量Akk和 gt 512+ 64- 1]
  23. Akk=temp( 1: length(Akk)); %码元扩展[取出temp变量中前 512个,类似于银行存款,第一年存入的钱会一直享受利息值最后一年,第二年存入的钱会一直享受利息值最后一年]
  24. %************************* Filter initialization **************************
  25. tt=- 2.5*Tb:Dt: 2.5*Tb-Dt; %{ 2.5*码元周期}/{采样间隔=[载波周期/采样点数]}
  26. %g(t)=Q[ 2*pi*Bb*(t-Tb/ 2)/ sqrt( log( 2))]-Q[ 2*pi*Bb*(t+Tb/ 2)/ sqrt( log( 2))];
  27. %Q(t)=erfc(t/ sqrt( 2))/ 2;
  28. 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;
  29. %the complementary error function erfc(X) is defined as
  30. %erfc= 2/ sqrt(pi) int _ {x}^{+\infty} exp{-t^ 2}dt
  31. J_g=zeros( 1, length(gaussf)); %使J_g 的长度和Gaussf的一样
  32. %************************ SUM GMSK ****************************************
  33. for i= 1: length(gaussf) %320个点
  34. if i== 1
  35. J_g(i)=gaussf(i)*Dt; %若不乘以Dt,则最后结果要出错?
  36. else
  37. J_g(i)=J_g(i- 1)+gaussf(i)*Dt; %若不乘以Dt,则最后结果要出错?
  38. end;
  39. end;
  40. J_g=J_g/ 2/Tb; %若先前循环不乘以Dt,则最后结果要出错?
  41. %******************** START CALCULATION ***********************************
  42. %计算相位Alpha
  43. Alpha=zeros( 1, length(Akk));
  44. k= 1; %计算第 1个码元的相位
  45. L= 0;
  46. for j= 1:B_sample %采样点数为 64
  47. J_Alpha=Ak(k+ 2)*J_g(j); %第 3码元对应乘以J_g矢量第j[ 1- 64]个值
  48. Alpha((k- 1)*B_sample+j)=pi*J_Alpha+L*pi/ 2;% 刷新 Alpha512 中 1- 64
  49. end;
  50. k= 2;%计算第 2个码元的相位
  51. L= 0;
  52. for j= 1:B_sample%采样点数为 64
  53. J_Alpha=Ak(k+ 2)*J_g(j)+Ak(k+ 1)*J_g(j+B_sample);%第 3码元对应乘以J_g矢量第j[ 65- 128]个值
  54. %第 4码元对应乘以J_g矢量第j[ 1- 64]个值
  55. Alpha((k- 1)*B_sample+j)=pi*J_Alpha+L*pi/ 2;% 刷新 Alpha512 中 65- 128
  56. end;
  57. k= 3;%计算第 3个码元的相位
  58. L= 0;
  59. for j= 1:B_sample%采样点数为 64
  60. J_Alpha=Ak(k+ 2)*J_g(j)+Ak(k+ 1)*J_g(j+B_sample)+Ak(k)*J_g(j+ 2*B_sample);
  61. %第 3码元对应乘以J_g矢量第j[ 129- 192]个值
  62. %第 4码元对应乘以J_g矢量第j[ 65- 128]个值
  63. %第 5码元对应乘以J_g矢量第j[ 1- 64]个值
  64. Alpha((k- 1)*B_sample+j)=pi*J_Alpha+L*pi/ 2;% 刷新 Alpha512 中 129- 192
  65. end;
  66. k= 4;%计算第 4个码元的相位
  67. L= 0;%level为 0,表示二进制相位轨迹,因而单位递增pi
  68. for j= 1:B_sample%采样点数为 64
  69. J_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);
  70. %第 3码元对应乘以J_g矢量第j[ 193- 256]个值
  71. %第 4码元对应乘以J_g矢量第j[ 129- 192]个值
  72. %第 5码元对应乘以J_g矢量第j[ 65- 128]个值
  73. %第 6码元对应乘以J_g矢量第j[ 1- 64]个值
  74. Alpha((k- 1)*B_sample+j)=pi*J_Alpha+L*pi/ 2;% 刷新 Alpha512 中 193- 256
  75. end;
  76. L= 0;%level为 0,表示二进制相位轨迹,因而单位递增pi
  77. for k= 5:B_num- 2
  78. if k== 5 %计算第 5个码元的相位
  79. L= 0;
  80. else %计算第 6个码元的相位
  81. L=L+Ak(k- 3);
  82. end;
  83. for j= 1:B_sample%采样点数为 64
  84. J_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);
  85. %第 3码元对应乘以J_g矢量第j[ 257- 64* 5]个值 |%第 4码元对应乘以J_g矢量第j[ 64* 4+ 1- 64* 5]个值|
  86. %第 4码元对应乘以J_g矢量第j[ 193- 64* 4]个值 |%第 5码元对应乘以J_g矢量第j[ 193- 64* 4]个值 |
  87. %第 5码元对应乘以J_g矢量第j[ 129- 64* 3]个值 |%第 6码元对应乘以J_g矢量第j[ 129- 64* 3]个值 |
  88. %第 6码元对应乘以J_g矢量第j[ 65- 64* 2]个值 |%第 7码元对应乘以J_g矢量第j[ 65- 64* 2]个值 |
  89. %第 7码元对应乘以J_g矢量第j[ 1- 64* 1]个值 |%第 8码元对应乘以J_g矢量第j[ 1- 64* 1]个值 |
  90. Alpha((k- 1)*B_sample+j)=pi*J_Alpha+mod(L, 4)*pi/ 2;% 刷新 Alpha512 中 64* 4+ 1 - 64* 5
  91. %相位变化+ 1*pi/ 2 % 刷新 Alpha512 中 64* 5+ 1 - 64* 6
  92. end;
  93. end;
  94. %B_num- 1;
  95. k=B_num- 1;%计算第 7个码元的相位
  96. L=L+Ak(k- 3); %level= 0 此时L= 1+Ak( 4)= 1- 1= 0
  97. for j= 1:B_sample%采样点数为 64
  98. J_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);
  99. %第 5码元对应乘以J_g矢量第j[ 64* 4+ 1- 64* 5]个值 |
  100. %第 6码元对应乘以J_g矢量第j[ 64* 3+ 1- 64* 4]个值 |
  101. %第 7码元对应乘以J_g矢量第j[ 64* 2+ 1- 64* 3]个值 |
  102. %第 8码元对应乘以J_g矢量第j[ 64* 1+ 1- 64* 2]个值 |
  103. Alpha((k- 1)*B_sample+j)=pi*J_Alpha+mod(L, 4)*pi/ 2;%相位变化+ 0*pi/ 2 刷新 Alpha512 中 64* 6+ 1- 64* 7
  104. end;
  105. %B_num;
  106. k=B_num;%计算第 8个码元的相位
  107. L=L+Ak(k- 3);%level= 1 此时L= 0+Ak( 4)= 0+ 1= 1
  108. for j= 1:B_sample%采样点数为 64
  109. J_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);
  110. %第 6码元对应乘以J_g矢量第j[ 64* 4+ 1- 64* 5]个值 |
  111. %第 7码元对应乘以J_g矢量第j[ 64* 3+ 1- 64* 4]个值 |
  112. %第 8码元对应乘以J_g矢量第j[ 64* 2+ 1- 64* 3]个值 |
  113. Alpha((k- 1)*B_sample+j)=pi*J_Alpha+mod(L, 4)*pi/ 2;%相位变化+ 1*pi/ 2 刷新 Alpha512 中 64* 7+ 1- 64* 8
  114. end;
  115. % 基带波形+相位波形+GMSK波形
  116. x= 0;
  117. subplot( 311)
  118. plot(t/Tb,Akk,t/Tb, x, ’r:’);% [t/Tb] %单极性码元—>双极性码元 Tb= 64*Dt
  119. %Tb:[码元]输入信号周期为Ts/ 2= 1/ 32000 s,即 32KHz【奈奎斯特采样】
  120. % t= 0:Dt:B_num*Tb-Dt; %仿真时间离散点[采样间隔,码元数*(时间/码元)]
  121. % Dt= 1/(Fc*Fc_sample); %采样间隔[载波周期/采样点数][ 4.88281250000000e- 07]
  122. axis([ 0 8 - 1.5 1.5]);
  123. title( ’基带波形’);
  124. subplot( 312)
  125. plot(t/Tb,Alpha* 2/pi);
  126. axis([ 0 8 min(Alpha* 2/pi)- 1 max(Alpha* 2/pi)+ 1]);
  127. title( ’相位波形’);
  128. S_Gmsk= cos( 2*pi*Fc*t+Alpha);%载波频率+相位
  129. subplot( 313)
  130. plot(t/Tb,S_Gmsk,t/Tb, x, ’r:’);
  131. axis([ 0 8 - 1.5 1.5]);
  132. title( ’GMSK波形’);
  133. %解调 % 延迟 1bt,移相pi/ 2 GMSK波形 + 相位波形 + GMSK波形
  134. for n= 1: 512; %延迟 1bt,移相pi/ 2 GMSK波形
  135. if n<=B_sample % n< 64
  136. Alpha1(n)= 0; % Alpha 前 640
  137. else
  138. Alpha1(n)=Alpha(n-B_sample);%右移 64
  139. end
  140. end
  141. a=[ 0 1 1 1 1 1 1 1 ];
  142. ak=sigexpand(a,B_sample); %码元扩展[ 8* 64-> 1* 512]
  143. % Ak=[ 0 0 1 0 1 0 1 0]; %产生 8个基带信号[ 8个比特]
  144. % Akk=sigexpand(Ak,B_sample); %码元扩展[ 8* 64-> 1* 512]
  145. temp=conv(ak, gt); %码元扩展[卷积向量ak和 gt 512+ 64- 1]
  146. ak=temp( 1: length(ak)); %码元扩展[取出temp变量中前 512个]
  147. S_Gmsk1= cos( 2*pi*Fc*(t-Tb)+Alpha1+pi/ 2).*ak; %延迟 1Tb[一个码元周期],移相pi/ 2
  148. figure
  149. subplot( 311)
  150. plot(t/Tb,S_Gmsk1);
  151. axis([ 0 8 - 1.5 1.5]);
  152. title( ’延迟1Tb,移相pi/2 GMSK波形’);
  153. xt=S_Gmsk1.*S_Gmsk;
  154. subplot( 312)
  155. plot(t/Tb,xt);
  156. axis([ 0 8 - 1.5 1.5]);
  157. title( ’相乘后波形’);
  158. %低通滤波
  159. Fs= 10000; %采样频率【奈奎斯特准则】
  160. rp= 3; rs= 50; %通带纹波不超过rp dB
  161. %阻带衰减至少rs dB
  162. wp= 2*pi* 50; ws= 2*pi* 800;% Passband corner frequency 通带截止频率
  163. % Stopband corner frequency 阻带截止频率
  164. [n,wn]=buttord(wp,ws,rp,rs, ’s’) %巴特沃斯滤波器的阶数和截止频率
  165. % 这个函数返回满足性能所需通带波纹和阻带衰减条件下的最低阶N及截止频率
  166. % in which case Wp and Ws are in radians/second
  167. % *****设计一个n阶巴特沃斯模拟低通滤波器。画出其幅度和相位响应*************
  168. [z,p,k]=buttap(n); %Butterworth滤波器原型,返回零点、极点和增益
  169. % H( s) = z( s)/p( s) = k/( ( s-p( 1))( s-p( 2))( s-p( 3))…( s-p( 1)))
  170. [bp,ap]=zp2tf(z,p,k); %convert to transfer function form
  171. [bs,as]=lp2lp(bp,ap,wn);
  172. [b,a]=bilinear(bs,as,Fs);
  173. y=filter(b,a,xt);
  174. subplot( 313)
  175. plot(t/Tb, y,t/Tb, x, ’r:’);
  176. axis([ 0 8 - 1.5 1.5]);
  177. title( ’经过低通滤波器后波形’);
  178. for i= 1: 8
  179. if y(i*B_sample)> 0 % 8* 64 = 512
  180. bt(i)= 1
  181. else
  182. bt(i)= 0
  183. end
  184. end
  185. bt= 2*bt- 1; %解调,反向解码
  186. btt=sigexpand(bt,B_sample); %码元扩展
  187. temp1=conv(btt, gt); %码元扩展
  188. btt=temp1( 1: length(btt)); %码元扩展
  189. figure
  190. subplot( 311)
  191. plot(bt)
  192. title( ’抽样值’);
  193. axis([ 0 8 - 1.5 1.5]);
  194. subplot( 312)
  195. plot(t/Tb,Akk,t/Tb, x, ’r:’);
  196. axis([ 0 8 - 1.5 1.5]);
  197. title( ’原基带波形’);
  198. subplot( 313)
  199. plot(t/Tb,btt,t/Tb, x, ’r:’);
  200. axis([ 0 8 - 1.5 1.5]);
  201. title( ’解调后波形’);

      
      
      
      
  1. title( ’抽样值’);
  2. axis([ 0 8 - 1.5 1.5]);
  3. subplot( 312)
  4. plot(t/Tb,Akk,t/Tb,x, ’r:’);
  5. axis([ 0 8 - 1.5 1.5]);
  6. title( ’原基带波形’);
  7. subplot( 313)
  8. plot(t/Tb,btt,t/Tb,x, ’r:’);
  9. axis([ 0 8 - 1.5 1.5]);
  10. title( ’解调后波形’);


转载自https://blog.csdn.net/u013346007/article/details/62917617

你可能感兴趣的:(GMSK的调制与解调)