Gold序列

文章目录

前言

一、Gold序列产生原理

1.1 m序列

1.2 Gold序列

二、仿真实验

总结


前言

         本文主要介绍Gold序列的产生以及相关性仿真。


一、Gold序列产生原理

1.1 m序列

  • m序列产生

       m序列是最大长度线性移位寄存器序列的简称,是由多级移位寄存器或其他延迟元件通过线性反馈产生的最长的码序列。若r为级数,所能产生的最大长度的码序列为n=2^r-1位。

       m序列的生成是由反馈电路以及初始状态决定,且由反馈逻辑电路决定的特征多项式必须是r级的本原多项式,初始状态不能全是0,此时初始状态将决定m序列的初始相位,本原多项式决定m序列的形状。

       若r级线性移位寄存器的初始状态为:a_{-r},a_{-r+1},\cdots ,a_{-1},且满足线性反馈逻辑如下:

a_{n}=\sum_{i=1}^{r}c_{i}a_{n-i}=c_{1}a_{n-1}\oplus c_{2}a_{n-2}\oplus \cdots \oplus c_{r}a_{n-r}

     则对应的特征多项式可表示为:F=[c_{r},c_{r-1},\cdots ,c_{1},1],若记A=[a_{n-r},a_{n-r+1},\cdots ,a_{n-1}]

进一步有:a_{n}=mod\left ( \left \| F\left ( 1:r \right ) .*A \right \|_{2},2\right ),由此可得特定本原多项式以及非全零初始状态下,移位寄存器生成的m序列

m序列的自相关性

      m序列的自相关函数是双值函数,归一化自相关函数满足:

