m序列产生及自相关和互相关函数曲线(共5页).doc
精选优质文档-倾情为你奉上1、 m序列产生及自相关和互相关函数曲线function PN=makem(x) %m序列产生函数ss1=num2str(x);ss2=dec2bin(base2dec(ss1,8); %先把八进制转换为十进制,再把十进制转换为二进制 G=2(length(ss2)-1)-1; %最大周期sd=;for j=1:(length(ss2)-2) sd=sd 0;endsd=sd 1; %寄存器初始状态0 0 0.0 1PN=;for j=1:GPN=PN sd(length(sd);%m序列输出的第一位 onenum=; for jj=1:length(ss2) if str2num(ss2(jj)=1 onenum=onenum jj-1; %存储二进制反馈系数里面“1”的位置-1,即进行异或的位置 end end temp=sd(onenum(2); for jj=3:length(onenum) %根据“1”的位置进行异或运算 temp=xor(temp,sd(onenum(jj); end for jj=length(ss2)-1:-1:2 %移位(序列后一位值等于前一位值) sd(jj)=sd(jj-1); end sd(1)=temp; %序列第一位等于反馈出来的值endfunction mandzi(ss)%m序列曲线及自相关函数曲线绘图函数ss1=num2str(ss);ss2=dec2bin(base2dec(ss1,8);%转换为二进制G=2(length(ss2)-1)-1; %最大周期PN=makem(ss);%调用函数计算m序列pp=(-2).*PN+1; %01 1-1pp2=;for tao=-(G-1):G-1pp1=circshift(pp,0,tao); pp2=pp2 sum(pp.*pp1)/G; %计算自相关函数end subplot(2,1,1)stem(PN)grid on;title('使用生成多项式(',num2str(ss),')8=(',ss2,')2产生的m序列')subplot(2,1,2)tao=-(G-1):G-1;plot(tao,pp2)grid on;title('自相关函数曲线')function huxg(x,y)%m序列互相关绘图函数x1=num2str(x);x2=dec2bin(base2dec(x1,8);%转换为二进制G1=2(length(x2)-1)-1; %最大周期y1=num2str(y);y2=dec2bin(base2dec(y1,8);%转换为二进制G2=2(length(y2)-1)-1; %最大周期if G1=G2 error('周期不同,无法计算') returnendpn1=makem(x);%分别调用函数计算出m序列pn2=makem(y);pp=;for tao=-(G1-1):G1-1pn1tao=circshift(pn1,0,tao); %计算互相关函数%pp=pp sum(pn2.*pn1tao)/G1;pp=pp sum(pn2.*pn1tao);endtao=-(G1-1):G1-1;plot(tao,pp)grid on;title('反馈系数(',num2str(x),')8和(',num2str(y),')8的互相关函数曲线')2、Rake接收机仿真clear all;clcNumusers=1;Nc=16; %扩频因子ISI_Length=1; %每径延时为ISI_Lengh/2EbN0db=0:1:30; %信噪比,单位dBTlen=8000; %数据长度Bit_Error_Number1=0; %误比特率初始值Bit_Error_Number2=0;Bit_Error_Number3=0;power_unitary_factor1=sqrt(6/9); %每径功率因子power_unitary_factor2=sqrt(2/9);power_unitary_factor3=sqrt(1/9);s_initial=randsrc(1,Tlen); %数据源wal2=1 1;1 -1; %产生walsh矩阵wal4=wal2 wal2;wal2 wal2*(-1);wal8=wal4 wal4;wal4 wal4*(-1);wal16=wal8 wal8;wal8 wal8*(-1);s_spread=zeros(Numusers,Tlen*Nc); %扩频ray1=zeros(Numusers,2*Tlen*Nc);ray2=zeros(Numusers,2*Tlen*Nc);ray3=zeros(Numusers,2*Tlen*Nc);for i=1:Numusers x0=s_initial(i,:).'*wal16(8,:); x1=x0.' s_spread(i,:)=(x1(:).'end%将每个扩频后的输出重复为两次,有利于下面的延迟(延迟半个码元)ray1(1:2:2*Tlen*Nc-1)=s_spread(1:Tlen*Nc);ray1(2:2:2*Tlen*Nc)=ray1(1:2:2*Tlen*Nc-1);%产生第二径和第三径信号ray2(ISI_Length+1:2*Tlen*Nc)=ray1(1:2*Tlen*Nc-ISI_Length);ray2(2*ISI_Length+1:2*Tlen*Nc)=ray1(1:2*Tlen*Nc-2*ISI_Length);for nEN=1:length(EbN0db) en=10(EbN0db(nEN)/10); %将Eb/N0的dB值转化为十进制数值 sigma=sqrt(32/(2*en); %将收到的信号demp demp=power_unitary_factor1*ray1+. power_unitary_factor2*ray2+. power_unitary_factor3*ray3+. (randn(1,2*Tlen*Nc)+randn(1,2*Tlen*Nc)*i)*sigma; dt=reshape(demp,32,Tlen)' wal16_d(1:2:31)=wal16(8,1:16); %将walsh码重复为两次 wal16_d(2:2:32)=wal16(8,1:16); rdata1=dt*wal16_d(1,:).' %解扩后rdata1为第一径输出 wal16_delay1(1,2:32)=wal16_d(1,1:31); %将walsh码延迟半个码元 rdata2=dt*wal16_delay1(1,:).' %解扩后rdata2为第二径输出 wal16_delay2(1,3:32)=wal16_d(1,1:30); %将walsh码延迟一个码元 wal16_delay2(1,1:2)=wal16_d(1,31:32); rdata3=dt*wal16_delay2(1,:).' %解扩后rdata3为第三径输出 p1=rdata1'*rdata1; p2=rdata2'*rdata2; p3=rdata3'*rdata3; p=p1+p2+p3; u1=p1/p; u2=p2/p; u3=p3/p; rd_m1=real(rdata1*u1+rdata2*u2+rdata3*u3); %最大比合并 rd_m2=(real(rdata1+rdata2+rdata3)/3; %等增益合并 u=u1,u2,u3; %选择式合并 maxu=max(u); if(maxu=u1) rd_m3=real(rdata1); else if(maxu=u2) rd_m3=real(rdata2); else rd_m3=real(rdata3); end end r_Data1=sign(rd_m1)' %三种方法判决输出 r_Data2=sign(rd_m2)' r_Data3=sign(rd_m3)' %计算误比特率 Bit_Error_Number1=length(find(r_Data1(1:Tlen)=s_initial(1:Tlen); Bit_Error_Rata1(nEN)=Bit_Error_Number1/Tlen; Bit_Error_Number2=length(find(r_Data2(1:Tlen)=s_initial(1:Tlen); Bit_Error_Rata2(nEN)=Bit_Error_Number2/Tlen; Bit_Error_Number3=length(find(r_Data3(1:Tlen)=s_initial(1:Tlen); Bit_Error_Rata3(nEN)=Bit_Error_Number3/Tlen;endsemilogy(EbN0db,Bit_Error_Rata1,'r*-');hold on;semilogy(EbN0db,Bit_Error_Rata2,'bo-');hold on;semilogy(EbN0db,Bit_Error_Rata3,'g.-');legend('最大比合并','等增益合并','选择式合并');xlabel('信噪比');ylabel('误比特率');title('三种主要分集合并方式性能比较');专心-专注-专业