实现基于BPSK调制解调的卷积编解码的FPGA实现。
1、BPSK调制解调方式的FPGA实现
根据描述,BPSK调制即是将“0”、“1”分别映射成“+1”、“-1”,在FPGA开发软件Vivado中,BPSK调制模块接收到“0”时,就原值保持不变,接收到“1”时,就对编码后的数据取反。如此即实现了BPSK调制。接收系统接收到信号后,首先进行信号下变频与去除信号频偏,得到数字基带信号。信号的下变频在FPGA中的实现即是用一个乘法器和一个滤波器,都是用Vivado软件自带的IP核(知识产权核或知识产权模块)实现,余弦信号采用DDS(直接数字频率合成器) IP核实现,方便快捷。对经过滤波器之后的信号进行判决,如果大于“0”,就判决为数字信号“0”,相反就判定为“1”,即逆映射,从而实现BPSK的解调。
2、卷积码编码的FPGA实现
卷积码的编码根据卷积码的生成多项式产生,本文选择(2,1,7)卷积编码方式,其中(2,1,7)编码方式的卷积编码多项式为:f1=1+x3+x4+x5+x6,f2=1+x+x3+x4+x6;(2,1,7)卷积编码方式的约束长度不长,不会耗费太多时间,同时理论上也证明其性能比较好,所以在性能与长度时间之间是一个很好的选择,在大部分的应用中都是选择的(2,1,7)卷积编码方式。无线通信系统的发射端的信号处理流程如图所示:
卷积编码实现框图
从图中可以看出,对输入的数字信号首先进行卷积编码,再进行调制上变频输出。对于BPSK调制解调方式来说,因BPSK只能处理一路信息,而卷积码编码结果同时输出两路,所以需要先将卷积码编码输出进行并串转换后变成一路进行BPSK调制。
编码器的初始化值为1000000,卷积编码模块根据编码方式(2,1,7),卷积编码多项式f1=1+x3+x4+x5+x6,f2=1+x+x3+x4+x6;对输入的数字信号进行编码,编码器输入信号为1bit,输出信号为并行2bit。对于BPSK调制解调方式,需要先经过并串转换模块将卷积编码模块输出的并行2bit数字信号转换成1bit数字信号串行输出。
BPSK调制模块根据并串转换模块的输出进行“0”-“1”,“1”-“-1”的BPSK调制映射。上变频模块是将BPSK调制模块的输出变频到系统设计的中频或者射频便于信号传输。在FPGA实现时,我们可以通过提高时钟速率达到减少耗时的目的,加快卷积编码实现。
3、卷积码解码的FPGA实现
无线通信系统接收端实现框图如图所示,主要包含数字下变频、BPSK、串并转换、维特比译码、原始数据恢复等。
卷积解码实现框图
其中,当采用的BPSK调制解调方式时,BPSK解调后需要将一路的bit流数据转换成2bit的并行数据流,即串并转换,再进行维特比译码;维特比译码采用IP核实现即可。下变频模块完成中频或射频信号到基带信号的转换,去掉载波的影响。原始数据恢复模块就是从维特比译码结果中提取出原始信息码元。
4、FPGA实现仿真图
在Verilog HDL代码实现中,发射端包含卷积编码模块(convenc.v)、并串转换模块(par_ser_con.v)、调制及上变频模块(bpsk.v);接收端包含下变频及解调模块(de_modul.v)、串并转换模块(ser_par_con.v)、维特比译码及原始数据恢复模块(De_convenc.v)。其中convenc.v模块实现对输入原始数据的卷积编码,输入信号的位宽为1bit数据流,因为是(2,1,7)卷积编码方式,所以输出为并行2bit信号。par_ser_con.v实现并串转换功能,因为卷积编码模块的输出为2bit信号,所以对于BPSK调制来说需要进行并串转换,变成1bit数据流信号后再进行BPSK调制。bpsk.v为BPSK调制以及上变频模块,除了实现BPSK调制映射功能外,根据系统功能所需的上变频频率进行必要的设计。de_modul.v为下变频以及BPSK解调模块,是bpsk.v的逆过程。ser_par_con.v为串并转换模块,为输入译码模块作准备。De_convenc.v为维特比译码及原始数据恢复模块,输入并行2bit数据流信号,解码后的输出为1bit数据流信号,最后从维特比译码结果中提取出原始信息。每个模块的仿真图如下:
convenc.v模块仿真图
其中clk为采样时钟信号,rst_n为全局复位信号,data_in为外部输入原始信息(卷积编码前数据),data_out为卷积编码输出信号,也就是送入并串转换模块的数据。从图中可以看出,convenc.v模块完成了对输入信号的卷积编码操作。
par_ser_con.v并串转换模块仿真图
其中clk为采样时钟信号,rst_n为全局复位信号,datain为卷积编码输出信号,即convenc.v模块的输出;dout为并串转换的输出信号,从图中可以看出,该模块完成了2bit到1bit信号转换的功能。
BPSK调制图
其中clk为采样时钟信号,rst_n为全局复位信号,data_in为bpsk.v的输入信号,即并串转换模块的输出信号,o_bpsk为BPSK调制及上变频之后的信号输出。从图中可以看出,data_in正确的实现了对载波相位的0/pi调制,也就是BPSK调制。
BPSK解调图
其中clk为采样时钟信号,rst_n为全局复位信号,data_in为输入信号(接收端的接收信号,也就是BPSK调制以及上变频模块的输出信号),o_demo_dat为解调输出信号,从图中可以看出,de_modul.v模块正确的实现了BPSK信号的解调。
串并转换模块图
其中clk1为串并转换数据输出的时钟信号,clk2为串并转换数据输入的时钟信号(clk1,clk2为2倍关系),rst_n为全局复位信号,datain为本模块输入信号,也就是de_modul.v模块的输出信号,dout为串并转换模块的输出信号,该信号将输入解码模块进行卷积解码操作。从图中可以看出,ser_par_con.v模块正确的实现了串并转换功能。
维特比译码及原始数据恢复模块图
其中clk为采样时钟信号,rst_n为全局复位信号,datain与dvalid为来自ser_par_con.v串并转换模块的输出信号及数据有效信号,dvalid是为了告诉维特比解码模块数据到来了,启动解码操作。dout为维特比解码的输出信号,从图中可以看出,译码输出与最开始卷积编码输入的数据信号一致,即De_convenc.v完成了正确的解码操作。
开发工程整个Verilog源码在下载资源处,如有需要欢迎下载交流。