MSK正交调制/解调

一 MSK原理

 关于MSK原理这里不再赘述,目标即实现MSK正交调制解调,性能和matlab自带的mskmod/mskdemod性能一致,功能一致。

二 MSK调制

       MSK调制和解调代码如下:  

function [y] = MSKMod(data, nSamp,initphase)
%% %%%%%%%%%%%%%%%%% 参数设定 %%%%%%%%%%%%%%%%%%%%%%
Rb = length(data);
Tb = 1/Rb;
Fs = nSamp*Rb;

% 差分编码 b(n)=a(n)*b(n-1);
b0=1;
a = data*2-1;
for i=1:Rb
    encode_output(i)=b0*a(i);%对应bk
    b0=encode_output(i);
end
b = encode_output;

% 串并转换
I = b(2:2:end);
Q = b(1:2:end);
pk = rectpulse(I,2);
pk = [1,pk(1:length(pk)-1)];
qk = rectpulse(Q,2);

%% 正交调制
pt = rectpulse(pk,nSamp);
qt = rectpulse(qk,nSamp);
t = 0:1/Fs:1-1/Fs;

osc_p = cos(pi*t/(2*Tb)+initphase);
osc_q = sin(pi*t/(2*Tb)+initphase);

sp = pt.*osc_p;
sq = qt.*osc_q;
y = (sp+j*sq).';

function [y] = MSKDemod(data, nSamp,initphase)
%% %%%%%%%%%%%%%%%%% 参数设定 %%%%%%%%%%%%%%%%%%%%%%
Fs = length(data);
info_len = length(data);
Rb = Fs/nSamp;
Tb = 1/Rb;
info_len = Rb;
t = 0:1/Fs:1-1/Fs;

data = data.';
%% 解调

osc_p = cos(pi*t/(2*Tb)+initphase);
osc_q = sin(pi*t/(2*Tb)+initphase);

number_delay  = nSamp;%% 1个符号


recv_I = [data(number_delay+1:end),zeros(1,number_delay)];
osc_I = [osc_p(number_delay+1:end),zeros(1,number_delay)];
dsp = real(recv_I.*osc_I);
dsq = imag(data.*osc_q);



%% 积分判决,取平均值去除多余分量或采用滤波器
for i = 1:round(info_len/2)
    dpk(i) = sign(sum(dsp((i-1)*2*number_delay+1:i*2*number_delay)));
    dqk(i) = sign(sum(dsq((i-1)*2*number_delay+1:i*2*number_delay)));
end

%% 并串转换
bit_recover = zeros(1,info_len);
bit_recover(2:2:end) = dpk;
bit_recover(1:2:end) = dqk;

%% 差分解调
% bit_recover = (bit_recover+1)/2;
% demodData2 = zeros(1,info_len);
a11 = 1;
for j = 1:info_len
    demodData2(j) =  bit_recover(j)*a11;
    a11 = bit_recover(j);
end


y = ((demodData2+1)/2).';


三 仿真结果

       分别对比了MSK理论相干解调、经过差分编解码的相干解调以及自己写的MSK误码性能,基本保持一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值