r\left ( \tau \right )=\left\{\begin{matrix} 1 &\tau =0 \\ -1 & \tau \neq 0 \end{matrix}\right.           

       m序列虽然有良好的自相关性以及互相关性,但m序列可供选择的地址码数量少,为解决这一问题,需要引入组合码,而Gold序列就是组合码中重要的一类。

1.2 Gold序列

m序列优选对

       两个m序列,例如a和b是同级但不同的本原多项式所产生的m序列对,则构成优选对的条件是,其互相关函数值满足下式:

\left | R_{ab}\left ( \tau \right ) \right |\leq \left\{\begin{matrix} 2^{\frac{r+1}{2}}+1 & mod\left ( r,2 \right )==1\\ 2^{\frac{r+2}{2}}+1 & mod\left ( r,2 \right )==0\end{matrix}\right.       

下面是几种不同级数的m序列优选对允许的最大相关函数值

Gold序列产生

       Gold码序列是由m序列优选对模2相加构成的,并且每改变一个m序列的相对位移,就可以得到一个新的Gold序列。这样每组m序列优选对可以产生2^r+1个Gold序列。

Gold序列的相关特性

        Gold码组的互相关函数值不会超过原两m序列间的最大互相关函数值,若c,d为m序列优选对a,b构成的Gold序列,则:

\left | R_{cd\, \, max} \left ( \tau \right )\right |< \left | R_{ab\, \, max} \left ( \tau \right )\right |

二、仿真实验

      特征多项式F_{1}\left ( x \right )=1\bigoplus x^{3}\bigoplus x^{10}F_{2}\left ( x \right )=1\bigoplus x^{2}\bigoplus x^{3}\bigoplus x^{8}\bigoplus x^{10}都是本原多项式,这两个本原多项式对应着两个不同的m序列,初始状态都为[1 0 0 ...0]证明这对m序列是优选对,画出他们以及由他们生成的Gold 序列的自相关图像和互相关图像。

m序列,Gold序列的自相关函数

m序列,Gold序列的自相关函数局部放大图

 m序列,Gold序列的互相关函数

m序列,Gold序列的互相关函数局部放大图

       由结果可知:由本原多项式F_{1}\left ( x \right )F_{2}\left ( x \right )生成的m序列对之间的互相关函数最大值为0.06158小于65/1023(0.0635),所以该m序列对是优选对,且由m序列优选对产生的Gold序列的互相关函数最大值也小于65/1023。

        可以看出生成的m序列以及Gold序列具有良好的自相关特性以及互相关特性,且通过改变m序列的位移相位可以得到2^r+1个不同的Gold序列。

代码

%**************************************************
%m序列,Gold序列的自相关函数、互相关函数
%**************************************************
clear all;
%**************************************************
%寄存器参数
%**************************************************
T=1e-3;                           %码片宽度
r=10;                             %寄存器位数
n=2^r-1;                          %m序列长度
M1=zeros(1,n);
M2=zeros(1,n);
M1(1)=1;                          %初始状态10000000000
M2(1)=1;
f1=[1 0 0 0 0 0 0 1 0 0 1];       %特征多项式x^10+x^3+1对应的系数
f2=[1 0 1 0 0 0 0 1 1 0 1];       %特征多项式x^10+x^8+x^3+x^2+1对应的系数
%***************************************************
%产生m序列
%***************************************************
for i=r+1:n;                      %递推公式得到m序列
    M1(i)=mod(sum(M1(i-r:i-1).*f1(1:r)),2);
    M2(i)=mod(sum(M2(i-r:i-1).*f2(1:r)),2);
end
% ***************************************************
% 产生Gold序列
% ***************************************************
G1=mod(M1+M2,2);                  %0比特相位差
s=102;                              %s在0-n之间
G2=mod(M1+[M2(s+1:n) M2(1:s)],2); %s比特相位差
%***************************************************
%双极性序列
%***************************************************
M1=2*M1-1;                        %双极性m序列
M2=2*M2-1;                        %双极性m序列
G1=2*G1-1;                        %双极性m序列
G2=2*G2-1;                        %双极性m序列
%***************************************************
%自相关函数
%***************************************************
N=2*n-1;
t=(-n+1:n-1)*T;
Rm1=zeros(1,N);                  %M1的自相关函数
Rm2=zeros(1,N);                  %M2的自相关函数
Rg1=zeros(1,N);                  %G1的自相关函数
Rg2=zeros(1,N);                  %G2的自相关函数
 
for j=0:n-1
Rm1(n+j)= sum(M1.*[M1(j+1:n) M1(1:j)])/n;
Rm2(n+j)= sum(M2.*[M2(j+1:n) M2(1:j)])/n;
Rg1(n+j)= sum(G1.*[G1(j+1:n) G1(1:j)])/n;
Rg2(n+j)= sum(G2.*[G2(j+1:n) G2(1:j)])/n;
end
Rm1(1:n-1)= Rm1(N:-1:n+1);
Rm2(1:n-1)= Rm2(N:-1:n+1);
Rg1(1:n-1)= Rg1(N:-1:n+1);
Rg2(1:n-1)= Rg2(N:-1:n+1);
figure(1)
subplot(221);
plot(t,Rm1);
title('M1自相关函数');
subplot(222);
plot(t,Rm2);
title('M2自相关函数');
subplot(223);
plot(t,Rg1);
title('G1自相关函数');
subplot(224);
plot(t,Rg2);
title('G2自相关函数');
%********************************************************
%互相关函数
%********************************************************
Rm1m2=zeros(1,N);
Rm1g2=zeros(1,N);
Rm2g1=zeros(1,N);
Rg1g2=zeros(1,N);
 
for j=0:n-1
Rm1m2(n+j)= sum(M1.*[M2(j+1:n) M2(1:j)])/n;
Rm1g2(n+j)= sum(M1.*[G2(j+1:n) G2(1:j)])/n;
Rm2g1(n+j)= sum(M2.*[G1(j+1:n) G1(1:j)])/n;
Rg1g2(n+j)= sum(G1.*[G2(j+1:n) G2(1:j)])/n;
end
Rm1m2(1:n-1)= Rm1m2(N:-1:n+1);
Rm1g2(1:n-1)= Rm1g2(N:-1:n+1);
Rm2g1(1:n-1)= Rm2g1(N:-1:n+1);
Rg1g2(1:n-1)= Rg1g2(N:-1:n+1);
figure(2)
subplot(221);
plot(t,Rm1m2);
title('M1、M2互相关函数');
subplot(222);
plot(t,Rm1g2);
title('M1、G2互相关函数');
subplot(223);
plot(t,Rm2g1);
title('M2、G1互相关函数');
subplot(224);
plot(t,Rg1g2);
title('G1、G2互相关函数');

总结

       转载请附链接:【杨(_> <_)】的博客_优快云博客-信号处理,代码实现,SAR领域博主

### Gold序列概述 Gold序列是一种伪随机噪声(PN)序列,广泛应用于现代通信系统中。它具有良好的自相关性和互相关性特性,在扩频通信、码分多址接入(CDMA)、全球定位系统(GPS)等领域有重要应用[^1]。 --- ### Gold序列的生成方法 Gold序列是由两个最大长度线性反馈移位寄存器(LFSR)产生的m序列组合而成。通过特定的相加规则形成新的序列集合。以下是其主要生成过程: #### 1. m序列的基础 m序列是从单个LFSR生成的最大长度序列。假设两个LFSR分别为 \( L_1 \) 和 \( L_2 \),它们分别产生周期为 \( T = 2^n - 1 \) 的m序列。 #### 2. 序列叠加 通过对齐这两个m序列的不同相对偏移量,并按模二加法运算得到不同的Gold序列。设 \( a_i \) 和 \( b_j \) 是来自 \( L_1 \) 和 \( L_2 \) 的比特流,则Gold序列为: \[ c_k = (a_k + b_{k+d}) \mod 2, \] 其中 \( d \) 表示两序列之间的相对延迟。 #### 3. 集合大小 对于给定的n阶LFSR,可以生成多达 \( 2^{(n-1)} + 1 \) 条独立的Gold序列。 --- ### Python代码实现Gold序列生成 以下是一个简单的Python程序用于生成Gold序列: ```python def generate_m_sequence(register, feedback_taps, length): sequence = [] reg = register[:] while len(sequence) < length: next_bit = sum([reg[i] for i in feedback_taps]) % 2 sequence.append(reg[-1]) reg.insert(0, next_bit) del reg[-1] return sequence def gold_sequence(lfsr1_init, lfsr2_init, taps1, taps2, delay, length): seq1 = generate_m_sequence(lfsr1_init, taps1, length) seq2 = generate_m_sequence(lfsr2_init, taps2, length) delayed_seq2 = seq2[delay:] + seq2[:delay] result = [(s1 + s2) % 2 for s1, s2 in zip(seq1, delayed_seq2)] return result # 参数设置 lfsr1_initial_state = [1, 0, 0, 0] # 初始状态 lfsr2_initial_state = [1, 0, 0, 0] taps_lfsr1 = [3] # 反馈抽头位置 taps_lfsr2 = [3] sequence_length = 15 # 输出序列长度 relative_delay = 4 # 延迟参数 gold_code = gold_sequence( lfsr1_initial_state, lfsr2_initial_state, taps_lfsr1, taps_lfsr2, relative_delay, sequence_length ) print(gold_code) ``` 上述代码定义了一个函数 `generate_m_sequence` 用来生成单一的m序列,而另一个函数 `gold_sequence` 将两者结合并引入延迟来创建最终的Gold序列。 --- ### Gold序列在通信系统中的应用 Gold序列因其优异的相关特性和低复杂度被广泛应用到多个领域之中。例如,在无线通信标准如WCDMA和LTE中作为信道化码;以及卫星导航系统的信号调制技术里起到至关重要的作用。这些场景下利用了它的良好正交性质减少干扰影响从而提高数据传输效率与可靠性。 ---
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【杨(_> <_)】

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值