www.pudn.com > mentos_fs.rar > PrimePe.m


%分别计算一级二级和系统的误码率,在加高斯噪声和突发干扰的情况下 
function [class1_err_rate,class2_err_rate,sig_err_rate]=PrimePe(snr_in_dB) 
echo off 
close all 
% snr_in_dB=0; 
%噪声功率 
E=1; 
snr=10^(snr_in_dB/10); 
sgma=sqrt((E/snr)/2); 
%桢个数 
N=10; 
%突发间隔 
N_Interval=80; 
%突发长度 
N_Length=10; 
%信息序列 
signal=round(rand(1,N*260)); 
 
%初始化 
ex_en_sig=zeros(1,N*267); 
in_en_sig=zeros(1,N*456); 
in_de_sig=zeros(1,N*267); 
ex_de_sig=zeros(1,N*260); 
 
inter=zeros(1,N*456+456); 
counter=zeros(1,N*456+456); 
 
for n=0:N-1 
  %编码 
  %外编码 
  ex_en_sig(n*267+1:n*267+189)=T_FS_EX_EN(signal(n*260+1:n*260+182)); 
  ex_en_sig(n*267+190:n*267+267)=signal(n*260+183:n*260+260); 
  %内编码 
  in_en_sig(n*456+1:n*456+456)=T_FS_IN_EN(ex_en_sig(n*267+1:n*267+267)); 
end 
 
%交织 
inter=INTER_WEAVE_8(in_en_sig); 
 
 %加高斯燥声 
 inter=2*inter-1; 
 inter=sign(inter+sgma*randn(size(inter))+eps); 
 inter=(inter+1)/2; 
 %加突发噪声 
 Noise=BurstNoise(N_Interval,N_Length,length(inter)); 
 inter=mod(inter+Noise,2); 
 
% % 加高斯燥声 
% in_en_sig=2*in_en_sig-1; 
% in_en_sig=sign(in_en_sig+sgma*randn(size(in_en_sig))+eps); 
% in_en_sig=(in_en_sig+1)/2; 
% %加突发噪声 
% Noise=BurstNoise(N_Interval,N_Length,length(in_en_sig)); 
% in_en_sig=mod(in_en_sig+Noise,2); 
    
%去交织 
counter=COUNTER_WEAVE_8(inter); 
 
for n=0:N-1  
  %译码 
  %内译码 
  in_de_sig(n*267+1:n*267+267)=T_FS_IN_DE(counter(n*456+1:n*456+456)); 
%   in_de_sig(n*267+1:n*267+267)=T_FS_IN_DE(in_en_sig(n*456+1:n*456+456)); 
  %外译码 
  ex_de_sig(n*260+1:n*260+182)=T_FS_EX_DE(in_de_sig(n*267+1:n*267+189)); 
  ex_de_sig(n*260+183:n*260+260)=in_de_sig(n*267+190:n*267+267); 
end 
%验证 
sig_err_rate=(length(find(signal~=ex_de_sig)))/length(signal)  %系统误码率 
class1_err_num=0; 
class2_err_num=0; 
for n=0:(N-1) 
   class1_err_num=class1_err_num+length(find(signal([1:182]+n*260)~=ex_de_sig([1:182]+n*260))); 
   class2_err_num=class2_err_num+length(find(signal([183:260]+n*260)~=ex_de_sig([183:260]+n*260))); 
end 
class1_err_rate=class1_err_num/(N*182)  %一级误码率 
class2_err_rate=class2_err_num/(N*78)   %二级误码率