<P>1、bm是一函数,另一m文件<br>2、%function bm = subsindex(s)<br>这条语句不要,隐掉<br><br>% 用matlab构建直接序列扩频通信系统,pn码用gold码,m序列用11级斐波纳契结构(SSRG)移位寄存器实现<br>% 通过加入加性高斯白噪声来判定系统性能,得出不同信噪比情况下的误码率<br>% 程序结构:gold码产生-》传送数据产生-》扩频-》加入噪声-》解扩-》样本求和、信息判决-》误码率记数<br>function[l1]=squense(N,s,p)<br>clear all<br>global bm<br>Lc=input('please input the value of Lc:'); % 每一信息比特的码片数目,即处理增益<br>N=input('please input the value of N:'); % 传送的信息比特数目<br>g=input('please input the value of g:'); % 是否要加高斯噪声<br>p=2047; % 扩频序列长度<br>n=11; % 序列级数<br>s=[1,0,0,0,0,0,0,0,0,0,1]; % m序列1初始化值<br>b=[1,0,0,0,0,0,0,0,0,0,0]; % m序列2初始化值<br>%function bm = subsindex(s)<br>for i=1:p<br> al1=bm(s(2),s(11),0,0,0,0,0,0);<br> for j=n:-1:2<br> s(j)=s(j-1)<br> end<br> s(1)=al1;<br> l1(i)=s(n); % m序列1<br>end<br>for i=1:p<br> al2=bm(b(2),b(3),b(8),b(11),0,0,0,0);<br> for j=n:-1:2<br> b(j)=b(j-1)<br> end<br> b(1)=al2;<br> l2(i)=b(n); % m序列2<br>end<br></P>
<P><br>l3=xor(l1,l2); % 生成gold码序列l33(i)<br>for i=1:p<br> if (l3(i)>0);<br> l33(i)=-1;<br> else l33(i)=1;<br> end<br>end <br> <br>k=cell(N*Lc/p)-1;<br><br>for i=0:k<br> for j=1:p<br> l4(j-p*i)=l33(j); % 多个gold码序列<br> end<br>end<br><br>sgma=1<br><br>for SNRindb=1:30<br> snr=10^(SNRindb/10); % 单位转换db-》一般<br> Eb=2*sgma^2*snr; % 信号能量<br> E_chip=Eb/Lc; % 每码片的信号能量<br> num_of_err=0; % 误码率初始值<br><br>for i=0:N-1 % 产生均匀分布的数据信号<br> temp=rand;<br> if (temp<0.5)<br> data=-1;<br> else <br> data=1;<br> end<br> for j=1:Lc % 数据重复lc次<br> Tb_data(j)=data;<br> PN(j)=l4(j-i*Lc);<br> end<br> Tx_data=sqrt(E_chip)*Tb_data.*PN; % 扩频<br> <br> noise=g*sgma*randn(1,Lc); % 产生加性高斯白噪声<br> %h=(i*Lc-1):(i-1)*Lc;<br> <br> Rx_data=Tx_data+noise; % 加入高斯白噪声<br> plot(Rx_data)<br> keyboard<br> <br> <br> temp=Rx_data.*PN; % 解扩<br> decision_variable=sum(temp); % 样本求和<br> if(decision_variable<0) % 输出判决<br> decision=-1;<br> else<br> decision=1;<br> end<br> if(decision~=data)<br> num_of_err= num_of_err+1; % 误码率记数<br> else<br> num_of_err=num_of_err;<br> end<br>end<br>Err(SNRindb)=num_of_err/N; % 单位数据误码率<br>double(err);<br>keyboard;<br>end<br>subplot(2,1,2);<br>Xlim([0,60]);<br>Ylim([10^-5,1]);<br>Err<br>plot(err);</P>
<P>%存成另一文件bm.m<br>function[add]=bm(x,y,z,h,r,t,p,q) % m序列生成算法<br>add=x+y+z+h+r+t+p+q;<br>if(add==0|add==2|add==4|add==6|add==8)<br> add=0;<br>else add=1;<br>end<br></P>
[此贴子已经被作者于2006-4-14 10:41:39编辑过]
|