clear all
clc
global dt df t f N
close all
pi=3.1415926
fc=161.975
N=153600 % 采样点数
L=600
M=N/L % 码元数
Rb=0.96 % 发送码元的信息速率:2Mbps
Tb=1/Rb % 码元宽度:0.5us
dt=Tb/L;
df=1/(dt*N);
T=N*dt % 截短时间
B=N*df/2 % 系统带宽
t=[-T/2+dt/2:dt:T/2]; % 时域横坐标
f=[-B+df/2:df:B]; % 频域横坐标
EP=zeros(size(f));
EPg=zeros(size(f));
for ii=1:10;
for j=1:50;
%原始双极性不归零码
b=sign(randn(1,M));
for i=1:L,s(i+[0:M-1]*L)=b;end
figure(1)
subplot(211)
plot(t,s);
grid on % 打开网格
axis([-50*Tb,50*Tb,-1.2,1.2]) % 限定范围
title('原始I双极性不归零码')
xlabel('t (us)')
ylabel('x(t) (V)')
%原始双极性不归零码的功率谱
P=t2f(s);
P=P.*conj(P)/T;
EP=(EP*(j-1)+P)/j; %RZ功率谱的累计平均
end
Ps=10*log10(EP+eps);% 换算为db值
%高斯滤波器的传递函数
Bb=Tb/0.3;
alpha=sqrt(logm(2)/2/Bb^2);
H=exp(-alpha^2*f.^2);
%预编码
a(1)=b(1);
for i=M:-1:2,a(i)=b(i)*b(i-1);end
for i=1:L,sa(i+[0:M-1]*L)=a;end
%高斯滤波后的双极性不归零码
% figure(5)
send=real(f2t(t2f(s).*H));
%串并转换
%It
It=zeros(size(t));
for k=0:2*L:N-1;
kk=1:2:2*L;
kkk=1:L;
It(k+kk)=send(k+kkk+L);
It(k+kk+1)=send(k+kkk+L);
end
for k=N:-1:L+1,It(k)=It(k-L);end
%Qt
Qt=zeros(size(t));
for k=0:2*L:N-1;
kk=1:2:2*L;
kkk=1:L;
Qt(k+kk)=send(k+kkk);
Qt(k+kk+1)=send(k+kkk);
end
%Itt
Itt=It.*cos(pi*t/2/Tb);
figure(2)
subplot(211)
plot(t,Itt);
grid on % 打开网格
axis([-5*Tb,5*Tb,-1.2,1.2]) % 限定范围
title('Itt')
xlabel('t (us)')
ylabel('Itt (V)')
%Qtt
Qtt=Qt.*sin(pi*t/2/Tb);
figure(2)
subplot(212)
plot(t,Qtt);
grid on % 打开网格
axis([-5*Tb,5*Tb,-1.2,1.2]) % 限定范围
title('Qtt')
xlabel('t (us)')
ylabel('Qtt (V)')
%GMSK时域波形
gmsk=Itt.*cos(2*pi*fc*t)-Qtt.*sin(2*pi*fc*t);
figure(3)
plot(t,gmsk);
grid on % 打开网格
axis([-0.5*Tb,0.5*Tb,-1.2,1.2]) % 限定范围
title('GMSK时域信号')
xlabel('t (us)')
ylabel('gmsk (V)')
end
%GMSK频域波形
% n=gmsk;
% fnco=-5000; % 设置NCO
% nco=exp(-j*2*pi*fnco*t);
% fn=n.*nco;
% Fn=abs(fft(fn));
% figure(4);
% plot(B,Fn);
% grid on % 打开网格
% axis([-10^9,10^9,0,10000]) % 限定范围
% title('GMSK频域信号')
% xlabel('f')
% ylabel('gmsk (V)')
%接收端
r=gmsk;
%接收端的低通滤波器,带宽为Rb
LPF=zeros(size(f));
ai=(B-Rb)/2/B*size(f);
aj=(B+Rb)/2/B*size(f);
for k=(ai(1,2):aj(1,2)),LPF(k)=1;end
%接收端上支路LPF的输出,与Itt相似(图9)
RI=r.*cos(2*pi*fc*t);
RI=real(f2t(t2f(RI).*LPF));
figure(5)
subplot(211)
plot(t,RI);
grid on % 打开网格
axis([-5*Tb,5*Tb,-1.2,1.2]) % 限定范围
title('接收端上支路LPF的输出')
xlabel('t (us)')
ylabel('x(t) (V)')
%接收端下支路LPF的输出,与Qtt相似(图10)
RQ=-r.*sin(2*pi*fc*t);
RQ=real(f2t(t2f(RQ).*LPF));
figure(5)
subplot(212)
plot(t,RQ);
grid on % 打开网格
axis([-5*Tb,5*Tb,-1.2,1.2]) % 限定范围
title('接收端下支路LPF的输出')
xlabel('t (us)')
ylabel('x(t) (V)')
%取样
RIt=RI(2*L:2*L:N); % 上支路取样,每2Tb取样一个值,在整数处取样,-31-32,共M/2=64个
RQt=RQ(L:2*L:N); % 下支路取样,每2Tb取样一个值,在整数+0.5处取样,-31.5-31.5,共M/2=64个
%码型串并转换
Rt=zeros(1,M);
Rt(2:2:M)=RIt(1:M/2);
Rt(1:2:M-1)=RQt(1:M/2);
%判决
Rt=sign(Rt);
clear j; % 清除原复数变量的定义
d(1)=j;
for i=2:M,d(i)=d(i-1)*j;end
e=Rt.*d;
for i=1:2:M,e(i)=imag(e(i));end
f=b-e
%判决后的双极性不归零码
for i=1:L,sy(i+[0:M-1]*L)=e;end
figure(1)
subplot(212)
plot(t,sy);
grid on % 打开网格
axis([-50*Tb,50*Tb,-1.2,1.2]) % 限定范围
title('判决后的双极性不归零码')
xlabel('t (us)')
ylabel('sy(t) (V)')
% pr=abs(fft(r));
% pn=abs(fft(n));
% figure(5);
% subplot(2,1,1);
% semilogy(f,px(1:length(f))),ylabel('r');
% subplot(2,1,2);
% semilogy(f,pr(1:length(f))),ylabel('n');
评论10