• 大小: 9KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: Matlab
  • 标签: GMSK  GSM  

资源简介

基于CSDN GMSK代码的修正版本,具体包括GMSK调制和解调

资源截图

代码片段和文件信息


% 附录:MATLAB程序
%绘制调制波形00101010
%
clear all;
close all;
 
%******************** Preparation part ************************************
% Ts=1/16000;            %基带信号周期为1/16000s即为16KHz
 
Tb=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 0 0 0 0 0 0];        %产生8个基带信号[8个比特]
Ak=2*Ak-1;    %[多此一举]    %单极性码元—>双极性码元
gt=ones(1B_sample);         %每码元对应的载波信号[1*64]
Akk=sigexpand(AkB_sample);  %码元扩展[64*8->1*512]
temp=conv(Akkgt);           %码元扩展[卷积向量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(1length(gaussf)); %使J_g 的长度和Gaussf的一样
%************************ SUM GMSK ****************************************
 
for i=1:length(gaussf)  %320个点
    if i==1 
        J_g(i)=gaussf(i)*Dt;          %若不乘以Dt则最后结果要出错?
    else
        J_g(i)=J_g(i-1)+gaussf(i)*Dt; %若不乘以Dt则最后结果要出错?
    end;
end;
 
J_g=J_g/2/Tb;    %若先前循环不乘以Dt则最后结果要出错?
 
%******************** START CALCULATION ***********************************
 
%计算相位Alpha
Alpha=zeros(1length(Akk));
k=1;  %计算第1个码元的相位
L=0;
for j=1:B_sample  %采样点数为64
    J_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[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%采样点数为64
    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);%第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%采样点数为64
    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)+Ak(k-2)*J_g(j+4*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

评论

共有 条评论