GMSK调制 MATLAB代码

%span 符号数
%sps 每个符号样本数
%BT 时间积
%Fs 采样频率
%Fb 码元速率
Nbit = 1000 ;
BT = 0.5 ;
span = 8 ;
sps = 130 ;
Fb = 50e3 ;
Fc = 4 * Fb ;
Fs = sps * Fb ;
K = ceil(Fs / 2 / Fc - 1) ;% 不重要,这里是采用了多载波发送,K表示可用载波数量
fcmat = (1 : K)' .* repmat(Fc, K, 1) ;
% CRC校验码
crc_polynominal = [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1] ;%生成多项式16次
crcgenerator = comm.CRCGenerator(crc_polynominal);  
msgmat = zeros(K, Nbit + length(crc_polynominal) - 1) ; % 信息长度
for i = 1:size(msgmat, 1)
    msgmat(i, :) = crcgenerator(randi([0, 1], Nbit, 1))' ; % 一个长度为1000+16
end
modwave = zeros(1, sps * size(msgmat, 2)) ;
msg = msgmat(1,:);
Len = span+1 ; % symbol time span after Gaussian pulse shaping
%% 高斯滤波
csps = 200 * sps ; % high sample rate for discrete integral
% 升采样
gaussfilter = gaussdesign(BT, span, csps) ; 
rectbasewav = rectpulse([1], csps) ; % 阶跃函数
gt = conv(gaussfilter, rectbasewav) ;% 得到gt
deltaphi = zeros(Len, sps) ;
for i = 1:Len  % 一个信号可以影响到四个码元,长度为4*2+1 = 9
    for j = 1:sps       
        deltaphi(Len+1-i, j) = sum(gt(1+(i-1)*csps : 1+(i-1)*csps+j*csps/sps-1)) / sum(gt) * pi/2 ;
    end 
end  % 求出 gt的积分,长度为 9 T

%% MSK调制
bimsg = 2*msg - 1 ; % 转成双极性
padbimsg = [zeros(1, (Len-1)/2), bimsg, zeros(1, (Len-1)/2)] ;  % 前后增加4个长度
phitrace = zeros(1,length(msg)) ;
lastphi = 0 ; 
for k = 1:length(msg)
    kthphi = lastphi + padbimsg(k : k+Len-1) * deltaphi ;
    lastphi = kthphi(end) ;
    phitrace = [phitrace kthphi] ; 
end
t = (0:length(msg)*sps-1)/Fs ;
modwave = (cos(phitrace) + 1i*sin(phitrace)) .* exp(1i*2*pi*Fc*t) ; 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肆拾伍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值