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

📄 main0.m

📁 带汉明码的直接序列变换DSSS
💻 M
字号:
snr_in_dB=30;
Lc=31;
snr=10^(snr_in_dB/10);  %将分贝转化为倍数
sgma=1;                 %噪声的标准方差设为固定值
Eb=2*sgma^2*snr;        %达到设定信噪比所需的信号幅度
E_chip=Eb/Lc;           %每码片的能量
n=20;
N=Lc^2*n;             %传送的比特数目
%为减少该程序的运算时间,数据的产生、
%噪声、干扰、译码和差错计算都一起执行
%这样做有助于超长运算矢量的计算
transig=[];
data=[];
for i=1:N           %产生输入序列
    temp=rand;
    if temp<0.5
        data(i)=0;
        data1(i)=-1;
    else 
        data(i)=1;
        data1(i)=1;
    end
end
Gold;           %生成GOLD信号
%下面进行扩频
%transig 为扩频后的信号
for i=1:n
    y=data((i-1)*Lc^2+1:i*Lc^2);
    for j=1:Lc
        trans_sig=y((j-1)*Lc+1:j*Lc).*Gold_seq(j,:);
        transig=[transig,trans_sig];
    end
    
end
 %进行汉明编码(外码)
 h_code=hamm_enc(transig);
 %交织
 interlace_sig=interlace_enc(h_code,7);
 %卷积码 
  conj_code=conv_enc(interlace_sig);
  for i=1:length(conj_code)
      if conj_code(i)==0
          conj_code(i)=-1;
      else
          conj_code(i)=1;
      end
  end
 %方差为sgma^2的高斯白噪声
 %noised_sig=sgma^2*randn(1,length(conj_code));
 noised_sig=高斯(conj_code,snr_in_dB,0);%加高斯噪声
 t=1:length(noised_sig);
 sin_sig=sin(0.5*pi*t);%加正弦干扰
 tran_sig=noised_sig+sin_sig+conj_code;%相加
 plot(tran_sig(1000:1300))
 %判决(把双极性的判为0 1值)
 for i=1:length(tran_sig)
    if tran_sig(i)<=0
        tran_sig(i)=0;
    else
        tran_sig(i)=1;
    end
 end
 
 %卷积解码
 conj_dcode=conv_dec(tran_sig);
 %去交织
 interlace_det_sig=interlace_denc(conj_dcode,7);
 %汉明译码
 h_dcode=hamm_dec(interlace_det_sig);
 %h_dcode=h_dcode(1:length(h_code));
 %解扩开始
 sig=[];
 for i=1:n
    y=h_dcode((i-1)*Lc^2+1:i*Lc^2);
    for j=1:Lc
        tsig=y((j-1)*Lc+1:j*Lc).*Gold_seq(j,:);
        sig=[sig,tsig];
    end   
 end
 %解扩过程结束
 %0.1变双极性
 for i=1:length(sig)
     if sig(i)==0
         sig(i)=-1;
     else
         sig(i)=1;
     end
 end
 err_num=length(find(data1~=sig)==1);%判断误码个数
 err_rate=err_num/(length(sig));%误码率
disp('the error rate is');
disp(err_rate);
Gold序列生成程序
%first dctcrmine the maximal length shift register sequences
%将寄存器的内容初始化为“00001”
connection1=[1 0 1 0 1];
connection2=[1 1 1 0 0];
sequence1=ss_mlsrs(connection1);
sequence2=ss_mlsrs(connection2);
%将第二个序列循环移位并与第一个序列相加
L=2^length(connection1)-1;
for shift_amount=0:L-1,
    temp=[sequence2(shift_amount+1:L) sequence2(1:shift_amount)];
    Gold_seq(shift_amount+1,:)=(sequence1+temp)-floor((sequence1+temp)./2).*2;
end;

⌨️ 快捷键说明

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