首页 > 其他分享 >m在ISE平台下使用verilog开发基于FPGA的GMSK调制器

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

时间:2023-01-12 20:14:07浏览次数:32  
标签:FPGA signed MSK verilog 信号 output 调制 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调制技术的基本结构如下所示:

 

 

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

 

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

 

2.仿真效果预览

ISE14.7

 

3.verilog部分代码预览

 

`timescale 1ns / 1ps
 
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

 

  

 

标签:FPGA,signed,MSK,verilog,信号,output,调制,GMSK
From: https://www.cnblogs.com/51matlab/p/17047804.html

相关文章

  • FPGA:逻辑代数的基本公式和规则
    逻辑代数的基本公式基本公式逻辑代数的基本公式0、1律:$A+0=A\quadA+1=1\quadA\cdot1=A\quadA\cdot0=0$互补律:$A+\bar{A}=1\quadA\cdot\bar{A}=0$交换......
  • 明德扬FPGA网络班学习问题答疑
    关于课程内容我今年大一,想学FPGA,可是完全没有基础可以学习吗?明德扬科教的教学以潘老师的《潘文明至简设计法》为中心,其核心就是一个“简”字。除了在设计思路、过程、结果等......
  • 03-Verilog语法
    Verilog语法1Register组合逻辑-->寄存器-->组合逻辑-->寄存器Register是一个变量,用于存储值,并不代表一个真正的硬件DFF。regA,C;//assignmentsarealwaysdonei......
  • FPGA:逻辑运算及逻辑门
    逻辑变量与逻辑函数逻辑是指事物因果之间所遵循的规律。为了避免用冗繁的文字来描述逻辑问题,逻辑代数采用逻辑变量和一套运算符组成逻辑函数表达式来描述事物的因果关系。逻......
  • 【FPGA基础】同步复位与异步复位
    一、何时何处需要复位参考Xilinx官方文档《UltraFastDesignMethodologyGuideforFPGAsandSoCs(UG949)》:Xilinx器件具有专用的全局置位/复位信号(global......
  • FPGA:数字电路简介
    数字电路的历史数字电路是数字计算机和自动控制系统的基础,它的发展是以电子器件的发展为基础的,器件的发展可以大致上分为3个阶段:电子管(1906年)晶体管(1947年)集成电路(Integrate......
  • 基于Kintex-7 FPGA的核心板电路设计
    1.引言    FieldProgrammableGateArray(简称,FPGA)于1985年由XILINX创始人之一RossFreeman发明,第一颗FPGA芯片XC2064为XILINX所发明,FPGA一经发明,后续的发展速度之快,......
  • Verilog基本语法(二)模块
    模块module<模块名>(<模块端口列表>,<端口声明>(若有),<参数声明>(可选));...//模块内容//1-wire,reg和其他类型的变量声明;//2-数据流语句(assign);//3-......
  • 01-Verilog
    VerilogRTL编程实践在进行数字IC设计过程中,RTLcoding能力是非常重要的。结合逻辑仿真(VCS)和逻辑综合(DesignCompiler)工具。看RTL。1.ASICDesignFLOwIDEADesignsp......
  • Verilog基本语法(一)基本概念
    VerilogHDL是一种硬件描述语言(HDL:HardwareDescriptionLanguage),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻......