基于FPGA的MSK调制系统开发

基于FPGA的MSK调制系统开发
目录1.MSK调制理论2.本算法实现3.部分源码4.仿真测试最小频移键控Minimum Shift KeyingMSK属于连续相位频移键控调制具备相位连续、频带紧凑、带外衰减快、抗噪声与抗多普勒频移能力优异等特性广泛应用于航空遥测、海事通信、无人机数传、短波低速通信、卫星物联网等对频谱效率与信道稳定性要求严苛的场景。传统DSP软件实现MSK调制依赖串行运算高速通信场景下存在处理时延大、吞吐上限受限、并行度不足等短板。FPGA凭借可硬件并行编程、时序精准可控、IO接口灵活、流水线架构可深度定制的优势成为 MSK调制硬件化落地的最优方案。1.MSK调制理论常规2FSK调制存在载波相位跳变信号频谱旁瓣滚降缓慢频谱泄露严重信道带宽利用率低非线性功放场景下极易出现频谱扩散干扰邻道信号。MSK是2FSK的优化形式满足两大硬性约束第一两个载波频差严格等于码元速率的一半第二码元切换时刻载波相位连续无跳变。这两个约束让MSK信号包络恒定、相位平滑过渡功率谱高频旁瓣衰减速率可达20dB/十倍频远优于普通2FSK的6dB/十倍频非常适合窄带无线传输。MSK采用双频承载二进制信息定义基带码元速率为Rb码元周期Tb1/Rb。MSK两个载波频率满足I路、Q路码元错开半个码元周期该正交结构是FPGA模块化拆分的核心依据可把复杂相位运算拆解为查表、乘法、载波混频三大硬件可实现单元规避实时三角函数运算带来的时序压力。2.本算法实现研究内容1.设计和验证适合FPGA实现的MSK调制和解调实现方案2.MSK系统的发端含随机数字信息生成模块、MSK调制模块、数模DA模块。3.MSK系统的收端含MSK解调模块、模数AD模块、误码率计算模块。4.信道含功率可控的高斯白噪声AWGN生成模块。5.实现语言Verilog语言。需实现的具体内容1.用MATLAB进行方案的设计和验证仿真2.编制基于Verilog的系统含发端、信道和收端软件程序3.进行硬件平台的程序下载和软硬件联调4.利用测试设备完成MSK系统各关键模块的输入和输出波形、功率谱的测量5.仿照FPGA平台的硬件结构和布局设计FGPA最小开发平台并绘制其PCB电路图 。调制端的结构如下所示仿真结果可以看到MSK调制端是完全正确的。该部分程序如下程序中顶层模块的调用我们做了注释。MSK解调部分按之前的系统框图进行设计。设计完的基本构架如下所示3.部分源码timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 15:16:09 06/09/2013 // Design Name: // Module Name: Msk_mod // Project Name: // Target Devices: // Tool versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: A01-117 ////////////////////////////////////////////////////////////////////////////////// module Msk_mod( i_clk, //40M i_rst, //rst signal o_clk_4M, //MSK rate o_clk_1600K,//bit rate samples o_clk_200K, //bit rate o_Trans_data,//the binary data o_Trans_data_samples,//the binary data samples o_Msk_I, //MSK I o_Msk_Q, //MSK Q samples o_Msk_I_samples, //MSK I o_Msk_Q_samples, //MSK Q samples o_cos, //cos o_sin, //sin o_msk_cos, //MSK Cos o_msk_sin, //MSK Sin o_msk_R //MSK frequency ); input i_clk; input i_rst; output o_clk_4M; output o_clk_1600K; output o_clk_200K; output signed[1:0] o_Trans_data; output signed[1:0] o_Trans_data_samples; output signed[9:0] o_Msk_I; output signed[9:0] o_Msk_Q; output signed[9:0] o_Msk_I_samples; output signed[9:0] o_Msk_Q_samples; output signed[9:0] o_cos; output signed[9:0] o_sin; output signed[15:0]o_msk_cos; output signed[15:0]o_msk_sin; output signed[15:0]o_msk_R; //generate the data rate clock and the fc clock clk_gen clk_gen_u( .i_clk (i_clk), .i_rst (i_rst), .o_clk_4M (o_clk_4M), .o_clk_1600K(o_clk_1600K), .o_clk_200K (o_clk_200K) ); //generate the random data binary_gen binary_gen_u( .i_clk (o_clk_200K), .i_rst (i_rst), .o_dout(o_Trans_data) ); //samples the data from low data to high data samples samples_u( .i_clk (o_clk_1600K), .i_rst (i_rst), .i_din (o_Trans_data), .o_dout (o_Trans_data_samples) ); //gen MSK I data and Q data Msk_mod_sub1 Msk_mod_sub1_u( .i_clk (o_clk_1600K), .i_rst (i_rst), .i_data (o_Trans_data_samples), .o_mskI (o_Msk_I), .o_mskQ (o_Msk_Q) ); //samples the data from low data to high data samples2 samples2_uI( .i_clk (o_clk_4M), .i_rst (i_rst), .i_din (o_Msk_I), .o_dout (o_Msk_I_samples) ); //samples the data from low data to high data samples2 samples2_uQ( .i_clk (o_clk_4M), .i_rst (i_rst), .i_din (o_Msk_Q), .o_dout (o_Msk_Q_samples) ); //Mults NCO_Trans NCO_Trans_u( .i_clk (o_clk_4M), .i_rst (i_rst), .o_cos (o_cos), .o_sin (o_sin) ); //MSK Frequency data reg signed[19:0]II; reg signed[19:0]QQ; always (posedge o_clk_4M or posedge i_rst) begin if(i_rst) begin II 20d0; QQ 20d0; end else begin II o_cos*o_Msk_I_samples; QQ o_sin*o_Msk_Q_samples; end end assign o_msk_cos II[19:4]; assign o_msk_sin QQ[19:4]; assign o_msk_R {o_msk_cos[15],o_msk_cos[15:1]}{o_msk_sin[15],o_msk_sin[15:1]}; endmodule4.仿真测试上述的构架就是整个系统的调制解调系统其中解调端的仿真结果如下所示