4.3.1 扰码原理和设计方法
扰码目的:抑制线路码中长连“0”或者长连“1”,便于在线路信号中提取时钟信。
(1)减少连0或者连1的长度,保证接收机能提取到定时信号;
(2)使加扰后的频谱信号更有利于基带传输;
(3)保密通信需要;
流程图:
理论知识:
4.3.2 扰码模块的实现
matlab代码:
%%-------------------------------------------
%scrambledata:输入的数据;注意第一位为低位
%
%%-------------------------------------------
function out_s=scramble(scrambledata)
%扰码器的初始状态值7‘b1011101
S=[1,0,1,1,1,0,1];
a=length(scrambledata);
scramb=zeros(1,a);
for i=1:1:a
%t1=序列第7位
t1=S(1,7);
%t2=序列第4位
t2=S(1,4);
%异或
t3=xor(t1,t2);
scramble_out(1,i)=xor(t3,scrambledata(1,i) );
%循环移位,列移位0,行移位1,右移1位
S=circshift(S,[0,1]);
S(1,1)=t3;
%异或值移入第1位
end
out_s=scramble_out;
end
输入数据和扰码结果:
module DATA_scramble(SCRAM_SEED,SCRAM_CLK,SCRAM_DIN,SCRAM_LOAD,SCRAM_ND,
SCRAM_RST,SCRAM_DOUT,SCRAM_RDY);
input [7:1] SCRAM_SEED; // 扰码器初始设置信号,本程序采用7'b1011101
input SCRAM_CLK; // 时钟信号
input SCRAM_DIN; // 扰码器输入信号,已经将并行数据变成串行数据
input SCRAM_LOAD; // 扰码器初始设置信号,由MCU单元控制
input SCRAM_ND; // 扰码器淙胗效,与输入信号同步拉高
input SCRAM_RST; // 复位信号
output SCRAM_DOUT; // 扰码器输出信号
output SCRAM_RDY; // 扰码器输出有效信号,与输出信号同步拉高
reg [7:1] SCRAMBLER; // 扰码器,一个7位的移位寄存器
reg SCRAM_DOUT; // 扰码器输出信号定义成寄存器类型
reg SCRAM_RDY; // 扰码器输出有效信号定义成寄存器类型
always @ ( negedge SCRAM_RST or posedge SCRAM_CLK ) // 加扰过程
begin
if ( !SCRAM_RST ) // 复位信号低电平有效
begin
SCRAM_DOUT <= 0;
SCRAM_RDY <= 0;
SCRAMBLER <= 0;
end
else
begin
if ( SCRAM_LOAD ) // 扰码器初始设置信号,高电平有效
SCRAMBLER <= SCRAM_SEED; // 扰码器加载初始设置信号
else
begin
if ( SCRAM_ND ) // 扰码器输入有效
begin
SCRAM_DOUT <= SCRAM_DIN + SCRAMBLER [7] + SCRAMBLER [4]; // 根据生成多项式S(X)=x^7+x^4+1写出扰码器输出信号的表达式
SCRAM_RDY <= 1; // 扰码器输出有效
SCRAMBLER <= { SCRAMBLER[6:1], SCRAMBLER [7] + SCRAMBLER [4] }; // 移位寄存器的输入信号
end
else
begin // 扰码器输入无效
SCRAM_DOUT <= 0; // 扰码器输出信号为零
SCRAM_RDY <= 0; // 扰码器输出有效为低电平
end
end
end
end
endmodule
modelsim仿真结果:
matlab与modelsim结果一致