一 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误码性能,基本保持一致。