哈工大扩频通信实验报告 - 图文 下载本文

扩频通信实验报告

附 录

(1)%抽取m序列,确定m序列的个数 clc; clear; s=0; r=5; N=2^r-1;

%%%%%%求q可取值的个数 for i=1:N-1

b=gcd(i,N); if b==1 s=s+1; else end end m=1; mm=1; i=1;

%%%%2产生第一组m序列,以q=1开头 for n=1:r

A(m,n)=i; i=mod(2*i,N); end for i=2:N b=gcd(i,N);

if b==1 %%%%如果与N互质,则进行分组 c=0; for mm=1:m for n=1:r

if i==A(mm,n) c=1;

%如果新取的数与之前已确定的数是重复的,则跳出

break; else c=0; end end if c==1 break; end end

if c==0 m=m+1;

%%%%新取数与之前已确定的数无重复,则作为新一行第一位

for n=1:r A(m,n)=i; i=mod(2*i,N); end end end end

disp (A) %%%%以矩阵形式输出分组后的数 C=min(A',[],1); %%%%求出矩阵每行最小值 disp(C) pp=0; qq=0; flag=0; k=(N-1)/2;

%%%%依次寻找本原多项式对应的反多项式 for m=1:s/r flag=0; for i=1:25 for n=1:r

q=mod(A(m,n)+i*N,k); if q==0

qq=(A(m,n)+i*N)/k; pp=A(m,1); %%显示互反多项式

fprintf('%d-%d\\n',pp,qq ) flag=1;

%%%只要找到反多项式,则跳出 break; end end if flag==1 break; end end

(2)%产生m序列的函数:produce_m_seq function [m_seq]=produce_m_seq(ini)

30

扩频通信实验报告

len=length(ini);%移位寄存器的长度,本实验r=5 L=2^len-1;%m序列周期,本实验为31位 regi=[1,zeros(1,len-1)];%初始寄存器内容10000 m_seq6=produce_m_seq(ini6); fprintf('NO.%d is \\n ',6); fprintf('%d ',m_seq6); m_seq(1)=regi(1); for i=2:L

newregi (1:len-1)=regi (2:len); temp1=ini.*regi; temp2=sum(temp1); newregi (len)=mod(temp2,2); regi=newregi; m_seq(i)=regi(1); end end

(3)%产生六组m序列程序produce_m clc; clear;

ini1=[1 0 0 1 0];%%%%%%%EE ini2=[1 0 1 0 0];%%%%%%%EE互反 ini3=[1 1 1 1 0];%%%%%%uG ini4=[1 0 1 1 1];%%%%%%uG互反 ini5=[1 1 0 1 1];%%%%%%gH ini6=[1 1 1 0 1];%%%%%%gH互反 %%%%%%生成六组m序列并显示出来 m_seq1=produce_m_seq(ini1); fprintf('NO.%d is \\n ',1); fprintf('%d ',m_seq1); fprintf('\\n ');

m_seq2=produce_m_seq(ini2); fprintf('NO.%d is \\n ',2); fprintf('%d ',m_seq2); fprintf('\\n ');

m_seq3=produce_m_seq(ini3); fprintf('NO.%d is \\n ',3); fprintf('%d ',m_seq3); fprintf('\\n ');

m_seq4=produce_m_seq(ini4); fprintf('NO.%d is \\n ',4); fprintf('%d ',m_seq4); fprintf('\\n ');

m_seq5=produce_m_seq(ini5); fprintf('NO.%d is \\n ',5); fprintf('%d ',m_seq5); fprintf('\\n ');

fprintf('\\n ');

%%%%%%%依次画出六组m序列 figure(1); subplot(2,1,1); stem(m_seq1); axis([0 32 0 1]); subplot(2,1,2); stem(m_seq2); axis([0 32 0 1]);

figure(2); subplot(2,1,1); stem(m_seq3); axis([0 32 0 1]); subplot(2,1,2); stem(m_seq4); axis([0 32 0 1]);

figure(3); subplot(2,1,1); stem(m_seq5); axis([0 32 0 1]); subplot(2,1,2); stem(m_seq6); axis([0 32 0 1]);

(4)%求两个序列的相关性函数:seq_corr () function [corr_values]= seq_corr (m_seq1,m_seq2) m_seq1=2*m_seq1-1;

%%%%%对m序列进行非零处理 m_seq2=2*m_seq2-1;

corr_values=zeros(1,length(m_seq1)); for i=0:length(m_seq1)-1

corr_values(i+1)=sum(m_seq2.*circshift(m_seq1,[0 i]))/length(m_seq1); end end

- 1 -

扩频通信实验报告

(5)%%r=4时,计算其互相关函数值 clc; clear; ini=zeros(2,4); m_seq=zeros(4,15); ini=[1 0 1 1;

1 1 0 1]; %以数组形式列出序列移位寄存器

%产生m序列 for i=1:2

m_seq(i,:)=produce_m_seq(ini(i,:)); end

%%%%两个m序列互相关函数归一化结果 inter_corr= seq_corr(m_seq(1,:),m_seq(2,:)); four_corr=15*inter_corr; fprintf(' %d ',four_corr); fprintf('\\n ');

(6)%r=5时,找m序列优选对、互相关函数clc; clear; ini=zeros(6,5); m_seq=zeros(5,31); ini=[1 0 0 1 0; 1 0 1 0 0; 1 1 1 1 0; 1 0 1 1 1; 1 1 0 1 1; 1 1 1 0 1];

%%%%以数组形式列出序列的移位寄存器 for i=1:6

m_seq(i,:)=produce_m_seq(ini(i,:)); end

%%%%互相关函数 g=1; x=0; for i=1:5 for j=(i+1):6 inter_corr(g,:)= seq_corr(m_seq(i,:),m_seq(j,:));

M(i,j)=max(31*abs(inter_corr(g,:))); figure(g);

if M(i,j)<9||M(i,j)==9 x=x+1;

plot(inter_corr (g,:)); axis([0 31 -0.4 0.4]); g=g+1; end end end

%%%以矩阵形式输出每个互相关函数最大值 disp(M);

fprintf('the number is %d\\n',x) %%%%自相关函数 self_corr =zeros(5,31); h=1; for i=1:6

self_corr(h,:)=

seq_corr(m_seq(i,:),m_seq(i,:)); h=h+1; end for j=1:2 figure(j+12); for k=1:3

subplot(3,1,k);

plot(self_corr ((k+(j-1)*3),:)); axis([0 32 -1 1.5]); end end

(7)%当r=6时,找m序列优选对、互相关函数clc; clear; ini=zeros(6,6); m_seq=zeros(6,63); ini=[1 0 0 0 0 1; 1 1 0 0 0 0; 1 1 0 0 1 1; 1 1 1 0 0 1; 1 1 0 1 1 0;

1 0 1 1 0 1]; %%%%%%产生m序列 for i=1:6

m_seq(i,:)=produce_m_seq(ini(i,:)); end x=0; g=1;

- 2 -

扩频通信实验报告

%%%%互相关函数 for i=1:6 for j=(i+1):6 inter_corr(g,:)= seq_corr(m_seq(i,:),m_seq(j,:));

M(i,j)=max(63*abs(inter_corr(g,:))); if M(i,j)<17||M(i,j)==17 x=x+1; g=g+1; end end end

%%%以矩阵形式输出每个互相关函数最大值 disp(M);

fprintf('the number is %d\\n',x)

(8)%%%生成gold序列子函数:gold_seq() function [gold]=gold_seq(m_seq1,m_seq2) gold=zeros(33,31); gold(1,:)=m_seq1; gold(2,:)=m_seq2; for k=3:33

gold(k,:)=mod((m_seq1+circshift(m_seq2,[0 k-3])),2); end end

(9)%生成Gold序列族,自相关互相关函数 clc; clear;

ini1=[1 0 0 1 0];%%%%%%%EE ini3=[1 1 1 1 0];%%%%%%uG m_seq1=produce_m_seq(ini1); m_seq3=produce_m_seq(ini3); gold1=zeros(33,31);

gold1=gold_seq(m_seq1,m_seq3); %%%以45E和75G生成gold序列 m=1; for i=1:11 figure(i); for k=1:3 subplot(3,1,k); stem(gold1(m,:)); axis([0 33 0 1]);

- 3 -

fprintf('NO.%d is \\n ',m); fprintf(' %d',gold1(m,:)); fprintf('\\n '); m=m+1; end end

%%%%%%自相关函数 Gold_self_corr=zeros(3,31);

Gold_self_corr(1,:)=seq_corr(gold1(5,:),gold1(5,:));

Gold_self_corr(2,:)=seq_corr(gold1(14,:),gold1(14,:));

Gold_self_corr(3,:)=seq_corr(gold1(29,:),gold1(29,:)); figure(12); for k=1:3

subplot(3,1,k); plot(Gold_self_corr(k,:)); axis([0 32 -0.5 1]); disp(Gold_self_corr(k,:)); end

%%%%%互相关函数 gold_inter_corr=zeros(3,31);

gold_inter_corr(1,:)=seq_corr(gold1(5,:),gold1(14,:));

gold_inter_corr(2,:)=seq_corr(gold1(5,:),gold1(29,:));

gold_inter_corr(3,:)=seq_corr(gold1(14,:),gold1(29,:)); figure(13); for k=1:3

subplot(3,1,k);

plot(gold_inter_corr(k,:)); axis([0 32 -0.5 0.5]);

disp(31*gold_inter_corr(k,:)); end

扩频通信实验报告

(10)%查找平衡gold序列 clc;

ini1=[1 0 0 1 0];%%%%%%%EE ini3=[1 1 1 1 0];%%%%%%uG r=5;%%%移位寄存器的长度,本实验为5 N=2^r-1;%%%%m序列周期,本实验为31位 m_seq1=produce_m_seq(ini1);%生成m序列 m_seq3=produce_m_seq(ini3); gold1=zeros(33,31);

clear;

gold1=gold_seq(m_seq1,m_seq3);%以45E和75G生成gold序列 x=0;

F=zeros(1,33); E=zeros(1,33); for s=1:33 f=0; n=0; for i=1:N

f=f+gold1(s,i:i); n=2*f-N; if n==1

F(1,s)=1;%该序列中1和0个数差1,为平衡gold序列 else F(1,s)=0; end end

E(1,s)=f;%每个gold序列中1的个数存入E矩阵 end disp(E); disp(F);

%%%%%统计平衡gold序列在该gold序列族内的个数 for k=1:33 if F(1,k)==1 x=x+1; else x=x; end end

fprintf('The number of balance is %d\\n', x)

- 4 -