基于FPGA的通用化QPSK调制解调模块verilog开发,可配置载波频率,符号速率,滤波滚降系数

目录

1.引言

2.算法测试效果

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

[3.1 QPSK调制](#3.1 QPSK调制)

[3.2 QPSK解调](#3.2 QPSK解调)

[3.3 FPGA实现步骤](#3.3 FPGA实现步骤)

4.核心程序

5.完整算法代码文件获得


1.引言

基于FPGA的可配置QPSK调制解调系统,核心是将二进制比特流映射为正交两路相位调制信号,经根升余弦滤波成型抑制带外干扰,载波调制后射频发送;接收端先载波同步下变频、匹配滤波、位同步、相位判决,恢复原始比特。载波频率、符号速率、滚降系数通过寄存器配置实现通用化,适配不同通信带宽需求。

2.算法测试效果

本算法的仿真测试结果如下:

matlab测试结果如下:

FPGA测试结果如下:

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

3.1 QPSK调制

串行二进制比特每2位分为一组,分别送入I、Q两路:

将双比特映射为四种正交电平:

抑制码间串扰,可配置滚降系数α,冲激响应:

Ts为符号周期,由可配置符号速率,Rs决定Ts=1/Rs:

FPGA采用FIR数字滤波器实现,滤波器系数由配置的、实时重加载。

可配置载波频率fc,本地正交载波:

3.2 QPSK解调

正交下变频,接收信号与本地正交载波相乘:

滤除二倍频分量,得到基带I、Q两路信号。

根升余弦匹配滤波,发射端成型滤波与接收端匹配滤波级联构成升余弦滤波器,消除码间干扰,滤波器参数与发射端保持一致:

阈值判决:I>0映射比特1,I<0映射比特0;Q路同理,两路比特并行转串行恢复原始数据流。

3.3 FPGA实现步骤

步骤1:可配置参数模块设计

设置寄存器端口配置载波频率、符号速率、滚降系数,参数输入后更新DDS频率控制字、FIR滤波器系数、实现系统通用化。

步骤2:发送端串并转换与星座映射

高速串行比特每2bit分组,格雷映射生成I、Q两路双极性电平,并行输出至成型滤波器。

步骤3:可配置根升余弦FIR滤波

根据输入的滚降参数,选择不同的滤波器系数,得到对应的FIR滤波器。

步骤4:DDS正交载波调制

由配置的fc生成两路正交正余弦载波,分别与滤波后I、Q相乘叠加,输出中频QPSK调制信号。

步骤5:接收端正交下变频

接收中频信号与本地同步载波相乘,经低通滤波去除高频分量,还原基带I、Q信号。

步骤 6:匹配滤波

加载与发送端相同滚降系数、符号速率的根升余弦系数做FIR匹配滤波,消除码间串扰。

步骤7:星座判决与并串转换

对采样电平极性判决,恢复I、Q两路比特,两路并行比特串行拼接得到原始发送二进制数据。

4.核心程序

复制代码
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2024/04/06 21:50:55
// Design Name: 
// Module Name: qpsk_tops
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////
//param.Rs             = 1e3;        % 符号速率 (Symbols/s)
//param.Fs             = 20e3;       % 采样率 (Hz)
//param.fc             = 4e3;        % 载波频率 (Hz)
//param.rolloff        = 0.35;       % RRC滚降系数
module COMM_QPSK(
input i_clock,//% 采样率 (Hz)
input i_clocksymb,//% 符号速率 (Symbols/s)
input i_reset,
input i_txBits,
input [31:0]i_K,// 载波频率 (Hz)
input  signed[2:0]i_sel,//000:0.2,001:0.3,010:0.4,011:0.5,100:0.6,101:0.7,110:0.8% RRC滚降系数
input  signed[7:0]i_snr,
output signed[1:0]o_I_sym,
output signed[1:0]o_Q_sym,
output signed[15:0]o_I_filter,
output signed[15:0]o_Q_filter,
output signed[15:0]o_txPassband, 
output signed[15:0]o_rxPassband,

output signed[15:0]o_Idecos,//解调I和Q
output signed[15:0]o_Qdesin,
output signed[15:0]o_Ifilter,//滤波器
output signed[15:0]o_Qfilter,
output  o_rxBits 

);
    
MQPSK MQPSK_u(
.i_clock     (i_clock),
.i_clocksymb (i_clocksymb),
.i_reset     (i_reset),
.i_sel       (i_sel),
.i_K         (i_K),
.i_txBits    (i_txBits),
.o_I_sym     (o_I_sym),
.o_Q_sym     (o_Q_sym),
.o_I_filter  (o_I_filter),
.o_Q_filter  (o_Q_filter),
.o_txPassband(o_txPassband)
);
 
awgns awgnsu(
.i_clk     (i_clock),
.i_rst     (i_reset),
//SNR:5~30
.i_SNR     (i_snr),
.i_din     (o_txPassband),
.o_noise   (),
.o_dout    (o_rxPassband)
);  
    
        
    
DEMQPSK DEMQPSKu(
.i_clock     (i_clock),
.i_clocksymb (i_clocksymb),
.i_reset     (i_reset),
.i_sel       (i_sel),
.i_K         (i_K),
.i_Qpsk      (o_rxPassband),
 
.o_Idemod  (o_Idecos),
.o_Qdemod  (o_Qdesin),
.o_Ifilter (o_Ifilter),
.o_Qfilter (o_Qfilter),
.o_rxBits  (o_rxBits)
);  
endmodule

5.完整算法代码文件获得

完整程序见博客首页左侧或者打开本文底部GZH名片

V关注后回复码: X142)

V