扩频通信实验报告
附 录
(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 -