【附代码片解释】MSK正交调制&正交解调&mskmod函数

近在做MSK的正交调制解调仿真,有一些心得体会,也踩了一些坑,再次记录一下。
我的目标是,自己写一个正交调制解调,其性能和matlab自带的mskmod和mskdemod函数性能相近,功能相同,输出相同。

一、 mskmod函数初探

发现了一些mskmod函数的一些秘密,在此记录一下

mskmod - Minimum shift keying modulation
This MATLAB function outputs the complex envelope y of the modulation of the
message signal x using differentially encoded minimum shift keying (MSK)
modulation.

y = mskmod(x,nsamp)
y = mskmod(x,nsamp,dataenc)
y = mskmod(x,nsamp,dataenc,ini_phase)
[y,phaseout] = mskmod(...)

从help mskmod函数我们可以得到mskmod函数的使用方法

1. 基础用法

最基础的是直接输入需要调制的信息序列和输入上采样倍数

信息序列:输入需要是01序列,不能是+1/-1这种
上采样:即一个波形采样多少个点,比如一个波形时间为1s,采样率为100Hz,那么上采样倍数就是100,如果一个波形时间为2s,采样率为100Hz,上采样倍数就是50

在实际的仿真代码中,我是这样设置的:

R  = 1e1;   % The bit speed
Fc = 1e1;   % The carrier frequency
Fs = 1e2;   % the sample frequency
Ts = 1/Fs;
Upsample = Fs/R;

2.编码

mskmod函数第三个参数是是否做数据差分编码,默认情况下,mskmod是’diff’方式进行调制,也就是默认情况下,mskmod函数认为你的输入是已经经过差分编码的

’nondiff’ 表示输入的数据是未经差分编码
’diff’ 表示输入的数据是经过差分编码的

但是要注意,这里有一个大坑!!!!
起初我认为,我在mskmod函数里输入diff,是让mskmod函数帮我做一个差分编码,但是仿真结果总是出错,后来我扣了扣mskmod代码注解的字眼

dataenc can be either ‘diff’ for differentially encoded MSK or ‘nondiff’ for nondifferentially encoded MSK.

这里他用的encoded,意思是已经编码过的,非常坑!!
言归正传,由于msk有相位模糊的问题,因此一般是加上差分编码,这里附上差分编码的代码:

% msk差分编码
b0=1;
for i=1:N
    encode_output(i)=b0*bitstream(i);%对应bk
    b0=bitstream(i);
end

这里也有一个误区,有两种常见的差分编码形式,需要好好区分,用对才可以

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值