《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動態(tài) > ISD4004系列器件語音拷貝系統(tǒng)的設(shè)計

ISD4004系列器件語音拷貝系統(tǒng)的設(shè)計

2008-07-17
作者:魯奇璞, 魏 豐

  摘 要: 介紹了ISD4004系列語音芯片" title="語音芯片">語音芯片,分析了芯片語音信息分段的內(nèi)部形成機制及特征,提出了獲取內(nèi)部地址的方法;在此基礎(chǔ)上采用地址拷貝法,開發(fā)設(shè)計出了語音拷貝系統(tǒng),并給出了軟件設(shè)計、硬件設(shè)計和部分應(yīng)用程序;最后通過測試驗證了系統(tǒng)的可行性。
  關(guān)鍵詞: ISD4004 語音拷貝 語音信息段 地址拷貝


1 ISD4004語音芯片介紹
  ISD系列語音芯片是Winbond公司推出的產(chǎn)品。該芯片采用多電平直接模擬存儲專利技術(shù),聲音不需要A/D轉(zhuǎn)換和壓縮,模擬信號直接存儲在片內(nèi)的閃爍存儲器中,沒有A/D 轉(zhuǎn)換誤差, 因此能夠真實、自然地再現(xiàn)語音、音樂及效果聲。避免了傳統(tǒng)錄音電路量化和壓縮造成的量化噪聲和金屬聲。
  ISD4004系列語音芯片的所有操作由微控制器控制,操作命令通過串行通信接口(SPI或Microwire)送入。錄音采樣頻率可為4.0Hz、5.3Hz、6.4Hz、8.0Hz,錄放時間可為8min、10min、12min、16min。采樣頻率越低,錄放時間越長,但音質(zhì)則有所下降。片內(nèi)信息存于閃爍存儲器中,可在斷電情況下保存100年,反復(fù)錄音10萬次(典型值)。器件工作電壓為3V,工作電流為15~25mA,維持電流為1μA。適用于移動電話機及其它便攜式電子產(chǎn)品中。
  本文以ISD4004-8MP(錄放時間為8min,PDIP封裝)語音芯片為例,介紹了語音拷貝系統(tǒng)的設(shè)計。
  (聲明:本系統(tǒng)僅供測試使用,未經(jīng)許可復(fù)制他人音頻內(nèi)容,造成的侵權(quán)行為,由使用者自己承擔(dān);在使用本系統(tǒng)過程中造成的語音信息的失真、缺損及其它內(nèi)容變更等責(zé)任,由使用者自己承擔(dān)。)
2 ISD4004語音拷貝系統(tǒng)的設(shè)計
  系統(tǒng)設(shè)計的整體思路是用錄制好語音的器件(母片)放音,待拷貝的器件(子片)錄音。其關(guān)鍵在于確??截惓龅淖悠Z音信息和母片完全一致,為此采用地址拷貝法。首先母片放音一遍,確認(rèn)母片的語音信息地址,建立地址索引表;在母片放音的同時,子片同步進行錄制拷貝,即在子片相同的地址處進行相應(yīng)語音信息的錄制。地址拷貝法確保了母片和子片的語音信息地址完全一致。下面分軟件和硬件電路兩部分進行介紹。
