当前位置:首页 > 毕设备份 扩频通信技术及其仿真分析 所用程序
附录1
扩频调制模块
PN SequenceGeneratorPN SequenceGeneratorUnipolar toBipolarConverterUnipolar toBipolarConverterScope2pn_mod_out.matTo Fileencode_out.matFrom FileProductZero-OrderHold2B-FFTPNCompareScope1Zero-OrderHold1B-FFTBase-band
载波调制模块
ScopeZero-OrderHold3bpsk_mod_out.matSine WaveZero-OrderHoldTo Filepn_mod_out.matFrom File2Product1compareZero-OrderHold1B-FFTpnB-FFTZero-Orderbpsk_spectrumHold2
m 序列相关特性仿真程序如下: len=5;
L=2^len-1;
registersone=[0 0 0 0 1]; seqone(1)=registersone(1); registerstwo=[0 0 0 0 1]; seqtwo(1)=registerstwo(1);
for i=2:L
newregistersone(2:len) = registersone(1:len-1);
newregistersone(1) = mod((registersone(5)+registersone(3)+registersone(2)+registersone(1)),2);
%对应本原多项式[75],即:系数为5321; registersone=newregistersone;
seqone(i)=registersone(1);
newregisterstwo(2:len) = registerstwo(1:len-1); newregisterstwo(1) = mod((registerstwo(5)+registerstwo(4)+registerstwo(3)+registerstwo(1)),2);
%对应本原多项式[67],即:系数为5431; registerstwo=newregisterstwo; seqtwo(i)=registerstwo(1); end
translocationone=seqone; for n=1:31
translocationone(n+31)=translocationone(n); end
for n=32:62
translocationone(n+31)=translocationone(n-31); end
%码序列循环延长,便于自互相关计算; for k=1:61 for j=1:31
trans(j)=translocationone(j+k); mxor(j)=xor(seqone(j),trans(j)); mxoronetwo(j)=xor(seqtwo(j),trans(j)); end
cor(k)=31-2*sum(mxor);
coronetwo(k)=31-2*sum(mxoronetwo);
%相关值为:两序列对应模二加,相同的个数减去不同的个数; end
subplot(2,1,1):plot(cor)
subplot(2,1,2):plot(coronetwo)
Gold 序列相关特性仿真程序如下:
len=5;
L=2^len-1;
registersone=[0 0 0 0 1]; seqone(1)=registersone(1); registerstwo=[0 0 0 0 1]; seqtwo(1)=registerstwo(1); for i=2:L
newone(2:len) = registersone(1:len-1); newone(1)
mod((registersone(5)+registersone(3)+registersone(2)+registersone(1)),2);
%对应本原多项式[75],即:系数为5321;
=
registersone=newone;
seqone(i)=registersone(1);
newtwo(2:len) = registerstwo(1:len-1); newtwo(1) = mod((registerstwo(5)+registerstwo(4)+registerstwo(3)+registerstwo(1)),2);
%对应本原多项式[67],即:系数为5431; registerstwo=newtwo;
seqtwo(i)=registerstwo(1); end
tranone=seqone; trantwo=seqtwo;
for k=1:31
trantwo(k+31)=trantwo(k);
goldone(k)=xor(tranone(k),trantwo(k)); goldone(k+31)=goldone(k);
goldtwo(k)=xor(tranone(k),trantwo(k+7)); goldtwo(k+31)=goldtwo(k); end
for k=32:62
goldone(k+31)=goldone(k-31); goldtwo(k+31)=goldtwo(k-31); end
for n=1:61 for j=1:31
translocation(j)=goldtwo(j+n);
mxor(j)=xor(goldtwo(j),translocation(j)); %gold码序列自相关;
mxoronetwo(j)=xor(translocation(j),goldone(j)); %gold码序列互相关; end
cor(n)=31-2*sum(mxor);
corgoldonetwo(n)=31-2*sum(mxoronetwo); end
subplot(2,1,1):plot(cor)
subplot(2,1,2):plot(corgoldonetwo)
抗正弦干扰仿真程序如下:
echo on
Lc=20; %每个信息比特为对应的PN码片数 A1=3; %第一个正弦干扰信号的幅度 A2=7; %第二个正弦干扰信号的幅度 A3=12; %第三个正弦干扰信号的幅度 A4=0; %无正弦干扰情况下
W0=1; %正弦干扰信号的频率
SNRindB=0:2:30; %要求的信噪比范围 %计算在不同幅度正弦干扰信号的误码率 for i=1:length(SNRindB)
smld_err_prb1(i)=wubitlva(SNRindB(i),Lc,A1,W0); smld_err_prb2(i)=wubitlva(SNRindB(i),Lc,A2,W0); smld_err_prb3(i)=wubitlva(SNRindB(i),Lc,A3,W0); smld_err_prb4(i)=wubitlva(SNRindB(i),Lc,A4,W0); echo off end;
%计算在无正弦干扰信号情况下的误码率 echo on
SNRindB4=0:1:8;
for i=1:length(SNRindB4)
mld_err_prb4(i)=wubitlv(SNRindB(i),Lc,A4,W0); echo off
end;
%绘制仿真结果曲线,误码率用对数表示
semilogy(SNRindB,smld_err_prb1,SNRindB,smld_err_prb2,SNRindB,smld_err_prb3,SNRindB,smld_err_prb4); xlabel('信噪比Eb/N0');
ylabel('误码率Pb');
title('DS系统在不同振幅的正弦干扰下的误码率曲线')
子程序:wubitlva
function [p]=wubitlva(snr_in_dB,Lc,Ac,W0) snr=10^(snr_in_dB/10);
sgma=1;
Eb=2*sgma^2*snr; %每位信息比特的能量 E_chip=Eb/Lc; %每个码片的能量 N=10000; %待传输的信息符号数 num_of_err=0;
%生成一个待传的随机信息符号 for i=1:N temp=rand;
if (temp<0.5) data=-1; else
data=1;
end;
% 将一位信息比特重复LC次 for j=1:Lc
repeat_data(j)=data; end;
共分享92篇相关文档