1. <tt id="5hhch"><source id="5hhch"></source></tt>
    1. <xmp id="5hhch"></xmp>

  2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

    <rp id="5hhch"></rp>
        <dfn id="5hhch"></dfn>

      1. 基于DSP的語音處理系統的設計

        時間:2024-07-28 00:08:45 電子信息工程畢業論文 我要投稿
        • 相關推薦

        基于DSP的語音處理系統的設計

        摘 要 近年來,隨著DSP技術的普及和低價格、高性能DSP芯片的出現,DSP已越來越多地被廣大的工程師所接受越來越廣泛地被應用于各個領域,并且已日益顯示出其巨大的優越性。DSP是利用專門或通用的數字信號處理芯片,以數字計算的方法對信號進行處理,具有處理速度快、靈活、精確、抗干擾能力強、體積小及可靠性高等優點,滿足了對信號快速、精確、實時處理及控制的要求。本次設計基于TLV320AIC23和TMS320VC5416兩種芯片設計并實現了一種語音錄音、語音編碼、語音解碼、語音處理和回放的系統。通過軟件和硬件結合對該系統進行設計,使本次設計的語音處理系統具有強大的數據處理能力并配有靈活的接口電路,可以作為一種語音信號處理算法研究和實時實現的通用平臺,對語音編碼在DSP上的實時實現進行了簡單的研究,從而掌握了算法移植的一般流程,為能夠在高速DSP硬件平臺設計及系統應用開發方面取得成功奠定基礎。   關鍵詞:DSP;數據采集; TLV320AIC23;TMS320VC5416。 目錄 摘 要 I 第1章 緒論 1 1.1 DSP的發展及應用 1 1.2 語音信號處理系統概述 2 第2章 DSP芯片介紹 3 2.1 TLV320AIC23簡介 3 2.2 TMS320VC5416簡介 3 第3章 系統設計 4 3.1系統硬件設計 4 3.1.1系統結構框圖 4 3.1.2 DSP處理器 5 3.1.3 A/D電路 5 3.1.4 D/A電路 7 3.2系統軟件設計 10 3.2.1 TMS320VC5416初始化 10 3.2.2 TLV320AIC23初始化 10 第4章 總結 11 參考文獻 12 致謝 13 附錄 14 第1章 緒論 近年來,在數字信號處理領域有著絕對優勢的DSP技術得到了迅速發展,不僅在通信計算機領域大顯身手,并已逐漸滲透到人們日常消費領域。正因為如此,DSP應用越來越得到普遍重視。 DSP作為可編程數字信號處理專用芯片是微型計算機發展的一個重要分支,也是數字信號處理理論實用化過程的重要技術工具。DSP器件分為兩大類:一類是專門用于FFT、FIR濾波、卷積等運算的芯片,稱為專用DSP器件;另一類是可以通過編程完成各種用戶要求的信息處理任務的芯片 ,稱為通用數字信號處理器件。 1.1 DSP的發展及應用 最初的DSP器件只是被設計用以完成復雜數字信號處理算法。這可以追溯到20世紀50年代到60年代,那時數字信號處理技術剛剛起步。由于一般的數字信號處理算法運算量大,因此,算法只能在大型計算機上進行模擬仿真,無法實現數字信號處理。60年代中期,快速傅里葉算法的出現及大規模集成電路的發展,奠定了硬件完成數字信號處理算法和數字信號處理理論實用化的重要技術基礎,從而促進了近40年來DSP技術與器件的飛速發展。 通用DSP器件的發展可分為三個階段:第一階段(1980年前后),DSP雛形階段。第二階段(1990年前后),DSP的成熟階段。第三階段(2000年以后),DSP的完善階段。 目前,DSP的發展非常迅速。硬件結構方面主要是向多處理器的并行處理結構、便于外部數據交換的串行總線傳輸、大容量片上RAM和ROM、程序加密、增加I/O驅動能力、外圍電路內裝化、低功耗等方面發展。軟件方面主要是綜合開發平臺的完善,使DSP的應用開發更加靈活方便。 目前,DSP芯片的價格越來越低,性能價格比日益提高,具有巨大的應用潛力。DSP芯片的主要應用: ① 信號處理——數字濾波,自適應濾波,快速傅里葉變換,相關運算,頻譜分析,卷積,波形產生等; ② 語音處理——語音編碼,語音識別,語音合成,文本—語音轉換等; ③ 圖象圖形處理——三維圖形轉換,機器人視覺,圖象轉換及壓縮,模式識別,圖象增強等; ④ 控制——司服控制,機器人控制,自適應控制,神經網絡控制等; ⑤ 軍事——保密通信,雷達及聲音信號處理,導航及制導,調制解調,全球定位,搜索與跟蹤等; ⑥ 儀器儀表——頻譜分析,函數發生器,模態分析,暫態分析等; ⑦ 通訊——回音相消,高速調制解調器,數字編碼與解碼,自適應均衡,移動電話,擴展通訊,噪音對消,網絡通訊等; ⑧ 消費電子——高清晰度電視,音樂合成器,智能玩具,游戲等; ⑨ 醫學——助聽器,病員監控,超聲波設備,自動診斷設備,胎兒監控等。 1.2 語音信號處理系統概述 語音處理在現代通信中應用非常廣泛,主要有語音編碼、語音識別、語音合成、語音郵件、語音存儲等。典型的語音處理系統如下圖1.1所示: 圖1.1 典型的語音處理系統 圖中的輸入信號可以有各種各樣的形式。例如,它可以是麥克風輸入的語音信號或是電話線已調的數據信號,可以是編碼后在數字鏈路上傳輸或存儲在計算機里德攝像機圖象信號等。 輸入信號首先進行帶限濾波和抽樣,然后進行A/D變換將信號變成數字比特流。根據奈奎斯特抽樣定理,為保證信息不丟失,抽樣頻率至少是輸入帶限信號最高頻率的2倍。 DSP芯片的輸入是A/D變換后得到的以抽樣形式表示的數字信號。DSP芯片對輸入的數字信號進行某種處理。數字處理是DSP系統的關鍵,這與其它系統(如電話交換系統)有很大的不同。在交換系統中,處理器的作用是進行路由選擇,它并不對輸入數據進行修改。因此兩者雖然都是實時系統,但兩者的實時約束條件卻有很大不同。最后,經過處理后的數字樣值再經D/A變換轉換為模擬樣值。之后進行內插和平滑濾波就會得到連續的模擬波形。 上面給出的典型的DSP語音處理系統,根據不同的用途應有不同的變動。 第2章 DSP芯片介紹 2.1 TLV320AIC23簡介 TLV320AIC23(簡稱AIC23)是TI公司的一款高性能Codec芯片。主要特性有:內置耳機輸出放大器,支持MIC和LINE IN兩種輸入方式(二選一)。且對輸入和輸出都具有可編程增益調節;芯片中的A/D轉換器和D/A轉換器采用多位的Sigma-Delta技術,數據傳輸字長為16、20、24、32bit,采樣率為8kHz ~96kHz;在采樣率為96kHz情況下A/D轉換器信噪比達到90dB,D/A轉換器達到100dB;回放模式下功率為23mW,省電模式下更是小于15uW;只占用25mm的面積;谏鲜鰞烖c,AIC23是可移動的數字音頻播放和錄音使用中的模擬輸入輸出等應用系統的理想選擇,例如MP3播放器等。 2.2 TMS320VC5416簡介 TMS320VC5416(以下簡稱VC5416)是TI公司的一款16bit定點高性能DSP,是TMS320VC54x系列中的第3代芯片。主要特性有:速率最高達160MI/s;3條16bit數據存儲器總線和1條程序存儲器總線;1個40bit桶形移位器和2個40bit累加器;1個17×17乘法器和1個40bit專用加法器;最大8M×16bit的擴展尋址空間,內置128k×16bit的RAM和16k×16bit的ROM;3個多通道緩沖串口(McBSP);配有PCM3002,可對語音進行A/D和D/A轉換。由于VC5416功耗低,性能高,其分開的數據和指令空間使該芯片具有高度的并行操作能力,在單周期內允許指令和數據同時存取,再加上高度優化的指令集,使得該芯片具有很高的運算速度并且該芯片本身具有豐富的片內存儲器資源和多種片上外設,因此在工程界得到廣泛應用,尤其是在語音編碼和通信應用方面。 第3章 系統設計 3.1系統硬件設計 3.1.1系統結構框圖 音頻系統應該具有較寬的動態范圍,選擇16~24位的ADC和DAC能完全捕獲或恢復高保真的音頻信號。系統的核心芯片(DSP)選用美國TI公司的TMS320VC5402[1](以下簡稱C5402)。 DSP芯片模塊是整個實時語音處理系統的核心部分,它對經數字化的信號進行壓縮,編解碼等。 A/D轉換模塊功能是把模擬信號數字化,包括采集和量化,這部分為DSP處理語音數字信號做好了準備;D/A轉換模塊就是把數字信號轉換為模擬的信號,輸出音頻信號。 SDRAM(動態隨機存儲器)存儲器模塊主要是為DSP處理器擴展存儲容量,達到要求的存儲容量;但要注意的是要與DSP處理器的速度相匹配,以便良好的運行。電源模塊是為內部芯片及周邊系統電路提供能量的部分。 系統結構框圖圖3.1如下所示: 圖3.1 系統結構框圖 3.1.2 DSP處理器 作為DSP家族高性價比代表的16位定點DSP芯片,C5402適用于語音通信等實時嵌入應用場合。與其它C54X芯片一樣,C5402具有高度靈活的可操作性和高速的處理能力。其性能特點如下:操作速率可達100MIPS;具有先進的多總線結構,三條16位數據存儲器總線和一條程序存儲器總線;40位算術邏輯單元(ALU),包括一個40位桶形移位器和兩個40位累加器;一個17×17乘法器和一個40位專用加法器,允許16位帶/不帶符號的乘法;整合維特比加速器,用于提高維特比編譯碼的速度;單周期正規化及指數譯碼;8個輔助寄存器及一個軟件棧,允許使用業界最先進的定點DSP C語言編譯器;數據/程序尋址空間為1M×16bit,內置4K×16bit ROM和16k×16bit RAM;內置可編程等待狀態發生器、鎖相環(PLL)時鐘產生器、兩個多通道緩沖串口、一個與外部處理器通信的8位并行HPI口、兩個16位定時器以及6通道DMA控制器且低功耗。與C54X系列的其它芯片相比,5402具有高性能、低功耗和低價格等特點。它采用6級流水線,且當RPT(重復指令)時,一些多周期的指令就變成了單周期的指令;芯片內部RAM和ROM可根據PMST寄存器中的OVLY和DROM位靈活設置。這些都有利于算法的優化。 C5402采用3.3V和1.8V電源供電,其中I/O采用3.3V電源供電,芯片的核采用1.8V電源供電。而實際常用的只有5V電源,所以必須采用電源轉換芯片。選用TPS7301和TPS7333兩塊電源轉換芯片(它們都是TI公司為配合DSP而設計的電源轉換芯片),分別接上適當的外圍電阻,構成電阻分壓器,即可調整兩塊芯片的輸出電壓分別為3.3V和1.8V。 3.1.3 A/D電路 PCM1800是雙聲道單片Δ-Σ型20位ADC,單+5V電源供電,信噪比為95dB,動態范圍為95dB,其內部嵌有高通濾波器,具有PCM音頻接口和四種數據格式,分為主控和受控兩種模式,采樣頻率可選為32kHz、44.1KHz和48KHz。 PCM1800構成音頻信號采集系統時,主要涉及到BCK(位時鐘信號)、LRCK(采樣時鐘信號)、FSYNC(幀同步信號)、DOUT(數字信號輸出)、SYSCLK(系統時鐘輸入)這幾個對時序有要求的引腳。通過對引腳MODE0和MODE1進行編程,可讓PCM1800工作于主控模式(Master Mode)。此時,BCK、LRCK、FSYNC均作為輸出,其時序由PCM1800內部的時鐘產生電路控制。但SYSCLK只能由外部提供(這里用C5402的TOUT腳輸出信號提供)。 PCM1800的系統時鐘只能是256fs、384fs或者512fs,這里fs是音頻信號采樣頻率。在主控模式時,FSYNC用來指明PCM1800的DOUT輸出的有效數據,它的上升沿表明一幀數據的起始,下降沿表明一幀數據的結束。FSYNC的頻率是采樣時鐘頻率LRCK的2倍。在此模式下,位時鐘信號BCK的頻率是采樣時鐘頻率LRCK的64倍。 通過對PCM1800的FMT0、FMT1兩引腳編程(FMT0=1,FMT1=0),可以設置PCM1800輸出的數據格式為20位的IIS格式。為了保證在數據處理時不影響新數據的接收以及在接收數據時不中斷正在進行的數據處理過程,采用了多通道緩沖同步串口(McBSP)。 PCM1800與C5402連接后,C5402使用緩沖串口0接收數據,各種同步信號由PCM1800產生,C5402是被動接收各種信息。PCM1800與C5402的硬件接線圖如圖3.2所示。 圖3.2 PCM1800與C5402的硬件接線圖 電源管理功能模塊 所用器件: TPS73HD301( 3.3-V/Adjustable Output 該芯片一端輸入可調,范圍是(1.2-9.7V) 電源模塊管腳圖3.3如下所示: 圖3.3 電源模塊管腳圖 3.1.4 D/A電路 PCM1744是雙聲道立體聲DAC,包含數字濾波器和輸出放大器,動態范圍為95dB,具有多種采樣頻率可選,最高可達96kHz。采用24位的IIS數據輸入格式。PCM1744的操作主要涉及到LRCIN(采樣時鐘信號輸入)、BCKIN(位時鐘信號輸入)、SCKI(系統時鐘輸入)、DIN(數據輸入)這幾個對時序有要求的引腳。PCM1744與C5402連接后,C5402使用緩沖串口1發送數據,各種時鐘信號均由C5402產生,PCM1744被動接收各種信息。PCM1744的系統時鐘信號(SCKI)由C5402的TOUT引腳提供,TOUT是C5402的定時器輸出信號引腳,有較強的驅動能力,可以驅動多個芯片。PCM1744的數據接收時鐘格式必須是IIS格式,C5402在緩沖串口寄存器中設置各種時鐘方式時,必須滿足IIS格式的要求。C5402作為主動工作器件,可以對其緩沖串口輸出信號進行調整。輸出的采樣時鐘信號、位時鐘信號可以在McBSP寄存器SRGR1和SRGR2中設置,設置遵循圖3.4的原則。 圖3.4 C5402時鐘發生流程圖 基本的時鐘信號可以來自CPU時鐘,也可以來自晶振時鐘,這在SRGR2寄存器中的第13位設置;緯r鐘輸入后,經CLKGDV(SRGR1的第7位到第0位)所設置的值進行第一次分頻,得到位時鐘信號(由BCLKX1腳輸出)。值得注意的是,位時鐘信號最高為DSP頻率的一半。位時鐘信號經FPER(SRGR2的第11位到第0位)和FWID(SRGR1的第15位到第8位)所設置的值進一步分頻得到采樣時鐘信號(由BFSX1腳輸出),FPER和FWID分別設置采樣時鐘信號的低電平和高電平的時間值。C5402與PCM1744的硬件接線如圖3.5所示。 圖3.5 PCM1744與C5402接線圖 PCM1800完成音頻信號采集后,在DSP的外擴程序存儲器中嵌入相應的處理算法,語音信號經處理后,再從PCM1744輸出。 復位電路:所用芯片為74HC14。 復位電路圖3.6如下所示: 圖3.6 復位電路圖 存儲器模塊 所用芯片為:MT48LC8M8A2TG-75、存儲容量Density 為64Mb、數據寬度16位、工作電壓 3.3V、 TSOP封裝 54管腳、 時鐘速率133 MHz、 存儲器模塊圖3.7如下所示: 圖3.7 存儲器模塊圖 3.2系統軟件設計 3.1.1 TMS320VC5416初始化    SWWSR=0x7fff;/程序、數據、I/O空間   SWCR=0x0001;/等待周期為7×2=14   BSCR=0x8006;/按32KW分區,HD[7:0],D[15:0]Hold   CLKMD=PLL_DIV_INIT;   Waitloop(0x0400);   CLKMD=PLL_LOCK_INIT_X(5);   Waitloop(0x0400);   PMST=0x0168;/中斷向量表定位在0X100,MP/MC=1   OVLY=1 DROM=1; 3.2 TLV320AIC23初始化 為使AIC23正常工作并產生預期的音頻效果,必須對其相應的寄存器進行配置。首先對VC5416的I2C模塊初始化,將AIC23總線上的地址寫入從機地址寄存器ICSAR;再把相應的AIC23內部映射寄存器的地址和待寫數據合并為16bit控制字,逐次寫入ICDXR,并通過I2C總線發送給AIC23,即可完成對AIC23的初始化配置。  AIC23初始化的部分源代碼: Unsigned int codec_buf[9]={OX1e00,OXOc00,OxO81a OxOaO4,OxOe01,0x1020,0x1021,0x0117,OxO5f9};   Port_sub_address=(unsigned int*)MCBSP_SPSA_ADDR(1);   Port_sub_index_reg=(unsigned int*)MCBSP_SPAD_ADDR(1);   *Port_sub_address=MCBSP_SPCR2_SUBADDR;   For(i=O;i<9;i++){   While(!(*Port_sub_index_reg&(MASK_BIT(XRDY))));   Set_codec_cs_low();   MCBSP1_DXR1=codec_buf[i];   While(!(*Port_sub_index_reg&(MASK_BIT(XRDY))));   Set_codec_cs_high();} 第4章 總結 經過這次的課程設計,我發現我在DSP這方面學得不夠,很多東西都學得不夠全面,掌握得不夠深,不能熟練地把它們應用在實踐當中。這次在劉偉春老師的細心指導和同學的熱心幫助,以及自己上網查找資料下,還算比較順利地完成了本次課程設計的任務。這次課程設計使我對DSP方面的知識有更深的理解,強化了自己的基礎知識,也深刻體會到DSP技術應用領域的廣泛。同時對CCS集成環境更為熟悉了,為我在今后的工作中奠定了堅實的實踐基礎。通過這次課程設計讓我明白基礎知識的重要性,同時也要理解更多的有關它的知識,并且很好地運用到實踐當中,也讓我知道了要好好地學習,不能懈怠。 參考文獻 [1]戴明楨等編著.TMS320C54X DSP 結構原理及應用. 北京:航空航天大學出版社,第2版,2007; [2]彭啟編著.DSP技術的發展與應用.北京:高等教育出版社,2002; [3]胡廣書編著.數字信號處理理論、算法與實現.北京:清華大學出版社,2005; [4]張雄偉,曹鐵勇.DSP芯片的原理與開發應用(第二版)[M].北京:電子工業出版社,2000; [5]郝軟層,徐金甫.基于DSP芯片的MELP聲碼器的算法實現[J].微計算機信息,2006; [6]任麗香,馬淑芬,李方慧.TMS220600系列DSP的原理與應用[M].北京:電子工業出版社,2000; [7]北京合眾達電子技術有限公司編著.SEED-DTK系列實驗手冊.北京合眾達電子技術有限公司出版,2007。 致 謝 在這次課程設計過程中,我要感謝每一個幫助過我的人。本論文是在劉老師的悉心指導下完成的,劉老師對我的論文提出了很多寶貴的意見,幫助我開拓研究思路,精心點撥、熱忱鼓勵。同時,劉老師淵博的學識、嚴謹的治學態度也令我十分敬佩,是我以后學習和工作的榜樣。在整個設計過程中我懂得了許多東西,也培養了我獨立工作的能力,樹立了對自己工作能力的信心,相信會對今后的學習工作生活有非常重要的影響,同時,也讓我知道了那些基礎知識的重要性。本論文的順利完成,離不開我們老師悉心教導、同學和朋友的關心和幫助。 總之,感謝每一位關心過我,愛護過我的人。最后,再次感謝各位老師各位同學的幫助和支持,衷心地謝謝你們! 附 錄 源代碼如下: #include void iirbcf(ifilt,band,ns,n,f1,f2,f3,f4,db,b,a) double b[],a[],f1,f2,f3,f4,db; /* TMS320VC5416初始化*/ SWWSR=0x7fff;/程序、數據、I/O空間 SWCR=0x0001;/等待周期為7×2=14 BSCR=0x8006;/按32KW分區,HD[7:0],D[15:0]Hold CLKMD=PLL_DIV_INIT; Waitloop(0x0400); CLKMD=PLL_LOCK_INIT_X(5); Waitloop(0x0400); PMST=0x0168;/中斷向量表定位在0X100,MP/MC=1 OVLY=1 DROM=1; /* TLV320AIC23初始化*/ Unsigned int codec_buf[9]={OX1e00,OXOc00,OxO81a OxOaO4,OxOe01,0x1020,0x1021,0x0117,OxO5f9}; Port_sub_address=(unsigned int*)MCBSP_SPSA_ADDR(1); Port_sub_index_reg=(unsigned int*)MCBSP_SPAD_ADDR(1); *Port_sub_address=MCBSP_SPCR2_SUBADDR; For(i=O;i<9;i++){ While(!(*Port_sub_index_reg&(MASK_BIT(XRDY)))); Set_codec_cs_low(); MCBSP1_DXR1=codec_buf[i]; While(!(*Port_sub_index_reg&(MASK_BIT(XRDY)))); Set_codec_cs_high();} int ifilt,band,ns,n; { int k; double omega,lamda,epslon,f1,fh; double d[5],c[5]; void chebyi(),chebyii(),bwtf(); double coshl(),warp(),bpsub(),omin(); void fblt(); if((band==1)||(band==4)) fl=f1; if((band==2)||(band==3)) fl=f2; if(band<=3) fh=f3; if(band==4) fh=f4; if(ifilt<3) { switch(band) { case1: case2: { omega=warp(f2)/warp(f1); break; } case3: { omega=omin(bpsub(warp(f1),fh,fl),bpsub(warp(f4),fh,fl)); break; } case4: {omega=omin(1.0/bpsub(warp(f2),fh,fl),1.0/bpsub(warp(f3),fh,fl));} } lamda=pow(10.0,(db/20.0)); epslon=lamda/cosh(2*ns*coshl(omega)); } for(k=0;k{ switch(ifilt) { case1: { chebyi(2*ns,k,4,epslon,d,c); break; } case2: { chebyii(2*ns,k,4,omega,lamda,d,c); break; } case3: { bwtf(2*ns,k,4,d,c); break; } } fblt(d,c,n,band,fl,fh,&b[k*(n+1)+0],&a[(n+1)+0]); } } static double coshl(x) double x; { double z; z=log(x+sqrt(x*x-1.0)); return(z); } static double warp(f) double f; { double pi,z; pi=4.0*atan(1.0); z=tan(pi*f); return(z); } static double bpsub(om,fh,fl) double om,fh,fl; { double z; z=(om*om-warp(fh)*warp(fl))/((warp(fh)-warp(fl))*om); return(z); } static double omin(om1,om2) double om1,om2; { double z,z1,z2; z1=fabs(om1); z2=fabs(om2); z=(z1return(z); } static void bwtf(ln,k,n,d,c) int ln,k,n; double d[],c[]; { int i; double pi,tmp; pi=4.0*atan(1.0); d[0]=1.0; c[0]=1.0; for(i=1;i<=n;i++) { d[i]=0.0; c[i]=0.0; } tmp=(k+1)-(ln+1.0)/2.0; if(tmp==0,0) {c[1]=1.0;} else { c[1]=-2.0*cos((2*(k+1)+ln-1)*pi/(2*ln)); c[2]=1.0; } } static void chebyi(ln,k,n,ep,d,c) double d[],c[],ep; int ln,k,n; {int i; double pi,gam,omega,sigma; pi=4.0*atan(1.0); gam=pow(((1.0+sqrt(1.0+ep*ep))/ep),1.0/ln); sigma=0.5*(1.0/gam-gam)*sin((2*(k+1)-1)*pi/(2*ln)); omega=0.5*(1.0/gam+gam)*cos((2*(k+1)-1)*pi/(2*ln)); for(i=0;i<=n;i++) { d[i]=0.0; c[i]=0.0; } if(((ln%2)==1)&&((k+1)==(ln+1)/2)) { d[0]=-sigma; c[0]=d[0]; c[1]=1.0; } else { c[0]=sigma*sigma+omega*omega; c[1]=-2.0*sigma; c[2]=1.0; d[0]=c[0]; if(((ln%2)==0)&&(k==0)) d[0]=d[0]/sqrt(1.0+ep*ep); } } static void chebyii(ln,k,n,ws,att,d,c) double d[],c[],ws,att; int ln,k,n; { int i; double pi,gam,alpha,beta,sigma,omega,scln,scld; pi=4.0*atan(1.0); gam=pow((att+sqrt(att*att-1.0)),1.0/ln); alpha=0.5*(1.0/gam-gam)*sin((2*(k+1)-1)*pi/(2*ln)); beta=0.5*(1.0/gam+gam)*cos((2*(k+1)-1)*pi/(2*ln)); sigma=ws*alpha/(alpha*alpha+beta*beta); omega=-1.0*ws*beta/(alpha*alpha+beta*beta); for(i=0;i<=n;i++) { d[i]=0.0; c[i]=0.0; } if(((ln%2)==1)&&((k+1)==(ln+1)/2)) { d[0]=-1.0*sigma; c[0]=d[0]; c[1]=1.0; } else { scln=sigma*sigma+omega*omega; scld=pow((ws/cos((2*(k+1)-1)*pi/(2*ln))),2); d[0]=scln*scld; d[2]=scln; c[0]=d[0]; c[1]=-2.0*sigma*scld; c[2]=scld; } } #inlcude static void fblt(d,c,n,band,fln,fhn,b,a) int n,band; double fln,fhn,d[],d[],b[],a[]; { int i,k,m,n1,n2,ls; double pi,w,w0,w1,w2,tmp ,tmpd,tmpc,*work; double combin(); void bilinear(); pi=4.0*atan(1.0); w1=tan(pi*fln); for(i=n;i>=0;i--) { if((c[i]!=0.0)||(d[i]!=0.0)) break; } m=i; switch(band) { case1: case2: { n2=m; n1=n2+1; if(band==2) { for(i=0;i<=m/2;i++) { tmp=d[i]; d[i]=d[m-i]; d[m-i]=tmp; tmp=c[i]; c[i]c[m-i]; c[m-i]=tmp; } } for(i=0;i<=m;i++) { d[i]=d[i]/pow(w1,i); c[i]=c[i]/pow(w1,i); } break; } case3: case4: { n2=2*m; n1=n2+1; work=malloc(n1*n1*sizeof(double)); w2=tan(pi*fhn); w=w2-w1; w0=w1*w2; if(band==4) { for(i=0;i<=m/2;i++) { tmp=d[i]; d[i]=d[m-i]; d[m-i]=tmp; tmp=c[i]; c[i]=c[m-i]; c[m-i]=tmp; } } for(i=0;i<=n2;i++) { work[0*n1+i]=0.0; work[1*n1+i]=0.0; } for(i=0;i<=m;i++) { tmpd=d[i]*pow(w,(m-i)); tmpc=c[i]*pow(w,(m-i)); for(k=0;k<=i;k++) { ls=m+i-2*k; tmp=combin(i,i)/(combin(k,k)*combin(i-k,i-k)); work[0*n1+ls]+=tmpd*pow(w0,k)*tmp; work[1*n1+ls]+=tmpc*pow(w0,k)*tmp; } } for(i=0;i<=n2;i++) { d[i]=work[0*n1+i]; c[i]=work[1*n1+i]; } free(work); } } bilinear(d,c,b,a,n); } static double combin(i1,i2) int i1,i2; { int i; double s; s=1.0; if(i2==0) return(s); for(i=i1;i>(i1-i2);i--) {s*=i;} return(s); } static void bilinear(d,c,b,a,n) int n; double d[],c[],b[],a[]; { int i,j,n1; double sum,atmp,scale,*temp; n1=n+1; temp=malloc(n1*n1*sizeof(double)); for(j=0;j<=n;j++) {temp[j*n1+0]=1.0;} sum=1.0; for(i=1;i<=n;i++) { sum=sum*(double)(n-i+1)/(double)i; temp[0*n1+i]=sum; } for(i=1;i<=n;i++) for(j=1;j<=n;j++) { temp[j*n1+i]=temp[(j-1)*n1+i]-temp[j*n1+i-1]-temp[(j-1)*n1+i-1]; } for(i=n;i>=0;i--) { b[i]=0.0; atmp=0.0; for(j=0;j<=n;j++) { b[i]=b[i]+temp[j*n1+i]*d[j]; atmp=atmp+temp[j*n1+i]*c[j]; } scale=atmp; if(i!=0) a[i]=atmp; } for(i=0;i<=n;i++) { b[i]=b[i]/scale; a[i]=a[i]/scale; } a[0]=1.0; free(temp); }

        【基于DSP的語音處理系統的設計】相關文章:

        基于DSP和USB的數據采集處理系統的設計03-07

        基于TMS320VC5402的語音處理系統03-07

        基于DSP和以太網的數據采集處理系統03-20

        基于DSP的智能座椅系統的設計03-07

        基于TMS320C549DSP實現CVSD語音編解碼03-07

        基于 DSP 的網絡通信程序設計03-20

        基于DSP的聲控電子記事本的設計與實現03-19

        基于DSP的擴頻電臺基帶模塊的設計與實現03-18

        基于DSP的電吉他數字音效器設計03-30

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码

        1. <tt id="5hhch"><source id="5hhch"></source></tt>
          1. <xmp id="5hhch"></xmp>

        2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

          <rp id="5hhch"></rp>
              <dfn id="5hhch"></dfn>