GMSK 调制的的原理非常简单。
就是MSK调制前进行Gauss滤波。
在实现中有这样的方法,首先产生高斯系数,对称的上升陂和下降陂系数。输入一个符号,进行上采样,经过高斯滤波器,滤波器的输出做有符号的累加。
累加的输出与上限值和下限值比较,即大于PI的值减去2PI或者小于-PI的要加上2PI。把结果送到CORDIC中产生正弦和余弦波形,即GMSK波形。
实际在modelsim 中实现滤波器的时候,用加法替代了乘法运算。设置一个数据长度和系数长度等长的数据寄存器或者说RAM。
输入一个符号,如果为1,则把这个RAM第一个值1,其他的值填0,如果为0,则把这个RAM第一个值-1,其他的值填0,
然后在时钟周期下,这个1(或者-1)一个时钟移动一次,这样这个寄存器中就是这样的值。
第1时刻:
·1--0--0--0--0--0--0--0--0--0--0--0--0--0--0--0--0--........
第2时刻:
·0--1--0--0--0--0--0--0--0--0--0--0--0--0--0--0--0--........
第3时刻:
0--0--1--0--0--0--0--0--0--0--0--0--0--0--0--0--0--........
第4时刻:
·0--0--0--1--0--0--0--0--0--0--0--0--0--0--0--0--0--........
第5时刻:
0--0--0--0--1--0--0--0--0--0--0--0--0--0--0--0--0--........
把不为0的寄存器对应的系数值做N个数的累加,N个周期后就输出一个波形,这个波形就是GMSK调制的相位。把相位输入到CORDIC,得到对应的正弦和余弦波形。