m在ISE平台下使用verilog开发基于FPGA的GMSK调制器

简介: m在ISE平台下使用verilog开发基于FPGA的GMSK调制器

1.算法描述

   高斯最小频移键控(Gaussian Filtered Minimum Shift Keying),这是GSM系统采用的调制方式。数字调制解调技术是数字蜂窝移动通信系统空中接口的重要组成部分。GMSK调制是在MSK(最小频移键控)调制器之前插入高斯低通预调制滤波器这样一种调制方式。GMSK提高了数字移动通信的频谱利用率和通信质量。

   MSK属于一种特殊的2FSK调制,只是频偏为符号速率的1/4,这个特性使得在符号跳变时存在90°的相移,从而具有星座映射图。对于2FSK调制,有两个频率状态,分别对应符号“1”和“0”。如果映射到星座图上,每个符号的矢量轨迹都将在IQ坐标系的单位圆上旋转,旋转时长为符号周期。

   对于MSK调制,频偏为符号速率的1/4,这就使得每个符号周期内旋转90°,当符号为1111时,则沿着逆时针呈现四个90°相位跳变,如下图所示。MSK调制的这种特性使得其具有类似于QPSK调制的星座图,但是本质上仍然为2FSK,因此一个符号仍然只携带1bit信息。如果发射机端采用了Gaussian pulse shaping filter,则为GSM制式中使用的GMSK调制方式。

  GMSK调制技术是从MSK(Minimum Shift Keying)调制的基础上发展起来的一种数字调制方式,其特点是在数据流送交频率调制器前先通过一个Gauss滤波器(预调制滤波器)进行预调制滤波,以减小两个不同频率的载波切换时的跳变能量,使得在相同的数据传输速率时频道间距可以变得更紧密。由于数字信号在调制前进行了Gauss预调制滤波,调制信号在交越零点不但相位连续,而且平滑过滤,因此GMSK调制的信号频谱紧凑、误码特性好,在数字移动通信中得到了广泛使用,如广泛使用的GSM(Global System for Mobile communication)移动通信体制就是使用GMSK调制方式。
  l979年由日本国际电报电话公司提出的GMSK调制方式。有好的功率频谱特性,较优的误码性能,特别是带外辐射小,很适用于工作在VHF和UHF频段的移动通信系统,越来越引起人们的关注。GMSK调制方式的理论研究已较成熟,实际应用却还不多,主要是由于高斯滤波器的设计和制作在工程上还有一定的困难。调制前高斯滤波的最小频移键控简称GMSK,基本的工作原理是将基带信号先经过高斯滤波器成形,再进行最小频移键控(MSK)调制。由于成形后的高斯脉冲包络无陡峭边沿,亦无拐点,因此频谱特性优于MSK信号的频谱特性。
   通常将高斯滤波器的3dB带宽B和输入码元宽度T的乘积BT值作为设计高斯滤波器的一个主要参数。BT值越小,GMSK信号功率频谱密度的高频分量衰减越快。

   GMSK调制技术的基本结构如下所示:

1.png

    原始码元信号首先经过双极性编码,然后对其进行采样,经过插值提高数据采样率,通过高斯低通滤波器对原始信号进行带宽限制处理,然后对限带信号进行MSK基带调制,生成相互正交的I、Q两路基带信号,I、Q两路信号再分别与在载波 、 相乘,最终再通过加法器,使两路信号相加,得到最终的GMSK调制信号,通过DA送到天线部分。

    经过AD采样过后的GMSK信号首先分别和数字载波 、 相乘,再通过低通滤波器,得到I、Q两路信号,对I、Q信号通过MSK解调,得到基带信号,通过CIC抽取滤波器后,降低基带信号的采样率,最后对解调后的基带信号做位同步、抽样判决,最后解码恢复出原始码元[ 1]。

2.仿真效果预览
ISE14.7
2.png
3.png
4.png

3.verilog部分代码预览

 
module tops(
            i_clk,
                i_rst,
                o_binary_gen,
                o_chafen_encode,
                o_gauss_filter,
                o_adder,
                o_cos_I,
                o_sin_Q,
                o_cos,
                o_sin,
            o_GMSK_I,
            o_GMSK_Q,
            o_GMSK_R                
            );
