基于FPGA的QPSK+卷积编码Viterbi译码通信系统开发,包含帧同步,高斯信道,误码统计,可设置SNR

1.引言

基于FPGA的QPSK+卷积编码Viterbi译码通信系统开发,包含帧同步,高斯信道,误码统计,可设置SNR。系统包括QPSK调制模块,QPSK解调模块,217卷积编码模块,维特比译码模块,AWGN信道模块,误码统计模块,帧同步模块,数据源模块等。

2.算法仿真效果

1

2

3

4

3.算法涉及理论知识概要

整体系统结构如下所示:

数据源模块 → 217卷积编码模块 → QPSK调制模块 → AWGN信道模块 →

QPSK解调模块 → 维特比译码模块 → 帧同步模块 → 误码统计模块

4.Verilog核心程序

..............................................   
//卷积编码
conv_217_code uut (
        .i_clk   (i_clkdx), 
        .i_reset (i_rst), 
        .i_en    (i_en),
        .i_x     (i_bits), 
        .o_enc   (o_enc)
    );
    
 
    
    
//QPSK调制
wire signed[31:0]w_mod_T;
TQPSK TQPSKU(
.i_clk     (i_clk),
.i_clkdx   (i_clkd2x),
.i_rst     (i_rst),
.i_en      (i_en),
.i_Ibits(o_enc[0]),
.i_Qbits(o_enc[1]),
 
.o_Ifir (o_Ifir),
.o_Qfir (o_Qfir),
.o_cos  (),
.o_sin  (),
.o_modc (),
.o_mods (),
.o_mod  (w_mod_T)
);
 
//加入信道
awgns awgns_u(
    .i_clk(i_clk), 
    .i_rst(i_rst), 
    .i_SNR(i_SNR), //这个地方可以设置信噪比,数值大小从-10~50,
    .i_din(w_mod_T[24:9] + w_mod_T[25:10]), 
    .o_noise(),
    .o_dout(o_Nmod_T)
    );  
 
 
//QPSK解调
wire o_en_dec;
RQPSK RQPSKU(
.i_clk  (i_clk),
.i_rst  (i_rst),
.i_med  (o_Nmod_T),
.o_cos  (),
.o_sin  (),
.o_modc (o_rmodc),
.o_mods (o_rmods),
.o_Ifir (o_rIfir),
.o_Qfir (o_rQfir),
.o_Ibits(),
.o_Qbits(),
.o_Ibits_data(o_Ibits_data),
.o_Ibits_head(o_Ibits_head),
.o_Ipeak(o_Ipeak),
.o_Ien_data(o_Ien_data),
.o_Ien_pn(o_Ien_pn),
.o_Iframe_start(o_Iframe_start),
.o_Qbits_data(o_Qbits_data),
.o_Qbits_head(o_Qbits_head),
.o_Qpeak(o_Qpeak),
.o_Qen_data(o_Qen_data),
.o_Qen_pn(o_Qen_pn),
.o_Qframe_start(o_Qframe_start),
.o_en_dec(o_en_dec)
);
    
 
//维特比译码
conv_217_decode conv_217_decodeu(
        .i_clk    (i_clkdx), 
        .i_reset  (i_rst|dly_start[6]|dly_start[7]|dly_start[8]|dly_start[9]|dly_start[10]|o_Ien_pn), //
        .i_en     (o_dec_enable),
        .i_enc    ({~o_Qbits_data[1],~o_Ibits_data[1]}), 
        .o_dec    (o_dec)
    );
    
 
 //计算误码率   
 //I,Q两路分别计算,最后统计平均值作为误码率
//error calculate
Error_Chech Error_Chech_u1(
    .i_clk(i_clkdx), 
    .i_rst(i_rst), 
    .i_trans(i_bits), 
    .i_en_data(o_dec_enable),
    .i_rec(o_dec), 
    .o_error_num(o_error_num), 
    .o_total_num(o_total_num),
    .o_rec2     ()
    );
 
    
endmodule
0sj2_078m

 

posted @ 2025-12-08 15:00  我爱C编程  阅读(12)  评论(0)    收藏  举报