OFDM之扰码

1、目的
数字通信中,如果经常出现长的0 或 1 序列,将会影响位同步的建立和保持。在发射机中使用扰码,可以避免这种数据对接收机定时的不利影响。同时,为了限制电路中存在的不同程度的非线性特性对其他电路通信造成的串扰,要求数字信号的最小周期足够长,所以将数字信号变换成具有近似于白噪声统计特性的数字序列即可满足要求,这通常用加扰来实现。所谓加扰,就是不用增加冗余而扰乱信号,改变数字信号统计特性,使其具有近似白噪声统计特性的一种技术。
2、产生原理
802.11a协议规定需对DATA域进行扰码。DATA域包括:Service、PSDU、尾比特以及填充比特。首先需经一个长度为127bit的帧同步扰码器对DATA域进行扰码,PSDU的八位位组按发送串行比特流形式存在, 比特0最先,比特7最后。扰码器使用的生成多项式如下:

也就是将数据送入扰码器,扰码器使用该生成多项式得到结果然后输出。输出的结果就是扰码之后的结果。

该扰码器是建立在线性反馈移位寄存器上,同时使用生成多项式来定义如何运算得到输出。该扰码器有七位移位寄存器,所以要定义一个7位伪随机处置状态(由0、1构成,但非全零),也称扰码种子。

为了进行正确有效的解扰,加扰发送数据和解扰接收数据使用同一个扰码器。发送时,扰码器的初始状态为我们定义的扰码种子,那么接受时,接受端的解扰器初始状态应该也为我们定义的扰码种子,但是接收端并不知道扰码种子,所以无法设置接收端解扰器的初始状态为扰码种子,这样解扰就无法恢复原数据。

因此,为了在接收端得到扰码种子,在加扰前,SERVICE字段的7个低有效比特置0,这样在接收端解扰时就可以用7个0被扰后的结果作为接收端扰码器的初始状态,从而进行有效正确的解扰。
3、扰码种子
发送时已将SERVICE字段的7个低有效比特置0,接收端就可以用7个0被扰后的结果进行推导运算得到扰码种子,然后作为接收端扰码器的初始状态,如下为求解扰码种子:
如图所示:
图-扰码器的结构

X1 – X7是扰码器是初始状态(扰码种子),输入数据为SERVICE字段的七个0。
输出数据(加扰后数据):
S1 = X4 ⊕ X7;S2 = X3 ⊕ X6;S3 = X2 ⊕ X5;S4 = X1 ⊕ X4;
S5 = S1 ⊕ X3;S6 = S2 ⊕ X2;S7 = S3 ⊕ X1。
S1 – S7为加扰后数据,接收端是可以直接收到;因此可以得到X1 – X7的表达式:
X1 = S1 ⊕ S5;X2 = S2 ⊕ S6;X3 = S3 ⊕ S7;X4 = X1 ⊕ S4;
X5 = X2 ⊕ S3;X6 = X3 ⊕ S2;X7 = X4 ⊕ S1。
通过如上表达式可以在接收端计算出扰码种子,从而正确解扰出原数据。

加扰与解扰代码

% 加扰 :注意这个函数单独运行时,前七位应为全0function XL = raoma(input)S = [1, 0, 0, 0, 0, 0, 0 ];%初始状态L = zeros(1, 127);%127加扰序列F= zeros(1, length(input));%输入数据长度for i = 1:127 A = S(1, 1); B = S(1, 4); C = xor(A, B);%将移位寄存器4,7异或 S =[S(2:7),C];% L(1,i) = C;%加扰序列endL_copy = repmat(L, 1, ceil(length(input)/length(L)));L_num = L_copy(1: length(input));%将输入数据的长度和扰码序列长度匹配F= xor(L_num, input); XL = F;%加扰后的数据序列解扰 :function XL=deraoma(output)L = zeros(1, 127);%127解加扰序列F = zeros(1, length(output));%输出数据长度s = output(1:7);x1 = xor(s(1,3), s(1,7));x2 = xor(s(1,2), s(1,6));x3 = xor(s(1,1), s(1,5));x4 = xor(x1,s(1,4));S = [xor(x4,s(1,1)),xor(x3,s(1,2)),xor(x2, s(1,3)),x4,x3,x2,x1];for i = 1:127 t1 = S(1, 1); t2 = S(1, 4); t3 = xor(t1, t2); S =[S(2:7),t3]; L(1,i) = t3; endL_copy = repmat(L, 1, ceil(length(output)/length(L)));L_num = L_copy(1: length(output));%将输入数据的长度和扰码序列长度匹配F= xor(L_num, output); XL = F;%加扰后的数据序列

最后,感谢~~老师指导。