2.1 軟件的設(shè)計
2.1.1 母片語音地址的確定

  母片語音地址的確定是整個設(shè)計的重點。ISD器件的地址不是通常意義上的字節(jié)地址單元,而是內(nèi)部存儲器的行地址。行是語音信息段的基本組成單位。以ISD4004-8MP為例,它內(nèi)部的3840K閃爍存儲器單元共分為1600行,每個地址單元指向其中的一行,即有1600個行地址單元。ISD4004-8MP的錄放時間為八分鐘,采樣頻率為8kHz,因此它的每行語音長度為200ms,即地址分辨率為200ms。
  ISD器件可以進行多段錄放操作,每一段稱為一個語音信息段。一個語音信息段由其起始地址、記錄的數(shù)據(jù)和信息結(jié)束標(biāo)志EOM(表示一個語音信息段的結(jié)束)三部分組成。ISD器件出廠時,其內(nèi)部存儲器的一行已經(jīng)設(shè)計有多個可能的EOM標(biāo)志位置。ISD4004系列一行有八個,第一個位于行起始后的25ms處,第八個位于行結(jié)束處,剩下EOM標(biāo)志間隔25ms均勻分布。錄音停止后,向器件發(fā)送STOP命令,錄音的進程不會馬上停止,到了下一個最近的可能EOM標(biāo)志位置時,用一個EOM標(biāo)志寫入器件來記錄語音結(jié)束的位置。這樣做可以使錄音的進程在盡可能短的時間內(nèi)停止。在實際應(yīng)用中,一行最多只能有一個EOM標(biāo)志說明語音信息段的結(jié)束,無論這個標(biāo)志在哪里,下一條語音信息將從新的一行開始。所以一個語音信息段可以占用一行或多行存儲空間,可以包括多個地址單元;一個地址單元最多只能作為一個獨立的段。ISD4004最多可以分為1600個語音信息段。
  ISD器件存儲陣列中的每一行都可以獨立尋址。錄放操作都是從一行的行首開始,可以一直持續(xù)到行尾,自動無縫跳轉(zhuǎn)到下一行開始,繼續(xù)錄放。不同之處在于放音時,遇到EOM標(biāo)志時,放音自動停止,產(chǎn)生中斷;錄音時,需要向器件發(fā)送STOP命令,寫入一個EOM標(biāo)志,結(jié)束錄音。
  放音時,每播放一行語音,產(chǎn)生一個RAC周期信號。每個RAC周期表示ISD存儲器操作進行了一行。該信號保持175ms的高電平,低電平為25ms。該端可以用于存儲器管理。ISD在播放和快進操作中檢測到EOM或者OVF標(biāo)志(表明ISD錄放操作已經(jīng)達(dá)到存儲器的末尾)時,都會產(chǎn)生中斷,變低并保持。中斷狀態(tài)在下一個SPI周期時清除,也就是說每播放完一個語音信息段,便會產(chǎn)生中斷。因此,RAC和配合,可以確定每個語音段的起始和結(jié)束地址。在硬件設(shè)計中,母片ISD4004的引腳接單片機的外部中斷" title="外部中斷">外部中斷INT0引腳,母片ISD404的RAC引腳接單片機的外部中斷INT1引腳,通過外部中斷INT0的中斷程序,判斷語音信息段的結(jié)束,通過外部中斷INT1的中斷程序,記錄播放的行數(shù)目(即行地址),那么下一個地址就是新的語音信息段的開始地址。這樣可通過中斷服務(wù)程序,獲取每個語音信息段的地址,然后建立地址索引表,記錄其起始地址。
