802.11a和802.11n中的scrambler仿真不可以直接用matlab中的comm.Scrambler函数。因为这个函数实现的是multiplicative scrambling,而802.11a和802.11n中的scrambler使用的是additive scrambling。additive scrambling使用异或操作进行扰码,multiplicative scrambling使用乘法而非异或操作来对数据进行扰码。
所以进行仿真的时候,要使用comm.PNSequence生成一个PN序列,然后对输入数据进行XOR操作即可。
代码如下:
%% scramble
genPoly = 'x^7 + x^3 + 1'; % Generator polynomial
shift = 7; % Shift value for output
spf = 48; % Samples per frame
initState = [1 0 1 1 1 0 1]';
pnSeq = comm.PNSequence( ...
Polynomial=genPoly, ...
InitialConditionsSource="Input Port", ...
Mask=shift, ...
SamplesPerFrame=spf, ...
OutputDataType="logical");
pnsequence = pnSeq(initState);
scrData = xor(data_Payload_bit,pnsequence);