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

目录

1.引言

2.算法测试效果

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

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

[3.2 BPSK解制](#3.2 BPSK解制)

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

4.核心程序

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


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