MATLAB生成M序列和Gold序列

本文介绍了m序列,一种最长线性移位寄存器序列,通过本原多项式在硬件中生成,具有特定的循环自相关特性。m序列优选对的互相关函数具有三值特性,而Gold序列是两个m序列优选对模二加的结果,保持了三值互相关特性。此外,平衡Gold序列在扩频通信中有优势,其1的数目比-1多一个。文章提供了MATLAB代码实现m序列、循环自相关函数、Gold序列以及平衡序列的生成和计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

M序列

  最长线性移位寄存器序列又称为m序列,他是一种伪随机序列,在硬件电路中,m序列可以通过反馈移位寄存器产生,寄存器的反馈连接有生成m序列的本源多项式确定。
  m序列的 0 0 0映射成 − 1 -1 1后,m序列的循环自相关函数(不归一化)在时间间隔为 0 0 0处取最大值,其他时间间隔的循环自相关函数都是 − 1 -1 1。本源多项式 x 6 + x 4 + x 3 + x + 1 x^6+x^4+x^3+x+1 x6+x4+x3+x+1产生的m序列的循环自相关函数如下图所示。
在这里插入图片描述

MATLAB生成M序列和计算循环自相关函数

function p=PnCode(polynomial,reg)
%  PN码产生器函数
%  polynomial为本原多项式,从左到右依次为高位到低位,且最高位与最低位必须为1;低位表示延时一个周期,高位依次顺延,例如[1 0 0 1 0 1]
%  reg为置寄存器初始值,也相当于PN码的初始相位,左边为高位,如[1 0 0 1 0]表示延时5个周期的寄器和2个周期的寄存器初值为1
grade=length(polynomial)-1;%根据多项式计算延时级数
PN_Length=(2^grade-1);     %计算PN码一个周期的长度 
n=0;                         
c=zeros(1,grade);
for i=grade:-1:1
    if polynomial(i)==1
        n=n+1;
        c(n)=grade+1-i;
    end
