任意阶平衡gold码的产生及其互相关性(代码)
基于matlab的gold码的生成及相关性分析
clc;
N=7; %以7级寄存器为例,并组其中的一组优选对:211,,217
connections=gfprimfd(N,'all');
f1=connections(4,:); %取一组本原多项式序列,211
f2=connections(16,:); %取另一组本原多项式序列,217
registers1=[0 0 0 0 0 0 1];%给定寄存器的初始状态
registers2=[0 0 0 0 0 0 1];%取相同的初始状态
L=2^N-1; %周期长度
sቤተ መጻሕፍቲ ባይዱm2=0;
sum1=0;
for k=1:L
seq1(k)=registers1(N); %第一组m序列
seq2(k)=registers2(N); %第二组序列
gold=mod(z,2); %模2运算
gold=1-2*gold; %转换为2值电平
disp(gold);
R=xcorr(gold,'unbiased'); %自相关
R=R/max(R); %归一化
figure;plot(R);title('gold序列的自相关函数');
s=fftshift(abs(fft(gold,2*L)).^2); %求功率谱
registers1(t)=registers1(t-1);
registers2(t)=registers2(t-1);
end
registers1(1)=sum1;
registers2(1)=sum2;
sum2=0;
sum1=0;
end
disp(f1);
GOLD 序列码产生及特性分析实验
实验二 GOLD 序列码产生及特性分析实验一、实验目的1. 了解Gold 码的性质和特点;2. 熟悉Gold 码的产生方法;二、实验内容1. 熟悉Gold 码的的产生方法;2. 测试Gold 码的的波形;三、实验原理m 序列虽然性能优良,但同样长度的m 序列个数不多,且m 序列之间的互相关函数值并不理想(为多值函数)。
1967年,R .Gold 提出和讨论了一种新的序列,即Gold 码序列。
这种序列有较为优良的自相关和互相关特性,构造简单,产生的序列数多,因而得到广泛的应用。
a) m 序列优选对m 序列优选对是指在m 序列集中,其互相关函数最大值的绝对值满足下式的两条n 阶m 序列:表2-1给出了部分m 序列优选对。
表2-1 部分优选对码表 级数 基准本原多项式 配对本原多项式 7 211 217,235,277,325,203,357,301,323 9 1021 1131,133310 2415 2011,3515,317711 4445 4005,5205,5337,52632.Gold 码的产生方法Gold 码是m 序列的组合码,由同步时钟控制的两个码字不同的m 序列优选对逐位模2加得到,其原理如图2-1所示。
这两个码发生器的周期相同,速率也相同,因而两者保持一整除为偶数,但不能被位奇数41212)(2/)2(2/)1(n n R n n xy ⎩⎨⎧++≤++τ定的相位关系,这样产生的组合码与这两个子码序列的周期也相同。
当改变两个m 序列的相对位移时,会得到一个新的Gold 码。
Gold 码虽然是m 序列模2加得到的,但它已不再是m 序列,不过仍具有与m 序列近似的优良特性,各个码组之间的互相关特性与原来两个m 序列之间的互相关特性一样,最大的互相关值不会超过原来两个m 序列间最大互相关值。
Gold 码最大的优点是具有比m 序列多得多的独立码组。
图2-1 Gold 码序列发生器Gold 码序列具有以下性质:(1)两个m 序列优选对经不同移位相加产生的新序列都是Gold 序列,两个n 级移位寄存器可以产生2n +1个Gold 序列,周期均为2n -1。
gold码生成过程 -回复
gold码生成过程-回复所谓的"gold码"是一种用于通信系统中的伪随机码。
它广泛应用于无线通信、卫星通信和编码理论等领域。
在本文中,我们将一步一步地回答关于gold码生成过程的问题,带您深入了解这个重要的通信技术。
第一步:什么是gold码?在了解gold码的生成过程之前,首先需要理解gold码是如何工作的。
gold码是一种伪随机码序列,具有良好的互相关性和周期性。
它是以线性反馈移位寄存器(LFSR)为基础生成的,用于在通信中的多径传输信道、频率选择信道和多用户干扰等环境中进行编码和解码。
通过应用gold码,可以提高通信系统的容错性和抗干扰能力。
第二步:LFSR是什么?LFSR是一种用于生成伪随机序列的移位寄存器。
它由若干个触发器组成,每个触发器代表一个二进制位。
在每个时刻,LFSR都会对输入数据进行移位和反馈计算,从而生成一个新的二进制码。
LFSR的移位操作可以视为一个带有反馈的移位操作,每次移位都会根据当前状态和反馈多项式生成一个新的二进制位。
这种移位操作可以无限地进行下去,生成一个无限长的伪随机序列。
第三步:如何生成gold码?gold码的生成是通过两个LFSR的线性组合来实现的。
首先,我们需要选择两个不同的初始状态和不同的反馈多项式,以确保生成的码之间具有差异。
然后,通过对两个LFSR的输出进行异或运算,就可以生成gold 码序列。
具体的生成过程可以分为以下几个步骤:1. 选择两个LFSR,分别用于生成两个不同的伪随机序列。
2. 设置两个LFSR的初始状态和反馈多项式。
初始状态可以是任意的二进制码,而反馈多项式则影响了伪随机序列的周期性和相关性。
3. 同步两个LFSR的时钟,并同时进行移位操作。
4. 对两个LFSR的输出进行异或运算,得到gold码序列。
5. 不断重复移位和异或运算,直到生成足够长的gold码序列。
值得注意的是,为了确保生成的gold码序列具有良好的性质,初始状态和反馈多项式的选择是非常重要的。
gold序列的生成与相关特性仿真
Gold序列生成与相关性仿真1.1 references[1] 基于Matlab的Gold码序列的仿真与实现.[2] Code Selection for CDMA Systems.1.2 m序列的生成原理1.2.1生成本原多项式利用Matlab编程环境求解本原多项式,其运行结果如表1所示.选择n=7,采用7级移位寄存器,产生的序列周期是127,其程序如下所示.N=7; %以7级寄存器为例,并组其中的一组优选对:211,,217connections=gfprimfd(N,'all');表(1)n=7 本原多项式上面的多项式中,仅有9个是独立的.因为第一行和第十行,第二行和四行,第三行和第十六行,第五行和第八行,第六行和第十四行,第七行和第十三行,第九行和第十八行,第十一行和第十二行,第十五行和第十七行是两两对称的.用八进制数表示时,所选择的本原多项式为211、217、235、367、277、325、203、313和345共9条.在这9条本原多项式中,选择一个基准本原多项式,再按要求选择另一本原多项式与之配对,构成m序列优选对,对7级m序列优选对如下表:表(2)n=7 m序列所以优选对1.2.2构成移位寄存器根据产生Gold码序列的方法,从上述本原多项式中选择一对m序列优选对,以211作为基准本原多项式,217作为配对本原多项式,通过并联结构形式来产生Gold序列,生成gold 序列的结构如图(6)所示:图(6)Gold序列生成结构1.3 自相关函数仿真参数及初始值设定如下:N=7; %以7级寄存器为例,并组其中的一组优选对:211,,217connections=gfprimfd(N,'all');f1=connections(4,:); %取一组本原多项式序列,211f2=connections(16,:); %取另一组本原多项式序列,217registers1=[1 0 0 0 0 0 0];%给定寄存器的初始状态registers2=[1 0 0 0 0 0 0];%取相同的初始状态生成的gold 序列自相关函数如图(7)、(8)所示图(7) Gold 序列周期自相关函数结论:自相关函数取值集合{127,15,-1,-17}图(8)Gold 序列非周期自相关函数020406080100120140gold 序列周期自相关函数020406080100120140-40-2020406080100120140gold 序列非周期自相关函数1.4 互相关函数仿真时改变m序列寄存器初始状态,从而生成两个gold序列,求得互相关函数如图(9)(10)所示。
MATLAB仿真m序列和Gold序列自相关与互相关.docx
来自恶搞哥哥的MATLAB 仿真MATLAB仿真m序列和Gold序列自相关与互相关MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
本章正是运用MATLAB来仿真m序列和Gold序列的相关特性,以及OCDMA 系统的误码率同用户数N su的关系曲线。
1仿真过程在理论分析的基础上,下面使用附录上两段程序,通过MATLAB仿真得出m 序列和Gold序列的自己相关性。
这段m序列产生程序采用了8个移位寄存器,将最后两个移位寄存器的值进行异或处理反馈给第一个移位寄存器,然后向前移位,输出最后一个移位寄存器的值,Gold序列的产生只是将两个m序列中的一个进行延时移位,再进行异或,产生的主要原理和m序列并无较大差异。
在这两段程序个前半部分m序列和Gold序列生成的基础上,只要将y1=xcorr (x1)改为y1=xcorr (x1,x2)即可求出它们的互相关仿真。
2仿真结果在系统中采用上述序列仿真得到自相关和互相关特性曲线如图 1 , 2及图3所示。
来自恶搞哥哥的MATLAB 仿真25020015010050图1 m序列的自相关曲线25020015010050图4-2 m序列与Gold序列的自相关曲线附录程序1X1=1;X2=0;X3=1;X4=0; %移位寄存器输入Xi 初T 态(0101), Yi 为移位寄存器各 级输出m=120;% 置M 序列总长度 for i=1:m %1#Y8=X8; Y7=X7; Y6=X6; Y5=X5; Y4=X4; Y3=X3; Y2=X2; Y1=X1;X8=Y7; X7=Y6; X6=Y5; X5=Y4; X4=Y3; X3=Y2; X2=Y1;X1=xor(Y7,Y8); %异或运算if Y8==0U(i)=-1;elseU(i)=Y8;endendM=U%绘图i1=it=1:1:i1;图4-3 m 序列与Gold 序列的互相关曲线m 序列和Golcl 序列的互相关性iy瞅需x1=[(2*M)- 1] ' ;%将运行结果n序列M从单极性序列变为双极性序列y1=xcorr (xl) ;%求自相关性t=1 : 1:i1 ;plot (t,y1(1:i1) ) ;axis([1,120,-12,288])% 绘出信号的相关图gridxlabel('t')ylabel('相关性')title(' 移位寄存器产生的M序列的相关性')程序2fun cti on c=gold()n=7;a=[1 1 1 1 1 1 1 1]; co=[];for v=1:2A n-1co=[co,a(1)];a(8)=mod(a(5)+a(1),2); a(1)=a (2);a(2)=a (3);a(3)=a ⑷;a(4)=a(5);a(5)=a (6);a(6)=a(7);a(7)=a(8);endm1=co;b=[1 0 1 0 0 0 0 1]; co=[];for v=1:2A n-1co=[co,b(1)]; m=mod(b(5)+b(1),2);p=mod(b(6)+m,2);b(8)=mod(b(5)+b(1),2);b(1)=b(2);b(2)=b(3);b(3)=b(4);b(4)=b(5);b(5)=b(6);b(6)=b(7);b(7)=b(8);endm2=co;c=xor(m1,m2);x2=[(2*c)- 1] ' ;%将运行结果Gold序列c从单极性序列变为双极性序列y1=xcorr (x2); %求自相关性t=1:1:120 ;plot (t,y1(1:120) ) ;axis([1,120,-12,288])% 绘出信号的相关图gridxlabel('t')ylabel('相关性')title(' 移位寄存器产生的Gold序列的相关性')。
GOLD序列的相关性
主要内容
• m序列 • Gold序列 • Gold序列的相关特性
m序列
m序列是目前 序列是目前CDMA系统中采用的最基本 序列是目前 系统中采用的最基本是最长线性反馈移位寄存器 序列的简称。若移位寄存器为 级, 则其周 序列的简称。若移位寄存器为n级 的简称 期P=2n-1 。
图1 反馈移位寄存器原理框图
Gold序列 Gold序列
• m序列虽然性能优良(具有尖锐而无旁瓣 序列虽然性能优良( 序列虽然性能优良 的自相关函数) 但同样长度的m序列个数 的自相关函数), 但同样长度的 序列个数 不多,且序列之间的互相关性不够好 且序列之间的互相关性不够好。 不多 且序列之间的互相关性不够好。 R·Gold提出了一种基于 序列的 提出了一种基于m序列的 提出了一种基于 序列的PN码序 码序 称为Gold码序列。 码序列。 列, 称为 码序列 • Gold序列是用一对周期和速率均相同,但 序列是用一对周期和速率均相同 序列是用一对周期和速率均相同, 码字不同的m序列优选对模 加后得到的。 序列优选对模2加后得到的 码字不同的 序列优选对模 加后得到的。
• 如果有两个 序列 它们的互相关函数的绝 如果有两个m序列 序列, 对值有界, 且满足以下条件: 对值有界 且满足以下条件 + n2 1 2 + 1, n为奇数 R(τ ) = n +1 2 2 + 1, n为偶数(不是4的倍数) 则我们称这一对m序列为优选对。 则我们称这一对m序列为优选对。 优选对
Gold序列的相关性 Gold序列的相关性
• 自相关性:Gold 证明了Gold 码序列的自 相关函数的所有非最高峰的取值是三值。
• 互相关性:Gold 码序列的互相关函数值的 最大值不超过其m 序列优选对的互相关值, 具有三值互相关函数 。
GOLD序列的相关性
谢谢!
追求人生的美好!
我们的共同目标!
gold序列是用一对周期和速率均相同但码字不同的n级m序列发生器时钟n级m序列发生器gold码序列gold码发生器的原理结构图
GOLD序列的相关性
主要内容
• m序列 • Gold序列 • Gold序列的相关特性
m序列
m序列是目前CDMA系统中采用的最基本 的PN序列。它是最长线性反馈移位寄存器 序列的简称。若移位寄存器为n级, 则其周 期P=2n-1 。
• 如果有两个m序列, 它们的互相关函数的绝
对值有界, 且满足2 n1
1,
2 2 1,
n为奇数 n为偶数(不是4的倍数)
则我们称这一对m序列为优选对。
n级m序列发生器 时钟
n级m序列发生器
模2加
Gold码序列
(a)
1
2
3
4
5
12345 (b)
图2 Gold (a) Gold码发生器的原理结构图; (b) 5级m序列优选对构成的Gold码发生器
• 随着级数n的增加,Gold码序列的数量远远 超过同级数的m序列的数量,便于扩频多址 应用。
Gold序列的相关性
• 自相关性:Gold 证明了Gold 码序列的自 相关函数的所有非最高峰的取值是三值。
• 互相关性:Gold 码序列的互相关函数值的 最大值不超过其m 序列优选对的互相关值, 具有三值互相关函数 。
图1 反馈移位寄存器原理框图
Gold序列
• m序列虽然性能优良(具有尖锐而无旁瓣 的自相关函数), 但同样长度的m序列个数 不多,且序列之间的互相关性不够好。 R·Gold提出了一种基于m序列的PN码序 列, 称为Gold码序列。
• Gold序列是用一对周期和速率均相同,但 码字不同的m序列优选对模2加后得到的。
Gold码
通信08-1 艾盼盼0850283101设计Gold序列发生器姓名:艾盼盼学号:0850283101 班级:通信08-1摘要:m序列,尤其是m序列优选对,是特性很好的伪随机序列。
但是,它们能彼此构成优选对的数目很少,不便于在码分多址系统中应用。
R.Gold于1967年提出了一种基于m 序列优选对的码序列,称为Gold序列。
它是m序列的组合码,由优选对的两个m序列逐位模2加得到,当改变其中一个m序列的相位(向后移位)时,可得到一新的Gold序列。
Gold 序列虽然是由m序列模2加得到的,但它已不是m序列,不过它具有与m序列优选对类似的自相关和互相关特性,而且构造简单,产生的序列数多,因而获得广泛的应用。
【关键词】:m序列优选对,Gold序列,模2加,自相关1. Gold码的概述1.1 gold码定义R.Gold于1967年提出了一种基于m序列优选对的码序列,称为Gold序列。
它是m序列的组合码,由优选对的两个m序列逐位模2加得到,当改变其中一个m序列的相位(向后移位)时,可得到一新的Gold序列。
Gold序列虽然是由m序列模2加得到的,但它已不是m 序列,不过它具有与m序列优选对类似的自相关和互相关特性,而且构造简单,产生的序列数多,因而获得广泛的应用。
1.2 gold码基本功能单元Gold码发生器的基本功能单元为线性反馈移位寄存器LFSR(Linear Fdddback Bhift Register)。
2.Gold序列的设计2.1 m序列优选对寻找方法产生gold序列的必要条件是m序列优选对,设A是对应于n级本原多项式f(x)所产生的m序列,B是对应于n级本原多项式g(x)所产生的m序列,当它们的互相关函数|Ra.b(k)|满足:则f(x)和g(x)所产生的m序列A和B构成一对优选对。
寻找m序列优选对的方法还有硬件计算法,分圆陪集法,逐步移位模2加法,三值判别法。
2.2gold序列设计的理论证明证明,若F1(x),F2(x)为两个不同的本原多项式,令F1(x)产生的序列为G(F1),F2(x)产生的序列为G(F2),F1(x). F2(x)所产生的序列为G(F1,F2),则有上式表明两本原多项式乘积所产生的序列等于两个本原多项式分别产生的模2和序列。
MATLAB仿真m序列和Gold序列自相关与互相关
MATLAB仿真m序列和Gold序列自相关与互相关MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
本章正是运用MATLAB来仿真m序列和Gold序列的相关特性,以及OCDMA 系统的误码率同用户数N的关系曲线。
su1 仿真过程在理论分析的基础上,下面使用附录上两段程序,通过MATLAB仿真得出m序列和Gold序列的自己相关性。
这段m序列产生程序采用了8个移位寄存器,将最后两个移位寄存器的值进行异或处理反馈给第一个移位寄存器,然后向前移位,输出最后一个移位寄存器的值,Gold序列的产生只是将两个m序列中的一个进行延时移位,再进行异或,产生的主要原理和m序列并无较大差异。
在这两段程序个前半部分m序列和Gold序列生成的基础上,只要将y1=xcorr(x1)改为y1=xcorr(x1,x2)即可求出它们的互相关仿真。
2 仿真结果在系统中采用上述序列仿真得到自相关和互相关特性曲线如图1 , 2及图3 所示。
图1 m 序列的自相关曲线图4-2 m 序列与Gold序列的自相关曲线图4-3 m 序列与Gold 序列的互相关曲线附录程序1X1=1;X2=0;X3=1;X4=0; %移位寄存器输入Xi初T态(0101), Yi为移位寄存器各级输出m=120; %置M序列总长度for i=1:m %1#Y8=X8; Y7=X7; Y6=X6; Y5=X5; Y4=X4; Y3=X3; Y2=X2; Y1=X1;X8=Y7; X7=Y6; X6=Y5; X5=Y4; X4=Y3; X3=Y2; X2=Y1;X1=xor(Y7,Y8); %异或运算if Y8==0U(i)=-1;elseU(i)=Y8;endendM=U%绘图i1=it=1:1:i1;x1=[(2*M)-1]’;%将运行结果m序列M从单极性序列变为双极性序列y1=xcorr(x1);%求自相关性t=1:1:i1;plot(t,y1(1:i1));axis([1,120,-12,288])%绘出信号的相关图gridxlabel('t')ylabel('相关性')title('移位寄存器产生的M序列的相关性')程序2function c=gold()n=7;a=[1 1 1 1 1 1 1 1];co=[];for v=1:2^n-1co=[co,a(1)];a(8)=mod(a(5)+a(1),2);a(1)=a(2);a(2)=a(3);a(3)=a(4);a(4)=a(5);a(5)=a(6);a(6)=a(7);a(7)=a(8);endm1=co;b=[1 0 1 0 0 0 0 1];co=[];for v=1:2^n-1co=[co,b(1)];m=mod(b(5)+b(1),2);p=mod(b(6)+m,2);b(8)=mod(b(5)+b(1),2);b(1)=b(2);b(2)=b(3);b(3)=b(4);b(4)=b(5);b(5)=b(6);b(6)=b(7);b(7)=b(8);endm2=co;c=xor(m1,m2);x2=[(2*c)-1]’;%将运行结果Gold序列c从单极性序列变为双极性序列y1=xcorr(x2);%求自相关性t=1:1:120;plot(t,y1(1:120));axis([1,120,-12,288])%绘出信号的相关图gridxlabel('t')ylabel('相关性')title('移位寄存器产生的Gold序列的相关性')。
m序列对及平衡Gold序列的产生与搜索
平衡Gold序列的产生与搜索方法
平衡Gold序列是一类具有优良伪随机性和自相关性的二元序列。产生平衡 Gold序列的方法主要有两种:一是通过平衡Gold多项式产生平衡Gold序列; 二是通过选择适当的m序列和反馈函数产生平衡Gold序列。搜索方法主要有基 于差分编码的搜索算法和基于自相关函数的搜索算法。
3、信息隐藏:平衡Gold序列可以用于信息隐藏中的隐写术,以隐藏敏感信息 在公开信息中。由于平衡Gold序列具有优良的自相关性,它可以用于构造高效 的隐写算法,提高信息隐藏的安全性和鲁棒性。
未来展望
随着技术的发展,平衡Gold序列的研究将面临新的挑战和机遇。以下是一些未 来可能的研究方向:
1、高效产生方法:目前平衡Gold序列的产生方法还比较耗时,因此研究更高 效的产生方法以提高搜索速度和降低计算成本是未来的一个研究方向。
1、反馈函数设计:反馈函数是m序列发生器的核心部分,其设计的好坏直接影 响到m序列的性能。一个好的反馈函数应该具有较低的误码率、较高的线性复 杂度、易于实现等优点。常用的反馈函数包括异或、同或、与等运算。
2、LFSR级数和反馈位数选择:m序列发生器的性能与LFSR的级数和反馈位数 密切相关。一般来说,增加LFSR的级数和反馈位数可以提高m序列的性能,但 同时也会增加硬件实现的复杂度和功耗。因此,在设计中需要根据实际需求选 择合适的LFSR级数和反馈位数。
在软件实现中,可以使用各种编程语言如C、C++、Python等编写m序列发生器。 软件实现具有灵活度高、易于调试和修改等优点,但也存在运行速度较慢和需 要运行额外的处理器等缺点。
m序列发生器的应用
m序列发生器在信号处理、通信技术等领域具有广泛的应用。以下是m序列发生 器的一些典型应用:
gold序列产生原理
gold序列产生原理Gold序列是一种特殊的数列,其产生原理可以通过递归函数来描述。
Gold序列的特点是,每个数都是前面两个数的和,即第n个数等于第n-1个数加上第n-2个数。
具体来说,第一个数和第二个数是预先给定的,接下来的每个数都是前面两个数的和。
为了更好地理解Gold序列的产生原理,我们可以通过一个简单的例子来说明。
假设我们规定第一个数为0,第二个数为1。
那么根据递归函数,第三个数就是0+1=1,第四个数是1+1=2,第五个数是1+2=3,以此类推。
通过上述例子,我们可以看出,Gold序列的产生过程是通过不断将前面两个数相加而得到的。
这个过程可以用递归函数来表示,即f(n) = f(n-1) + f(n-2),其中f(n)表示第n个数。
通过递归函数的定义,我们可以根据已知的前两个数,依次计算出后面的数。
值得注意的是,Gold序列的产生原理并不依赖于具体的初始值。
无论我们规定第一个数和第二个数是什么,只要按照递归函数的规则计算,最终得到的数列都是Gold序列。
这是因为递归函数的定义保证了每个数都是前面两个数的和。
Gold序列在数学和计算机科学中都有广泛的应用。
在数学中,Gold序列被用来研究一些数论和代数的问题,例如斐波那契数列和黄金分割数等。
在计算机科学中,Gold序列常常被用来生成随机数序列或用作密码学中的密钥序列。
在生成随机数序列的应用中,Gold序列通过将两个序列进行异或运算来产生新的序列。
这样做的好处是,由于递归函数的特性,Gold 序列的数值分布相对均匀,具有较好的随机性质。
这使得Gold序列在随机数生成算法中得到了广泛应用。
在密码学中,Gold序列常被用作加密算法中的密钥序列。
由于Gold序列具有较好的随机性质和良好的扩散性质,使得生成的密钥序列能够提供较高的安全性。
因此,Gold序列在密码学中被广泛应用于对称加密算法和流密码算法中。
总结起来,Gold序列是一种通过递归函数产生的数列,其产生原理是每个数都是前面两个数的和。
任意阶平衡gold码的产生及其互相关性(代码)
任意阶平衡g o l d码的产生及其互相关性(代码)本页仅作为文档页封面,使用时可以删除This document is for reference only-rar21year.Marchclear all;n=input('请输入移位寄存器的级数n,n是大于等于2的整数,且n不能为4的倍数,为4的倍数不保证结果正确: ');%五级移位%N=2^n-1;%周期为N%x=gfprimfd(n,'all');%产生级数为n的本原多项式%[row,column]=size(x);if(n==2)%n为2是不能用下面求y的公式,作为特例直接写入%y=[1,1];endif(n>2)y=x(1:row,2:column);%本来是nXn矩阵,第一列都是1,不要了,现在是nX(n-1)矩阵%endm=zeros(row,N);%求出所有m序列%for r=1:row%从1到第row行%register7=[zeros(1,n-1),1];%寄存器7,表示移位寄存器的初态除了最后一位,其余全0%m(r,1)=register7(n);%m(r,1)是的第r行第一列的取值%for i=2:1:N%从2到N,连续取值%register8(1)=mod(sum(y(r,:).*register7),2);%移位寄存器的向量与反馈系数的向量点乘后,新向量的所有数模二加,得到一个数作为寄存器8的第一位%for j=2:1:n%从2到N,连续取值%register8(j)=register7(j-1);%确定后n-1位%endregister7=register8;%保存移位寄存器现在的值到register1%m(r,i)=register7(n);%输出的书,从第2位开始%end %现在得到了第r行的m序列%end %现在得到了第1到第r行的m序列%if(n>2)%列出m1最大行数,超过会报错%fprintf('m序列的行数小于等于%1.0f',row)%显示之后要输入m1的要求%endif(n==2)%列出m1最大行数,超过会报错%fprintf('m序列的行数小于等于1')%显示之后要输入m1的要求%endfprintf('\n')%换行%pass=1;%判断m1序列是否有优选对,若有,pass在下面循环中置0%while(pass==1) %若m1没有优选对,则循环%nom1=input('请从矩阵y中选出你所要m1序列本愿多项式的行数: ');%输入一个数赋给nom1,number of m1,即m1的行数%m1=m(nom1,:);%得到了你指定的m1序列%rm=zeros(1,2^n-1);%两个m序列的互相关性,用来判断m优选对%s=zeros(1,2^n-1);%m优选对中移位后相同数的个数%d=zeros(1,2^n-1);%m优选对中移位后相同数的个数%register2=zeros(1,2^n-1);%寄存器2,用以验证m序列优选对时移位%cmatch=0;%counter match优选对匹配的数量%match=zeros(1,N);%匹配优选对所在的行数%matchs=zeros(1,N);%match sequence匹配优选对的序列%for k=1:row%对m序列每一行循环%m2=m(k,:);%把m序列的第k行赋给m2%register1=m2;%寄存器1,用以验证m序列优选对时移位%for i=1:2^n-1A=mod((m1+register1),2);%移位加N次%for j=1:2^n-1%逐位判断m1与m2是否相同,判断N次%if A(j)==0%若第j位位相同%s(i)=s(i)+1;%相同数加1,之后清零%endd(i)=N-s(i);%不同数减一,因为是s(i)的因变量,不用清0%endrm(i)=s(i)-d(i);%rm是互相关函数,因为是s(i)和d(i)的因变量,不用清0%s(i)=0;%必须清0,不然k的循环序列就会叠加%register2(1)=register1(N);%以下三行为循环右移%register1(2:N)=register1(1:N-1);register1(1)=register2(1);endmaxrm=max(abs(rm));%maxrm为互相关值的最大绝对值,因为是rm的因变量,所以不用清0%if(mod(n,2)==1)%对2除n求余,判断n的奇偶性%if(maxrm==2^((n+1)/2)+1)%奇数判断互相关最大绝对值是否满足书上条件4—37%cmatch=cmatch+1;%匹配(即互为优选对)个数加1%match(1,cmatch)=k;%匹配行数写入match序列中%matchs(cmatch,:)=m2;%匹配序列写入matchs矩阵中%endendif(mod(n,2)==0)%同上%if(maxrm==2^((n+2)/2)+1)%偶数判断互相关最大绝对值是否满足书上条件4—37%cmatch=cmatch+1;match(1,cmatch)=k;matchs(cmatch,:)=m2;endendendif(cmatch~=0)%若m1有优选对,cmatch不等于0%pass=0;%pass置0,while不在循环%endif(cmatch==0)%若m1没有优选对,cmatch等于0%fprintf('m1没有优选对,请重新选择m1行数')%输出括号中的数%fprintf('\n')%换行%endendfprintf('下列数字表示与m1互为优选对的m序列的行数')%输出括号中的数% match(1:cmatch)%因为后面没加分号,执行程序时会显示match序列的第1到第camtch列%choice=input('是否依次显示m1的优选对y/n:','s');%按括号中文字内容从键盘输入一个置%if(choice=='y')%输入y执行,输入其他任何数不执行%matchs%matchs,match sequence,表示m1的所有优选对%endnom2=input('请从矩阵y中选出你所要m2序列的行数: ');%同中文%m2=m(nom2,:);%得到m2,用优选对m1,m2,生成下面的gold序列,并选出平衡gold序列%gold=zeros(N+2,N);%一共N+2个gold序列,每个周期为N,设(N+2)*2的矩阵%register3=m2;%给寄存器3赋值m2,下面循环右移要用%register4=zeros(1,N);%给寄存器4设置成1xN的矩阵,下面循环右移要用%for i=1:N%循环N次%gold(i,:)=mod((m1+register3),2);%两m序列逐位模二加%register4(1)=register3(N);%下面三行为循环右移%register3(2:N)=register3(1:N-1);register3(1)=register4(1);end;gold(N+1,:)=m1;%m序列包含生成它的2个m序列%gold(N+2,:)=m2;c1=zeros(1,N+2);%代表1的个数counter 1%c0=zeros(1,N+2);%代表0的个数counter 2%cbg=0;%代表平衡gold序列的个数counter balence gold%bg=zeros(1,N);%代表平衡gold序列%for i=1:N+2%开始找,要找N+2行%for j=1:N%弄出来一个全1的向量,长度为N,命名为judge函数judge(1,j)=0;ends2=mod((gold(i,:)+judge),2);%s2是一个gold序列与全1序列模二加得到的序列%for k=1:N %看有多少个1%if s2(k)==1c1(i)=c1(i)+1;endendfor k=1:N %有多少个0%if s2(k)==0c0(i)=c0(i)+1;endendif c1(i)-c0(i)==1%1的个数比0多1,找到一个平衡序列%cbg=cbg+1;%平衡gold序列个数加1,可以看是不是约50%或75%是平衡的%bg(cbg,:)=gold(i,:);%这个个平衡序列复制到bg中%endendfprintf('已生成%1.0f个平衡gold序列',cbg)fprintf('\n')。
平衡Gold序列的生成条件
第32卷 第2期大连海事大学学报Vol.32 N o.2 2006年5月Journal of Dalian Maritime University M ay 2006文章编号:1006 7736(2006)02 0093 03平衡Gold序列的生成条件李 婷,孙娇燕(大连海事大学信息工程学院,辽宁大连 116026)摘要:扩频序列的平衡性直接影响CDM A通信系统发射信号的性能,如何高效准确地产生平衡Gold序列成为当前研究的热点.在对现有的各种平衡G old序列产生方法进行深入研究的基础上,通过M AT L AB编程运算,从大量的验算数据中找出由m序列优选对产生平衡Gold序列的规律,确定了平衡Gold序列的生成条件,进而给出一种产生平衡G old序列的改进方法.并应用该方法对阶数n=5~15的m序列优选对所生成平衡Gold序列进行了验证,验算结果表明,该方法是正确的.关键词:通信系统;优选对/平衡性;Gold序列;编程运算中图分类号:T N929.533 文献标识码:A0 引 言Gold序列是m序列的复合码,它是具有良好的自、互相关特性的一种伪随机序列.第三代移动通信系统中的WCDMA系统就采用Walsh(信道编码)+Gold序列(区分小区)和Walsh(信道编码)+Gold序列(区分用户)进行前/后向扩频编码.但是在所有的Gold序列中只有50%或75%的序列是平衡的,非平衡的Gold码会影响扩频系统发射信号的载波抑制.因此对平衡Gold序列的产生条件的研究是十分必要也是非常有意义的.目前,许多文献提出各种寻找平衡Gold序列产生方法,这些方法各有所长,但在如何确定基准序列生成平衡Gold序列的问题上仍缺少明确的方法.本文在吸取文献[1]和文献[2]中提出的平衡Gold序列产生方法的基础之上,提出一种确定基准序列的改进方法,并通过MATLAB编程运算,从大量的验算数据中找出由m序列优选对产生平衡Gold序列的规律,给出了部分平衡Gold 序列的生成条件和方法.1 Gold序列产生方法及平衡问题由m序列的定义可知,在GF(2n)域中的一个本原元,就有一个m序列与之对应.m序列集中具有的序列数为 (2n-1)/n,其中 ( )称为欧拉函数,n为寄存器的级数.如果当n 4(mod 4),周期为P=2n-1相异的两个m序列,当它们的互相关函数值满足R( )=2 (n+2)/2 -1-1-2 (n+2)/2 -1(1)那么,这样的一对m序列就具有优选三值特性,称为m序列优选对.如果序列A=(a0,a1,a2, ,a P-1),B= (b0,b1,b2, ,b P-1)是周期为P=2n-1的m 序列优选对,它们按下式构成Gold序列:G i=B T i A (i=0,1,2, ,P-1)其中:T表示循环移位;T i表示循环移位i次.A 序列的循环移位序列T0A,TA,T2A, , T(P-1)A也是m序列.则G i和A、B序列一起构成收稿日期:2006 01 10作者简介:李 婷(1980-),女,福建三明人,研究生;E mail:spidersmile@.Gold序列集合G(A,B).每对n级m序列优选对可产生(2n+1)个Gold序列,但其中只有50%(2n +1)或75%(2n+1)的序列是平衡的,为此,必须从中将平衡Gold序列挑选出来.而随着n的增大,Gold序列数也增大,如何从(2n+1)个Gold序列中选出平衡Gold序列就成为研究的课题.文献[4]指出:设优选对A和B的n阶本原特征多项式分别为h(y)、g(x).当B=A[q]满足q=2k+1时,在g(x)本原特征多项式构成的线性移位寄存器的初始状态X i(i,1,2, ,n)给定后,产生序列A的线性移位寄存器的初态Y i(i= 1,2, ,n),只要使h(y)第n个寄存器状态与g(x)的第n个寄存器状态相异,即X n Y n,就能产生平衡Gold序列.但是,文献[4]中作者并没有明确作为基准的序列B的初始状态如何确定,是任意相位还是某一特定相位.文献[1]给出产生平衡Gold序列的线性移位寄存器的初始状态为m序列特征相位,但并没有明确究竟以优选对中哪一个m序列特征相位为基准初态,才能产生平衡Gold序列.如A和B为n =5的m序列优选对,它们的特征多项式的八进制表示分别为51和75.若以A的特征相位为基准初态,通过移动B,得到的Gold序列均为平衡,反之,得到的Gold序列并非都是平衡.可见,序列A和B,哪个序列循环移位,哪个序列的特征相位置初态,与Gold序列是否平衡密切相关.2 平衡Gold序列的生成方法综合以上两个文献中给出的产生平衡Gold 序列的方法,笔者经过MATLAB编程反复验算,总结出产生平衡Gold序列的方法,表述如下:设序列B与序列A为m序列优选对,且序列B由A按照间隔q=2k+1(且e=g cd(n,k)与n满足n/e为奇数)采样得到,记为B=A[q].以序列B为基准,并以序列B的特征相位置初态,只要A的第n个寄存器状态与B的第n个寄存器状态相异,就可以产生平衡Gold序列.当n 为不是4的倍数的偶数时,用该方法可以得到其中50%的平衡Gold序列,其余平衡Gold序列仍需要用别的方法得到.下面以本原特征多项式为f(x)=1+x2+x5的m序列A为例,说明产生平衡Gold序列的方法:(1)确定采样值q采样值q=2k+1,k=1,2, ,n,且e=gcd(n,k)与n满足n/e为奇数.n=5时,计算得q值为3、5、9、17,由分圆陪集法可知3和17,5和9分别同处于两个陪集中,而以同一陪集中的值采样所得到的序列相同,因此q的取值为3或5(本文取q=3).(2)确定基准序列B的特征相位可以证明,当m序列A处于特征相位时,经采样所得的m序列B=A[3]也会处于特征相位.所以先求A的特征相位,再求B=A[3]即得处于特征相位的基准序列B.具体求法如下:A的本原特征多项式为f(x)=1+x2+ x5计算m(x)m(x)=d[x f(x)]d xn=奇数f(x)+d[x f(x)]d xn=偶数因为n=5,所以m(x)=d[x f(x)]d x=d[x (1+x2+x5)]d x=1+x2.计算h(x)并得到序列A的特征相位h(x)=m(x)f(x)=a0+a1x+a2x2+ +a n-1x n-1 序列的特征相位为a0,a1,a2, ,a n-1.本例中,h(x)=1+x21+x2+x5=1.所以,序列A的特征相位为(10000).求序列B的特征相位B=A[3]=(1001001100001011010100011101111)所以,序列B的特征相位为(10010)(3)平衡Gold序列的构成以序列B的特征相位为移位寄存器的初始状态,并使序列A的第n个移位寄存器状态与序列B的第n个移位寄存器状态相异,两序列模2相加生成平衡Gold序列.通过改变序列A与序列B 的相对相位,可以得到其他的平衡Gold序列.反之,如果以序列A为基准,使序列B进行移位,所求出的全部17个Gold序列中,只有7个是平衡的,另外的10个序列则不是平衡序列.由此可以看出,基准序列的确定是十分重要的,基准序列不同,平衡性就会发生变化.笔者对n=5, 6,7,9,10,11,15的Gold序列进行了反复验算,结果表明:上述生成平衡Gold序列的条件和方法是正确的.用MATLAB编程产生平衡Gold序列的94大连海事大学学报 第32卷流程如图1所示.图1 生成平衡Gold 序列流程图需要指出的是,当n 不为4的倍数的偶数时,由于m 序列中 0 的个数总比 1 的个数少一个,要让两个序列的第一个移位寄存器状态相异只有50%的机会,因而此时用该方法虽然可以得到平衡Gold 序列,但不能得到全部75%的序列,而只能得到50%的平衡序列.3 结束语寻找平衡Gold 序列存在多种方法,分为软件和硬件两大类.在工程实际中,无论是硬件方法还是基于软件无线电技术的可编程器件,都采用移位寄存器构成Gold 序列.通过MATLAB 编程运算,对大量的验算数据进行分析,从而总结出由m 序列优选对产生平衡Gold 序列的规律,明确了当优选对之间的采样关系为B =A [q ],且q =2k +1时,平衡Gold 序列发生器的初始条件.并应用该方法对阶数n =5~15的m 序列优选对所生成平衡Gold 序列进行了验证,验算结果表明该方法是正确的.参 考 文 献:[1]高 英.m 序列优选对的实现及平衡Gold 序列分析[J].计算机与网络,2000,17:25.[2]陈海龙,李 宏.基于M AT L AB 的伪随机序列的产生和分析[J].计算机仿真,2005,22(5):98.[3]赵 星,李宝升.寻找平衡Gold 序列的方法[J].通信管理与技术,2004(2):46.[4]朱近康.CDM A 通信技术[M ].北京:人民邮电出版社,2001:82 87.[5]樊炳亮,李晓辉.一种生成平衡Go ld 序列的算法[J].微机发展,2005,15(9):18.[6]闫保中,何联俊,洪 艳.m 序列优选对及平衡Gold 序列的产生与搜索[J].应用科技,2003,30:31 34.[7]RICE M ,T RET T ER S,M AT HYS P.O n differentially encoded m sequences[J].I EEE T rans Commun,2001,43(3):421 424.[8]M ARV IN K S,JIM K O,RO BERT A S,et al.Spread spectrum Communicat ions Handboo k[M ].北京:人民邮电出版社,2002.Research on the qualification of generating balance Gold sequencesLI T ing,SU N Jiao yan(I nf or mation E ng.College,Dalian Maritime U niv.,Dalian 116026,China)Abstract:The balance property of the spectrum spreading sequences influences the performance of the signal of CDMA com munication system,and how to g enerate balance Gold sequences exactly is a hotspot.The pa per lucubrated the ex isting ways of generating balance Gold sequences,and found the disciplinarian of gen erating balance Gold sequences by m sequence pairs by using MATLAB,then confirmed the qualification of g enerating balance Gold sequences and put forw ard a better m ethod,w hich w as validated by using to gener ate balance Gold sequences form n =5to 15.The result shows that the method presented is correct.Key words:communication system;pairs/balance property;gold sequences;calculation by program95第2期 李 婷,等:平衡Gold 序列的生成条件。
Gold码序列生成MATLAB代码
%本原多项式(二进制)
% Mfb_len = 11;%M序列要求生成多项式的长度
Mfb_ratio = log2(M_base);
M1fb_raw_len = M1origin_len * Mfb_ratio;%M序列本源多项式转换二进制为后的长度
M1fb_raw = zeros(1, M1fb_raw_len);%初始化M序列生成多项式
%自制Gold序列
function [GoldSeq] = dyc_gold_gen_v3()
%本原多项式参数
M_base = 8;%本原多项式表示进制数
M1 = [2 0 1 1];
M2 = [2 4 1 5];
Mfb_len = 11;%M序列的生成多项式的长度
Mfinal_len = 1023;%生成的M序列的长度
M1regs_e(1) = M1regs_s(M1regs_lቤተ መጻሕፍቲ ባይዱn);
for M1_ri = 2 : M1len_period
M1regs_m2(1) = mod(sum(M1fb .* M1regs_m1), 2);%低位产生新的一位
M1regs_m2(2 : M1regs_len) = M1regs_m1(1 : (M1regs_len - 1));%向高位右移一位
M1regs_m1 = M1regs_m2;
M1regs_e(M1_ri) = M1regs_m1(M1regs_len);
end
M2regs_e(1) = M2regs_s(M2regs_len);
for M2_ri = 2 : M2len_period
M2regs_m2(1) = mod(sum(M2fb .* M2regs_m1), 2);
平衡gold序列的生成条件
Gold序列是一种特殊的二进制序列,它具有一些独特的性质,其中最重要的性质之一是,该序列中不存在连续的相同的子串。
平衡Gold序列的生成条件如下:
1. 长度为1的Gold序列是0。
2. 对于任何长度大于1的Gold序列,可以通过以下方式生成:
a. 将两个长度相同的Gold序列连接在一起,其中第一个序列的末尾为0,第二个序列的开头为1。
b. 在序列的开头添加一个0,然后在末尾添加一个1,中间插入一个长度为n-1的平衡Gold 序列,其中n是生成的序列的长度。
平衡Gold序列的长度是2的整数次幂,因此可以通过递归地应用生成条件来构造平衡Gold 序列。
GOLD码产生与特性分析实验
实验八GOLD 码特性实验一、实验目的1、掌握GOLD 码的编解码原理。
2、掌握GOLD 码的软件仿真方法。
3、掌握GOLD 码的硬件仿真方法。
4、掌握GOLD 码的硬件设计方法。
二、预习要求1、掌握GOLD 码的编解码原理和方法。
2、熟悉matlab 的应用和仿真方法。
3、熟悉Quatus 的应用和FPGA 的开发方法。
三、实验原理1、GOLD 序列简介GOLD 序列是由m 序列的“优选对”构成的。
所谓优选对是指m 序列中互相关值为[-1,-t(n),t(n)-2]的一对序列。
其中(1)/21(2)/212,2,(){n n n n t n ++++=为奇数,为偶数下表为部分m 序列的部分优选对 表1 部分m 序列的部分优选对上表中的m 序列采用8进制(可参见PN 码实验)。
2、GOLD 序列由m 序列中的优选对{xi}和{yi}本身加上它们的相对移位模二相加构成的2n -1个序列组成,序列总数为2n +1。
任一队序列之间的互相关函数都是三值的,即(1)/2(1)/21(1)/2(1)/211{(21)(),(21)()2R {1{(21)(),(21)()2n n cn n t n n t n t n n t n ++++++--+=--=-=--+=--=-为奇数为偶数,但不被4整除即,GOLD 序列的最大互相关值为|R |()c m t n下表为GOLD 序列的t(n)值及其与自相关峰值Rs (0)的比值,同时给出GOLD 序列族中的序列数。
表为 部分GOLD 序列的t(n)值、Rs (0)、序列数表1、建立GOLD 的仿真文件(GOLD.MDL)GOLD1…GOLD7的Sample Time 均设置为SampleTime ;Preferred polynomial (1)设置为[1 0 1 1];Initial states (1)设置为[0 0 1]; Preferred polynomial (2)设置为[1 1 0 1];Initial states (2)设置为[0 0 1]。
GOLD 序列码产生及特性分析实验
实验二 GOLD 序列码产生及特性分析实验一、实验目的1. 了解Gold 码的性质和特点;2. 熟悉Gold 码的产生方法;二、实验内容1. 熟悉Gold 码的的产生方法;2. 测试Gold 码的的波形;三、实验原理m 序列虽然性能优良,但同样长度的m 序列个数不多,且m 序列之间的互相关函数值并不理想(为多值函数)。
1967年,R .Gold 提出和讨论了一种新的序列,即Gold 码序列。
这种序列有较为优良的自相关和互相关特性,构造简单,产生的序列数多,因而得到广泛的应用。
a) m 序列优选对m 序列优选对是指在m 序列集中,其互相关函数最大值的绝对值满足下式的两条n 阶m 序列:表2-1给出了部分m 序列优选对。
表2-1 部分优选对码表 级数 基准本原多项式 配对本原多项式 7 211 217,235,277,325,203,357,301,323 9 1021 1131,133310 2415 2011,3515,317711 4445 4005,5205,5337,52632.Gold 码的产生方法Gold 码是m 序列的组合码,由同步时钟控制的两个码字不同的m 序列优选对逐位模2加得到,其原理如图2-1所示。
这两个码发生器的周期相同,速率也相同,因而两者保持一整除为偶数,但不能被位奇数41212)(2/)2(2/)1(n n R n n xy ⎩⎨⎧++≤++τ定的相位关系,这样产生的组合码与这两个子码序列的周期也相同。
当改变两个m 序列的相对位移时,会得到一个新的Gold 码。
Gold 码虽然是m 序列模2加得到的,但它已不再是m 序列,不过仍具有与m 序列近似的优良特性,各个码组之间的互相关特性与原来两个m 序列之间的互相关特性一样,最大的互相关值不会超过原来两个m 序列间最大互相关值。
Gold 码最大的优点是具有比m 序列多得多的独立码组。
图2-1 Gold 码序列发生器Gold 码序列具有以下性质:(1)两个m 序列优选对经不同移位相加产生的新序列都是Gold 序列,两个n 级移位寄存器可以产生2n +1个Gold 序列,周期均为2n -1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
clear all;
n=input('请输入移位寄存器的级数n,n是大于等于2的整数,且n不能为4的倍数,为4的倍数不保证结果正确: ');%五级移位%
N=2^n-1;%周期为N%
x=gfprimfd(n,'all');%产生级数为n的本原多项式%
[row,column]=size(x);
if(n==2)%n为2是不能用下面求y的公式,作为特例直接写入%
y=[1,1];
end
if(n>2)
y=x(1:row,2:column);%本来是nXn矩阵,第一列都是1,不要了,现在是nX(n-1)矩阵% end
m=zeros(row,N);%求出所有m序列%
for r=1:row%从1到第row行%
register7=[zeros(1,n-1),1];%寄存器7,表示移位寄存器的初态除了最后一位,其余全0%
m(r,1)=register7(n);%m(r,1)是的第r行第一列的取值%
for i=2:1:N%从2到N,连续取值%
register8(1)=mod(sum(y(r,:).*register7),2);%移位寄存器的向量与反馈系数的向量点乘后,新向量的所有数模二加,得到一个数作为寄存器8的第一位%
for j=2:1:n%从2到N,连续取值%
register8(j)=register7(j-1);%确定后n-1位%
end
register7=register8;%保存移位寄存器现在的值到register1%
m(r,i)=register7(n);%输出的书,从第2位开始%
end %现在得到了第r行的m序列%
end %现在得到了第1到第r行的m序列%
if(n>2)%列出m1最大行数,超过会报错%
fprintf('m序列的行数小于等于%',row)%显示之后要输入m1的要求%
end
if(n==2)%列出m1最大行数,超过会报错%
fprintf('m序列的行数小于等于1')%显示之后要输入m1的要求%
end
fprintf('\n')%换行%
pass=1;%判断m1序列是否有优选对,若有,pass在下面循环中置0%
while(pass==1) %若m1没有优选对,则循环%
nom1=input('请从矩阵y中选出你所要m1序列本愿多项式的行数: ');%输入一个数赋给nom1,number of m1,即m1的行数%
m1=m(nom1,:);%得到了你指定的m1序列%
rm=zeros(1,2^n-1);%两个m序列的互相关性,用来判断m优选对%
s=zeros(1,2^n-1);%m优选对中移位后相同数的个数%
d=zeros(1,2^n-1);%m优选对中移位后相同数的个数%
register2=zeros(1,2^n-1);%寄存器2,用以验证m序列优选对时移位%
cmatch=0;%counter match优选对匹配的数量%
match=zeros(1,N);%匹配优选对所在的行数%
matchs=zeros(1,N);%match sequence匹配优选对的序列%
for k=1:row%对m序列每一行循环%
m2=m(k,:);%把m序列的第k行赋给m2%
register1=m2;%寄存器1,用以验证m序列优选对时移位%
for i=1:2^n-1
A=mod((m1+register1),2);%移位加N次%
for j=1:2^n-1%逐位判断m1与m2是否相同,判断N次%
if A(j)==0%若第j位位相同%
s(i)=s(i)+1;%相同数加1,之后清零%
end
d(i)=N-s(i);%不同数减一,因为是s(i)的因变量,不用清0%
end
rm(i)=s(i)-d(i);%rm是互相关函数,因为是s(i)和d(i)的因变量,不用清0%
s(i)=0;%必须清0,不然k的循环序列就会叠加%
register2(1)=register1(N);%以下三行为循环右移%
register1(2:N)=register1(1:N-1);
register1(1)=register2(1);
end
maxrm=max(abs(rm));%maxrm为互相关值的最大绝对值,因为是rm的因变量,所以不用清0%
if(mod(n,2)==1)%对2除n求余,判断n的奇偶性%
if(maxrm==2^((n+1)/2)+1)%奇数判断互相关最大绝对值是否满足书上条件4—37%
cmatch=cmatch+1;%匹配(即互为优选对)个数加1%
match(1,cmatch)=k;%匹配行数写入match序列中%
matchs(cmatch,:)=m2;%匹配序列写入matchs矩阵中%
end
end
if(mod(n,2)==0)%同上%
if(maxrm==2^((n+2)/2)+1)%偶数判断互相关最大绝对值是否满足书上条件4—37%
cmatch=cmatch+1;
match(1,cmatch)=k;
matchs(cmatch,:)=m2;
end
end
end
if(cmatch~=0)%若m1有优选对,cmatch不等于0%
pass=0;%pass置0,while不在循环%
end
if(cmatch==0)%若m1没有优选对,cmatch等于0%
fprintf('m1没有优选对,请重新选择m1行数')%输出括号中的数%
fprintf('\n')%换行%
end
end
fprintf('下列数字表示与m1互为优选对的m序列的行数')%输出括号中的数%
match(1:cmatch)%因为后面没加分号,执行程序时会显示match序列的第1到第camtch列% choice=input('是否依次显示m1的优选对y/n:','s');%按括号中文字内容从键盘输入一个置%
if(choice=='y')%输入y执行,输入其他任何数不执行%
matchs%matchs,match sequence,表示m1的所有优选对%
end
nom2=input('请从矩阵y中选出你所要m2序列的行数: ');%同中文%
m2=m(nom2,:);%得到m2,用优选对m1,m2,生成下面的gold序列,并选出平衡gold序列% gold=zeros(N+2,N);%一共N+2个gold序列,每个周期为N,设(N+2)*2的矩阵% register3=m2;%给寄存器3赋值m2,下面循环右移要用%
register4=zeros(1,N);%给寄存器4设置成1xN的矩阵,下面循环右移要用%
for i=1:N%循环N次%
gold(i,:)=mod((m1+register3),2);%两m序列逐位模二加%
register4(1)=register3(N);%下面三行为循环右移%
register3(2:N)=register3(1:N-1);
register3(1)=register4(1);
end;
gold(N+1,:)=m1;%m序列包含生成它的2个m序列%
gold(N+2,:)=m2;
c1=zeros(1,N+2);%代表1的个数counter 1%
c0=zeros(1,N+2);%代表0的个数counter 2%
cbg=0;%代表平衡gold序列的个数counter balence gold%
bg=zeros(1,N);%代表平衡gold序列%
for i=1:N+2%开始找,要找N+2行%
for j=1:N%弄出来一个全1的向量,长度为N,命名为judge函数
judge(1,j)=0;
end
s2=mod((gold(i,:)+judge),2);%s2是一个gold序列与全1序列模二加得到的序列% for k=1:N %看有多少个1%
if s2(k)==1
c1(i)=c1(i)+1;
end
end
for k=1:N %有多少个0%
if s2(k)==0
c0(i)=c0(i)+1;
end
end
if c1(i)-c0(i)==1%1的个数比0多1,找到一个平衡序列%
cbg=cbg+1;%平衡gold序列个数加1,可以看是不是约50%或75%是平衡的% bg(cbg,:)=gold(i,:);%这个个平衡序列复制到bg中%
end
end
fprintf('已生成%个平衡gold序列',cbg)
fprintf('\n')。