




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
DSP課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告DTMF信號(hào)的產(chǎn)生及檢測(cè)院〔系〕:電子信息工程學(xué)院-通信工程設(shè)計(jì)人員:周鈺哲學(xué)號(hào):08211052苗祚雨08212075目錄一、設(shè)計(jì)任務(wù)書……………2二、設(shè)計(jì)內(nèi)容………………2三、設(shè)計(jì)方案、算法原理說(shuō)明……………3四、程序設(shè)計(jì)、調(diào)試與結(jié)果分析…………6五、設(shè)計(jì)〔安裝〕與調(diào)試的體會(huì)…………16六、參考文獻(xiàn)………………16一設(shè)計(jì)任務(wù)要求雙音多頻DTMF〔DualToneMultiFrequency〕是在按鍵式機(jī)上得到廣泛應(yīng)用的音頻撥號(hào)信令,一個(gè)DTMF信號(hào)由兩個(gè)頻率的音頻信號(hào)疊加構(gòu)成。這兩個(gè)音頻信號(hào)的頻率分別來(lái)自兩組預(yù)定義的頻率組:行頻組和列頻組。每組分別包括4個(gè)頻率,分別抽出一個(gè)頻率進(jìn)行組合就可以組成16種DTMF編碼,分別記作0~9、*、#、A、B、C、D。如下列圖1所示。圖1DTMF信令的編碼要用DSP產(chǎn)生DTMF信號(hào),只要產(chǎn)生兩個(gè)正弦波疊加在一起即可;DTMF檢測(cè)時(shí)采用改良的Goertzel算法,從頻域搜索兩個(gè)正弦波的存在。1、根本局部:〔1〕使用C語(yǔ)言編寫DTMF信號(hào)的發(fā)生程序,要求循環(huán)產(chǎn)生0~9、*、#、A、B、C、D對(duì)應(yīng)的DTMF信號(hào),并且符合CCITT對(duì)DTMF信號(hào)規(guī)定的指標(biāo)?!?〕使用C語(yǔ)言編寫DTMF信號(hào)的檢測(cè)程序,檢測(cè)到的DTMF編碼在屏幕上顯示。2、發(fā)揮局部:利用DTMF信號(hào)完成數(shù)據(jù)通訊的功能,并試改良DTMF信號(hào)的規(guī)定指標(biāo),使每秒內(nèi)傳送的DTMF編碼越多越好。3、要求完成的任務(wù)〔1〕編寫C語(yǔ)言程序,并在CCS集成開發(fā)環(huán)境下調(diào)試通過(guò)?!?〕實(shí)現(xiàn)設(shè)計(jì)所要求的各項(xiàng)功能?!?〕按要求撰寫設(shè)計(jì)報(bào)告。二、設(shè)計(jì)內(nèi)容DTMF發(fā)生器基于兩個(gè)二階數(shù)字正弦振蕩器,一個(gè)用于產(chǎn)生行頻,一個(gè)用于產(chǎn)生列頻。在輸入信號(hào)中檢測(cè)DTMF信號(hào),需要在輸入的數(shù)據(jù)信號(hào)流中連續(xù)地搜索DTMF信號(hào)頻譜的存在。整個(gè)檢測(cè)過(guò)程分兩步:首先采用Goertzel算法在輸入信號(hào)中提取頻譜信息;接著作檢測(cè)結(jié)果的有效性檢查。Goertzel算法實(shí)質(zhì)是一個(gè)兩極點(diǎn)的IIR濾波器。三、設(shè)計(jì)方案、算法原理說(shuō)明要用DSP產(chǎn)生DTMF信號(hào),只要通過(guò)兩個(gè)正弦波疊加在一起即可;DTMF檢測(cè)時(shí)采用改良的Goertzel算法,從頻域搜索兩個(gè)正弦波的存在?!?〕DTMF信號(hào)的產(chǎn)生DTMF編碼器基于兩個(gè)二階數(shù)字正弦波振蕩器,一個(gè)用于產(chǎn)生行頻,一個(gè)用于產(chǎn)生列頻。向DSP裝入相應(yīng)的系數(shù)和初始條件,就可以只用兩個(gè)振蕩器產(chǎn)生所需的八個(gè)音頻信號(hào)。典型的DTMF信號(hào)頻率范圍是700~1700Hz,選取8000Hz作為采樣頻率,即可滿足Nyquist條件。DTMF數(shù)字振蕩器對(duì)的二階系統(tǒng)函數(shù)的差分方程為:其中,,,為采樣頻率,為輸出正弦波的頻率,為輸出正弦波的幅度。該式初值為,。用sin函數(shù)產(chǎn)生離散的正弦值,生成DTMF的公式為:buffer[t]=sin(t*2*pi*f1/fs)+sin(t*2*pi*f2/fs)其中t為采樣序數(shù),由0開始遞增;f1,f2為生成DTMF信號(hào)的兩個(gè)正弦波的頻率;fs為采樣頻率;buffer[t]為序數(shù)t時(shí)的得出的采樣值。將這些數(shù)據(jù)轉(zhuǎn)換為Q15格式然后通過(guò)codec發(fā)送出去。CCITT對(duì)DTMF信號(hào)規(guī)定的指標(biāo)是,傳送/接收率為每秒10個(gè)數(shù)字,即每個(gè)數(shù)字100ms。代表數(shù)字的音頻信號(hào)必須持續(xù)至少45ms,但不超過(guò)55ms。100ms內(nèi)其他時(shí)間為靜音,以便區(qū)別連續(xù)的兩個(gè)按鍵信號(hào)。我們使用8000Hz的采樣頻率〔信號(hào)的典型抽樣頻率為=8kHZ〕,即1秒采樣8000個(gè)點(diǎn),那么100ms采樣800個(gè)點(diǎn),我們?cè)O(shè)置800個(gè)點(diǎn)的緩存,其中用400個(gè)存產(chǎn)生的DTMF信號(hào)值,即音頻信號(hào)必須持續(xù)50ms,另外400個(gè)存0值,即靜音信號(hào)。〔2〕DTMF信號(hào)的檢測(cè)DTMF檢測(cè)是對(duì)進(jìn)入解碼端的信號(hào)進(jìn)行檢測(cè),并把雙音頻信號(hào)轉(zhuǎn)換成對(duì)應(yīng)的數(shù)字信息。它是一個(gè)比DTMF產(chǎn)生更加復(fù)雜過(guò)程。由于數(shù)據(jù)流是連續(xù)的,為了保證DTMF檢測(cè)的實(shí)時(shí)性,因此要求檢測(cè)過(guò)程必須是實(shí)時(shí)連續(xù)的。在輸入信號(hào)中檢測(cè)DTMF信號(hào),需要在輸入的數(shù)據(jù)信號(hào)流中連續(xù)地搜索DTMF信號(hào)頻譜的存在。整個(gè)檢測(cè)過(guò)程分兩步:首先采用Goertzel算法在輸入信號(hào)中提取頻譜信息;接著作檢測(cè)結(jié)果的有效性檢查。DTMF解碼時(shí)在輸入信號(hào)中搜索出有效的行頻和列頻。計(jì)算數(shù)字信號(hào)的頻譜可以采用DFT及其快速算法FFT,而在實(shí)現(xiàn)DTMF解碼時(shí),采用Goertzel算法要比FFT更快。通過(guò)FFT可以計(jì)算得到信號(hào)所有譜線,了解信號(hào)整個(gè)頻域信息,而對(duì)于DTMF信號(hào)只需關(guān)心其8個(gè)行頻/列頻及其二次諧波信息即可,二次諧波的信息用于將DTMF信號(hào)與聲音信號(hào)區(qū)別開。此時(shí)Goertzel算法能更加快速的在輸入信號(hào)中提取頻譜信息。Goertzel算法實(shí)質(zhì)是一個(gè)兩極點(diǎn)的IIR濾波器。Goertzel算法原理:DTMF檢測(cè)器的核心是Goertzel算法。該算法利用二極點(diǎn)的IIR濾波器計(jì)算離散傅立葉變換值,能夠快速高效地提取輸入信號(hào)的頻譜信息。由于IIR濾波器是一個(gè)遞歸結(jié)構(gòu),它利用只有一個(gè)實(shí)系數(shù)的差分方程進(jìn)行操作,并不像DFT或FFT算法那樣需要計(jì)算數(shù)據(jù)塊,而是每輸入一個(gè)樣值就執(zhí)行一次算法。完成時(shí)域到頻域的變換可以用離散傅立葉變換(DFT)或快速傅立葉變(FFT).FFT計(jì)算出所有點(diǎn)頻率,而DFT可以只計(jì)算感興趣的頻率點(diǎn).如果要計(jì)算的頻率點(diǎn)數(shù)少于log2N(N為輸入信號(hào)點(diǎn)數(shù)),采用DFT的計(jì)算速度比FFT更快。直接計(jì)算DFT,需要很多復(fù)系數(shù),即使只計(jì)算一點(diǎn)的DFT也需要N個(gè)復(fù)系數(shù).采用數(shù)字信號(hào)處理中的Goertzel算法,如圖2,那么可明顯地提高速度。圖2Goertzel算法原理框圖X在實(shí)際的DTMF檢測(cè)中,只需DFT的幅度〔本算法為平方幅度〕信息就足夠了,因此在Goertzel濾波器中,當(dāng)N點(diǎn)〔相當(dāng)于DFT數(shù)據(jù)塊的長(zhǎng)度〕樣值輸入濾波器后,濾波器輸出偽DFT值vk〔n〕,由vk〔n〕即可確定頻譜的平方幅度。其中k=f*N/fs,當(dāng)N取值為125時(shí),k的取值經(jīng)計(jì)算如表1所示:信號(hào)頻率(Hz)計(jì)算值k取整值k絕對(duì)誤差相對(duì)誤差69710.890625110.1093751.00430%77012.03125120.031250.25974%85213.3125130.31252.34741%94114.703125150.2968752.01912%120918.890625190.1093750.57899%133620.875210.1250.59880%147723.078125230.0781250.33852%163325.515625250.5156252.02082%表1一旦得到行/列頻率的頻譜平方幅度信息,就可以通過(guò)一系列的判決來(lái)確定音頻及數(shù)字結(jié)果的有效性。首先,檢測(cè)可能DTMF信號(hào)的強(qiáng)度是否足夠大。行頻率分量和列頻率分量的平方幅度和應(yīng)高于某一確定門限。注意與DTMF頻率相符的正弦波的能量集中在頻域內(nèi)一段很窄的范圍當(dāng)中,所以門限取值應(yīng)占動(dòng)態(tài)范圍的大局部。第二,如果DTMF信號(hào)存在,由于構(gòu)成DTMF信號(hào)的行頻都低于列頻,因此從小到大依次判斷各個(gè)頻率點(diǎn)的頻譜幅度,得到的第一個(gè)到達(dá)門限要求的的頻率點(diǎn)即為行頻,第二個(gè)即為列頻,綜合行頻和列頻即可得出檢測(cè)到的按鍵信息。檢測(cè)流程圖:圖3檢測(cè)流程圖四、程序設(shè)計(jì)、調(diào)試與結(jié)果分析發(fā)送源程序代碼如下:/*****************************************************************//*DTMFsignal發(fā)送程序send.c*//*****************************************************************/#include<stdio.h>#include<math.h>#include<type.h>#include<board.h>#include<codec.h>#include<mcbsp54.h>voiddelay(intperiod);voidgenerate(intnum);HANDLEhHandset;floatbuffer[800];s16num=0;intcount=0;floatfreq[16][2]={941,1336,//鍵值0對(duì)應(yīng)的行頻列頻697,1209,//1697,1336,//2697,1477,//3770,1209,//4770,1336,//5770,1477,//6852,1209,//7852,1336,//8852,1477,//9697,1633,//A770,1633,//B852,1633,//C941,1633,//D941,1209,//*941,1477//#};floatpi=3.1415926;voidmain(){ intcnt=2; if(brd_init(100)){return;} /*blinktheledsacoupletimes*/ while(cnt--)/*二極管閃兩次*/ { brd_led_toggle(BRD_LED0); //brd_delay_msec(1000); delay(1000); brd_led_toggle(BRD_LED1); //brd_delay_msec(1000); delay(1000); brd_led_toggle(BRD_LED2); //brd_delay_msec(1000); delay(1000); }/*OpenHandsetCodec*/hHandset=codec_open(HANDSET_CODEC);/*Acquirehandletocodec*//*Setcodecparameters*/codec_dac_mode(hHandset,CODEC_DAC_15BIT);/*DACin15-bitmode*/codec_adc_mode(hHandset,CODEC_ADC_15BIT);/*ADCin15-bitmode*/codec_ain_gain(hHandset,CODEC_AIN_6dB);/*6dBgainonanaloginputtoADC*/codec_aout_gain(hHandset,CODEC_AOUT_MINUS_12dB);/*-12dBgainonanalog*//*outputfromDAC*/codec_sample_rate(hHandset,SR_8000);/*8KHzsamplingrate*/generate(num);}voidgenerate(intnum){ f32x,y; intk=0; inti; i=0;while(1) { //Waitforsamplefromhandset while(!MCBSP_XRDY(HANDSET_CODEC)){}; *(volatileu16*)DXR1_ADDR(HANDSET_CODEC)=buffer[i]; i++; if(i==800) { i=0;num++; if(num==16) num=0; x=freq[num][0]/8000; y=freq[num][1]/8000; for(k=0;k<400;k++) { buffer[k]=(0.65*sin(2*pi*y*k)+0.8*sin(2*pi*x*k))*16384; buffer[k+400]=0; } } }}voiddelay(intperiod)/*延時(shí)子程序*/{inti,j;for(i=0;i<period;i++){for(j=0;j<period>>1;j++);}}檢測(cè)源程序代碼如下:/*****************************************************************//*DTMFsignal檢測(cè)程序receive.c*//*****************************************************************/#include<stdio.h>#include<math.h>#include<type.h>#include<board.h>#include<codec.h>#include<mcbsp54.h>HANDLEhHandset;floatbuffer[125];floatpi=3.1415926;s16receive[125];s16dacdata;intk=0;intdetect_result[100]={0};intl=0;intflag=0;voiddelay(intperiod);voiddetect();voidmain(){intcnt=2;/********************************************Description:*vk(n)=2*coef*vk(n-1)-vk(n-2)+x(n)**Coefficientsareinw[8]*x(n)isinbuffer[256]*vk(n-2)isa[i][0]*vk(n-1)isa[i][1] *vk(n)isa[i][2]*********************************************/ if(brd_init(100)){return;} //blinktheledsacoupletimes while(cnt--) { brd_led_toggle(BRD_LED0); //brd_delay_msec(1000); delay(1000); brd_led_toggle(BRD_LED1); //brd_delay_msec(1000); delay(1000); brd_led_toggle(BRD_LED2); //brd_delay_msec(1000); delay(1000); } /*OpenHandsetCodec*/hHandset=codec_open(HANDSET_CODEC);/*Acquirehandletocodec*/ /*Setcodecparameters*/codec_dac_mode(hHandset,CODEC_DAC_15BIT);/*DACin15-bitmode*/codec_adc_mode(hHandset,CODEC_ADC_15BIT);/*ADCin15-bitmode*/codec_ain_gain(hHandset,CODEC_AIN_6dB);/*6dBgainonanaloginputtoADC*/codec_aout_gain(hHandset,CODEC_AOUT_MINUS_6dB);/*-6dBgainonanalogoutputfromDAC*/codec_sample_rate(hHandset,SR_8000);/*8KHzsamplingrate*/while(1){ while(!MCBSP_RRDY(HANDSET_CODEC)){}; dacdata=*(volatileu16*)DRR1_ADDR(HANDSET_CODEC); receive[k]=dacdata; buffer[k]=dacdata/16384.0; k++; if(k==125) { k=0; detect(); } } }voiddetect(){inti,j,x,y;floatw[8],a[8][3],amp[8];w[0]=2*cos(2*pi*11/125); w[1]=2*cos(2*pi*12/125); w[2]=2*cos(2*pi*13/125); w[3]=2*cos(2*pi*15/125); w[4]=2*cos(2*pi*19/125); w[5]=2*cos(2*pi*21/125); w[6]=2*cos(2*pi*23/125); w[7]=2*cos(2*pi*26/125);for(i=0;i<8;i++) { a[i][0]=0; a[i][1]=0; for(j=1;j<=125;j++) { a[i][2]=w[i]*a[i][1]-a[i][0]+buffer[j-1]; a[i][0]=a[i][1]; a[i][1]=a[i][2]; }//計(jì)算頻譜的幅度平方值 amp[i]=a[i][1]*a[i][1]+a[i][0]*a[i][0]-w[i]*a[i][1]*a[i][0];} j=0; for(i=0;i<8;i++) { if(amp[i]>500)//門限設(shè)為500 {//printf("Theamplitude%dis%f.\r\n",i,amp[i]); j++; if(j==1) { x=i; } elseif(j==2) { y=i; } } } i=-1; if(flag==0){ if(j==2) { if(x==0&&y==4) {i='1';} elseif(x==0&&y==5) {i='2';} elseif(x==0&&y==6) {i='3';} elseif(x==1&&y==4) {i='4';} elseif(x==1&&y==5) {i='5';} elseif(x==1&&y==6) {i='6';} elseif(x==2&&y==4) {i='7';} elseif(x==2&&y==5) {i='8';} elseif(x==2&&y==6) {i='9';} elseif(x==3&&y==5) {i='0';} elseif(x==0&&y==7) {i='A'; } elseif(x==1&&y==7) {i='B';} elseif(x==2&&y==7) {i='C';} elseif(x==3&&y==7) {i='D';} elseif(x==3&&y==4) {i='*';} elseif(x==3&&y==6) {i='#';} } if(i!=-1) { detect_result[l]=i; l++; if(l==100) { for(l=0;l<100;l++) printf("TheDTMFsignalis%c.\r\n",detect_result[l]); } flag++;}}elseif(j==0)flag=0;}voiddelay(intperiod){inti,j;for(i=0;i<period;i++){for(j=0;j<period>>1;j++);}}cmd源代碼如下:/*###############################################################################$Id:$###################################################################################Copyright(c)1999DNAEnterprises,Inc.#################################################################################RevisionHistory####$Log:$##################################################################################################################################################################XFERMAKE.CMD####C54xLinkerCommandFilefor5402DSKMemoryTransferModule###############################################################################*//*****************************************************************************//*ObjectFiles*//*****************************************************************************//*****************************************************************************//*LinkerOptions*//*****************************************************************************//*****************************************************************************//*C5402DSKDSPMemoryMap*//**//*****************************************************************************/MEMORY{PAGE0:VECS:origin=0080h,length=0080h/*InternalProgramRAM*/PRAM:origin=0100h,length=8000h/*InternalProgramRAM*/PAGE1:SCRATCH:origin=0060h,length=0020h/*ScratchPadDataRAM*/DMARAM:origin=0C00h,length=0300h/*DMAbuffer*/DATA:origin=1100h,length=0080h/*InternalDataRAM*/STACK:origin=1180h,length=0560h/*StackMemorySpace*/INRAM:origin=1900h,length=0100h/*InternalDataRAM*/HPRAM0:origin=1A00h,length=0002h/*HPImemoryaccessiblebyHostandDSP*/HPRAM1:origin=1A02h,length=0280h/*HPImemoryaccessiblebyHostandDSP*/HPRAM2:origin=1C82h,length=0280h/*HPImemoryaccessiblebyHostandDSP*/EXRAM:origin=1F10h,length=4000h/*ExternalDataRAM*/}/*****************************************************************************//*DSPMemoryAllocation*//*****************************************************************************/SECTIONS{.cinit>PRAMPAGE0.text>PRAMPAGE0.vectors>VECSPAGE0init_var>PRAMPAGE0detect>PRAMPAGE0vrcprg >PRAMPAGE0matprg >PRAMPAGE0.stack>STACKPAGE1.trap>SCRATCHPAGE1.const>EXRAMPAGE1.data>EXRAMPAGE1.bss>EXRAMPAGE1.cio>EXRAMPAGE1.switch>EXRAMPAGE1tables>EXRAMPAGE1var>EXRAMPAGE1svctab>EXRAMPAGE1/*SS_VLSPtable*/vctab>EXRAMPAGE1/*VLSPtable*/uvctab>EXRAMPAGE1/*UVLSPtable*/cuvtab>EXRAMPAGE1/*Stochasticcodebook*/cdbktab>EXRAMPAGE1/*variouscodebooktables*/logtab>EXRAMPAGE1/*tableforlog2*/powtab>EXRAMPAGE1/*tableforpow2*/hamtab>EXRAMPAGE1/*tableforhamming*/lgwtab>EXRAMPAGE1/*tableforlagwindow*/acostab>EXRAMPAGE1/*tableforarccos*/sqrtab>EXRAMPAGE1/*tableforsquareroot*/acbtab>EXRAMPAGE1/*tableforthresholdsinacb*/pm03tab>EXRAMPAGE1/*tableforx^(-0.3)computation*/costab>EXRAMPAGE1/*tableforcosine*/V23>INRAMPAGE1FSK>INRAMPAGE1hpibuff0>HPRAM0PAGE1hpibuff1>HPRAM1PAGE1hpibuff2>HPRAM2PAGE1dma_buff>DMARAMPAGE1}調(diào)試與結(jié)果分析發(fā)送端的頻域圖形如圖4所示:圖4接收端的頻域圖形接受判決結(jié)果如圖5所示:圖5調(diào)試過(guò)程中產(chǎn)生的問(wèn)題及解決方案1、起初采用每
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 庫(kù)欣綜合征課件
- 電網(wǎng)客服面試題及答案
- 傳媒學(xué)生面試題及答案
- 神秘太陽(yáng)測(cè)試題及答案
- 肋骨骨折課件
- 湖南省長(zhǎng)沙市岳麓實(shí)驗(yàn)中學(xué)2024-2025學(xué)年高一下學(xué)期6月月考政治試卷
- 2025 年江西省中考地理試卷(解析版)
- 校園歷史文化主題征文方案
- 房地產(chǎn)臨時(shí)用電合同模板
- 二年級(jí)健康教育教案(20篇)
- 研究借鑒晉江經(jīng)驗(yàn)-加快縣域經(jīng)濟(jì)發(fā)展
- GB/T 12706.4-2020額定電壓1 kV(Um=1.2 kV)到35 kV(Um=40.5 kV)擠包絕緣電力電纜及附件第4部分:額定電壓6 kV(Um=7.2 kV)到35 kV(Um=40.5 kV)電力電纜附件試驗(yàn)要求
- 2023年鎮(zhèn)江丹陽(yáng)市民政局系統(tǒng)事業(yè)單位招聘筆試模擬試題及答案
- 國(guó)開電大 操作系統(tǒng) 實(shí)驗(yàn)4:文件管理實(shí)驗(yàn)報(bào)告
- 北京理工附中小升初分班考試真題
- 膀胱鏡檢查記錄
- 安徽省小學(xué)學(xué)生學(xué)籍表
- 無(wú)創(chuàng)腦血氧監(jiān)護(hù)儀技術(shù)審評(píng)報(bào)告
- 糖尿病足的診斷與治療ppt課件
- 非車險(xiǎn)銷售人員基礎(chǔ)培訓(xùn)系列第一講走進(jìn)非車險(xiǎn)世界
- 比選申請(qǐng)文件模板
評(píng)論
0/150
提交評(píng)論