基于FPGA的FIR数字滤波器设计.docx

上传人:b****2 文档编号:2155086 上传时间:2023-05-02 格式:DOCX 页数:39 大小:647.32KB
下载 相关 举报
基于FPGA的FIR数字滤波器设计.docx_第1页
第1页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第2页
第2页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第3页
第3页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第4页
第4页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第5页
第5页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第6页
第6页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第7页
第7页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第8页
第8页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第9页
第9页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第10页
第10页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第11页
第11页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第12页
第12页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第13页
第13页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第14页
第14页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第15页
第15页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第16页
第16页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第17页
第17页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第18页
第18页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第19页
第19页 / 共39页
基于FPGA的FIR数字滤波器设计.docx_第20页
第20页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于FPGA的FIR数字滤波器设计.docx

《基于FPGA的FIR数字滤波器设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的FIR数字滤波器设计.docx(39页珍藏版)》请在冰点文库上搜索。

基于FPGA的FIR数字滤波器设计.docx

基于FPGA的FIR数字滤波器设计

摘要

随着数字信号处理技术的不断发展,数字滤波已成为数字信号处理中的重要内容之一.以基于FPGA的窗函数法设计线性相位FIR数字滤波器为例,介绍了如何使用MATLAB等工具软件设计数字信号处理器(DSP)的方法.通过使用MATLAB/FDAtool工具来研究计算数字滤波器的参数,.然后通过MATLAB/Simulink及DSPBuilder进行FIR数字滤波器顶层设计,再利用SignalCompiler把MATLAB/Simulink的设计文件(.mdl)转换成相应的VHDL硬件描述语言设计文件(.vhd),以及用于控制综合和编译的TCL脚本,而后由FPGA/CPLD的开发工具QuartusII来完成对后者的综合﹑适配以及下载.

关键字FIR数字滤波器MATLABDSPBuilderFPGAQuartusII

Abstract

Alongwiththedevelopmentofthedigitalsignalprocessingtechnology,thedigitalfilterhavebecomeoneofimportantcontentsindigitalsignalprocessing.ThepurposeofthisarticleistodesignalinearphaseFIRnumeralfilterusingwindowfunctionmethodbasedontheFPGA,ThenintroducethemethodthathowtousetoolsoftwareMATLABtodesignthedigitalsignalprocessor(DSP),FirstthroughusingMATLAB/FDAtooltooltogaintheparameterforfilterdesign..ThendesigntoplayerfilethroughMATLAB/SimulinkandDSPBuilder.ThenusingSignalCompilertochangethedesigndocumentfile(.mdl)intoVHDLhardwaredescriptionlanguagedesigndocument(Vhd),AswellasusesintheTCLscriptwhichcontrolssynthesizesandtranslates,atlast,byFPGA/CPLDdevelopmentkitQuartusIItocompletesynthesisconfigrationaswellasdownloading.

keywordsFIRfilterMATLABDSPBuilderFPGAQuartusII

第1章绪论

1.1FIR数字滤波器优越性及其发展

随着信息时代和数字世界的到来,数字信号处理已成为今一门极其重要的学科和技术领域。

数字信号处理在通信、语音、图像、自动控制、雷达、军事、航空航天、医疗和家用电器等众多领域得到了广泛的应用。

在信号处理领域中,对于信号处理的实时性、快速性的要求越来越高。

而在许多信息处理过程中,如对信号的过滤、检测、预测等,都要广泛地用到滤波器。

其中数字滤波器具有稳定性高、精度高、设计灵活、实现方便等许多突出的优点,避免了模拟滤波器所无法克服的电压漂移、温度漂移和噪声等问题,因而随着数字技术的发展,用数字技术实现滤波器的功能越来越受到人们的注意和广泛的应用。

其中有限冲激响应(FIR)滤波器能在设计任意幅频特性的同时保证严格的线性相位特性,在语音,图像数据传输中应用非常广泛。

