L A B O R A T I O N S R A P P O R T Kurs: Klass: Datum: I ämnet Signalbehandling ISI019 Enk3 011211 Signalbehandling Röstigenkänning Jonas Lindström Martin Bergström INSTITUTIONEN I SKELLEFTEÅ Sida: 1 (9)
Inledning Syftet är att skapa ett program som kan skilja på orden; Hus Bus Bu Bi För att genomföra detta så behöver man kunna använda sig av Fourier Transformel. Information finns att hitta i Signaler och system 1 Sida: 2 (9)
Metoder Innan vi kom fram till en fungerande metod, analyserade vi inläst signal både i tids och frekvens planet då använde vi oss av STFT (Short Time Fourier Transform) för att jämföra det inspelade ordet med en redan transformerad referens, men denna övergav vi på grund av att det inte fungerade tillfredsställande. Vi provade även selekterande variant med STFT helt utan reperenser som fungerade ganska bra (se diskussion). För just dessa ord som innehåller i princip samma data med små skillnader, analyserade vi i stället bokstavsinnehållet i orden för att skilja dem åt. Detta kan man göra genom att i frekvensspektrat lokalisera bokstäver och visuellt urskilja dem. När man har lokaliserat de enskilda bokstäverna i frekvsplanet kan man ur den inlästa signalen bestämma om frekvenserna för dom finns med eller ej. Även amplituden för just den specifika bokstaven är viktig. Ett program skrivet i LabView skrevs för att analysera enskilda ords frekvenser och amplitudförhållande (Figur1). Ytterligare ett program användes, skrivet i LabView, för att utföra analysen av inläst ord. 2,7 0 Figur1 mono 22050 8 bit 0 16384 Fourier transformerad insignal Figur2 samt figur3 beskriver de viktigaste delarna i analysprogammet för att skilja orden åt mot det inlästa. (se nästa sida) Sida: 3 (9)
Figur2 Figur3 Sida: 4 (9)
Resultat Bokstavsanalysen (figur1): Bokstaven S kan finnas mellan 6625-8150 Hz och efter att läst in S med olika uttal ser man också att en tröskelnivå på ca 500 amplitudenheter (se figur2) är lämpligt för att indikera att bokstaven S finns med i ordet inläst. I återfinns vid ca 3210-3700 Hz och över 1300 Amplitudenheter U kan man urskilja tydligt och återfinns vid ca 1510-1760 Hz och över 3000 H och B finns inom samma frekvensområde, ca 60-300 Hz. Det som skiljer dem åt är amplitud förhållandet. H:s låga frekvenser har en högre amplitud än vad B har. I har en hög amplitud S kan lätt urskiljas i detta område bild1 Som synes har H högre amplitud på frekvenserna i det lägre området än B bild2 Sida: 5 (9)
Diskussion Bokstäverna som skiljer de enskilda orden åt med störst vikt är S och I. Men för att precisera ytterligare behöver man ytterligare en bokstav, vi valde att använda U Programmet fungerar så att den skiljer ut S, I och U ur den inlästa datat. Finns någon av dessa med så tänds olika flaggor, vars uppgift är att indikera att bokstaven finns med Risken är att man läser in med för hög röst, vilket resulterar i att alla flaggor tänds. Detta resulterar i så fall till att programmet tror att ordet inläst är bus, detta på grund av booleska villkor som bestämmer slutresultatet. Detta booleska system arbetar efter:?? Finns I med men inte U så är ordet BI. Släck också S-flaggan om den är tänd.?? Finns I, U och S med måste det antingen vara BUS eller HUS.?? Är inte S-flaggan och I-flaggan tänd är det BU som sades Problemet som återstår är då att skilja mellan hus och bus, detta gör man genom att kontrollera de låga frekvenserna i det inlästa ordet mot två referens filer (se figur3). Den som har minst resulterande differens av de referenserna är den som stämmer best överens med inläst ord. Men detta blir inte en riktigt bra lösning heller! En sak som man måste tänka på när man gör analysen på detta sätt är att inspelnings volymen måste vara den samma som när man skrev programmet, samt att man måste prata med en lika hög stämma som programmet är inställda till, detta beroende på tröskelnivåer för att tända de olika flaggorna. Alternativ metod (tid&frekvens-selektion) En annan metod vi provade var att STFT-transformera den inspelade signalen och behandla transformdatat så att unika frekvenser vid unika tidpunkter framträder väl. Vi började med att jämföra med transformerade referenser, men vi hittade inte något bra sätta att göra en träffsäker jämförelse. Sedan skippade vi referenserna och letade efter karaktäristiska drag hos de olika orden. Steg ett var att detektera ifall det inlästa ordet hade ett S-ljud på slutet. Det var det enklaste ljudet att detektera. Om ordet inte innehåller ett S-ljud skall det vara Bu eller Bi. För att skilja dom åt letade vi efter U bland medelhöga frekvenser ungefär i mitten av ordet. Om S -ljudet fanns där var vi tvungna att skilja på Bus och Hus. Det var det svåraste eftersom transformen kan se Sida: 6 (9)
ganska lika ut för B och H och timingen vid sampling kan skilja sig lite från gång till gång. Se bilder nedan. S -ljud Svårdetekterat B Hus Bus U -ljudet som saknas i ordet Bi Bu Bi Beskrivning av hur vi gjort för att skapa ett fingerprint för ett insamplat ord. 1. Sampling sker med 22.050 Hz under en sekund. 2. Den samplade signalen filtreras, frekvenskomponenter under 500 Hz och över 3675 Hz tas bort. 3. Ordets start detekteras mha. ett valt tröskelvärde. 4. 12.000 Sa från detekterad start klipps ut. 5. För att spara beräkningstid i STFT-modulen minskas antalet sampel till en tredjedel, mao. var tredje sampel behålls. f s sjunker då till 7350 Hz. 6. En STFT av detta ger en matris på 32*2001 värden. 7. För att minska dominansen av höga pikar i matrisen ersätts varje värde av dess fjärde rot. 8. Denna matris minskas ned genom sammanslagning av frekvensvärden (100 st. åt gången) vid samma tidpunkt. Resultatet är en 32*20 matris. Sida: 7 (9)
9. Arrayen normaliseras subtrahera varje värde med arrayens medelvärde så att summan blir noll. 10. Arrayen ersätts nu med binära indikatorer som säger om värdet för en viss position i arrayen är större eller mindre än noll. Talen 0 resp. 1 användes. 11. Ur detta kan man sedan väldigt grovt leta efter förekomsten efter vissa frekvenser (markeras av ettorna i arrayen) vid vissa tidpunkter. Se bild 3. Ovanstående förfarande är lite ovetenskapligt utformat och baserar sig på vad som vid försök visat sig vara lämpligt för att kunna skilja på orden Hus, Bus, Bu och Bi vilket var målet för denna laboration. f Bild 3 t Sida: 8 (9)
Slutsats Att filtrera ut enskilda bokstäver och jämföra dem mot referens ord är ett sätt att genomföra en röstanalys. Men det medför som i detta fall, att programmet funkar enbart med de ord som vi genomförde analys på. Ett bättre sätt att analysera röster är i tidsplanet, samt medräknad frekvensintensitet. Men det medför svårigheter att lägga inspelat ord rätt i tiden mot referenserna. Referenser 1. Signaler och system, Anders Svärdström, Studentlitteratur 1999 (ISBN 91-44-00811-2) Sida: 9 (9)