input              i_clk;
input              i_rst;
output             o_binary_gen;
output             o_chafen_encode;
output signed[15:0]o_gauss_filter;
output signed[31:0]o_adder;
output signed[15:0]o_cos_I;
output signed[15:0]o_sin_Q;
output signed[15:0]o_cos;
output signed[15:0]o_sin;
output signed[15:0]o_GMSK_I;
output signed[15:0]o_GMSK_Q;
output signed[15:0]o_GMSK_R;
 
 
reg[3:0]cnt;
wire    clk_16div;
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
      begin
      cnt <= 4'b0000;
      end 
else begin
     cnt <= cnt + 4'd1;
     end
end
assign clk_16div = cnt[3];
 
binary_gen binary_gen_u(
                              .i_clk  (clk_16div), 
                              .i_rst  (i_rst), 
                              .o_dout (o_binary_gen)
                              );
 
chafen_encode chafen_encode_u(
                             .i_clk  (clk_16div), 
                             .i_rst  (i_rst), 
                             .i_din  (o_binary_gen), 
                             .o_dout (o_chafen_encode)
                             );
 
gauss_filter gauss_filter_u(
    .i_clk  (i_clk), 
    .i_rst  (i_rst), 
    .i_din  ({~o_chafen_encode,1'b1}), 
    .o_dout (o_gauss_filter)
    );
 
adder adder_u(
    .i_clk  (i_clk), 
    .i_rst  (i_rst), 
    .i_din  (o_gauss_filter), 
    .o_dout (o_adder)
    );
     
nco_gen nco_gen_u(
    .i_clk(i_clk), 
    .i_rst(i_rst), 
    .i_adder(o_adder), 
    .o_cos(o_cos_I), 
    .o_sin(o_sin_Q)
    );     
     
     
nco_gen2 nco_gen2_u(
    .i_clk(i_clk), 
    .i_rst(i_rst), 
    .o_cos(o_cos), 
    .o_sin(o_sin)
    );
     
wire signed[31:0]I_tmps;
wire signed[31:0]Q_tmps;
 
multer multer_u1(
    .clk (i_clk),
    .a   (o_cos_I), // Bus [15 : 0] 
    .b   (o_cos), // Bus [15 : 0] 
    .sclr(i_rst),
    .p   (I_tmps)
    ); // Bus [31 : 0] 
 
multer multer_u2(
    .clk (i_clk),
    .a   (o_sin_Q), // Bus [15 : 0] 
    .b   (o_sin), // Bus [15 : 0] 
    .sclr(i_rst),
    .p   (Q_tmps)
    ); // Bus [31 : 0]      
 
assign o_GMSK_I = I_tmps[31:16];     
assign o_GMSK_Q = Q_tmps[31:16];          
 
assign o_GMSK_R = o_GMSK_I + o_GMSK_Q;
 
endmodule
01_081_m
相关文章
|
7月前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的1024QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的1024QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同SNR条件下的性能测试。1024QAM调制将10比特映射到复平面上的1024个星座点之一,实现高效数据传输。硬件测试结果表明,在SNR=32dB和40dB时,系统表现出良好的性能。Verilog核心程序展示了各模块的连接与功能实现。
159 7
|
6月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于FPGA的SNN脉冲神经网络之LIF神经元verilog实现,包含testbench
本项目展示了 LIF(Leaky Integrate-and-Fire)神经元算法的实现与应用,含无水印运行效果预览。基于 Vivado2019.2 开发,完整代码配有中文注释及操作视频。LIF 模型模拟生物神经元特性,通过积分输入信号并判断膜电位是否达阈值产生脉冲,相较于 Hodgkin-Huxley 模型更简化,适合大规模神经网络模拟。核心程序片段示例,助您快速上手。
|
6月前
|
数据采集 移动开发 算法
【硬件测试】基于FPGA的QPSK调制+软解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于FPGA实现QPSK调制与软解调系统,包含Testbench、高斯信道、误码率统计模块,并支持不同SNR设置。硬件版本新增ILA在线数据采集和VIO在线SNR设置功能,提供无水印完整代码及测试结果。通过VIO分别设置SNR为6dB和12dB,验证系统性能。配套操作视频便于用户快速上手。 理论部分详细解析QPSK调制原理及其软解调实现过程,涵盖信号采样、相位估计、判决与解调等关键步骤。软解调通过概率估计(如最大似然法)提高抗噪能力,核心公式为*d = d_hat / P(d_hat|r[n])*,需考虑噪声对信号点分布的影响。 附Verilog核心程序代码及注释,助力理解与开发。
165 5
|
7月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的2ASK+帧同步系统verilog开发,包含testbench,高斯信道,误码统计,可设置SNR
本内容展示了基于Vivado2019.2的算法仿真效果,包括设置不同信噪比(SNR=8db和20db)下的结果及整体波形。同时,详细介绍了2ASK调制解调技术的原理与实现,即通过改变载波振幅传输二进制信号,并提供数学公式支持。此外,还涉及帧同步理论,用于确定数据帧起始位置。最后,给出了Verilog核心程序代码,实现了2ASK解调与帧同步功能,结合DDS模块生成载波信号,完成信号处理流程。
133 0
|
7月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4ASK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的4ASK调制解调系统的硬件测试版本,该系统包括testbench、高斯信道模块和误码率统计模块,并新增了ILA在线数据采集和VIO在线SNR设置功能。通过VIO设置不同SNR(如15dB和25dB),实现了对系统性能的实时监测与调整。4ASK是一种通过改变载波幅度表示数据的数字调制方式,适用于多种通信场景。FPGA平台的高效性和灵活性使其成为构建高性能通信系统的理想选择。
164 17
|
7月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的16QAM调制+软解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前开发的16QAM调制与软解调系统,增加了硬件测试功能。该系统包含FPGA实现的16QAM调制、软解调、高斯信道、误码率统计模块,并新增了ILA在线数据采集和VIO在线SNR设置模块。通过硬件测试,验证了不同SNR条件下的系统性能。16QAM软解调通过比较接收信号采样值与16个调制点的距离,选择最近的调制点来恢复原始数据。核心Verilog代码实现了整个系统的功能,包括SNR设置、信号处理及误码率统计。硬件测试结果表明系统在不同SNR下表现良好,详细操作步骤可参考配套视频。
179 13
|
7月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4FSK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前的文章《基于FPGA的4FSK调制解调系统》,增加了ILA在线数据采集模块和VIO在线SNR设置模块,实现了硬件测试版本。通过VIO设置不同SNR(如10dB和20dB),并展示了ILA采集的数据结果。四频移键控(4FSK)是一种数字调制方法,利用四个不同频率传输二进制数据,具有较高的频带利用率和抗干扰性能。输入的二进制数据分为两组,每组两个比特,对应四个频率f1、f2、f3、f4,分别代表二进制组合00、01、10、11。调制过程中选择相应频率输出,并进行幅度调制以增强抗干扰能力。接收端通过带通滤波器提取信号并还原为原始二进制数据。
138 7
|
7月前
|
数据采集 算法 数据处理
【硬件测试】基于FPGA的256QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的256QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同信噪比(如30dB和40dB)的仿真测试,并提供配套操作视频。256QAM调制方案每个符号携带8比特信息,通过复数值星座图映射实现高效传输。Verilog代码展示了核心模块设计,包括SNR设置、数据处理和ILA测试分析,确保系统在实际硬件环境中的稳定性和性能。
155 2
|
8月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的64QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的64QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集模块和vio在线SNR设置模块,支持不同SNR条件下的仿真与测试。通过设置SNR为25dB和30dB进行测试,验证了系统的可行性和性能。此外,本文详细阐述了64QAM调制解调的工作原理,包括信号生成、调制、解调及误码率测试等环节,并提供了Verilog核心程序代码。
151 0
|
9月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的变步长LMS自适应滤波器verilog实现,包括testbench
### 自适应滤波器仿真与实现简介 本项目基于Vivado2022a实现了变步长LMS自适应滤波器的FPGA设计。通过动态调整步长因子,该滤波器在收敛速度和稳态误差之间取得良好平衡,适用于信道均衡、噪声消除等信号处理应用。Verilog代码展示了关键模块如延迟单元和LMS更新逻辑。仿真结果验证了算法的有效性,具体操作可参考配套视频。
328 74

热门文章

最新文章