《M序列扩频编码程序Verilog代码设计实现》
第二节:扩频编码
内容:
1. 理解直扩频的方式;
2. 设计基于m序列扩频编码程序;
2.1直扩频DSSS
所谓的直扩本质上就是将2个信号叠加,将原始信号(窄带信号)和载波信号(带宽缴款的信号)叠加,获得新的信号(带宽展宽)。
如果信号用序列表示的化,扩频可以表示位如下的公式:
序列数
频道扩展S信道
2.2信道编码ECC
设计采用分组码的编码方式,并且采用汉明码,汉明码叫做HMM(7-4)码,具体定义如下:
HMM7-4
2.3数据结构
通信数据在传输的时候以一定的数据单位进行传输,数据单位对应就是我们的数据结构,常见的数据结构有包和帧,以包为例,数据结构定义如下:
数据结构定义
2.4扩频编码经典案例
扩频编码
2.4.1程序设计
1. m_seq_gen以及dss_tz_code设计实现:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
m_seq_gen
默认N=5,采用5阶,任何一组m序列
m_seq_gen
PCML默认K=3,量化精度默认为3
assign tz = s_seq ^ m_seq;
always @(*)
if(flag_s_seq && flag_m_seq )
if(tz )
3’b001;//+1
else
3’b111;//-1
else
3’b000;//-1
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1. s_seq_gen设计实现
①通信同步:
任何通信都需要同步,采用一种同步机制使得通信双方保持数据的一致性,在这里采用一种握手方式同步。
②包定义:
设计采用包作为通信的数据结构,一个包包含默认512比特的信息,采用并且采用汉明码,包和包之间附加一个分隔符:
7bit分隔符:512比特信息 + 384监督位
设计架构
flag_s_seq<=1;
s_seq<= info;
always @(poeddge clk_c)
case(cnt)
0:D3<=info;
1:D4<=info;
2: D5<=info;
3: D6<=info;
endcase
if(cnt==2)
info_rdy<=0;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
flag_s_seq<=1;
always @(poeddge clk_c)
case(cnt)
0: s_seq <=D0;
1: s_seq <=D1;
2: D s_seq <=D2;
endcase
if( cnt ==2)
if(hmm_cnt ==127)
hmm_cnt <=0;
else
hmm_cnt <= hmm_cnt+1;
if(cnt==1)
if(hmm_cnt!=127)
info_rdy<=1;
else
info_rdy<=0;