📄 gmsk_mod_demod1.m
字号:
clear all
m=1000;
pi=3.14159;
id=sqrt(-1);
%-------------------------------------
%码元产生
ran=randn(1,m); %随机产生Bpsk的信号比特1或-1
data_sequence=zeros(1,m);
for i=1:m
if ran(1,i)>0
data_sequence(1,i)=1;
else
data_sequence(1,i)=-1;
end;
end;
%-------------------------------------------------------
%波形形成,内插和调制
nn=8; %每个比特的采样点数nn
Tb=1/4000;
fs=nn/Tb; %采样速率
I_wave=zeros(1,length(data_sequence)*8);
Q_wave=zeros(1,length(data_sequence)*8);
[I_wave]=wavemod(data_sequence);
figure(1)
hold on
plot(I_wave,'r.')
plot(I_wave,'b-')
hold off
angle=zeros(1,length(I_wave));
for i=1:length(I_wave)
for j=1:i
angle(i)=angle(i)+I_wave(j)/fs;
end;
angle(i)=(pi*angle(i)/(2*Tb));
angle(i)=rem(angle(i),2*pi);
end;
%angle=angle(15:14+length(data_sequence)*8);%[I_wave]中前两个点是0,所以去掉
angle=angle(13:12+length(data_sequence)*8);%[I_wave]中前两个点是0,所以去掉
for i=1:length(angle)
I_loop(i)=cos(angle(i));
Q_loop(i)=sin(angle(i));
end;
mod_train1=I_loop+Q_loop*id;
%-------------------------------------------------------
SNR=[2,4,6,8,10,12];
SNR=13;
for j=1:length(SNR)
sigma(j)=sqrt(1/10^(SNR(j)/10));
for k=1:length(mod_train1)
nose1(k)=gngauss(sigma(j));
nose2(k)=gngauss(sigma(j));
end;
mod_train=mod_train1+nose1+nose2*id;
%-----------------------解调------------------------------
x=real(mod_train);
y=imag(mod_train);
decision4=zeros(1,length(data_sequence)-1);
decision2=zeros(1,length(data_sequence)-1);
decision3=zeros(1,length(x));
decision1=zeros(1,length(x));
A=sqrt(x.^2+y.^2);
%----------------------------------------------------------------------------------
%-----------------1比特的判决和误比特率的计算---------------------------------------
for i=1:8
y_1(i)=y(i);%/A(i);
if y_1(i)>=0
decision1(i)=1;
else
decision1(i)=-1;
end;
end;
for i=9:length(x)
y_1(i)=(x(i-8)*y(i)-x(i)*y(i-8));%/(A(i)*A(i-8));
if y_1(i)>=0
decision1(i)=1;
else
decision1(i)=-1;
end;
end;
figure(2)
hold on
plot(y_1,'r.');
plot(y_1,'b-');
hold off
figure(3)
hold on
plot( decision1,'r.');
plot( decision1,'b-');
hold off
for k=1:length(data_sequence)-1
decision2(k)=decision1(k*8+3);%去掉参考的一个比特
end;
[NUM1,Pe1(j)]=symerr(data_sequence(2:m),decision2)
%----------------------1比特解调完成-----------------------------------------
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -