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

📄 m_cov_cul03_unmodule_precise.m

📁 该程序用以对m序列码的调制在负dB情况下解调的仿真
💻 M
字号:
%*********** 1023点m序列的产生 ****************%
clear;
clc;
close all;
cof1=4;
cof2=9;
N=9
number=2^N-1
m=zeros(1,number);
for i=1:N
    m(i)=1;
end
p=0;
i=1;
for i=N+1:number
m(i)=(((~m(i-N+cof1))&m(i-cof2))|(m(i-N+cof1)&(~m(i-cof2))));
end
m;
for p=1:number
if(m(p)==0)
  m(p)=1;
else
  m(p)=-1;
end
end
%******************* m序列调制 ***************************%
signal1=[-1];      %输入信号1
n1=length(signal1);
code1=zeros(1,n1);
for i=1:n1
   %if(signal(i)==1)
    sig_m1((i-1)*number+1:i*number)=m(1:number)*signal1(i);
   %else
   %sig_m((i-1)*511+1:i*511)=-m(1:511);
   %end
end 
signal2=[1];      %输入信号2
n2=length(signal2);
code2=zeros(1,n2);
for i=1:n2
   %if(signal(i)==1)
    sig_m2((i-1)*number+1:i*number)=m(1:number)*signal2(i);
   %else
   %sig_m((i-1)*511+1:i*511)=-m(1:511);
   %end
end 
signal3=[-1];      %输入信号3
n3=length(signal3);
code3=zeros(1,n3);
for i=1:n3
   %if(signal(i)==1)
    sig_m3((i-1)*number+1:i*number)=m(1:number)*signal3(i);
   %else
   %sig_m((i-1)*511+1:i*511)=-m(1:511);
   %end
end 
%******************* 载频调制 ***************************%
n=n1;
l=7;
time1=0;
time2=2;
time3=4;
%****************** 三路信号叠加 ************************%
for i=1:time1
    sig3_m(i)=0;
end
for i=time1+1:time2
    sig3_m(i)=sig_m1(i-time1);
end
for i=time2+1:time3
    sig3_m(i)=sig_m1(i-time1)+sig_m2(i-time2);
end
for i=time3+1:n*number+time1
    sig3_m(i)=sig_m1(i-time1)+sig_m2(i-time2)+sig_m3(i-time3);
end
for i=n*number+time1+1:n*number+time2
    sig3_m(i)=sig_m2(i-time2)+sig_m3(i-time3);
end
for i=n*number+time2+1:n*number+time3
    sig3_m(i)=sig_m3(i-time3);
end
for i=n*number+time3+1:n*number+l
    sig3_m(i)=0;
end
%***************** 加入高斯噪声 **************************%
snr=-10;             
s_input=awgn(sig3_m,snr);
%s_input=sig3_m;
%****************  m序列解调 *****************************%
%s_m_demodule=zeros(1,n*511*f2/f1);
%%%%%%%%%%%%%%%%% 10倍采样 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
input=zeros(1,10*(n*number+l));
for i=1:n*number+l
  input(10*(i-1)+1:10*i)=fix(s_input(i));%未经调制
end
%input=input';

for i=1:number
    m1(10*(i-1)+1:10*i)=m(i);
end
gate=3000
%%%%%%%%%%%%%%% 相关运算1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
time=0
sum=0;
a=0;
sum1=0;
%for j=1:31
for j=1:number
 for i=1:number*10
   %if(signal(i)==1)
    sum=sum+input(time+i)*m1(i);
   %else
   %sig_m((i-1)*511+1:i*511)=-m(1:511);
   %end
 end 
 if(abs(sum)>gate)
     a=time;
     break;     
 end
 time=time+1;
 sum=0; 
end 
 sum=0;
for t=a:a+10
 for i=1:number*10
   %if(signal(i)==1)
    sum=sum+input(t+i)*m1(i);
   %else
   %sig_m((i-1)*511+1:i*511)=-m(1:511);
   %end
 end 
 if(sum1<abs(sum))
     sum1=abs(sum);
     del=t;
 end
 sum=0; 
end
a=del;
%%%%%%%%%%%%%%% 解调1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sum=0;
for j=1:n1
 for i=(j-1)*number+1:j*number*10
   %if(signal(i)==1)
    sum=sum+input(a+i)*m1(i-(j-1)*number);
   %else
   %sig_m((i-1)*511+1:i*511)=-m(1:511);
   %end
 end 

 if(sum>gate)
     code1(j)=1;
 elseif(sum<-gate)
     code1(j)=-1;   
 end
 sum=0;
end
%%%%%%%%%%%%%%% 相关运算2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
time=a+10;
sum=0;
b=0;
sum1=0;
sum3=0
%for j=1:31
for j=1:number
 for i=1:number*10
   %if(signal(i)==1)
    sum=sum+input(time+i)*m1(i);
   %else
   %sig_m((i-1)*511+1:i*511)=-m(1:511);
   %end
 end 
 if(abs(sum)>gate)
     b=time
     sum3=sum
     break;     
 end
 time=time+1;
 sum=0; 
end 
 sum=0;
for t=b:b+9
 for i=1:number*10
   %if(signal(i)==1)
    sum=sum+input(t+i)*m1(i);
   %else
   %sig_m((i-1)*511+1:i*511)=-m(1:511);
   %end
 end 
 sum2(t-b+1)=sum;
 if(sum1<abs(sum))
     sum1=abs(sum);
     del=t;
 end
 sum=0; 
end
b=del;
%%%%%%%%%%%%%%% 解调2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sum=0;
for j=1:n1
 for i=(j-1)*number+1:j*number*10
   %if(signal(i)==1)
    sum=sum+input(b+i)*m1(i-(j-1)*number);
   %else
   %sig_m((i-1)*511+1:i*511)=-m(1:511);
   %end
 end 

 if(sum>gate)
     code2(j)=1;
 elseif(sum<-gate)
     code2(j)=-1;   
 end
 sum=0;
end
%%%%%%%%%%%%%%% 相关运算3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
time=b+10;
sum=0;
c=0;
sum1=0;
%for j=1:31
for j=1:number
 for i=1:number*10
   %if(signal(i)==1)
    sum=sum+input(time+i)*m1(i);
   %else
   %sig_m((i-1)*511+1:i*511)=-m(1:511);
   %end
 end 
 if(abs(sum)>gate)
     c=time;
     break;     
 end
 time=time+1;
 sum=0; 
end 
 sum=0;
for t=c:c+10
 for i=1:number*10
   %if(signal(i)==1)
    sum=sum+input(t+i)*m1(i);
   %else
   %sig_m((i-1)*511+1:i*511)=-m(1:511);
   %end
 end 
 sum
 if(sum1<abs(sum))
     sum1=abs(sum);
     del=t;
 end
 sum=0; 
end
c=del;
%%%%%%%%%%%%%%% 解调3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sum=0;
for j=1:n1
 for i=(j-1)*number+1:j*number*10
   %if(signal(i)==1)
    sum=sum+input(c+i)*m1(i-(j-1)*number);
   %else
   %sig_m((i-1)*511+1:i*511)=-m(1:511);
   %end
 end 

 if(sum>gate)
     code3(j)=1;
 elseif(sum<-gate)
     code3(j)=-1;   
 end
 sum=0;
end
a
b
c
code1
code2
code3
input=input';

⌨️ 快捷键说明

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