end  
%产生一个周期的PN码  
p = zeros(1,PN_Length);
for i=1:PN_Length
    %从最高延时的寄存器中输出PN码
    p(i)=reg(1);
    %完成各抽头寄存器取值的模2加
    m = mod(reg*polynomial(1:grade)',2);
    %寄存器的值依次移位
    reg(1:(grade-1)) = reg(2:grade);
    reg(grade)=m;
end
function [r,lags] = periodic_corr(x,y)
% returns the periodic cross-correlation or autocorrelation of two discrete-time sequences.
% Rxy(m) = sum(i) x(i)Y((i+m) mod L)
% x input array
% y input array
% r periodic cross-correlation or autocorrelation
% lags Lag indices
if size(x,2) == 1 && ~isscalar(x)
    x = x';
end
if size(y,2) == 1 && ~isscalar(y)
    y = y';
end
if size(x,2)~=size(y,2)
    error(message('x y dimension mismatch'));
end
L = size(x,2);
r = zeros(1,2*L-1);
for m = 1:L
    if m == 1
        r(L) = x*y'/L;
    else
        r(L+m-1) = x*y'/L;
        r(m-1) = x*y'/L;
    end
    y = circshift(y,-1);
end
lags = -(L-1):L-1;
end

M序列优选对

  对于由两个 n n n阶本源多项式生成的m序列 a a a b b b,如果它们的互相关函数的绝对值的最大值满足公式 ( 1 ) (1) (1)所示的关系,则m序列 a a a b b b构成优选对。 ∣ R a , b ( τ ) ∣ m a x = { 2 n + 1 2 + 1 , n 为 奇 数 2 n + 2 2 + 1 , n 为 偶 数 且 不 是 4 的 倍 数 (1) \lvert R_{a,b}(\tau) \rvert_{max}=\begin{cases} 2^{\frac{n+1}{2}}+1,\quad n为奇数\\ 2^{\frac{n+2}{2}}+1, \quad n为偶数且不是4的倍数 \end{cases} \tag{1} Ra,b(τ)max={22n+1+1,n22n+2+1,n4(1)
  m序列优选对具有三值互相关特性,即它们的循环互相关函数只能取三个值。 n n n为奇数时,互相关函数取 − 1 -1 1 − ( 2 n + 1 2 + 1 ) -(2^{\frac{n+1}{2}}+1) (22n+1+1) 2 n + 1 2 − 1 2^{\frac{n+1}{2}}-1 22n+11 n n n为偶数且不是4的倍数时,互相关函数取 − 1 -1 1 − ( 2 n + 2 2 + 1 ) -(2^{\frac{n+2}{2}}+1) (22n+2+1) 2 n + 2 2 − 1 2^{\frac{n+2}{2}}-1 22n+21
  下面给出几组m序列优选对的本源多项式。

阶数本源多项式 1本源多项式 2
3 x 3 + x + 1 x^3+x+1 x3+x+1 x 3 + x 2 + 1 x^3+x^2+1 x3+x2+1
5 x 5 + x 2 + 1 x^5+x^2+1 x5+x2+1 x 5 + x 4 + x 2 + x + 1 x^5+x^4+x^2+x+1 x5+x4+x2+x+1
6 x 6 + x + 1 x^6+x+1 x6+x+1 x 6 + x 5 + x 2 + x + 1 x^6+x^5+x^2+x+1 x6+x5+x2+x+1
6 x 6 + x 5 + 1 x^6+x^5+1 x6+x5+1 x 6 + x 5 + x 4 + x + 1 x^6+x^5+x^4+x+1 x6+x5+x4+x+1

  本原多项式 x 6 + x + 1 x^6+x+1 x6+x+1 x 6 + x 5 + x 2 + x + 1 x^6+x^5+x^2+x+1 x6+x5+x2+x+1产生的m序列的互相关函数(不归一化)如下图所示,它们的三个互相关值分别为 − 1 -1 1 − 17 -17 17 15 15 15
在这里插入图片描述

GOLD序列

  Gold序列是由2个码长相等、码时钟速率相同的m序列优选对模二加和构成的,每改变2个m序列相对位移就可以得到一个新的Gold序列。在这里插入图片描述
  对于 n n n阶本源多项式生成的m序列优选对,m序列的周期为 2 n − 1 2^n-1 2n1,m序列优选对可以有 2 n − 1 2^n-1 2n1种模2加组合,再加上原来的2个m序列,可以得到一族 2 n + 1 2^n+1 2n+1个Gold序列。Gold序列的自相关特性不如m序列,但是同一族的Gold序列的互相关特性继承了m序列优选对的互相关特性,即三值互相关特性。由本原多项式 x 6 + x + 1 x^6+x+1 x6+x+1 x 6 + x 5 + x 2 + x + 1 x^6+x^5+x^2+x+1 x6+x5+x2+x+1获得的m序列优选对生成65个Gold序列,随便抽两个Gold序列计算循环互相关函数,如下图所示。在这里插入图片描述

平衡GOLD序列

  如果Gold序列中 1 1 1的数量比 − 1 -1 1的数量多一个,那么该Gold序列称为平衡Gold序列。扩频时采用平衡Gold序列有许多优点,比如平衡码能更好地抑制载波。当 n n n为奇数时,一族Gold序列中平衡序列和非平衡序列出现的概率各占50%;当 n n n为偶数且不为4的倍数时,一族Gold序列中平衡序列出现的概率为75%,非平衡序列为25%。

MATLAB生成Gold序列和寻找平衡序列

MATLAB中可以用comm.GoldSequence函数生成Gold序列,具体用法可以参考help文档。找平衡序列的方法是暴力枚举。

function [g,balanced] = GoldCode(polynomial1,polynomial2)
% Generate Gold sequence
% polynomial1、polynomial2 primitive polynomial, lists the coefficients of
%                          the polynomial in descending order of powers.  
%                          The first and last elements must equal 1, and
%                          the length of this vector requires a value of
%                          n+1, where n is the degree of the primitive polynomial.
%                          polynomial1 and polynomial2 generate a pair of m
%                          sequences which is a preferred pair 
% g Gold sequences
% balanced index of balanged Gold sequence in g

if length(polynomial1) ~= length(polynomial2)
     error(message('polynomial1 polynomial2 dimension mismatch'));
end
grade=length(polynomial1)-1;%根据多项式计算延时级数
gold_length=(2^grade-1);    %计算PN码一个周期的长度
g = zeros(gold_length+2,gold_length);
balanced = zeros(gold_length+2,1);
for n = -2:gold_length-1
    goldseq = comm.GoldSequence('FirstPolynomial',polynomial1,...
                                'SecondPolynomial',polynomial2,...
                                'FirstInitialConditions',[zeros(1,grade-1) 1],...
                                'SecondInitialConditions',[zeros(1,grade-1) 1],...
                                'Index',n,'SamplesPerFrame',gold_length);
    x = goldseq()';
% 	g(n+3,:) = 2*x-1;
    g(n+3,:) = x;
    if length(find(x == 1)) == (gold_length+1)/2
        balanced(n+3) = 1;
    end
end
balanced = find(balanced == 1);
end

参考:Gold序列与m序列仿真应用
辛肖明, 陈琼. m序列优选对及平衡Gold码序列[J]. 北京理工大学学报, 1990, 10(4):106-113.

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值