相对于模拟滤波器,数字滤波器具有以下显著优点:

(1)精度高

(2)灵活性大:

数字滤波器的性能主要取决于乘法器的各系数,而这些系数是

可以存储在存储器中的,只要改变存储器中存放的系数,就可以得到不同的系统,这些都比改变模拟滤波器系统的特性要容易和方便的多,因而具有很大的灵活性。

(3)可靠性高:

因为数字系统只有两个电平信号:

"1”和“0",受噪声及环境条件的影响小,而模拟滤波器各个参数都有一定的温度系数,易受温度、振动、电磁感应等影响。

并且数字滤波器多采用大规模集成电路,如用CPLD或FPGA来实现,也可以用专用的DSP处理器来实现,这些大规模集成电路的故障率远比众多分立元件构成的模拟系统的故障率低。

(4)易于大规模集成:

因为数字部件具有高度的规范性,便于大规模集成,大规模生产,且数字滤波电路主要工作在截止或饱和状态,对电路参数要求不严格,因此产品的成品率高,价格也日趋降低。

相对于模拟滤波器,数字滤波器在体积、重量和性能方面的优势己越来越明显。

(5)并行处理;数字滤波器的另外一个最大优点就是可以实现并行处理,比如数字滤波器可采用DSP处理器来实现并行处理。

