⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 li_xiang.asv

📁 理想无算法调制解调,包含了产生高斯噪声的子程序。
💻 ASV
字号:
%没有初始相位的理想程序          正确的格雷码映射
clear;
a2=[0 pi/4 pi/2 3*pi/4 pi -pi/4 -pi/2 -3*pi/4];
a4=[0 0 0;0 0 1;0 1 1;0 1 0;1 1 0;1 0 0;1 0 1;1 1 1];
%%%%%%%%%%%%%%%%%%%%%%%%%
A=[3*pi/4 pi pi/4 pi/2 -pi/4 -pi/2 -3*pi/4 0];%%%   A应该是正确的格雷码映射
%%%%%%%%%%%%%%%%%%%%%%%

M=8;
N=1000;%符号              
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

snr_in_dB=30;%%%%%%%%%%%%%%%%%      we can change snr_in_dB' value here

Es=1;
snr=10^(snr_in_dB/10);
%snr=exp(snr_in_dB*log(10)/10); 
sgma=sqrt(Es/(sqrt(M))/snr/2);
input=round(rand(1,log2(M)*N)); 

%theta(1)=0; %初始相位
R1=1;%%不要初始相位

 for i=1:3:length(input)-2
    if ((input(i)==1)&(input(i+1)==1)&(input(i+2)==1))
        del_theta=0;
    elseif ((input(i)==0)&(input(i+1)==1)&(input(i+2)==1))
        del_theta=pi/4;
          elseif ((input(i)==0)&(input(i+1)==1)&(input(i+2)==0))
        del_theta=pi/2;
          elseif ((input(i)==0)&(input(i+1)==0)&(input(i+2)==0))
        del_theta=3*pi/4;
          elseif ((input(i)==1)&(input(i+1)==1)&(input(i+2)==0))
        del_theta=-pi/4;
          elseif ((input(i)==1)&(input(i+1)==0)&(input(i+2)==0))
        del_theta=-pi/2;
          elseif ((input(i)==1)&(input(i+1)==0)&(input(i+2)==1))
        del_theta=-3*pi/4;
          elseif ((input(i)==0)&(input(i+1)==0)&(input(i+2)==1))
         del_theta=pi;
     end 

     theta(R1)=del_theta+(R1)*3*pi/8;
     R1=R1+1;
 end
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 x1=exp(j*theta);
 et=x1(1:N);
 
 figure(1);
 plot(et);
 title('e(t):rotate 3/8pi');
  %insert zeros
 
%%%%%%%%插3个0=4000%%%%%%%%%%%%%%%%%%%%%
for i=0:length(et)-1
    etx(i*4+1)=real(et(i+1));
    ety(i*4+1)=imag(et(i+1));
    for k=i*4+2:i*4+4
        etx(k)=0;
        ety(k)=0;
    end
end
%%%%%%%%%%%%%%%%%%%%%



et_insert_zeros=etx+j*ety;

%%%%%%%%%


%gsm/edge pulse shaping  一个符号周期有4个样点的滤波器系数,个数21
tx=[2.9189e-007	1.888e-005	0.00046755	0.0052743	0.031591	0.11475	0.2828	0.51851	0.75967	0.93598	1	0.93598	0.75967	0.51851	0.2828	0.11475	0.031591	0.0052743	0.00046755	1.888e-005 2.9189e-007];


shaped_et=filter(tx,1,[et_insert_zeros]);
figure(2);
plot(shaped_et);
title('pulse shape');
%%%%%%%%%%%%加噪声
%%%%%%%%%%%%%%%%%%%%%%%%%%%%加高斯噪声%%%%%%%%%%%%%%
I=real(shaped_et);
Q=imag(shaped_et);
for i=1:length(I)
  %  [gs1,gs2]=gngauss(sgma);
 gs1=gngauss(sgma);
  
  I1(i)=I(i)+gs1;
  %I1(i+1)=I(i+1)+gs1; 
  Q1(i)=Q(i)+gs1;
  %Q1(i+1)=Q(i+1)+gs1; 
end
shaped_et=I1+j*Q1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
c_opt=[0 0 0 0 0 0 0  -0.012622   0.81641   -5.4860   10.0422   -5.4860    0.81641   -0.012622  0  0  0  0  0  0  0];
%%%21个点的接收滤波器系数
 
equalized_st=filter(c_opt,1,[shaped_et]);%zero forcing filter

%%%%%% 
k1=1;

for i=1:4:length(equalized_st)
   downsampled_equalizer_output(k1)=equalized_st(i);%underdown sampling
   k1=k1+1;
end

downsampled_equalizer_output=downsampled_equalizer_output(6:length(downsampled_equalizer_output));

figure(3);
plot(downsampled_equalizer_output);
title('after receiver with no ISI');

 x=real(downsampled_equalizer_output);
 y=imag(downsampled_equalizer_output);
for i=1:length(downsampled_equalizer_output);

    theta2(i)=atan2(y(i),x(i));
    theta3(i)=theta2(i)-(i)*3*pi/8;
  
end

x2=exp(j*theta3);
x_judge=real(x2);
y_judge=imag(x2);



for i=1:length(x2)
      phase1(i)=qxw(x_judge(i),y_judge(i));
  end
  %%%%%%%%%%%%%5
figure(4);
plot(exp(j*phase1),'.');
%plot(exp(j*phase1));
  edge_ma_liu1=[];
for i=1:8
    ss(i,:)=[cos(A(i)) sin(A(i))];
end
for i=1:length(phase1)
    r(i,:)=[cos(phase1(i)) sin(phase1(i))];
end

for j=1:length(phase1)
   for i=1:8
    cc(i)=dot(r(j,:),ss(i,:));
  end
cc_max=max(cc);
if(cc_max==cc(1))
     edge_ma_liu1=[edge_ma_liu1 a4(1,:)];
 elseif(cc_max==cc(2))
     edge_ma_liu1=[edge_ma_liu1 a4(2,:)];
 elseif(cc_max==cc(3))
     edge_ma_liu1=[edge_ma_liu1 a4(3,:)];
 elseif(cc_max==cc(4))
     edge_ma_liu1=[edge_ma_liu1 a4(4,:)];
 elseif(cc_max==cc(5))
     edge_ma_liu1=[edge_ma_liu1 a4(5,:)];
 elseif(cc_max==cc(6))
     edge_ma_liu1=[edge_ma_liu1 a4(6,:)];
 elseif(cc_max==cc(7))
     edge_ma_liu1=[edge_ma_liu1 a4(7,:)];
 elseif(cc_max==cc(8))
     edge_ma_liu1=[edge_ma_liu1 a4(8,:)];
 end
end
   %%probility:
ps1=0;
for n=1:length(edge_ma_liu1)
    if( input(n)==edge_ma_liu1(n))
        continue;
    else
           ps1=ps1+1;
       end
   end
p1=ps1/length(edge_ma_liu1) 
%%%%%%%%%%%%%%%


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -