目录
[3.1 QPSK调制](#3.1 QPSK调制)
[3.2 QPSK解调](#3.2 QPSK解调)
[3.3 FPGA实现步骤](#3.3 FPGA实现步骤)
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