FIR数字滤波器设计-2.ppt_第1页
FIR数字滤波器设计-2.ppt_第2页
FIR数字滤波器设计-2.ppt_第3页
FIR数字滤波器设计-2.ppt_第4页
FIR数字滤波器设计-2.ppt_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章 FIR数字滤波器设计 第6章 FIR数字滤波器设计 6.1 FIR数字滤波器原理 6.2 使用DSP Builder设计FIR数字滤波器 6.3 使用FIR IP Core设计FIR滤波器 第6章 FIR数字滤波器设计 6.1 FIR数字滤波器原理 对于一个FIR滤波器系统而言,它的冲激响应总是 有限长的,其系统函数可以记为 第6章 FIR数字滤波器设计 其中M是FIR滤波器的零点数,即延时节数,为叙 述简便,在本章中M被称为FIR滤器的阶数。最基本的 FIR滤波器可用下式表示: 其中x(n)是输入采样序列,h(i)是滤波器系数,L是 滤波器的系数长度,y(n)表示滤波器的输出序列。 也可以用卷积来表示输出序列y(n)与x(n)、h(n)的关系。 第6章 FIR数字滤波器设计 图6-1中显示了一个典型的直接I型4阶FIR滤波器, 其输出序列y(n)满足下列等式: 第6章 FIR数字滤波器设计 图6-1 4阶FIR滤波器结构 第6章 FIR数字滤波器设计 在这个FIR滤波器中,总共存在3个延时节,4个乘 法单元,一个4输入的加法器。如果采用普通的数字信 号处理器(DSP Processor)来实现,只能用串行的方式顺 序地执行延时、乘加操作,这不可能在一个DSP(指数 字信号处理器)指令周期内完成,必须用多个指令周期 来完成。 但是,如果采用FPGA来实现,就可以采用并行结 构,在一个时钟周期内得到一个FIR滤波器的输出。 第6章 FIR数字滤波器设计 6.2 使用DSP Builder设计FIR数字滤波器 使用DSP Builder可以方便地在图形化环境中设计 FIR数字滤波器,而且滤波器系数的计算可以借助 Matlab强大的计算能力和现成的滤波器设计工具来完成 。 6.2.1 3阶常系数FIR滤波器的设计 在此用以下示例来说明整个设计过程。 假定一个3阶的FIR滤波器,其可以表示为 第6章 FIR数字滤波器设计 其中:h(0)=63,h(1)=127,h(2)=127,h(3)=63, 是量化时附加的因子。 这里采用直接I型来实现该FIR滤波器。设计好的3 阶直接I型FIR滤波器模型图可以参见图6-2。具体的新 模型建立、模块调用过程可以参见第3章。 第6章 FIR数字滤波器设计 图6-2 3阶FIR滤波器 第6章 FIR数字滤波器设计 图中模块的参数作如下设置: xin模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Integer” 参数“Node Type”设为“Input port” 参数“number of bits”设为“8” 第6章 FIR数字滤波器设计 yout模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Integer” 参数“Node Type”设为“Output port” 参数“number of bits”设为“8” Parallel Adder Subtractor模块:(Parallel Adder Subtractor) 库:Altera DSP Builder中Arithmetic库 “Add(+)Sub(-)”设为“+” 第6章 FIR数字滤波器设计 Delay1、Delay2、Delay3模块:(Delay) 库:Altera DSP Builder中Storage库 参数“Depth”设为“1” 参数“Clock Phase Selection”设为“1” h0模块:(Gain) 库:Altera DSP Builder中Arithemtic库 参数“Gain Value”设为“63” 参数“Map Gain Value to Bus Type”设为“Signed Integer” 参数“Gate Value number of bits”设为“8” 参数“Number of Pipeline Levels”设为“0” 第6章 FIR数字滤波器设计 h1模块:(Gain) 参数“Gain Value”设为“127” 其余同h0模块 h2模块:(Gain) 参数“Gain Value”设为“127” 其余同h0模块 h3模块:(Gain) 参数“Gain Value”设为“63” 其余同h0模块 第6章 FIR数字滤波器设计 由于FIR滤波器的系数已经给定,是一个常数,从图 中看到,在DSP Builder中可以用Gain(增益)模块来实现 的运算,用延时Delay模块来实现输入信号序列的延时。 设计完3阶FIR滤波器模型后,就可以添加Simulink 模块进行仿真了,如图6-3所示。 第6章 FIR数字滤波器设计 图6-3 带仿真模块的3阶滤波器模型 第6章 FIR数字滤波器设计 新增的仿真模块的参数作如下设置: Chirp Signal模块:(Chirp Signal) 库:Simulink中Sources库 参数“Initial Frequency(Hz)”设为“0.1” 参数“Target time”设为“10” 参数“Frequency at target time(Hz)”设为“1” 参数“Interpret vectors parameters as 1-D”选中 第6章 FIR数字滤波器设计 Gain模块:(Gain) 库:Simulink中Math Operations库 参数“Gain”设为“127” 参数“Multiplication”设为“Element wise(K.*u)” Scope模块:(Scope) 库:Simulink中sinks库 参数“Number of Axes”为“2” 第6章 FIR数字滤波器设计 其中,Chirp Signal模块为线性调频信号发生模块 ,生成一个线性调频信号0.1 Hz1 Hz。 在该模型仿真中,使用默认的仿真参数。 仿真结果如图6-4所示。显然,一个线性调频信号 通过3阶FIR滤波器后幅度发生了变化,频率较高部分 的幅度被衰减了。 第6章 FIR数字滤波器设计 图6-4 FIR滤波器仿真结果 第6章 FIR数字滤波器设计 6.2.2 4阶FIR滤波器节的设计 上节介绍的是常系数FIR滤波器的示例。本节将设 计一个系数可变的FIR滤波器节。对于直接I型的FIR滤 波器(结构见图6-5),是可以级联的。也就是说,在滤 波器系数可变的情况下,可以预先设计好一个FIR滤波 器节,在实际应用中通过不断地调用FIR滤波器节,将 其级联起来,用来完成多阶FIR滤波器的设计。当然, 对于线性相位的FIR滤波器,我们可以采用改进后的滤 波器结构,可以节省一半的乘法器。在这里,为了叙 述方便,没有采用改进后的FIR结构。 第6章 FIR数字滤波器设计 图6-5 直接I型FIR滤波器结构 第6章 FIR数字滤波器设计 图6-6是一个直接I型的4阶FIR滤波器节的结构。 为了使该滤波器节的调用更为方便,在xin输入后插入 了一个延时单元,由3阶滤波器演变成4阶的,不过常系 数项(系数项) 恒为0。由于在通信应用中,FIR滤波器 处理的往往是信号流,因而增加一个延时单元不会影 响FIR滤波器处理的结果,只是系统延时增加了一个时 钟周期。 第6章 FIR数字滤波器设计 图6-6 直接I型4阶FIR滤波器节 第6章 FIR数字滤波器设计 对于该FIR滤波器节,其系统函数可以用下式来表示: 由于浮点小数在FPGA中实现比较困难,实现的代 价太大,因而在DSP Builder中不妨使用整数运算来实 现,最后用位数舍取的方式得到结果。为了使参数可 变,FIR滤波器系数、也作为输入端口。在本设计 中输入序列的位宽设为9位。 图6-7显示的就是一个设计好的4阶FIR滤波器节, 与图6-2的常数FIR滤波器相比,这里用Product(乘法)模 块代替了Gain(增益)模块。 第6章 FIR数字滤波器设计 图6-7 直接I型4阶FIR滤波器节 第6章 FIR数字滤波器设计 图6-7中相关模块的参数设置如下: xin、hn1、hn2、hn3、hn4模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Integer” 参数“Node Type”设为“Input port” 参数“number of bits”设为“9” 第6章 FIR数字滤波器设计 yn模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Integer” 参数“Node Type”设为“Output port” 参数“number of bits”设为“20” xn4模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Integer” 参数“Node Type”设为“Output port” 参数“number of bits”设为“9” 第6章 FIR数字滤波器设计 Parallel Adder Subtractor模块:(Parallel Adder Subtractor) 库:Altera DSP Builder中Arithmetic库 参数“Add(+)Sub(-)”设为“+” 使用“Pipeline” 参数“Clock Phaese Selectioon”设为“1” Delay、Delay1、Delay2、Delay3模块:(Delay) 库:Altera DSP Builder中Storage库 参数“Depth”设为“1” 参数“Clock Phase Selection”设为“1” 第6章 FIR数字滤波器设计 Product模块:(Product) 库:Altera DSP Builder中Arithemtic库 参数“Pipeline”设为“2” 参数“Clock Phase Selection”设为“1” 不选择“Use LPM” 第6章 FIR数字滤波器设计 6.2.3 16阶FIR滤波器模型设计 利用以上设计的4阶FIR滤波器节可以方便地搭成 阶直接I型FIR滤波器(注意: )。比如要实现一个16阶的 低通滤波器,可以调用4个4阶FIR滤波器节来实现。 1. 设计4阶FIR滤波器节子系统 建立一个新的DSP Builder模型,复制上节的 FIR4tap模型到新模型。按照第4章所示的方法由 FIR4tap模型建立子系统(SubSystem),并对端口信号进 行修改,把子系统更名为fir4tap,如图6-8所示。fir4tap 的内部结构如图6-9所示。 第6章 FIR数字滤波器设计 图6-8 fir4tap子系统 第6章 FIR数字滤波器设计 图6-9 fir4tap子系统内部原理图 第6章 FIR数字滤波器设计 2. 组成16阶FIR滤波器模型 复制4个fir4tap,并将它们衔接起来。前一级的输出 端口x4接后一级的x输入端口,并附加上16个常数端口 ,作为FIR滤波器系数的输入。把4个子系统fir4tap的输 出端口y连接起来,接入一个4输入端口的加法器,得到 FIR滤波器的输出yout。 注意:在作好子系统后,要按照第4章中所述的方 式,修改其Mask参数Mask Type为“SubSystem AlteraBlockSet”。设计好的16阶FIR滤波器如图6-10所示 。 第6章 FIR数字滤波器设计 图6-10 16阶直接I型FIR滤波器模型 第6章 FIR数字滤波器设计 16阶直接I型FIR滤波器模型中,对新增加的模块作如下设 置: xin模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Integer” 参数“Node Type”设为“Input port” 参数“number of bits”设为“9” 第6章 FIR数字滤波器设计 yout模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Integer” 参数“Node Type”设为“Output port” 参数“number of bits”设为“20” x16模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Integer” 参数“Node Type”设为“Output port” 参数“number of bits”设为“9” 第6章 FIR数字滤波器设计 Parallel Adder Subtractor模块:(Parallel Adder Subtractor) 库:Altera DSP Builder中Arithmetic库 参数“Add(+)Sub(-)”设为“+” 使用“Pipeline” 参数“Clock Phaese Selectioon”设为“1” h0、h1、h2、h3、h4、h5、h6、h7、h8、 h9、h10、h11、h12、h13、h14、h15模块:(Delay) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“Signed Integer” 参数“number of bits”设为“9” 第6章 FIR数字滤波器设计 6.2.4 使用MATLAB的滤波器设计工具 1. 滤波器指标 若需要设计一个16阶的FIR滤波器(),给定的参数如下: 低通滤波器 采样频率Fs为48 kHz,滤波器Fc为10.8 kHz 输入序列位宽为9位(最高位为符号位) 在此利用MATLAB来完成FIR滤波器系数的确定。 第6章 FIR数字滤波器设计 2. 打开MATLAB的FDATool MATLAB集成了一套功能强大的滤波器设计工具 FDATool(Filter Design & Analysis Tool),可以完成多种 滤波器的设计、分析和性能评估。 点击MATLAB主窗口下方的“Start”(开始)按钮,按 图6-11选择“ToolBox”“Filter Design”“Filter Design & Analysis Tool(FDATool)”,打开FDATool,如图6-12 所示。 第6章 FIR数字滤波器设计 图6-11 打开FDATool 第6章 FIR数字滤波器设计 图6-12 FDATool界面 第6章 FIR数字滤波器设计 3. 选择Design Filter FDATool界面左下侧排列了一组工具按钮,其功能分别如 下所述: 滤波器转换(TransForm Filer) 设置量化参数(Set Quantization Parameters) 实现模型(Realize Model) 导入滤波器(Import Filter) 设计滤波器(Design Filter) 选择其中的按钮,进入设计滤波器界面,进行下列选择 : 第6章 FIR数字滤波器设计 滤波器类型(Filter Type)为低通(Lowpass); 设计方法(Design Method)为FIR,采用窗口法(Window) ; 滤波器阶数(Filter Order)定制为15; 窗口类型为Kaiser,Beta为0.5; Fs为48 kHz,Fc为10.8 kHz。 设置好后的界面见图6-13。 注意:在滤波器阶数选择时,在此设置的是15阶 ,而不是16阶!这是由于在前面设计的16阶FIR滤波器 的常系数项。其系统函数可用下式来表示: 第6章 FIR数字滤波器设计 图6-13 滤波器设计界面 第6章 FIR数字滤波器设计 显然上式可以写成: 即可以看成是一个15阶的FIR滤波器的输出结果经 过了一个单位延时单元。所以在FDATool中把它当成 15阶FIR滤波器来计算参数。点击,让MATLAB计算 FIR滤波器系数并作相关分析。 第6章 FIR数字滤波器设计 4. 滤波器分析 计算完FIR滤波器系数后,往往需要对设计好的 FIR滤波器进行相关的性能分析,以便了解该滤波器是 否满足设计要求。分析操作步骤如下: 选择FDATool的菜单“Analysis”“Magnitude Response”,启动幅频响应分析。图6-14显示了滤波器 的幅频响应图,x轴为频率,y轴为幅度值(单位为dB) 。 在图的左侧列出了当前滤波器的相关信息: 第6章 FIR数字滤波器设计 滤波器类型为Direct form FIR(直接I型FIR滤波器) ; 滤波器阶数为15。 注意:不是每种FIR滤波器设计方法计算出的滤波 器都是直接I型结构的。如果在DSP Builder中设计的FIR 滤波器为直接I型结构,那就必须保证在这里显示的FIR 滤波器结构为“Direct form FIR”。 第6章 FIR数字滤波器设计 图6-14 FIR滤波器的幅频响应 第6章 FIR数字滤波器设计 选择菜单“Analysis”“Phase Response”,启动相频 响应分析。图6-15显示了滤波器的相频响应。由图可 以看到设计的FIR滤波器在通带内其相位响应为线性的 ,即该滤波器是一个线性相位的滤波器。 图6-16显示了滤波器幅频特性与相频特性的比较。 这可以通过菜单选择“Analysis”“Magnitude & Phase Response”来启动分析。 选择菜单“Analysis”“Group Delay Response”,启 动群延时分析,波形如图6-17所示。 第6章 FIR数字滤波器设计 图6-15 FIR滤波器的相频响应 第6章 FIR数字滤波器设计 图6-16 幅频响应与相频响应的比较 第6章 FIR数字滤波器设计 图6-17 FIR滤波器的群延时 第6章 FIR数字滤波器设计 在菜单“Analysis”下还有一些分析: “Impulse Response”:冲激响应,见图6-18。 “Step Response”:阶跃响应,见图6-19。 “Pole/Zero Plot”:零极点图,见图6-20。 由于直接I型FIR滤波器只有零点,所以在图6-20中不 存在极点。 第6章 FIR数字滤波器设计 图6-18 FIR滤波器的冲激响应 第6章 FIR数字滤波器设计 图6-19 FIR滤波器的阶跃响应 第6章 FIR数字滤波器设计 图6-20 FIR滤波器的零极点 第6章 FIR数字滤波器设计 求出的FIR滤波器的系数可以通过选择菜单 “Analysis”“Filter Coefficients”来观察,见图6-21。图 中列出了FDATool计算的15阶直接I型FIR滤波器的部 分系数。 第6章 FIR数字滤波器设计 图6-21 FIR滤波器系数 第6章 FIR数字滤波器设计 5. 量化 从图6-21可以看到,FDATool计算出的值是一个 有符号小数,而在DSP Builder下建立的FIR滤波器模型 需要一个整数作为滤波器系数。所以必须进行量化, 并对得到的系数进行归一化。为此,点击FDATool左 下侧的工具按钮进行量化参数设置。在设置“Turn quantization on”前选择“”,如图6-22所示。 第6章 FIR数字滤波器设计 在滤波器的设计指标中,已经提到FIR滤波器的输 入位宽是9位,表示为有符号数。在图6-22中设置前4 项的量化格式(Format)为“9 8”,表示量化后位宽为9 位,绝对值为8位;设置后2项(乘积、乘积和)的量化格 式为“18 16”。 点击按钮,打开图6-23所示的对话框。在此量化优 化设置对话框中选择相关的优化选项。 图6-24中显示了量化后的部分系数值。注意在这里 系数仍是用小数表示的,不同于量化前的系数,现在 其二进制表示的位数已满足量化要求。 第6章 FIR数字滤波器设计 图6-22 量化参数设置 第6章 FIR数字滤波器设计 图6-23 量化优化设置对话框 第6章 FIR数字滤波器设计 图6-24 量化后的系数值 第6章 FIR数字滤波器设计 设计的FIR滤波器在量化后滤波器的性能会有所改 变,其幅频响应、相频响应也有所变化。量化在带来 实现方便的同时也带来了量化噪声,图6-26显示了量 化带来的噪声分析。 第6章 FIR数字滤波器设计 图6-25 量化后的幅频、相频响应 第6章 FIR数字滤波器设计 图6-26 量化后的噪声分析 第6章 FIR数字滤波器设计 6. 导出滤波器系数 为导出设计好的滤波器系数,选择FDATool菜单 的“File”“Export.”,打开导出(Export)对话框,如图6 -27所示。在该窗口中,选择导出到工作区(Workspace) 。这时滤波器系数就存入到一个一维变量Num中了, 不过这时Num中的元素是以小数形式出现的: Num = -0.0742 0.0234 0.1133 0.0117 -0.1758 -0.0977 0.3594 0.8281 0.8281 0.3594 -0.0977 -0.1758 0.0117 0.1133 0.0234 -0.0742 第6章 FIR数字滤波器设计 图6-27 导出系数对话框 第6章 FIR数字滤波器设计 现在若要在FIR滤波器模型中使用这些数据,还需要将它 们转化为整数:在MATLAB主窗口的命令窗口中键入: Num * (28) 得到: Num*(28) ans = Columns 1 through 10 -19 6 29 3 -45 -25 92 212 212 92 Columns 11 through 16 -25 -45 3 29 6 -19 第6章 FIR数字滤波器设计 7. 修改FIR滤波器模型添加参数 把计算出的系数逐个填入到FIR滤波器模型中,见 图6-28。这样就完成了一个16阶直接I型FIR低通滤波器 的设计。 第6章 FIR数字滤波器设计 图6-28 16阶低通FIR滤波器 第6章 FIR数字滤波器设计 8. 导出滤波器系数的另一种方法 按照上面介绍的导出滤波器系数的方法在FIR滤波 器阶数较大时就不太方便,而且在设计要求有所变化 时系数的修改极为不利。可以按照以下方法来导出: 把FIR滤波器模型中的h1h16模块的参数 “Constant Value(常数值)”设置为: Num(n)*(28) 其中Num同上文所述,是FDATool的导出系数,n 用具体的数字来代替,如h1模块用Num(1)*(28),h2 模块用Num(2)*(28)。 第6章 FIR数字滤波器设计 6.2.5 16阶FIR滤波器的硬件实现 1. 由Simulink模型转成VHDL 打开SingalCompiler,选定器件系列,把模型转成 VHDL文件,具体操作步骤可以参见第3章。 2. 综合 在SignalCompiler中选择Quartus II进行综合,或者 利用第三方综合工具,比如LeonardoSpectrum进行综合 。图6-29显示了LeonardoSpectrum综合结果的部分RTL 原理图。 第6章 FIR数字滤波器设计 3. 适配下载 如果采用Quartus II进行综合,在Quartus II中打开 SignalCompiler建立的Quartus项目文件,选择具体器件 ,锁定管脚,完成适配后下载至FPGA开发板中。若采 用其它综合工具进行综合,适配流程请参见第4章。 在FPGA开发板上加入高频信号源,验证FIR滤波 器的滤波效果。 第6章 FIR数字滤波器设计 图6-29 LeonardoSpectrum综合结果 第6章 FIR数字滤波器设计 6.3 使用FIR IP Core设计FIR滤波器 对于一个面向市场和实际工程应用的系统设计, 在开发速度和效率方面要求很高。然而对于一般的设 计者,在短期内也不可能全面了解FIR滤波器(指在 FPGA上实现)相关的优化技术,也没有必要了解过多 的细节。另外,FIR滤波器的滤波系数的确定,即FIR 滤波器的设计方法也是比较麻烦的,需要花费大量的 精力和时间才能设计出在速度、资源利用、性能上都 满足要求的FIR滤波器。 第6章 FIR数字滤波器设计 另一方面,虽然DSP Builder提供了大量的基本 DSP模块,但是要了解用哪些模块可以构建一个高效 的FIR滤波器仍然不是一件简单的事情。 但是,如果采用设计好的FIR滤波器的IP核,几乎 可以很容易地解决以上的问题。对于IP核,在速度、 资源利用、性能上往往进行过专门的优化,还提供了 相关的IP应用开发工具。 Altera提供的FIR Compiler是一个结合Altera FPGA 器件的FIR Filter Core,DSP Builder与FIR Compiler可 以紧密地结合起来。DSP Builder提供了一个FIR Core 的应用环境和仿真验证环境。 第6章 FIR数字滤波器设计 6.3.1 FIR滤波器核与DSP Builder集成 使用FIR Core之前,首先必须保证Matlab、DSP Builder、Quartus II以及IP核的本身,即FIR Compiler等 工具安装正确。如果一切正常,我们可以在Simulink库 管理器中看到“Altera MegaCore FIR Compiler”这个库, 如图6-30所示。 MegaCore是Altera的IP Core计划中的一个组成部分 ,FIR Compiler作为一个MegaCore,不附带在DSP Builder和Quartus II中,需要单独向Altera公司购买或申 请试用版。现在最新的FIR Compiler的版本可以支持 Quartus II和DSP Builder。 第6章 FIR数字滤波器设计 图6-30 FIR Core模块 第6章 FIR数字滤波器设计 6.3.2 FIR滤波器核的使用 1. 调用FIR模块 在Simulink环境中新建一个模型,放置 SignalCompiler模块和FIR模块(如图6-31)。 注意:在DSP Builder中使用FIR Compiler时,需要 有SignalCompiler的支持,所以在使用配置FIR模块时 ,必须放置SignalCompiler模块。 第6章 FIR数字滤波器设计 图6-31 调用FIR Core 第6章 FIR数字滤波器设计 2. 配置FIR滤波器核 假定需要设计一个带通的高阶FIR滤波器,设计指 标如下: 滤波器类型:带通(BandPass) 采样频率:50 MHz 通带:24 MHz 阶数:64 双击新模型中的FI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论