MATLAB:格雷互补序列的仿真

格雷互补序列由Marcel Golay在1949年第一次提出,并在1960年被他正式定义。

对于广义的(包含二进制和非二进制)格雷码,Golay将其定义为:a=(a_{0},a_{1},a_{2},...,a_{n-1}),b=(b_{0},b_{1},b_{2},...,b_{n-1}) ; a_{k},b_{k}\in {-1,1},\forall 0\leq k\leq n-1, G_{a}(j)=\sum_{k=0}^{n-1-j}a_{k}a_{k+j}, G_{a}(j)+G_{b}(j)=0

对于两组长度为n的序列a=(a_{0},a_{1},a_{2},...,a_{n-1})b=(b_{0},b_{1},b_{2},...,b_{n-1}),设:

                                                                               G_{a}(j)=\sum_{k=0}^{n-1-j}a_{k}a_{k+j}

那么若a和b满足以下要求,那么a和b就是一对格雷互补序列:

                                        对于任意的 0< j< n-1G_{a}(j)+G_{b}(j)=0,而在j=0时,这个值为2n。

也就是说,格雷互补序列中,两条序列的自相关在j不为零时和为0,在j为零时和为2n。

在IEEE 802. 11ad标准文件中,定义了三对长度分别为128、64和32的格雷互补序列。在这里,我使用matlab中的wlanGolaySequence函数,生成了标准文件中长度为128的一对序列Ga和Gb,同时验证其定义。

给出代码:

clear;
clc;
[Ga128,Gb128]=wlanGolaySequence(128);
Ga128;
Gb128;

figure(1)
stem(xcorr(Ga128)+xcorr(Gb128));

就可以得到如下结果图:

                                                           

从图中可以看出,生成的序列自相关之和符合之前的定义,那么,格雷序列的性质就得以验证。

同时,由于格雷互补序列的特殊性质,它还能被应用于抑制峰均功率比(Peak-to-Average Power Ratio, PAPR),原理如下:

从格雷互补序列的定义可推导出,对其作傅立叶变换之后:

                                                                       \left | Ga(f) \right |^{2}+\left | Gb(f) \right |^{2}=2n

其中Ga(f)是序列Ga的傅立叶变换,那么就有:

                                                                                \left | Ga(f) \right |^{2}\leqslant 2n

若序列Ga的功率为1,那么其平均功率为n,所以格雷互补序列的最大峰均功率比满足不等式:

                                                                             PAPR\leqslant \frac{2n}{n}=2

即,PAPR最多也等于3dB,因此,可以利用编码的方法来产生PAPR较小的OFDM符号,从而抑制高的峰均功率比。

如果为了更高效利用载波,要在一个信道中使用双极化(垂直极化和水平极化)传输两条信息时,因为设备不可能完美地互相垂直,因此肯定会存在相互间干扰。此时,如果想要消除这种干扰,就可以对序列下手,生成两段正交序列,保证在设备不是完美互相垂直的情况下,依然不会互相干扰。

Gu512是IEEE 802. 11ad标准文件中在信道估计域(CEF)内定义的序列,其中包括了Ga256和Gb256两个格雷互补256序列,因此对Gu512进行内部的自相关计算之后会产生一个冲激响应,可用于作为信道估计的输入检测。所谓的互相正交,就是让序列1和序列2在互相关计算之后,产生的结果是一条全部为0的序列,这样就不会对各自的冲激响应产生干扰噪音。我对这个需求的解决方法想到了一个思路,即:形成两个方向相反,大小相同的冲激响应,使它们互相抵消即可。实现此解法的代码如下:

%ar和br是两个格雷64互补序列,用于生成Gu512和其正交序列
ar=[1,1,-1,-1,-1,-1,-1,-1,-1,1,-1,1,1,-1,-1,1,1,1,-1,-1,1,1,1,1,-1,1,-1,1,-1,1,1,-1,...
       -1,-1,1,1,1,1,1,1,1,-1,1,-1,-1,1,1,-1,1,1,-1,-1,1,1,1,1,-1,1,-1,1,-1,1,1,-1];
br=[1,1,-1,-1,-1,-1,-1,-1,-1,1,-1,1,1,-1,-1,1,1,1,-1,-1,1,1,1,1,-1,1,-1,1,-1,1,1,-1,...
       1,1,-1,-1,-1,-1,-1,-1,-1,1,-1,1,1,-1,-1,1,-1,-1,1,1,-1,-1,-1,-1,1,-1,1,-1,1,-1,-1,1];

Ga128=[ar,br]; %Gu512的Ga128
Gb128=[-ar,br]; %Gu512的Gb128
Ga128r=[ar,br]; %正交序列中的Ga128
Gb128r=[ar,-br]; %正交序列中的Gb128

Gu512=[-Gb128,-Ga128,Gb128,-Ga128];
Gu512r=[-Gb128,-Ga128,Gb128r,Ga128r]; %Gu512的正交序列
figure(1) %求Gu512和其正交序列的互相关之和,正确结果为一条全为0的序列
stem(xcorr(-Gb128',-Gb128')+xcorr(-Ga128',-Ga128')+xcorr(Gb128',Gb128r)+xcorr(-Ga128',Ga128r));
title("Gu512和Gu512r的互相关之和");
figure(2) %验证Gu512的自相关之和是冲激响应
stem(xcorr([-Gb128,-Ga128])+xcorr([Gb128,-Ga128]));
title("Gu512的自相关之和");
figure(3) %验证其正交序列的自相关之和是冲激响应
stem(xcorr([-Gb128,-Ga128])+xcorr([Gb128,-Ga128]));
title("Gu512r的自相关之和");

根据脚本的计算,结果图如下所示:

                                                                                         

                                                                                    Gu512和Gu512r的互相关之和

                                                                                         

                                                                                      Gu512的自相关之和

                                                                                         

                                                                                     Gu512r的自相关之和

从结果图上可看出,两条序列的自相关各自均为冲激响应,而它们的互相关是一条全部为0的序列。至此,两条正交的格雷互补序列生成完毕,验证成功。

  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值