目录
[3.1 BPSK调制](#3.1 BPSK调制)
[3.2 BPSK解制](#3.2 BPSK解制)
[3.3 FPGA实现步骤](#3.3 FPGA实现步骤)
1.引言
基于FPGA的可配置BPSK调制解调系统,核心是将二进制比特流映射为正交两路相位调制信号,经根升余弦滤波成型抑制带外干扰,载波调制后射频发送;接收端先载波同步下变频、匹配滤波、位同步、相位判决,恢复原始比特。载波频率、符号速率、滚降系数通过寄存器配置实现通用化,适配不同通信带宽需求。
2.算法测试效果
本算法的仿真测试结果如下:
matlab测试结果如下:

图1:发射比特序:
系统原始基带二进制信源,是整个调制的输入数据。BPSK会将两种比特映射为载波相位相差 180°的两种符号:比特1映射为相位0°(I=+1, Q=0);比特0映射为相位180°(I=-1, Q=0)。
图2:BPSK带通信号时域波形
真实传输时间,是经过载波调制后的射频带通信号,将基带二进制信号调制到高频载波上。
图3:发射基带成形信号
基带I路同相信号(BPSK只有I分量,Q路恒为0),经过根升余弦滚降成形滤波,限制信号带宽,避免频谱泄露、邻道干扰。消除码间串扰,保证接收端抽样判决时不会被相邻符号干扰。
图4:接收匹配滤波后基带信号
先下变频把射频带通信号变回基带,再送入匹配滤波器(和发送端根升余弦滤波器匹配),在高斯白噪声信道下,最大化接收信噪比 SNR,为后续符号抽样、比特判决提供最优波形。
图5:发送符号星座图
理想BPSK星座只有两个标准坐标点:(-1,0)、(+1,0),图中两个蓝点完全落在标准位置,代表发送端无噪声、无失真的理想调制符号。
图6:接收抽样星座图
接收端对匹配滤波后的波形在最佳抽样时刻采样,得到每一个符号的I/Q值,绘制出红色星座簇。两个星座簇分别围绕(-1,0)、(+1,0)两个理想点分布,每个星座点扩散成一团红色斑点,是信道高斯白噪声导致的符号幅度、相位随机偏移。
FPGA测试结果如下:

波形效果分析和上面的matlab仿真结果类似。
3.算法涉及理论知识概要
BPSK是二进制相移键控(Binary Phase Shift Keying),属于线性数字相位调制。核心思想:用载波的两种相差180°的相位分别代表二进制比特0和1,载波幅度、频率保持不变,仅通过相位携带信息。
3.1 BPSK调制

二进制比特映射为双极性基带信号±A后,直接与高频载波相乘。
BPSK属于一维调制,只有I(同相)分量,Q(正交)分量恒为0:
比特1→符号s=+1→星座点(+1, 0)
比特0→符号s=−1→ 星座点(−1, 0)
两个星座点关于原点对称,抗干扰能力强,是二进制调制里误码性能最优的调制方式。
3.2 BPSK解制
BPSK解调模块主要负责将接收信号进行相干解调,并将其转换为数字信号。实现方式可以是使用FPGA内部的相干解调器和数字滤波器 等基本逻辑单元。
3.3 FPGA实现步骤
步骤1:可配置参数模块设计
设置寄存器端口配置载波频率、符号速率、滚降系数,参数输入后更新DDS频率控制字、FIR滤波器系数、实现系统通用化。
步骤2:星座映射
生成I路双极性电平,并行输出至成型滤波器。
步骤3:可配置根升余弦FIR滤波
根据输入的滚降参数,选择不同的滤波器系数,得到对应的FIR滤波器。
步骤4:DDS正交载波调制
由配置的fc生成两路正交正余弦载波,分别与滤波后I相乘叠加,输出中频BPSK调制信号。
步骤5:接收端正交下变频
接收中频信号与本地同步载波相乘,经低通滤波去除高频分量,还原基带I信号。
步骤 6:匹配滤波
加载与发送端相同滚降系数、符号速率的根升余弦系数做FIR匹配滤波,消除码间串扰。
步骤7:星座判决与并串转换
对采样电平极性判决,恢复I路比特,得到原始发送二进制数据。
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_BPSK(
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[15:0]o_I_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_Ifilter,//滤波器
output o_rxBits
);
MBPSK MBPSK_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_I_filter (o_I_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)
);
DEMBPSK DEMBPSKu(
.i_clock (i_clock),
.i_clocksymb (i_clocksymb),
.i_reset (i_reset),
.i_sel (i_sel),
.i_K (i_K),
.i_Bpsk (o_rxPassband),
.o_Idemod (o_Idecos),
.o_Ifilter (o_Ifilter),
.o_rxBits (o_rxBits)
);
endmodule
5.完整算法代码文件获得
完整程序见博客首页左侧或者打开本文底部GZH名片
( V关注后回复码: X143)
V