IIR与FIR滤波器设计与比较要点.doc_第1页
IIR与FIR滤波器设计与比较要点.doc_第2页
IIR与FIR滤波器设计与比较要点.doc_第3页
IIR与FIR滤波器设计与比较要点.doc_第4页
IIR与FIR滤波器设计与比较要点.doc_第5页
免费预览已结束,剩余31页可下载查看

下载本文档

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

文档简介

DSP课程设计实 验 报 告FIR与IIR滤波的DSP 实现以及二者的比较指导教师:高海林院(系): 电信学院设计人员: 白雪 学号:07211225邵辰雪 学号:07211243成绩:工程设计50报告20答辩30总分评语:指导教师签字:日期:目 录一、设计任务书2二、设计内容2三、设计方案、算法原理说明2四、程序设计、调试与结果分析11 五、设计(安装)与调试的体会32 六、参考文献34一、设计任务书 在信号与信息处理中,提取有用信息就要对信号进行滤波。利用DSP可以实时地对信号进行数字滤波。本设计要求利用DSP的DMA方式进行信号采集和信号输出,同时对外部输入的信号进行数字滤波。在滤波时同时用fir与iir滤波器进行滤波,并比较二者的区别。二、设计内容(1) 对DMA进行初始化;(2) 对A/D、D/A进行初始化;(3) 编写DMA中断服务程序,实现信号的实时滤波;(4) 利用CCS信号分析工具分析信号的频谱成分,确定滤波器的参数,利用MATLAB设计数字滤波器,提取滤波器参数;(5) 设计数字滤波算法,或调用DSPLIB中的滤波函数,实现对信号的fir滤波。(6) 比较加不同窗和阶数时fir滤波器的滤波效果;(7) 设计数字滤波算法,或调用DSPLIB中的滤波函数,实现对信号的iir滤波。(8) 比较fir数字滤波器与iir数字滤波器的效果 三、设计方案、算法原理说明(一)硬件原理: McBSP是多通道缓冲串行口,他支持全双工通信,双缓冲数据寄存器,允许连续的数据流。支持传输的数据字长可以是8位、12位、16位、20位、24位或32位。并且内置u律和A律压扩硬件。 McBSP在结构上可以分为一个数据通道和一个控制通道。数据通道完成数据的发送和接受。控制通道完成的任务包括内部时钟的产生、帧同步信号产生、对这些信号的控制及多通道的选择等。控制通道还负责产生接口信号送往CPU,产生同步事件通知DMA控制器。 在CCS集成开发环境中,与McBSP相关的头文件有:regs54xx.h、mcbsp54.h。在这两个头文件中,定义了McBSP串行口的寄存器资源及使用方法。 TLC320AD50C是TI公司生产的SIGMA-DELTA型的16位A/D、D/A转换电路,他的采样速率最高可达22.05kb/s,内涵抗混叠滤波器和重构滤波器,属于模拟接口芯片(AIC),它有一个能与多种昂DSP芯片相连的同步串行通信接口,其采样速率课通过DSP编程来设置。在DAC之前有一个插值滤波器一保证输出信号平滑,在ADC之后有一个抽取滤波器以提高输入信号的信噪比。AD50C片内还包括一个定时器(调整采样率和帧同步延时)和控制器(可编程的增益放大器,锁相环PLL,通信协议等)。AD50有28脚的塑料SOP封装(带DW后缀)和48脚的塑料扁平QFP封装(带PT后缀),体积较小,适用于便携设备。AD50C的工作温度范围是0-70摄氏度,单一5V电源供电或5V模拟电源和3.3V数字电源供电,最大功耗为120mW。 在CCS集成开发环境中,与TLC320AD50C CODEC相关的头文件是codec.h。在这个头文件中,定义了与ad50CODEC相关的枚举变量和库函数。除了可以调用codec.h中提供的库函数之外,还可以利用这些枚举变量自己重新编写codec函数,使用枚举变量相互产生所需要的ad50寄存器的初始化值。Codec.h中的库函数位于函数库dsk5402.lib和drv5402.lib中。(二)滤波器的理论设计分析1.直接存储器访问DMA: 直接存储器访问(Direct Memory Access,简称DMA)是C54x DSP非常重要的片上外设,DMA控制器可以完成数据传输而不影响CPU,因此数据传输速度快。在要求信号实时采集和处理的系统中常采用DMA方式进行信号采集与传输。 本实验利用DMA通道2与McBSP1通道结合来读取AD转换数据,利用DMA通道3与McBSP1通道结合来将处理后的数据发送至DA。 当一组数据处理完后,将数据存放在存储区out_buffer+frame*0x100中,选择out_buffer+frame*0x100为DMA通道3传送数据首地址,并选择源地址工作在不调整模式。 2.IIR滤波原理:IIR数字滤波器差分方程的一般形式为:式中ai、bi为滤波系数。当bi全为零时,该滤波器为FIR数字滤波器;当bi不全为零时,则为IIR滤波器。IIR数字滤波器可用直接型、级联型和并联型三种基本结构实现,其基本组成单元如图1所示。对于二阶IIR数字滤波器,其传递函数为: n时刻IIR数字滤波器输出和输入关系为:其中x(n)是输入序列,y(n)是输出序列,ai、bI为滤波器系数。因此滤波器的输出可以用硬件乘法器和加法器实现。 在本实验中将IIR滤波器的系统函数H(z)分解为n个二阶IIR滤波器级联的形式进行运算,这样可以减小量化误差。3.IIR滤波函数 本实验信号滤波算法是直接从TMS320c54XDSPLIB库中调用IIR函数。IIR函数调用格式:iircas4(DATA *x,DATA *h,DATA *r,DATA *d, ushort nbiq, ushort nx);iircas5(DATA *x,DATA *h,DATA *r,DATA *d, ushort nbiq, ushort nx);iircas51(DATA *x,DATA *h,DATA *r,DATA *d, ushort nbiq, ushort nx);iir32(DATA *x,LDATA *h,DATA *r,LDATA *d, ushort nbiq, ushort nx);其中,iircas32函数用于双精度IIR滤波器;iircas4函数用于二阶级联直接II型滤波器,每项含4个系数;iircas5函数用于二阶级联直接II型滤波器,每项含5个系数; iircas51二阶级联直接I型滤波器,每项含五个系数。调用matlab产生滤波器系数时,由于a0始终为1,所以可以产生二阶级联型系数,每项调用a1,a2,b0,b1,b2五个系数。iircas5用于通过各部分的放缩系数使各部分增益小于1的情况同时防止溢出的情况。在IIR数字滤波器的实现中,直接II型相比直接I型节省了一半的延迟单元,因而成为IIR滤波器实现最常用的形式。 综上所述,我们采用irrcas5函数实现信号的滤波。调用参数说明:iircas5(DATA *x, DATA *h, DATA *r, DATA *dbuffer, ushort nbiq,ushort nx)xk为输入数组,hk为H(s)系数数组,按照a11 a21 b21 b01 b11 .a1i a2i b2i b0i b1i的顺序输入,其中i为biquad的个数;rnx为输出数组,dbuffer为延迟数据区,nbiq为H(s)分成二阶滤波器的个数nx为输入长度.相比较与其他几种调用函数,4.Fir滤波原理: 假设FIR滤波器的单位脉冲响应为h0、h1、.、hN-1,xk为待滤波的输入信号,则滤波器输出为yk=hk*xk=hkxk-n 进行信号滤波实际上师计算序列的线性卷积。在实验中滤波器单位脉冲响应hk是有限长N,而xk一般是外部输入的长序列,因而采用重叠像假发计算卷积。重叠相加法是求解段序列与长序列卷积的一种方法。首先将输入长序列分解为短序列,这些短序列分别于hk卷积,将每段计算结果中后N-1个数据保留在一个缓冲区中,以便于下一段卷积结果进行重叠相加。5.FIR滤波函数本实验信号滤波算法是直接从TMS320c54XDSPLIB库中调用FIR函数。FIR函数调用格式:oflag = short fir(DATA *x, DATA *h, DATA *r, DATA *dbuffer, ushort nh, ushort nx)功能 用FIR滤波器对信号滤波 调用参数说明:xnx 表示含有nx个实数的实输入信号向量;hnh 表示含有nh个实数的系数向量,按自然顺序 排列,即滤波器的单位脉冲响应。rnx 表示含有nx个实数的输出向量; 允许原位运算,即r=x。 dbuffernh 延迟缓冲区;对存储器的要求同hnh。 nx 向量x中实数的个数; nh 向量h中系数的个数; oflag=1 有溢出 ; oflag=0 无溢出(三)设计流程图:分配各数据段,并且给个数据段赋值A/D、D/A初始化DMA通道的初始化DMA方式接收A/D数据,将数据存储等待DMA接收中断MATLAB中FDATOOL设计滤波器IIRFIRIIR系数的量化、调整与变换信号的滤波函数调用波形的产生经DMA输出利用硬件实现滤波器的信号滤波,就是将MATLAB所产生的系数,与被取样的实时信号进行运算。将滤波器系数导入程序当中一般有两种方式:一、是将MATLAB产生的系数,生成头文件,在程序中进行调用。二、将MATLAB产生的系数写入数据段中,在程序中调用,此过程涉及到IIR滤波器的系数被截取,量化,调整和量化误差的产生。信号与滤波器系数的运算也有两种方法:一、调用DSPLIB中的IIR、FIR调用函数。二、利用C语言,编辑一段程序进行运算。(四)系数的导入与量化 1. 头文件方式导入 在MATLAB中利用FDATOOL产生所需滤波器,选择菜单Targets一Export to Code Composer StudioIDE打开Export to C Header File对话框,选择C header file,指定变量名(滤波器阶数和系数向量),输出数据类型可选浮点型或32b、16b整型等。根据自己安装选择目标板板号和处理器号。单击OK。保存该头文件,需指定文件名和路径,打开IIR工程文件夹,该滤波器系数头文件已含在工程中。该头文件用到MatLab中的tmwpytes.h,需把该文件也包含在工程中还要在原文件中声明包含滤波器参数头文件即:#include头文件名称#includetmwpytes.h然后编译、链接工程添加的头文件自动在工程目录中显示目标DSP自动为滤波器系数分配相应的存储空间。打开系数文件查看生成的滤波器系数,可看到系数是对称的,这由所选滤波器类型而定。由于本次的设计的拓展部分主要以设计IIR滤波器为主要目标,IIR滤波器系数存在着格式转换和量化的问题,不能够直接导入到CCS中直接去进行硬件实现,这样会导致滤波器系数的信息被截断,信息丢失,导致滤波器无法实现。所以我采用第二种方法。2.直接写入存储器滤波器的系数可以用FDATOOL进行计算出来,也可以导出到MATLAB的workspace中去计算量化。我们所使用的DSK5402实验板是16位定点运算,而MATLAB所产生的系数,并不是定点数而是浮点数。所以需要将MATLAB所产生的浮点数进行转化,使其转换为浮点数,浮点数格式的导出:一般在FIR滤波器中这种定点的转化都是使用MATLAB中FDATOOL的Export to C Header File方式来进行转化。但是与FIR不同的是IIR不一定是稳定的系统,即使稳定,也未必能够达到硬件实现。MATLAB提供的转化方法并没有对于越界的系数进行量化。例如:Sos=1,2,1,1,-1.19,0.45本是一个稳定的高阶IIR滤波器的系数矩阵中的一维向量,表示直接II型级联形式的一部分。经过MATLAB的16位定点量化后成为了Sos=32767,32767,32767,32767,-32768,14715成为了一个不稳定的系统,从而硬件实现就不可能了。A系数的转化MATLAB的带符号定点16位转化是,将所有大于1,小于-1的数值全部归一化,造成了巨大的量化误差,众所周知,IIR滤波器的实现过程中存在着反馈,于是累进量化误差越来越大造成了系统的不稳定。量化问题中不得不提的还有一个标准格式问题。由于MATLAB所产生的浮点系数并没有依照CCS中DSPLIB的IIR能够调用的数据格式。经过查阅资料以及多次的失败尝试积累出的经验,了解到我所要设计的IIR滤波器所需使用的IIRCAS5调用命令使用的是Q15数据格式,而MATLAB所产生的浮点值是Q14数据格式,而在进行定点转换时,MATLAB没有将Q14的数据格式量化,进行大误差归一化直接转化为Q15的定点形式所以造成硬件实现的失败。MATLAB产生的系数一般已经是满足ccs调用函数的second-order形式了。一次滤波器为例,产生的系数为: - Section #1 - Numerator: 1 2 1 Denominator: 1 -1.195433962890738 0.69059892324149696 Gain: 0.12379124008768973 - Section #2 - Numerator: 1 2 1 Denominator: 1 -0.94280904158206336 0.33333333333333343 Gain: 0.09763107293781749 - Section #3 - Numerator: 1 2 1 Denominator: 1 -0.84028692165132679 0.18834516088404471 Gain: 0.087014559808179473 - Output Gain: 1 其中Numerator就是分子部分,也就是b,其中Deneminator就是分母部分也就是a,Gain就是增益,一般计算系数,只需将分子部分乘以各部分增益,在转化为定点数。分母部分只需将其转化为定点部分就可以了。但是,这个系数中,存在着一项a11的情况,我才用了如下的公式来进行量化和数据格式转换:a=;b=;a=a/2*32767*g;b=b/2*32767其中,a为分母,b为分子;g为各项增益这个公式所形成的矩阵就可以应用到IIRCAS5的数据格式要求中,减小了溢出的可能性。C.误差分析(1)对IIR数字滤波器的系数,采用定点Q0格式进行数据的处理,将引入系数量化误差;(2)对输入的测试信号,采用定点Q0格式进行数据的处理,将引入输入信号的量化误差;(3)由于使用的AD,DA转换器件为有限字长,如DA转换器的字长仅10 b或12 b。在软件程序中事先要把数据化为相同的字长位数,再送到DA 转换器,也将引入量化误差。(4)对数字滤波的运算过程编制相应的程序,其中滤波器选用直接型、级联型还是并联型,将产生不同的运算量化误差。四、程序设计、调试与结果分析本次试验使用的FIR与IIR滤波器程序主体大致相同,所以只是对fir_dma.c中的与IIR与FIR两种不同的滤波器的相关系数进行了修改,下面列出的是IIR滤波器的设计程序。(一)准备工作:需要将头文件等库函数都装入到指定位置:1、drv5402.lib是软件仿真所用的仿真器所必需的库文件;2、dsk5402.lib是驱动DSK板所必需的库文件;3、rts.lib,这个库提供目标DSP运行时间支持(runtime-support)。 由于程序没有#include ,因此本程序不需要头文件。上图是编译成功的结果显示:无错误和警告!这是最终调试成功的结果,首次运行时有11个错误,主要是_cosx和_COSX的混淆,分号的误写等。 因此,本程序所使用的配置文件有:(1)、-c,即源程序文件;(2)、-o,ifr_dma.out即输出文件(默认在Debug目录);(3)、-l rts.lib等库文件。 (二)程序清单:通过理解iir的基本原理,也可以通过c语言或是汇编语言进行编写,同样可以达到滤波的效果。因为有调用函数,使用起来比此程序方便,所以只是用了函数来实现。1主程序:/*声明头文件*/#include #include #include #include #include #include /*/* Function Prototypes */*/void delay(s16 period);extern void DMAC2ISR();/*声明DMAC2ISR为外部函数*/*/*全局变量的定义*/*/HANDLE hHandset;unsigned int dmsefc, dmmcr, dmctr, src_addr, dst_addr;unsigned int dmpre, dmsrcp, dmdstp, dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dmgda, dmgcr, dmgfr;/*给输入缓冲区建立字段 */#pragma DATA_SECTION(inp_buffer,audio_buffer);int inp_buffer0x200;/*给输出缓冲区建立字段 */#pragma DATA_SECTION(out_buffer,outt_buffer);int out_buffer0x200;/*为系数建立字段 */#pragma DATA_SECTION(coeffs,coefficients);/* iir,butterworth低通滤波器fs=16000 fc=2000Hz*/ int coeffs15= -13765, 3085, 1425, 1425, 2851, -19585, 11314, 1756, 1756, 3513, -15446, 5461, 1846, 1846, 3693 ;/*fir hann低通fs=16000,fc=2000*/int coeff16= -43, -178, -407, -353, 671, 2968, 5860, 7903, 7903, 5860, 2968, 671, -353, -407, -178, -43 ;#pragma DATA_SECTION(delaybuff,delayb);int delaybuff6=0; /int delaybuff16=0 /* 给中断服务寄存器定义变量 */int frame=0; int flag=0;int temp; int currbuff = 0;/* delayptr指针变量指向延迟缓冲区的首地址*/ int *delayptr1 = &(delaybuff0); interrupt void DMAC2ISR();/*/*主程序*/*/void main() s16 cnt=2;/* 需要用到的bois的部分定义 */ BSCR = 0x8806; XPC = 0; PMST = 0xA0; brd_set_cpu_freq(100); TIMER_HALT(0); brd_set_wait_states(7, 7, 9); TIMER_RESET(0); IMR=0;/禁止所有中断if(brd_init_bios() return; while(cnt-)brd_led_toggle(BRD_LED0);/切换LED指示灯0的显示状态delay(1000);brd_led_toggle(BRD_LED1);/切换LED指示灯1的显示状态delay(1000);brd_led_toggle(BRD_LED2);/切换LED指示灯2的显示状态delay(1000); /* 初始化codec */ hHandset = codec_open(HANDSET_CODEC); /* 给一个句柄*/*设置codec变量*/ codec_dac_mode(hHandset, CODEC_DAC_15BIT); /* DAC 15位模式*/ codec_adc_mode(hHandset, CODEC_ADC_15BIT); /* ADC 15位模式 */ codec_ain_gain(hHandset, CODEC_AIN_6dB); /* 6dB的输入增益ADC */ codec_aout_gain(hHandset, CODEC_AOUT_MINUS_6dB); /* -6dB的输出衰减 DAC */ codec_sample_rate(hHandset,SR_16000); /* 设置抽样频率为16000Hz */ /* 清除DMAC2的中断标志*/ INTR_CLR_FLAG(DMAC2);/* 重置DMA通道*/ dma_reset_all();/* 初始化DMA通道2 */ dmsefc = (DSYNC_REVT1 12);/与McBSP1接收事件同步 dmmcr = (AUTOINIT_ENABLE 15) | (DINM_ENABLE 14) | (IMOD_HALFBLOCK 13) | (CTMOD_DEC 12) | (INDEXMODE_NOMOD 8) | (SPACE_DATA 6) | (INDEXMODE_INC 2) | (SPACE_DATA);/设置传输控制模式寄存器DMMCR,帧结束DMA中断;/15bit AUTOINIT_ENABLE=1 使能自动初始化/14bit DINM_ENABLE=1 根据IMOD位产生中断/13bit IMOD_HALFBLOCK=1 帧和块结束时都产生中断/12bit CTMOD_DEC=0 减量计数模式(多帧模式)/10-8bit INDEXMODE_NOMOD=000 源地址模式No modify /7-6bit SPACE_DATA=01 源地址空间为数据空间/4-2bit INDEXMODE_INC=01 目的地址模式, 传输之后加1/1-0bit SPACE_DATA=01 目的地址空间为数据空间 dmctr = 0xFF;/单元记数 src_addr = DRR1_ADDR(HANDSET_CODEC);/设置源地址 dst_addr = (unsigned int) &inp_buffer;/设置目的地址 dma_init(DMA_CH2, dmsefc, dmmcr, dmctr, SPACE_DATA, src_addr, SPACE_DATA, dst_addr);/* 设置通道2帧数*/ DMA_FRAMECOUNT(DMA_CH2, 1); /*为通道2输入设置全局自动初始化寄存器*/ dmgsa = src_addr; dmgda = dst_addr; dmgcr = 0xFF; dmgfr = 1; /* 设置全局优先级和使能控制寄存器 */ dmpre = (HIGH_PRIORITY 10) | (INTSEL_01 6); dmsrcp = SPACE_DATA; dmdstp = SPACE_DATA; dmidx0 = 0; dmidx1 = 0; dmfri0 = 0; dmfri1 = 0; dma_global_init(dmpre, dmsrcp, dmdstp, dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dmgda, dmgcr, dmgfr);/* 通道 2使能 */ DMA_ENABLE(DMA_CH2); /* 开始前端串行端口接收数据流*/ temp = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC); /* 通道2中断使能 */ INTR_ENABLE(DMAC2); /* 全局中断使能 */ INTR_GLOBAL_ENABLE;/* 等待中断 */ for(;);/*/*延迟 */*/void delay(s16 period) int i, j; for(i=0; iperiod; i+) for(j=0; jperiod; j+); 2. 终端服务程序dma2isr.c代码及分析#include #include extern void delay(s16 period);externunsigned int channel; /*DMA通道数*/externunsigned int dmsefc; /*设置同步时间和帧计数寄存器值*/externunsigned int dmmcr; /*设置模式控制寄存器值*/externunsigned int dmctr; /*设置单元计数寄存器值 */externunsigned int src_page; /*设置源页寄存器值 */externunsigned int src_addr; /*设置源地址寄存器值 */externunsigned int dst_page; /*设置目的页寄存器值 */externunsigned int dst_addr; /*设置目的地址寄存器值*/extern int inp_buffer0x200;extern int out_buffer0x200;extern int coeffs16;/*若是iir滤波器,需要改为coeffs15*/extern int delaybuff16; /*若是iir滤波器,需要改为delaybuff6*/extern int frame; extern int flag;extern int currbuff;extern int *delayptr1;int L=0;voidinit_dma3(void) while(DMPREC&0x0008) ;/DMA3的传送是否结束 /* 初始化通道3 */dmsefc = (DSYNC_REVT1 Graph功能观察输入输出信号:FIR的输入信号,输出信号和频谱。时域波形:频域滤出前后对比IIR的输入信号,输出信号和频谱。可见现实中,fir与iir的滤波效果都可以非常的接近理想中的情况。只是在IIR的滤波器的量化是还是存在的增益的改变,无法满足理想的情况,尝试增大音量来调整增益情况,就会发生如下的情况:系统的输出出现了溢出,是dsp无法实现IIR滤波器,并且发现,由于使用的是goldwave产生的信号,所以,计算机的声道设置必须是一端输出。关于音量多次试验以及失败的经验,由于板子的存储位数的原因,音量不能太大。音量过大导致了系统的不稳定,导致dsp的无法实现。(四)滤波器的性能对比:Fir:6阶 输入:sin(2000*pi*t)+sin(16000*pi*t)Hamming窗:系数:const int16_T B7 = 278, 2286, 8029, 11582, 8029, 2286, 278;Han窗:系数:const int16_T B7 = 0, 1954, 8291, 12278, 8291, 1954, 0;Blachman窗:系数:const int16_T B7 = 0, 1179, 8081, 14247, 8081, 1179, 0;Iir:6阶:同样的输入信号int coeffs15=-13767,3086,1425,1425,2851,-19585,11314,1756,1756,3513,-15446,5461,1846,1846,3693;这些对比可见在较低阶数的时候IIR的滤波器的性能明显强于FIR的效果,但是再设计过程中唯一的缺陷就在系数的量化时存在很大的误差,并且增益不是很好控制,并且有可能存在着溢出现象。对于高阶数的比较,由之前的16阶FIR滤波器已经很明显的看出来,FIR滤波器的滤波效果非常的完美。在进行较高阶数的比较的时候,阶数过高导致IIR的滤波器变得不稳定,已经不能够在DSP进行硬件实现,就并没有进行截图比较。(五)IIR的采样率对于自身滤波效果的影响分析Iir 8000采样率0,566,8333,8333,16665,0,19293,1272,1272,22544,0,5623,11082,11082,22164,Iir 3阶 7500采样率 Iir 4阶 12000采样率滤波效果明显不如之前取样率为16000的时候,并且观察其幅度相应,其衰减的增加趋势已经放缓了许多,其他两幅是在不同阶数和在不同采样率时的幅度相应,可见,采样频率对于IIR的影响是非常大的。可以知道,IIR比较适合在采样率较高,且阶数较小的时候使用。(六)实验结论:一、IIR数字滤波器是针对采样率固定的系统设计的,更改系统或系统采样率改变时应重新设计。二、用到的数据存储单元,程序开始时应对这些单元进行初始化。如果要进行连续滤波,应保存上一次滤波的结果。三、IIR数字滤波器的滤波结果会引起相位的延迟,故对相位严格要求的场合

温馨提示

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

评论

0/150

提交评论