TI公司的TMS320C5000系列的DSP芯片采用8条指令并行处理的结构,时钟频率为l00MHZ的DSP芯片,可高800MIPS(即每秒执行百万条指令[3]。

1.2数字滤波器实现方法

(1)在通用的微型计算机上用软件实现。

软件可以是自己编写的,也可以使用现成的软件包,这种方法的缺点是速度太慢,不能用于实时系统,只能用于教学和算法的仿真研究。

(2)用单片机来实现。

单片机在不断地发展,而且单片机的接口性能比较良好,容易实现人机接口。

但是由于单片机采用的是冯诺依曼总线结构,系统比较复杂,实现乘法运算速度较慢,而在数字滤波器中却要涉及大量的乘加运算,因此这种方法在运算量大的实时信号滤波处理当中很难有所作为。

(3)利用专门用于信号处理的可编程DSP芯片来实现。

与单片机相比,DSP有着更适合于数字滤波的优点。

如,采用改进的哈佛总线结构,内部有硬件乘法器、累加器,使用流水线结构,具有良好的并行特性,并有专门设计的适用于数字信号处理的指令系统等。

(4)利用特殊用途的DSP芯片实现。

现在国际上己经推出了不少专门用于FFT,FIR滤波、卷积等的专用芯片,如TDC1028可以实现FIR滤波和相关运算。

美国INMOS公司推出的IMSA100芯片,可以完成FIR,FFT相关、卷积等运算,它可以在2ms内完成1024点复数FFT运算。

(5)用FPGA等可编程器件来开发数字滤波算法。

由于FPGA产品的迅速发展,人们可以利用Atera.Xilinx等公司提供的产品,使用其相关开发工具和VHDL等硬件开发语言,通过软件编程用硬件实现特定的数字滤波算法。

比较以上方法可见:

可以采用MATLAB等软件来学习数字滤波器的基本知识,计算数字滤波器的系数等,同时也可以研究算法的可行性,对数字滤波器进行前期的仿真。

而采用DSP处理器或FPGA进行数字滤波设计则各有优点,FPGA可以用来做模型机,因为在设计一个电路时,首先要确定线路,然后进行软件模拟及优化,以确定所设计电路的功能及性能。

然而随着电路规模的不断增大,工作频率的不断提高,将会给电路引入许多分布参数的影响,而这在用软件模拟中很难反映出来,这时候就有必要做硬件仿真,由于FPGA具有非常灵活的可编程特性,所以就可以用来做硬件仿真的模型机了。

有了该模型机就可以直观地测试其逻辑功能及性能指标。

DSP则是专用的数字信号处理芯片,其特有的一些硬件结构及特性使其非常适合做数字滤波电路。

总之,可以采用MATLAB来做算法的软件仿真,用FPGA来做硬件仿真,也可以直接做成硬件电路,或用DSP来实现硬件电路。

若使它们相互结合,充分利用它们各自的优点,则能发挥出更大的威力[6]。

第2章基于FPGA的16阶FIR数字滤波器的软件设计

2.1设计FIR数字滤波器使用软件介绍

2.1.1MATLAB软件简介

MATLAB是英文MatrixLaboratory(矩阵实验室)的缩写。

它是由美国MathWorks公司推出的用于数值计算和图形处理的数学计算环境。

在MATLAB环境下,用户可以集成地进行程序设计、数值计算、图形绘制、输入输出、文件管理等各项操作。

MATLAB语言之所以能如此迅速地普及,显示出如此旺盛的生命力,是由于它有着不同于其它语言的特点:

1.语言简洁紧凑,使用方便灵活,库函数极其丰富。

MATLAB程序书写形式自由,利用其丰富的库函数避开了繁杂的子程序编程任务,压缩了一切不必要的编程工作由于库函数都是由本领域的专家编写,所以用户不必担心函数的可靠性。

2.运算符丰富。

由于MATLAB是用C语言编写的,所以MATLAB提供了和C语言几乎一样多的运算符,灵活使用MATLAB的运算符将使程序变得极为简短。

3.MATLAB既具有结构化的控制语句,又有面向对象编程的特性。

4.语法限制不严格,程序设计自由度大.

5.程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上运行.

6.MATLAB的图形功能强大。

在C和FORTRAN语言里,绘图都不容易,但在MATLAB里,数据的可视化非常简单。

此外,MATLAB还具有较强的编辑图形界面的能力.

7.MATLAB具有的一项重要特色是拥有功能强大的工具箱。

包含两个部分:

核心部分和各种可选的工具箱。

核心部分有数百个核心内部函数。

其工具箱又可分为两类:

功能性工具箱和学科性工具箱。

功能性工具箱主要用来扩充其符号计算功能、图示建模仿真功能、文字处理功能以及与硬件实时交互功能。

功能性工具箱能用于多种学科。

而学科性工具箱是专业性比较强的,这些工具箱都是由该领域内的学术水平很高的专家编写的,所以用户无需编写自己学科范围内的基础程序,而直接进行高、精、尖的研究。

2.1.2QuartusII及DSPBuilder介绍

QuartusII设计工具完全支持VHDL,Verilog的设计流程,其内部嵌有VHDL,Verilog逻辑综合器.第三方的综合工具,如LeonardoSpectrumSynplifyProFPGACompiler有着更好的综合效果,QuartusII可以直接调用这些第三工具,同样,QuartusII具备仿真功能,但也支持第三方的仿真工具,如Modelsim.此外,QuartusII与MATLAB和DSPBuilder结合可以进行基于FPGA 的DSP系统开发,是硬件系统实现的关键EDA工具.

DSPBuilder是一个系统级(或算法级)设计工具,它架构在多个软件工具之上,并把系统级和RTL级两个设计领域的设计工具联系起来,最大限度的发挥两种设计工具的优势,DSPBuilder依赖于MathWorks公司的数学分析工具MATLAB/Simulink,以Simulink的Blockset出现,可以在中进行图形化设计和仿真,同时又通过SignalCompiler可以把MATLAB/Simulink的设计文件(.mdl)转换成相应的VHDL硬件描述语言设计文件(.vhd),以及用于控制综合和编译的TCL脚本,而对后者的处理可以由FPGA/CPLD开发工具QuartusII来完成[1].

2.2FPGA发展现状,结构以及使用FPGA设计FIR数字滤波器

2.2.1FPGA发展现状、结构

现场可编程门阵列FPGA是一类广泛应用的高密度可编程逻辑器件。

FPGA由Xilinx公司于上世纪80年代年首先推出,目前,Altera等公司均有FPGA产品生产。

FPGA是在PAL,GAL等逻辑器件的基础上发展起来的。

他可以代替几十个甚至几千块通用IC芯片。

由于FPGA软件已发展的相当完善,用户甚至可以不用了解FPGA的内部结构,如原理图输入或HDL语言来完成相当优秀的FPGA设计。

所以对于初学者,首先应了解FPGA开发软件和开发流程,了解FPGA的内部结构,将有助于提高设计的效率和可靠性,因此受到电子设计工程人员的广泛关注和普遍欢迎。

通常FPGA由布线资源分隔的可编程逻辑单元(或宏单元)构成阵列,又由可编程工//0单元围绕阵列构成整个芯片,排成阵列的逻辑单元由布线通道中的可编程内连线连结起来实现一定的逻辑功能,即分段的金属互连线可以由可编程开关以任意方式连接形成逻辑单元之间要求的信号线。

一个FPGA包含丰富的具有快速系统速度的逻辑门、寄存器和1/0组成。

按编程特性分类,主要有一次性可编程反熔丝OPT和基于静态存储器(SRAM)的编程结构。

Xilinx提供基于静态存储器单元的FPGA,属于SRAM-查找表类型,它们允许内连的模式在器件被制造以后再被加载和修改。

由于决定器件逻辑功能和互连关系的配置程序是存储其中的,掉电后内容会丢失,因此每次加电时要把程序配置到芯片中.Actel的ACT系列和QuickLogic的PASIC系列FPGA为一次性可编程的反熔丝多路开关类型[13]。

查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。

目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM。

当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。

图2.2.1FPGA内部结构

FLEX/ACEX的结构主要包括LAB,I/O块,RAM块(未表示出)和可编程行/列连线。

在FLEX/ACEX中,一个LAB包括8个逻辑单元(LE),每个LE包括一个LUT,一个触发器和相关的相关逻辑。

LE是FLEX/ACEX芯片实现逻辑的最基本结构[10].

图2.2.2逻辑单元(LE)内部结构

2.2.2FPGA实现FIR数字滤波器

目前,使用FPGA设计FIR滤波器常用乘法器结构和分布式算法结构。

使用乘法器结构又有采用乘累加结构,并行乘法器结构。

乘累加结构是最简单的一种,占用资源少,缺点是处理速度慢,可用于处理速度要求不高,FIR结构简单的系统:

并行乘法器结构相对要复杂,如果加上流水结构,能实现较高速的信号处理,能够满足一定的实时性。

但是这种结构受乘法器处理速度和个数的限制。

同时,如果采用FPGA的可编程逻辑实现乘法器,资源占用也是相当大的。

分布式算法(DA)[11]巧妙的利用ROM查找表将固定系数的乘累加运算转换成查找表操作,避免了乘法运算。

同时,查找表后的数据执行的都是简单的加法运算,可以较大程度地提高运算速度和插入流水。

这种方法是目前比较常用的基于FPGA设计FIR滤波器的方法。

分布式算法(DA)又分为串行分布式算法、串并结合的分布式算法、并行分布式算法。

串行分布式算法其结构相对简单,占用资源少,但是处理速度不是很高,受数据位数的影响;并行分布式算法结构齐整,利于流水实现,多用于对速度要求高的场合,但占用资源大;串并结合的分布式算法是串行分布式算法与并行分布式算法的一个折衷,具体情况不同,效果也不同,缺点是有控制电路的加入,增加了电路的复杂性。

不管哪种分布式算法,都会用到ROM来做查找表。

随着FIR滤波器阶数增加,ROM数量增多,也会加大资源的占用,目前还没有一个有效的方法来减少ROM数量或规模[10]。

2.3FIR数字滤波器原理及设计分析

2.3.1线性相位条件及特点分析

数字滤波器(DigitalFilter,简称为DF)是指用来对输入信号进行滤波的硬件和软件。

所谓数字滤波器,是指输入、输出均为数字信号,通过一定运算关系改变输入信号所含频率成分的器件。

数字滤波器和模拟滤波器相比,因为信号的形式和实现滤波的方法不同,数字滤波器具有比模拟滤波器精度高、稳定、体积小、重量轻、灵活、不要求阻抗匹配等优点。

线性相位特性:

线性相位条件:

h(n)=h(N-1-n)偶对称

h(n)=-h(N-1-n)奇对称

即如果单位脉冲响应h(n)(为实数)具有偶对称或奇对称性,则FIR数字滤波器具有严格的线性相位特性。

1.当h(n)=h(N-1-n)时,可实现线性相位。

FIRDF的系统函数

令m=N-1-n

H(z)可写为

=

因此,令

式中,求和部分全部为实数,令其等于H(ω),则

可写为

其中

H(ω)称为幅度函数,可正可负,区别于幅频响应函数│

│,相位函数

随频率线性变化,具有严格的线性特性。

2.同理可证

时,

相位函数

上式表明,h(n)奇对称时,FIR是一个具有严格线性相位的理想正交变换网络。

2.3.2线性相位FIR滤波器的幅度特性

下面分四种情况讨论幅度特性:

1.h(n)偶对称,N为奇数,h(n)=h(N-1-n)

此时,据前面的讨论,

由于

故除

点外,求和

内的第n项与第N-1-n项两两相等,可合并

,则

则,

由于cos(mω)对0,π,2π偶对称,因此H(ω)对这些频率也呈偶对称。

2.h(n)偶对称,N为偶数

N为偶数,上式中两两项全部可合并

,则

由于

奇对称,所以

也为奇对称,且由于

时,

,即

所以,H(z)在z=-1处必有一零点,因此不能用这种情况设计

的滤波器,如高通、带阻滤波器。

同理对h(n)奇对称,N为奇数,和h(n)奇对称,N为偶数两种情况分别证明,得出结论。

 

表3.3.1线形相位FIR滤波器的幅度和相位特性一览表

表3.3.2线形相位FIR滤波器的幅度和相位特性

2.4使用DSPBuilder设计FIR数字滤波器流程

由于在FPGA上设计一个DSP模块的复杂性,设计的性能(包括面积,速度,可靠性,设计周期)对于不同的应用目标将有不同的要求,涉及的软件工具也不仅仅是Simulink和QuartusII,DSPBuilder针对不同的情况提供了两套设计流程,及自动流程和手动流程.DSPBuilder缩短了DSP的设计周期,因为它能帮助用户在友好的运算法则开发环境中创建了一个DSP设计的硬件表示方法。

DSPBuilder允许系统、运算法则和硬件设计师共享一个通用开发平台,它是来Altera自公司的可选择的软件包,并且包含在DSP开发工具箱中[1].

DSPBuilder设计流程的具体步骤如下:

第一步是在MATLAB/Simulink中进行设计输入,即在MATLAB的Simulink环境下建立一个.mdl模型文件,用图形方式调用Altera DSPBuilder和其他的Simulink库中的图形模块(BLOCK),构成系统级或算法级设计框图(或称为Simulink设计模型)

第二步是利用Simulink强大的图形化仿真,分析性能,分析此设计模型的正确性,完成模型仿真.

第三步是DSPBuilder设计实现的关键一步,通过SignalCompiler把Simulink的模型文件转化为通用的硬件描述语言VHDL文件,由于EDA工具.软件不能直接处理MATLAB的.mdl文件,因此需要一个转换过程,转换获得的HDL文件是基于RTL级(寄存器传输级)的VHDL描述.

再接下来的几个步骤是对以上设计产生的VHDL的RTL代码和仿真文件进行综合,编译适配以及仿真,为了针对不同用户的设计目的和设计要求,提供了两种不同的设计流程.主要可分为自动流程和手动流程.

  如果采用DSPBuilder的自动流程,几乎可以忽略硬件的具体实现过程,可以

选择让DSPBuilder自动调用QuartusII等EDA设计软件,完成综合(Synthesis),网表生成(ATOMNetlist)和适配甚至在MATLAB中完成FPGA的配置下载过程.

在手动流程中,设计者可以灵活的指定综合,适配条件.不过,需要手动的调用VHDL综合器进行综合,调用QuartusII进行适配,调用Modelsim或者QuartusII进行仿真,最后用QuartusII产生相应的编程文件用于FPGA的配置.采用手动流程时,除了行为仿真验证和设计输入外,其他过程与标准的基于VHDL的EDA设计流程是完全一致的。

在DSPBuilder设计流程的最后一步,可以在DSPBuilder中直接下载到FPGA用户开发板上,或者通过QuartusII完成硬件的下载、测试。

上述有个流程在DSP设计中是不可或缺的,那就是HDL仿真。

与DSPBuilder可以配合使用的HDL仿真器是ModelSim.DSPBuilder在生成VHDL代码时,可以同时生成用于测试DSP模块的TestBench(测试平台)文件,DSPBuilder生成的TestBench文件采用VHDL语言,测试向量与该DSP模块在Simulink中的仿真激励相一致。

通过ModelSim仿真生成的TestBench可以验证生成的VHDL代码与Simulink中的DSP模型的一致性。

另外,DSPBuilder在产生TestBench的同时,还产生了针对ModelSim仿真的TCL脚本来简化用户的操作,掩盖仿真时的复杂性[1].

 

 

 

从上图中还能看到利用嵌入式逻辑分析仪的一个测试流程。

SignalTapII嵌入式逻辑分析仪的应用是现代DSP技术中最具特色的测试技术之一,这个技术只能在FPGA的开发中使用。

SignalTapII可以直接插在Simulink模型电路中任何一处或多处,并可随该电路一同编译,适配和下载到DSP硬件系统的目标芯片中。

在目标芯片的通道上,嵌入的SignalTapII能根据给定的触发条件采集电路信号,并通过目标芯片的JTAG下载口将信号回送往PC机,然后在MATLAB界面上显示出来。

一旦完成测试,可以通过模型修正和编译,将SignalTapII从目标器件中撤消。

接下去是利用置于Simulink电路模型界面的DSPBuilder的SignalCompiler,将电路模型文件即Simulink模块文件(.mdl)转换成RTL级的VHDL代码表述和Tcl(工具命令语言)脚本。

这种转换是基于Simulink模型的结构化分析的。

RTL级VHDL代码通俗的解释就是在FPGA中完成硬件电路实现的VHDL程序(因为并非所有的VHDL语句都能对应实际的硬件电路)。

Tcl脚本主要是用于对后续的VHDL综合与仿真的控制与规范(注意,就目前基于FPGA的DSP设计工具而言,包括Altera的DSPBuilder和Xilink的SystemGenerator,都只能将Simulink模型转换成VHDL,而非Verilog)。

一旦获得了转换好的VHDL描述,在Simulink中即可调用VHDL综合器了。

目前可选择的主要有QuartusII,Simplify和LeonardoSpectrum。

由它们生成底层网表文件。

即为Simplify生成的网表文件对应的RTL级电路图。

注意,只有在此时才能真正确定DSP硬件实现的目标器件的选择,包括FPGA器件的系列和型号。

因为对RTL级的VHDL综合,必须确定底层元件的工艺特性和结构特性,但不必了解硬件时序特性,只有在适配时才需要时序信息[1]。

在QuartusII进行编译优化的过程中,会产生两种详细纪录电路硬件特点和优化方式的底层电路描述的中间网表文件,称为原子级网表文件,即ATOMNetlist。

下一步是调用QuartusII中的编译器,根据网表文件及设置的优化约束条件进行布线布局和优化设计的适配操作。

最后生成编程文件和仿真文件,即生成POF和SOFFPGA配置文件,可用于对目标器件的编程

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2