扰码器_加扰_解扰 1 加扰与解扰2 扰码器3 仿真
1 加扰与解扰
加扰:原数据流与伪随机序列中的bit流进行异或计算,得到一个较为随机的字符流(减少连续的1与连续的0的长度),从而降低了数据流传输时的EMI噪声(当数据重复传输时,能量会集中在某一频率上,产生EMI噪声;数据经过加扰后,会把集中的能量分开,几乎变成白噪声)。
解扰:使用与加扰器相同的电路结构及同样的种子,恢复原数据。
2 扰码器802.11中DATA字段的数据需要加扰,使用的加扰器如下所示。
SystemVerilog程序
`timescale 1ns/1psmodule scrambler_descrambler();reg [6:0] scrambler_seed;reg [15:0] scrambler_input_data;reg [15:0] scrambler_output_data;reg [6:0] scrambler_dff;reg temp;reg [15:0] descrambler_rec_data;reg [15:0] descrambler_dec_data;reg [6:0] descrambler_dff;integer k=0;initial begin scrambler_seed[6:0] = 7'b100_1101;//DFF initial state $display("nn"); $display("Scrambler seed = 7'b%7bn", scrambler_seed[6:0]); scrambler_input_data [15:0] = 16'b1011_0111_1110_0001;//LSB first input scrambler_output_data[15:0] = 16'h0; //scramble $display("Scrambler start..."); $display("Scrambler_input_data : %16b", scrambler_input_data[15:0]); scrambler_dff[6:0] = scrambler_seed[6:0]; for(k=0;k<16;k=k+1) begin temp = scrambler_dff[6] ^ scrambler_dff[3]; scrambler_output_data[k] = scrambler_input_data[k] ^ temp; scrambler_dff[6:0] = {scrambler_dff[5:0], temp}; end $display("Scrambler_output_data : %16b", scrambler_output_data[15:0]); $display("n"); descrambler_rec_data[15:0] = scrambler_output_data[15:0]; descrambler_dec_data[15:0] = 16'h0; //descramble $display("Descrambler start..."); $display("Descrambler_input_data : %16b", descrambler_rec_data[15:0]); descrambler_dff[6:0] = scrambler_seed[6:0]; for(k=0;k<16;k=k+1) begin temp = descrambler_dff[6] ^ descrambler_dff[3]; descrambler_dec_data[k] = descrambler_rec_data[k] ^ temp; descrambler_dff[6:0] = {descrambler_dff[5:0], temp}; end $display("Descrambler_output_data : %16b", descrambler_dec_data[15:0]); if(descrambler_dec_data[15:0] == scrambler_input_data [15:0]) begin $display("Descramble PASS"); end else begin $display("Descramble FAIL"); end $display("nn");endendmodule结果
数据解扰后恢复为原数据。