m基于FPGA的NBDP系统ARQ单元模块的verilog实现

225 阅读3分钟

1.算法描述

       NBDP(窄带直接印字电报),全称Narrow-Band Direct-Printing。是GMDSS地面无线民系统中的一种重要通信技术,这个终端设备,要与MF、HF设备联接使用。

 

       什么是NBDP?解决这个问题先要了解一下什么是GMDSS GMDSS指Global Maritime Distress and Safety System的缩写,即全球海上遇险与安全系统。 海上安全信息播发系统(NAVTEX)是以窄带直接印字电报方式发送和自动接收海上安全信息的系统,是全球海上遇险与安全系统(GMDSS)的重要组成部分之一,其中就是NBDP。

 

       .NBDP和船舶SSB电台相连接可以实现船岸间、船舶间、船台间和经岸站延伸的电台或国际用户电报旺用户间的自动电传业务,还可以向某组船或所有船舶发电传信息。CCIR于1970年提出476建议,建议NBDP技术使用到水上移动业务中。经过十多年的实验和实践,该建议被多次修改,终于在1986年由CCIR提出了较完善的625建议。GMDSS要求NBDP终端设备必须符合此建议。数字选择性呼叫终端(DSC)是GMDSS地面通信系统中进行遇险报警的终端,同时它又有选择性呼叫的功能。即DSC具有遇险报警、遇险确认和遇险传播的功能,同时在常规通信中,它还有选择性呼叫、值班和船舶查询的功能。

 

NBDP终端的一般组成与基本原理

 

       MF/HF信道是典型的衰落信道,而且MF/HF波段出现了信道拥挤的现象。NBDP技术的使用在一定程度上或缓解了这个问题。具体来说NBDP技术或设备具有如下主要优点:

 

1.采用FSK调制(副调制),增强了在噪声中识别信号的能力。

 

2.采用了4B3Y检错码和ARQ,FEC等差控制方式,大大提高了数字的传输的正确性、可靠性。

 

3.在射频信号以100波特(码元数/秒)的低数率传输,信号占有宽带;而且整个通信过程自动化,提高了信道的利用率。

 

   窄带直接印字电报 NBDP (Narrow Band Direct Pringting Telegraph)是国际海事组织IMO(International Maritime Organization)的无线通信技术之一,适用为中高频段MF/HF。中高频NBDP系统是船与岸,船与船之间的海上无线电通信有效终端之一。NBDP系统由船舶电台、海岸电台,ARQ单元模块组成。ARQ单元是单边带收发信机之间的主体设备。

 

        本研究根据软件无线电的思想,设计NDBP系统的基带2FSK调制解调模块,信源编码译码模块,信道模块,重发模块和反馈控制模块,为工程实践提供有效ARQ解决方案。通过本项目锻炼学生综合应用通信专业工程基础理论解决复杂工程问题实践能力。

 

2.仿真效果预览

 

1.png

2.png

3.png

 

3.verilog核心程序 `module tops(

            i_clk,

i_rst,

i_ZMin,

//signal

o_4B3Y,

o_4B3Ycnt,

o_signal,

o_clk_div,

//FSK mode

o_fsk,

o_sin1785,

o_sin1615,

//FSK Demode

o_fsk1,

o_fsk2,

o_fsktest1,

o_fsktest2,

o_4B3Y2,

o_dout

        );

input i_clk;

input i_rst;   

input        [7:0]i_ZMin;

output       [6:0]o_4B3Y;

output       [2:0]o_4B3Ycnt;

output            o_signal;

output            o_clk_div;  

output signed[7:0]o_fsk;

output signed[7:0]o_sin1785;

output signed[7:0]o_sin1615;

 

output signed[15:0]o_fsk1;

output signed[15:0]o_fsk2;

output o_fsktest1;

output o_fsktest2;

output[6:0]o_4B3Y2;

output[7:0]o_dout;

 

 

 

//code,7 element constant ratio code

S7ele_ratio_code S7ele_ratio_code_u (

    .i_clk    (i_clk),

    .i_rst    (i_rst),

    .i_ZMin   (i_ZMin),

    .o_4B3Y   (o_4B3Y),

 .o_4B3Ycnt(o_4B3Ycnt),

    .o_signal (o_signal),

    .o_clk_div(o_clk_div)

    );`