2.1.2 各種子程序" title="子程序">子程序的設(shè)計
  為了便于編程,對ISD器件的操作都需要設(shè)計相應(yīng)的子程序。其中有:POWERUP(上電" title="上電">上電)、SETPLAY(從指定地址開始放音)、PLAY(從當(dāng)前地址開始放音)、SETREC(從指定地址開始錄音)、REC(從當(dāng)前地址開始錄音)、SETRMC(從指定地址開始快進)、MC(從當(dāng)前地址開始快進)、STOP(停止當(dāng)前操作)、STOPWRDN(停止當(dāng)前操作并掉電)、RINT(讀狀態(tài)OVF和EOM)。在實際應(yīng)用中,針對母片和子片都有相應(yīng)的子程序。根據(jù)器件的手冊,某些操作必需進行適當(dāng)?shù)难訒r。播放和錄音時,還應(yīng)遵守適當(dāng)?shù)牟僮鞔涡颉?BR>  (1) POWERUP
  上電操作時,要等待Tpud(上電延遲)后器件才能工作。因此,單片機發(fā)送完上電指令后,必須等待Tpud,才能發(fā)送其它的指令。對于ISD4004-8MP,Tpud=25ms。
  (2) STOP
  在放音或者錄音過程中停止當(dāng)前操作時,單片機發(fā)送完停止指令后,要等待Tstop后器件才能停止工作。對于ISD4004-8MP,Tstop=50ms。
  (3) 為了達(dá)到較好的放音和錄音質(zhì)量,錄音和放音時,建議采用下面的操作順序:
  放音時:①發(fā)送POWERUP命令;②等待Tpud;③從指定地址播放時發(fā)送SETPLAY命令,從當(dāng)前地址播放時發(fā)送PLAY命令;④結(jié)束放音時發(fā)送STOP命令或者等待播放操作檢測到EOM或者OVF時自動停止。⑤等待Tstop。
  錄音時:①發(fā)送POWERUP命令;②等待Tpud;③再次發(fā)送POWERUP命令;④等待2倍Tpud;⑤從指定地址錄音時發(fā)送SETREC命令;從當(dāng)前地址錄音時發(fā)送REC命令;⑥發(fā)送STOP命令,結(jié)束錄音;⑦等待Tstop。
2.1.3 拷貝程序的設(shè)計
  拷貝前,先把母片語音完全播放一遍,建立地址索引表。母片語音地址確定后,可以開始語音拷貝。通過相關(guān)子程序,從母片地址索引表中調(diào)入不同語音段的地址,開始播放,子片在相同的地址開始錄音。播放到一個語音段結(jié)束時,母片檢測到EOM標(biāo)志,放音結(jié)束,并產(chǎn)生中斷,單片機調(diào)用中斷程序,向子片發(fā)送STOP命令,寫入EOM標(biāo)志,表示語音結(jié)束。延時Tstop,跳出中斷后,記錄已經(jīng)錄制的語音數(shù)目,并調(diào)入下一條語音的地址,重復(fù)進行操作,直到地址表查詢完畢或者母片檢測到OVF標(biāo)志,表示全片放音結(jié)束,錄音結(jié)束。


2.2 硬件電路的設(shè)計
  系統(tǒng)硬件電路圖如圖1所示。主要由單片機AT89C51、電源轉(zhuǎn)換芯片MAX603、有關(guān)按鍵和跳線、兩片同型號ISD4004-8MP(一片為母片,一片為子片)和運放μA741等組成。硬件設(shè)計時,要注意以下幾個方面:
  (1)單片機引腳模擬SPI接口,編程時應(yīng)注意其時序。
  (2)母片INT和RAC引腳分別接單片機外部中斷INT0和INT1,應(yīng)有上拉電阻。
  (3)芯片采用+3V電源供電,放音時最大消耗電流為30mA,錄音時最大消耗電流為40mA,因此ISD芯片要有獨立的電源提供穩(wěn)定的供電。設(shè)計中采用MAX603電壓轉(zhuǎn)換芯片。
  (4)錄音時輸入信號既可采用單端輸入(信號接在同相模擬輸入端ANA IN+),也可采用差分輸入(信號同時接在同相模擬輸入端ANA IN+和反相模擬輸入端ANA IN-)。采用單端輸入時,輸入信號的峰峰值最大為32mV,此時器件輸出AUD OUT的峰峰值大約為450mV。為了擁有較好的音質(zhì),需要對母片的聲音輸出進行衰減,再通過去耦電容" title="去耦電容">去耦電容,接到子片的同相模擬輸入端ANAIN+。而反相模擬輸入端ANAIN-則通過去耦電容接地。兩個去耦電容大小值應(yīng)相同。
  (5)同型號芯片互相拷貝,應(yīng)使用ISD器件的內(nèi)部時鐘,即XCLK接地;采用音質(zhì)優(yōu)先模式,保障拷貝出的器件不會出現(xiàn)語速失真的情況。
  (6)為了使噪聲最小,器件的模擬電路和數(shù)字電路應(yīng)使用不同的電源總線,并且分別引到外封裝的不同引腳上,模擬電源和數(shù)字電源最好分別走線,盡可能在靠近電源處相連,去耦電容應(yīng)盡量靠近器件。器件內(nèi)部的模擬電路和數(shù)字電路也應(yīng)使用不同的地線。幾個Vssa盡量在引腳焊盤上相連,并且用低阻通路連到地線上,Vssd也用低阻通路連接到地線上。
3 系統(tǒng)測試
  拷貝完畢后,對錄制的子片進行測試。系統(tǒng)采用夾具設(shè)計,把母片和子片取出,把子片放在母片的位置,通過更改相應(yīng)的跳線,使系統(tǒng)工作在放音模式下。采用順序播放(即語音按照順序連續(xù)播放)方法,確認(rèn)錄入子片的全部語音信息。按地址播放(按照母片的地址索引表從子片的相應(yīng)地址逐條播放)方式,確認(rèn)子片語音信息地址和母片完全一致。通過測試,子片語音信息地址與母片完全一致,語音質(zhì)量接近于母片質(zhì)量,達(dá)到了較好的效果。
  經(jīng)測試,本系統(tǒng)適用于ISD4004系列的全部型號,只需要在程序中更改為各自型號的Tpud和Tstop即可。原則上,同型號和時間長度的ISD語音芯片都可以用本系統(tǒng)拷貝,但由于不同型號器件每行語音長度(即地址分辨率)不同,它們之間的拷貝可能會出現(xiàn)未知的問題。
4 部分程序
  下面是語音拷貝和播放的部分程序。
  …………
  ;偽定義
  SPI_SS1 EQU P1.0
  SPI_MOSI1 EQU P1.1
  SPI_MISO1 EQU P1.2
  SPI_SCLK1 EQU P1.3
  SPI_SS2 EQU P1.4
  SPI_MOSI2 EQU P1.5
  SPI_MISO2 EQU P1.6
  SPI_SCLK2 EQU P1.7
  ISD_STOP_KEY EQU P0.0
  ISD_EN_KEY EQU P0.1
  ISD_PR_KEY EQU P0.2

  …………
  ;初始化單片機
  LCALL INIT_MCU

  ;初始化母片ISD4004,延時Tpud
  ;ISD1_×× 為母片子程序
  LCALL ISD1_POWERUP
  LCALL DELAY_25MS

  ;初始化子片ISD4004,兩次上電
  ;ISD2_×× 為子片子程序
  LCALL ISD2_POWERUP
  LCALL DELAY_25MS
  LCALL ISD2_POWERUP
  LCALL DELAY_25MS
  LCALL DELAY_25MS

  ;主程序,判斷是否開始操作
  MAINLOOP:
  JB ISD_EN_KEY, MAINLOOP
  ;判斷播放還是拷貝
  JB ISD_PR_KEY, ISD_PLAY1
  JNB ISD_PR_KEY, ISD_COPY1

  ;置中斷標(biāo)志
  SETB FLG_ISD_INT

  ;拷貝程序
  ;從語音信息地址調(diào)用子程序ISD_ADDRESS_COPY,
  ;從索引表中調(diào)入地址
  ISD_COPY1:
  LCALL ISD_ADDRESS_COPY
  ;  從指定地址開始播放和錄音
  LCALL ISD1_SETPLAY
  LCALL ISD2_SETREC
  ;從當(dāng)前地址開始播放和錄音
  LCALL ISD1_PLAY
  LCALL ISD2_REC

  ;判斷是否手動結(jié)束拷貝操作
  ISD_COPY2:
  JNB ISD_STOP_KEY, ISD_COPY3
  ;判斷一段語音是否播放完畢,是否中斷處理完畢
  ;播放完畢重置中斷標(biāo)志
  JB FLG_ISD_INT, ISD_COPY2
  SETB FLG_ISD_INT
  ;延遲Tstop
  LCALL DELAY_25MS
  LCALL DELAY_25MS
  ;記錄拷貝個數(shù),×× 為需要拷貝的語音數(shù)目
  ;判斷是否拷貝完畢,未完則繼續(xù)拷貝
  INC COPY_CNTR
  MOV A, COPY_CNTR
  CJNE A, ××, ISD_COPY1

  ;拷貝結(jié)束,返回主程序
  ISD_COPY3:
  LCALL ISD1_STOP
  LCALL ISD2_STOP
  LJMP MAINLOOP

  ;播放程序,順序播放方式
  ;設(shè)置從地址00開始進行播放
  ISD_PLAY1:
  MOV ISD_ADRESS_H, #00H
  MOV ISD_ADRESS_L, #00H
  LCALL ISD1_SETPLAY
  ;開始播放
  ISD_PLAY2:
  LCALL ISD1_PLAY

  ;判斷是否手動結(jié)束播放
  ISD_PLAY3:
  JNB ISD_STOP_KEY, ISD_PLAY4
  ;判斷一段語音是否播放完畢,是否中斷處理完畢
  ;播放完畢重置中斷標(biāo)志
  JB FLG_ISD_INT, ISD_PLAY3
  SETB FLG_ISD_INT
  ;繼續(xù)播放
  JMP ISD_PLAY2

  ;播放結(jié)束
  ISD_PLAY4:
  LCALL ISD1_STOP
  LJMP MAINLOOP
  …………
  拷貝出的子片已經(jīng)應(yīng)用在排隊管理系統(tǒng)的語音部分。在實際使用中,子片完全可以替代母片,效果良好。本系統(tǒng)不但解決了ISD4004系列器件的語音錄制問題,而且復(fù)制出的器件地址完全一致,與傳統(tǒng)的錄制方法相比,有很大的優(yōu)勢。
參考文獻
1 ISD4004 Series Single-Chip Multiple-Messages Voice Record/Playback Devices 8-, 10-, 12-, and 16-Minute Duration. Winbond Electronics Corp., 2004
2 The ISD Chipcorder Product Line: Sizes, Row Lengths and Other Useful Drtails for Address Able ISD Products.Winbond Electronics Corp., 2000
3 劉 欣,安欣賞,劉大生,許鳴宇.ISD語音器件分段地址的獲取.電子技術(shù)應(yīng)用,1999;25(10):64~65

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。