GMSK信号调制

GMSK为MSK+高斯滤波器:
其中高斯滤波器的响应:

MSK信号表示:

 
 
close all;clear;
Tpulse=20e-6;%脉冲宽度
Fs=25e6;%采样频率
Ts=1/Fs;%采样周期
S=floor(Tpulse/Ts);%一个脉冲内的采样点数
r=5;%过采样
S=S/r;%每r个点代表一个码元,相当于在一个脉冲内的码元数
data=randsrc(S,1);%随机产生S个+1、-1

BT=0.3;
Tb=Ts*r;%Ts为采样时间,Tb脉冲宽度,一个脉冲宽度内有r个点

%GMSK的高斯噪声长度为21
PTV=-2*Tb:Ts:2*Tb;

sigma=sqrt(log(2))/(2*pi*BT);
gauss=(1/(sqrt(2*pi)*sigma*Tb))*exp((-PTV.^2)/(2*sigma^2*Tb^2));

%矩形脉冲产生,长度为6
RTV=-Tb/2:Ts:Tb/2;
rect=(1/2*Tb)*ones(size(RTV));

%脉冲数据与高斯滤波器的卷积求脉冲响应,长度:21+6-1
G_TEMP=conv(gauss,rect);

%因为脉冲响应的范围是负无穷到正无穷,非因果
%|t|>2T区间值几乎为0,所以将-2T搬移到正半轴上
%由于每个符号长度为5而脉冲响应有值部分仅在5-20之间,因此阶段为3*Tb的长度即可
G=G_TEMP(r+1:4*r); %保留下6-20之间的值

%因为频率脉冲函数再整个区间的积分要为0.5;polyarea((1:15),G)= 3.3767e+14
%所以进行规范化, polyarea((1:15),G_FUN)=0.4768
G_FUN=(G-G(1))./(2*sum(G-G(1)));

%累计求和函数a(3)=b(1)+b(2)+b(3)
%积分
Q_FUN=cumsum(G_FUN); 

h=0.5;%调制系数 MSK为0.5

%KT-(K+1)T的附加相位,5个点表示一个相位
phi(1:r)=2*pi*h*data(1).*Q_FUN(1:r);
phi(1+r:2*r)=2*pi*h*data(2).*Q_FUN(1:r)+2*pi*h*data(1).*Q_FUN(1+r:2*r);
phi(1+2*r:3*r)=2*pi*h*data(3).*Q_FUN(1:r)+2*pi*h*data(2).*Q_FUN(1+r:2*r)+...
    2*pi*h*data(1).*Q_FUN(1+2*r:3*r);
for i=4:length(data)
    phi(1+(i-1)*r:i*r)=2*pi*h*data(i).*Q_FUN(1:r)+2*pi*h*data(i-1).*Q_FUN(1+r:2*r)+...
        2*pi*h*data(i-2).*Q_FUN(1+2*r:3*r)+pi*h*sum(data(1:i-3));
end

phi=transpose(phi);%变为行向量
GMSK_PHASE=exp(1i.*phi);%相位
GMSK_signal=exp(1i*(2*pi*0.1*(1:length(phi))'+phi));%GMSK信号
GMSK_FFT=abs(fft(GMSK_signal));%频谱
GMSK_FFT = mapminmax(GMSK_FFT', 0, 1); %归一化函数
GMSK_Square_Spectrum=abs(fft(GMSK_signal.^2));%平方谱
GMSK_Square_Spectrum = mapminmax(GMSK_Square_Spectrum', 0, 1); %归一化函数
plot(GMSK_Square_Spectrum);title('GMSK平方谱');


猜你喜欢

转载自blog.csdn.net/u011441044/article/details/80635718