📄 gmsk.m
字号:
%-------------------------------% Matlab仿真GMSK调制解调% %------------------------------N=1000; %码元数S=16; %每个码元采样数Rb=1; %码元数率1kbpsTb=1/Rb;t=Tb/S; %采样时间间隔fc=4; %载波4kHzBT = 1; %高斯滤波器BT值,通过改变此值改变功率谱n = 40; %高斯滤波器参数o = 16; %高斯滤波器参数,采样频率num =Rb* N+1; %数据长度 gmsk = zeros(1,N*S+1); %gmsk总长度%产生双极性基带信号ck=randint(num,1); for k0=1:num if ck(k0)==0 ck(k0)=-1; endendck(1) = -1;Qkt = zeros(1,num); %正交数据初始化Ikt = Qkt; %同相数据初始化%串并转换Ikt(1:2:num-2)=ck(2:2:num-1); lkt(2:2:num-1)=ck(2:2:num-1);Qkt(2:2:num-1)=ck(3:2:num);Qkt(3:2:num)=ck(3:2:num);Ikt(num) = 0;%升采样Ik = zeros(1,num*S); Qk = Ik;for k1=1:num for k2=1:S Ik(S*(k1-1)+k2)=Ikt(k1); Qk(S*(k1-1)+k2)=Qkt(k1); endend %通过高斯滤波器gIk = conv(Ik,gaussfir(BT,n,o));gQk = conv(Qk,gaussfir(BT,n,o));lgh = length(gIk);gI=gIk.*cos(pi*t*(1:lgh)*Rb/2).*cos(fc*2*pi*t*(1:lgh)); %gmsk同相分量gQ=gQk.*sin(pi*t*(1:lgh)*Rb/2).*sin(fc*2*pi*t*(1:lgh)); %gmsk正交分量 gmsk= gI + gQ ; %gmsk时域信号波形y = fft(gmsk); %生成gmsk信号功率谱Sgmsk = 10 * log10(y.*conj(y));a=length(Sgmsk);%显示gmsk信号功率谱figure(1) plot((0:a/2-fc*a/S)/a*S,Sgmsk(fc*a/S:a/2));title('gmsk信号功率谱波形');xlabel('(f-fc)T'), ylabel('dB');%瑞利多径衰落信道r=gmsk;for k=1:50 %假设有50个信道 b=raylrnd(1); %瑞利分布的乘性噪声 delay=floor(S*rand(1)/10); %延时 rm=b*[zeros(1,delay),gmsk(1:lgh-delay)]; r=r+rm;end%双边带宽为2Rb的LPFw=Rb*t*lgh;LPF=[ones(1,w),zeros(1,lgh-2*w),ones(1,w)];%同向分量提取ri=r.*cos(2*pi*fc*t*(1:lgh));ri=real(ifft(fft(ri,lgh).*LPF));%正交分量提取rq=r.*sin(2*pi*fc*t*(1:lgh));rq=real(ifft(fft(rq,lgh).*LPF));%取样判决rik=ri.*sign(cos(pi/2/Tb*t*(1:lgh)));rqk=rq.*sign(sin(pi/2/Tb*t*(1:lgh)));result=zeros(1,lgh);for k=1:N/2 %并串转换 result((2*k-2)*S+1:(2*k-1)*S)=sign(rqk((2*k-1)*S)); result((2*k-1)*S+1:2*k*S) =sign(rik(2*k*S));endfigure(2)plot(t:t:10*S*t,result(1:10*S));axis([0,10*Tb,-1.5,1.5]);title('接收到的时域波形');xlabel('t(ms)');ber = 0;for k3 = 1:N-1 %计算误码率 if result(k3) ~= ck(k3) ber = ber + 1; endendber
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -