GMSK在MSK信号调制的基础上前置了一个高斯滤波器,用来缩小波束的3dB带宽。双极性bit序列经过Gauss滤波器后,波形会更加平滑,功率谱的旁瓣衰减特性会更好。算法原理框图如下所示。
公式推导见GMSK调制解调(一)_yundanfengqing_nuc的博客-CSDN博客_gmsk调制
高斯滤波器的冲击响应matlab仿真如下:
%++++++++++++++++++++++++++++++++++++++++++++++++++++++
% Filename: gmsk.m
%
% Description: Generate baseband GMSK signal
%
% Author: Jeff Laster, MPRG, Virginia Tech
%++++++++++++++++++++++++++++++++++++++++++++++++++++++
t0 = clock; % 当前时间
%++++++++++++++++++++++++++++++++
% Constant Definition
%++++++++++++++++++++++++++++++++
DRate = 1; % data rate
M = 18; % no. of sample per bit
%++++++++++++++++++++++++++++++++
% Variable Definition
%++++++++++++++++++++++++++++++++
N = 12753; % no. of bits for simulation
%EbNodB = 10; % Eb/No (dB scale)
BT = 0.3; % Bandwidth*Period (cannot change )
%++++++++++++++++++++++++++++++++++
% Program Control Variables
%++++++++++++++++++++++++++++++++++
fig_no = 1; % initialize fig no.
%+++++++++++++++++++++++++++++++++++
% Derived variables
%+++++++++++++++++++++++++++++++++++
T = 1/DRate; % data period
Ts = T/M; % sampling period ( discrete-time )
%EbNo = 10^(EbNodB/10); % Eb/No (linear scale )
%+++++++++++++++++++++++++++++++++++++
% Generates Input Random Data
%+++++++++++++++++++++++++++++++++++++
[data, RandData] = pn_gen(N,M); % 函数做上采样处理 等效与upsample
%dodata
%+++++++++++++++++++++++++++++++++++++
% Generate GMSK Pulse Response
%+++++++++++++++++++++++++++++++++++++
[g,fig_no] = pulse_re(BT,T,Ts,M,fig_no);%冲击响应
%+++++++++++++++++++++++++++++++++++++++++
% Generate Gaussian Filtered Pulses
%+++++++++++++++++++++++++++++++++++++++++
[b,delay_GF,fig_no] = gauss_pu(g,data,1,fig_no);%高斯滤波器的频率响应
%+++++++++++++++++++++++++++++++++++++++++
% Generate GMSK signal
%+++++++++++++++++++++++++++++++++++++++++
[s,fig_no] = gmsk_sig(b,Ts,M,fig_no);
clear T DRate BT
%data=zeros(size(data));
%for i=1:N
% for k=1:M
% data(i*M+M/2-1+k)=Rdiff_mse(i);
% end
%end
Time = etime(clock,t0)
function [b,delay_GF,fig_no,sim_time] = gauss_pu(g,data,plot_control,fig_no);
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
% Filename : gauss_pu.m
%
% Function call : input =>[g,data,plot_control,figure_no]
% output=>[b,delay_GF,figure_no,sim_time]
%
% generates Gaussian filtered pulse train
%
%
% Input : g - Gaussian coefficient
% data - impulse train
% plot_control -
% figure_no -
% Output : b - Gaussian pulse waveform
% delay_GF - delay created by Gaussian filter
% figure_no
% local var :
% clear var :
%
% Author : Jeff Laster, MPRG, Virginia Tech
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
t0 = clock;
b = filter(g,1,data); % 计算高斯滤波器的频率响应
delay_GF = fix(length(g)/2);