背景:讲MSK正交调制、差分编码的文献很多,但是稍微看一下就发现,很多都是错的,模糊,没有推导,直接给出方法,方法好像也不咋对。所以说大家看这篇文章,看看推导对不对就行了,跟很多文献(包括重点大学教材)都对不上。如果我这个推导不对的话,欢迎指正!
推导过程:MSK信号的表达式如下
很多资料根据相位连续性给出了关系式
很遗憾的是,这样是不对的,因为第k-1个符号的结尾是在,第k个符号的开始是,所以根据相位连续性,即第k-1个符号结尾处的附加相位等于第k个符号开始时的附加相位可以得到关系式
根据(3)式,可以得到一个重要的结论:令信号为双极性信号,即取时,当k为偶数,并且的时候,。
根据(1)式和三角公式可以得到MSK信号的正交表示形式
其中,,。
(3)式的正确性可以通过正交表达式(4)来验证。如果采用(2),变换的时候不为0,这样会导致相位不连续;同理。
根据上面的结论可以得到,当k为偶数,并且的时候,变化。注意到,当变化
的时候,由于也会变化,所以不会发生变化。只有当 k为奇数,并且的时候,
才会变化。这就跟所谓的“差分”有关系了。
step1.计算出的“差分”: ,当时,意味着没有发生变化,当时, 意味着发生了变化。
step2.串并转换: 因为变化只跟的偶数位(表示为)有关系,的变化只跟奇数位(表示为)有关系,所以,提取两路信号和。
step3.计算:初始化,,以此递推
step4.计算:初始化,,以此递推。
仿真对比:跟tx_data = mskmod(bitstream,Upsample,'nondiff',0*pi)对比是不一样的,为什么我暂时也不知道。但是所述方法跟下面这个函数的结果是一样的。
hMod = comm.MSKModulator('BitInput', true, ...
'InitialPhaseOffset', 0);
modSignal = step(hMod, bitstream.');