分享
分销 收藏 举报 申诉 / 20
播放页_导航下方通栏广告

类型FIR实时滤波.doc

  • 上传人:pc****0
  • 文档编号:6866211
  • 上传时间:2024-12-22
  • 格式:DOC
  • 页数:20
  • 大小:420.50KB
  • 下载积分:10 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    FIR 实时 滤波
    资源描述:
    DSP课程设计实验报告 学 院: 电子信息工程学院 专 业: 通信工程 学 号: 10213082 学 生: 谭啸宇 指 导 教 师: 钱满义 2013年7月 目录 实验要求: 3 实验目的: 3 实验背景: 3 1.DMA技术 3 实验内容: 4 1.基本思想 4 2.程序与数据 5 主程序 5 噪声数据 16 FIR滤波器数据 17 3.结果 17 实验感想 20 利用DSP实现实时信号FIR滤波 实验要求: 基本部分 (1) 掌握利用滤波器设计FIR滤波器的方法,并提取滤波器参数; (2) 掌握利用Matlab的信号处理工具箱的使用,以及利用Matlab对信号进行滤波 (3) 设计数字滤波算法,或调用DSPLIB中的滤波函数,实现对信号的滤波。 (4) 利用C语言对A/D、D/A进行初始化 (5) 利用C语言对DMA进行初始化 (6) 编写DMA中断服务程序,实现信号的实时滤波 (7) 利用CCS信号分析工具分析信号的频谱成分,确定滤波器的参数 发挥部分 (1)比较加不同窗和阶数时滤波器的滤波效果; (2)测试所设计滤波器的幅频特性和相频特性,并与MATLIB下的设计结果进行比较。 (3)在实验板的Line in输入端接入正弦信号,分左右声道分别采集,并分别滤波。 实验目的: 掌握利用 DSP 实现信号实时 FIR 滤波设计可使学生更加透彻的理解信号的采集方法和滤波方法。学会利用 Matlab 对信号进行 FIR 滤波,掌握 Matlab 的信号仿真。同时通过对 DSP 信号处理器及 A/D、D/A 转换器以及 DMA 的编程,可以培养学生 C 语言编程能力以及使用 DSP 硬件平台实现数字信号处理算法的能力。 实验背景: 1.DMA技术 Direct Memory Access(存储器直接访问)是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。整个数据传输操作在一个称为“DMA控制器”的控制下进行。CPU除了在数据传输开始和结束时做一点处理外,在传输过程中还可以进行其他的工作。这样,在大部分时间里,CPU和输入输出都处于并行操作,因此使整个计算机系统的效率大大提高。DMA是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量中断负载,否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方,在这个时间中,CPU对于其他的工作来说就无法使用。DMA传输将数据从一个地址空间复制到另外一个地址空间,当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。DMA 传输对于高效能嵌入式系统算法和网络是很重要的。 一个设备接口试图通过总线直接向另一个设备发送数据(一般是大批量的数据), 它会先向CPU发送DMA请求信号。外设通过DMA的一种专门接口电路――DMA控制器(DMAC),向CPU提出接管总线控制权的总线请求,CPU收到该信号后,在当前的总线周期结束后,会按DMA信号的优先级和提出DMA请求的先后顺序响应DMA信号。CPU对某个设备接口响应DMA请求时,会让出总线控制权。于是在DMA控制器的管理下,外设和存储器直接进行数据交换,而不需CPU干预。数据传送完毕后,设备接口会向CPU发送DMA结束信号,交还总线控制权。 实现DMA传送的基本操作如下: 1、外设可通过DMA控制器向CPU发出DMA请求; 2、CPU响应DMA请求,系统转变为DMA工作方式,并把总线控制权交给DMA控制器; 3、由DMA控制器发送存储器地址,并决定传送数据块的长度; 4、执行DMA传送; 5、DMA操作结束,并把总线控制权交还CPU。 DMA方式主要适用于一些高速的I/O设备。这些设备传输字节或字的速度非常快。对于这类高速I/O设备,如果用输入输出指令或采用中断的方法来传输字节信息,会大量占用CPU的时间,同时也容易造成数据的丢失。而DMA方式能使I/O设备直接和存储器进行成批数据的快速传送。 2.FIR低通滤波器 假设数字滤波器的频率响应函数H用下式表示: 幅频特性表示信号通过该滤波器后各频率成分振幅衰减情况,而相频特性反映各频率成分通过滤波器后在时间上的延时情况。一般选频滤波器的技术要求由幅频特性给出,其相频特性是确定的,所以在设计过程中,对相频特性一般不作要求。在低通滤波器的幅频特性中,Wp和Ws分别称为通带边界频率和阻带截止频率。从Wp到Ws称为过渡带,过渡带上的频响一半是单调下降的。 当冲击响应满足下列条件时,FIR滤波器具有对称结构,为线性相位滤波器: 这种对称性,可使得乘法器数量减半:对n价滤波器,当n为偶数时,乘法器的个数为n/2个;当n为奇数时,乘法器的个数为(n+1)/2个。在电路实现中,乘法器占用的逻辑单元数较多。乘法器的增加,意味着电路成本增加,另外对电路的工作速度也有影响。 在DSP的应用中,可以应用Matlab的滤波器设计工具箱fdatool工具箱生成需要的FIR滤波器,在生成C文件,提取出相应的滤波数据,应用CCS来调用这些数据,从而应用DSP产生信号的滤波效果,这样就实现了FIR的低通滤波效果。 实验内容: 1.基本思想 外部模拟信号先进行A/D转换,利用MCBSP的接收寄存器接收数据。利用CCS的频谱分析工具对输入信号进行频谱分析;根据频谱成分确定滤波器参数,然后利用Matlab设计FIR滤波器,将参数提取出来,存放到DSP存储区中。调用DSPLIB中的FIR滤波函数,对信号进行滤波。滤波后的数据利用DMA方式送到D/A转换器转换为模拟信号。 2.程序与数据 主程序: /* * Copyright (C) 2003 Texas Instruments Incorporated * All Rights Reserved */ /* *---------main_dmafir.c--------- * This is a DMA application example for Codec AIC23B analog input/output, * The example places the MCBSP in DMA transmit data mode and * syncs MCBSP receive with DMA channel 4 and MCBSP transmit * with DMA channel 5. * The example uses predefined CSL macros and symbolic * constants to create the initialization values needed for * the MCBSP and DMA control registers to effect the transfer * Created by hailingao , BJTU , 2012/06/25 */ #include <stdio.h> #include <csl_mcbsp.h> #include <csl_dma.h> #include <csl_irq.h> #include <dsplib.h> #include <tms320.h> #include "data.h" //---------Global data definition--------- /* Constants for the buffered ping-pong transfer */ #define BUFFSIZE 256 #define PING 0 #define PONG 1 /* * Data buffer declarations - the program uses four logical buffers of size * BUFFSIZE, one ping and one pong buffer on both receive and transmit sides. */ #pragma DATA_SECTION (gBufferXmtPing, "buffer_sect"); Int16 gBufferXmtPing[BUFFSIZE]; // Transmit PING buffer #pragma DATA_SECTION (gBufferXmtPong, "buffer_sect"); Int16 gBufferXmtPong[BUFFSIZE]; // Transmit PONG buffer #pragma DATA_SECTION (gBufferRcvPing, "buffer_sect"); Int16 gBufferRcvPing[BUFFSIZE]; // Receive PING buffer #pragma DATA_SECTION (gBufferRcvPong, "buffer_sect"); Int16 gBufferRcvPong[BUFFSIZE]; // Receive PONG buffer #pragma DATA_SECTION (inp, ".data_in1"); DATA inp[NX]; #pragma DATA_SECTION (inp1, ".data_in2"); DATA inp1[NX]; #pragma DATA_SECTION (outbuf1, ".data_in3"); DATA outbuf1[NX]; //#pragma DATA_SECTION(out,".data_out"); //DATA out[NX]; /*------------------------------------------------------------------------------------*/ // // Config McBSP: Use McBSP to send and receive the data between DSP and AIC23B // /*------------------------------------------------------------------------------------*/ MCBSP_Config Mcbsp1Config = { MCBSP_SPCR1_RMK( MCBSP_SPCR1_DLB_OFF, // DLB = 0 MCBSP_SPCR1_RJUST_LZF, // RJUST = 0,right justify the data and zero fill the MSBs MCBSP_SPCR1_CLKSTP_DISABLE, // CLKSTP = 0 MCBSP_SPCR1_DXENA_ON, // DXENA = 1,DX delay enabler on 0, // Reserved = 0 MCBSP_SPCR1_RINTM_RRDY, // RINTM = 0 MCBSP_SPCR1_RSYNCERR_NO, // RSYNCER = 0 // MCBSP_SPCR1_RFULL_NO, // RFULL = 0 // MCBSP_SPCR1_RRDY_NO, // RRDY = 0 MCBSP_SPCR1_RRST_DISABLE // RRST = 0; Disable receiver ), MCBSP_SPCR2_RMK( MCBSP_SPCR2_FREE_NO, // FREE = 0 MCBSP_SPCR2_SOFT_NO, // SOFT = 0 MCBSP_SPCR2_FRST_FSG, // FRST = 1 ; Enable the frame-sync logic MCBSP_SPCR2_GRST_CLKG, // GRST = 1 ; The sample rate generator is take out of its reset state MCBSP_SPCR2_XINTM_XRDY, // XINTM = 0 MCBSP_SPCR2_XSYNCERR_NO, // XSYNCER =0 // MCBSP_SPCR2_XEMPTY_NO, // XEMPTY = 0 // MCBSP_SPCR2_XRDY_NO, // XRDY = 0 MCBSP_SPCR2_XRST_DISABLE // XRST = 0 Disable transimitter ), // 单数据相,接受数据长度为16位,每相2个数据 MCBSP_RCR1_RMK( MCBSP_RCR1_RFRLEN1_OF(1), // RFRLEN1 = 1 MCBSP_RCR1_RWDLEN1_16BIT // RWDLEN1 = 2 ), MCBSP_RCR2_RMK( MCBSP_RCR2_RPHASE_SINGLE, // RPHASE = 0 MCBSP_RCR2_RFRLEN2_OF(0), // RFRLEN2 = 0 MCBSP_RCR2_RWDLEN2_8BIT, // RWDLEN2 = 0 MCBSP_RCR2_RCOMPAND_MSB, // RCOMPAND = 0 No companding,any size data, MSB received first MCBSP_RCR2_RFIG_YES, // RFIG = 1 Frame-sync ignore MCBSP_RCR2_RDATDLY_1BIT // RDATDLY = 1 1-bit data delay ), MCBSP_XCR1_RMK( MCBSP_XCR1_XFRLEN1_OF(1), // XFRLEN1 = 1 MCBSP_XCR1_XWDLEN1_16BIT // XWDLEN1 = 2 ), MCBSP_XCR2_RMK( MCBSP_XCR2_XPHASE_SINGLE, // XPHASE = 0 MCBSP_XCR2_XFRLEN2_OF(0), // XFRLEN2 = 0 MCBSP_XCR2_XWDLEN2_8BIT, // XWDLEN2 = 0 MCBSP_XCR2_XCOMPAND_MSB, // XCOMPAND = 0 MCBSP_XCR2_XFIG_YES, // XFIG = 1 Unexpected Frame-sync ignore MCBSP_XCR2_XDATDLY_1BIT // XDATDLY = 1 1-bit data delay ), MCBSP_SRGR1_DEFAULT, MCBSP_SRGR2_DEFAULT, MCBSP_MCR1_DEFAULT, MCBSP_MCR2_DEFAULT, MCBSP_PCR_RMK( // MCBSP_PCR_IDLEEN_RESET, // IDLEEN = 0 MCBSP_PCR_XIOEN_SP, // XIOEN = 0 MCBSP_PCR_RIOEN_SP, // RIOEN = 0 MCBSP_PCR_FSXM_EXTERNAL, // FSXM = 0 Tranmit frame-syn is provided by AIC23B MCBSP_PCR_FSRM_EXTERNAL, // FSRM = 0 Receive frame-syn is provided by AIC23B MCBSP_PCR_CLKXM_INPUT, // CLKR is input MCBSP_PCR_CLKRM_INPUT, // CLKX is input MCBSP_PCR_SCLKME_NO, // SCLKME=0 CLKG is taken from the McBSP internal input clock // MCBSP_PCR_CLKSSTAT_0, // The signal on the CLKS pin is low MCBSP_PCR_DXSTAT_0, // Drive the signal on the DX pin low // MCBSP_PCR_DRSTAT_0, // The signal on the DR pin is low MCBSP_PCR_FSXP_ACTIVEHIGH, // FSXP = 1 Because a falling edge on LRCIN or LRCOUT starts data transfer MCBSP_PCR_FSRP_ACTIVELOW, // FSRP = 1 MCBSP_PCR_CLKXP_FALLING, // CLKXP = 1 The falling edge of BCLK starts data transfer MCBSP_PCR_CLKRP_RISING // CLKRP = 1 ), MCBSP_RCERA_DEFAULT, MCBSP_RCERB_DEFAULT, MCBSP_RCERC_DEFAULT, MCBSP_RCERD_DEFAULT, MCBSP_RCERE_DEFAULT, MCBSP_RCERF_DEFAULT, MCBSP_RCERG_DEFAULT, MCBSP_RCERH_DEFAULT, MCBSP_XCERA_DEFAULT, MCBSP_XCERB_DEFAULT, MCBSP_XCERC_DEFAULT, MCBSP_XCERD_DEFAULT, MCBSP_XCERE_DEFAULT, MCBSP_XCERF_DEFAULT, MCBSP_XCERG_DEFAULT, MCBSP_XCERH_DEFAULT }; DMA_Config dmaRcvConfig = { //接收通道的主要参数配置 DMA_DMACSDP_RMK( DMA_DMACSDP_DSTBEN_NOBURST, DMA_DMACSDP_DSTPACK_OFF, DMA_DMACSDP_DST_DARAMPORT1, DMA_DMACSDP_SRCBEN_NOBURST, DMA_DMACSDP_SRCPACK_OFF, DMA_DMACSDP_SRC_PERIPH, DMA_DMACSDP_DATATYPE_16BIT ), /* DMACSDP */ DMA_DMACCR_RMK( DMA_DMACCR_DSTAMODE_POSTINC, DMA_DMACCR_SRCAMODE_CONST, DMA_DMACCR_ENDPROG_OFF, /* ENDPROG OFF */ DMA_DMACCR_WP_DEFAULT, DMA_DMACCR_REPEAT_OFF, DMA_DMACCR_AUTOINIT_ON, /* AUTOINIT ON */ DMA_DMACCR_EN_STOP, DMA_DMACCR_PRIO_LOW, DMA_DMACCR_FS_DISABLE, DMA_DMACCR_SYNC_REVT1 ), /* DMACCR */ DMA_DMACICR_RMK( DMA_DMACICR_AERRIE_ON, DMA_DMACICR_BLOCKIE_OFF, DMA_DMACICR_LASTIE_OFF, DMA_DMACICR_FRAMEIE_ON, DMA_DMACICR_FIRSTHALFIE_OFF, DMA_DMACICR_DROPIE_OFF, DMA_DMACICR_TIMEOUTIE_OFF ), /* DMACICR */ (DMA_AdrPtr)(MCBSP_ADDR(DRR11)), /* DMACSSAL */ 0, /* DMACSSAU */ NULL, /* DMACDSAL, to be loaded by submit */ 0, /* DMACDSAU */ BUFFSIZE, /* DMACEN */ 1, /* DMACFN */ 0, /* DMACFI */ 0 /* DMACEI */ }; DMA_Config dmaXmtConfig = { //发送通道的主要参数配置 DMA_DMACSDP_RMK( DMA_DMACSDP_DSTBEN_NOBURST, DMA_DMACSDP_DSTPACK_OFF, DMA_DMACSDP_DST_PERIPH, DMA_DMACSDP_SRCBEN_NOBURST, DMA_DMACSDP_SRCPACK_OFF, DMA_DMACSDP_SRC_DARAMPORT0, DMA_DMACSDP_DATATYPE_16BIT ), /* DMACSDP */ DMA_DMACCR_RMK( DMA_DMACCR_DSTAMODE_CONST, DMA_DMACCR_SRCAMODE_POSTINC, DMA_DMACCR_ENDPROG_ON, DMA_DMACCR_WP_DEFAULT, DMA_DMACCR_REPEAT_OFF, DMA_DMACCR_AUTOINIT_OFF, DMA_DMACCR_EN_STOP, DMA_DMACCR_PRIO_LOW, DMA_DMACCR_FS_DISABLE, DMA_DMACCR_SYNC_XEVT1 ), /* DMACCR */ DMA_DMACICR_RMK( DMA_DMACICR_AERRIE_ON, DMA_DMACICR_BLOCKIE_OFF, DMA_DMACICR_LASTIE_OFF, DMA_DMACICR_FRAMEIE_ON, DMA_DMACICR_FIRSTHALFIE_OFF, DMA_DMACICR_DROPIE_OFF, DMA_DMACICR_TIMEOUTIE_OFF ), /* DMACICR */ NULL, /* DMACDSAL, to be loaded by submit */ 0, /* DMACSSAU */ (DMA_AdrPtr)(MCBSP_ADDR(DXR11)), /* DMACDSAL */ 0, /* DMACDSAU */ BUFFSIZE, /* DMACEN */ 1, /* DMACFN */ 0, /* DMACFI */ 0 /* DMACEI */ }; /* Define a DMA_Handle object to be used with DMA_open function */ DMA_Handle hDmaRcv, hDmaXmt; /* Define a MCBSP_Handle object to be used with MCBSP_open function */ MCBSP_Handle hMcbsp; volatile Uint16 transferComplete = FALSE; Uint16 err = 0; Uint16 old_intm; Uint16 xmtEventId, rcvEventId; //---------Function prototypes--------- /* Reference the start of the interrupt vector table */ /* This symbol is defined in file vectors.s55 */ extern void VECSTART(void); /* Protoype for interrupt functions */ interrupt void dmaXmtIsr(void); interrupt void dmaRcvIsr(void); void taskFxn(void); /* * copyData() - Copy one buffer with length elements to another. */ void copyData(Int16 *inbuf, Int16 *outbuf, Int16 length) { Int16 i = 0; for (i = 0; i < length; i++) { //outbuf[i]=inbuf[i] inp1[i] = inbuf[i]; } for (i = 0; i < length/2; i++) { inp[i] = inp1[2*i]+SINE_TABLE[i]; //取出输入信号的左声道并加噪 //inp[2*i+1] = inp1[2*i+1]+SINE_TABLE[i]; } fir(inp, h, outbuf1, dbptr, NX, NH); //将加噪后的左声道信号滤波 for (i = 0; i < length/2; i++) { outbuf[2*i] =inp[i]; outbuf[2*i+1] =outbuf1[i]; //将左右信号合并输出 } } /* ------------------------------- Threads ------------------------------ */ /* * processBuffer() - Process audio data once it has been received. */ void processBuffer(void) { Uint32 addr; static Int16 pingPong = PING; while(DMA_FGETH (hDmaRcv, DMACCR, ENDPROG)){ ; } // Determine which ping-pong state we're in if (pingPong == PING) { // Configure the receive channel for pong input data addr = ((Uint32)gBufferRcvPong) << 1; DMA_RSETH(hDmaRcv, DMACDSAL, addr & 0xffff); DMA_RSETH(hDmaRcv, DMACDSAU, (addr >> 16) & 0xffff); // Set new state to PONG pingPong = PONG; } else { // Configure the receive channel for ping input data addr = ((Uint32)gBufferRcvPing) << 1; DMA_RSETH(hDmaRcv, DMACDSAL, addr & 0xffff); DMA_RSETH(hDmaRcv, DMACDSAU, (addr >> 16) & 0xffff); // Set new state to PING pingPong = PING; } DMA_FSETH (hDmaRcv, DMACCR, ENDPROG, 1); // DMA_FSETH (hDmaXmt, DMACCR, ENDPROG, 1); if (pingPong == PONG) { //Insert your application program here copyData(gBufferRcvPing, gBufferXmtPing, BUFFSIZE); // Configure the transmit channel for ping output data addr = ((Uint32)gBufferXmtPing) << 1; DMA_RSETH(hDmaXmt, DMACSSAL, addr & 0xffff); DMA_RSETH(hDmaXmt, DMACSSAU, (addr >> 16) & 0xffff); } else { //Insert your application program here copyData(gBufferRcvPong, gBufferXmtPong, BUFFSIZE); // Configure the transmit channel for pong output data addr = ((Uint32)gBufferXmtPong) << 1; DMA_RSETH(hDmaXmt, DMACSSAL, addr & 0xffff); DMA_RSETH(hDmaXmt, DMACSSAU, (addr >> 16) & 0xffff); } // Start the DMA // DMA_start(hDmaRcv); // DMA_start(hDmaXmt); } //---------main routine--------- void main(void) { Uint16 i; /* Initialize CSL library - This is REQUIRED !!! */ CSL_init(); // T
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:FIR实时滤波.doc
    链接地址:https://www.zixin.com.cn/doc/6866211.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork