📄 main0.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 + -