Ett projekt i Signaler och system

Relevanta dokument
Bildbehandling i frekvensdomänen

Faltningsreverb i realtidsimplementering

Analys/syntes-kodning

2 Laborationsutrustning

Signalbehandling Röstigenkänning

Tillämpning av komplext kommunikationssystem i MATLAB

Projekt 2 (P2) Problembeskrivning och uppdragsspecifikation

Teori... SME118 - Mätteknik & Signalbehandling SME118. Johan Carlson 2. Teori... Dagens meny

Digital Signalbehandling i Audio/Video

När man vill definiera en matris i MATLAB kan man skriva på flera olika sätt.

Vocoding och frekvensskiftningsexperiment inom det audiologiska forskningsfältet Av Morgan Karlsson

Digital signalbehandling Digitalt Ljud

Laboration i Fourieroptik

Fouriermetoder MVE295 - bonusuppgifter

AD-DA-omvandlare. Mätteknik. Ville Jalkanen. 1

7. Sampling och rekonstruktion av signaler

Numerisk lösning till den tidsberoende Schrödingerekvationen.

Sundberg: Kap 4 Artikulation

Signalanalys med snabb Fouriertransform

MMA132: Laboration 2 Matriser i MATLAB

Sammanfattning TSBB16

Laboration i Fourieranalys, TMA132 Signalanalys med snabb Fouriertransform

Laboration i Fourieroptik

42.MST 1/D (E )

TSKS21 Signaler, Information och Bilder Lab 2: Digitalisering

A/D D/A omvandling. Lars Wallman. Lunds Universitet / LTH / Institutionen för Mätteknik och Industriell Elektroteknik

Ulrik Söderström 20 Jan Signaler & Signalanalys

Spektrala Transformer

Ulrik Söderström 19 Jan Signalanalys

Frekvensplanet och Bode-diagram. Frekvensanalys

Tentamen i ESS 010 Signaler och System E3 V-sektionen, 16 augusti 2005, kl

Projekt 3: Diskret fouriertransform

Uppföljning av material inom barnhälsovården Leva med barn och Små och stora steg tillsammans Hanna Lunding, folkhälsoenheten

RUT - utvecklingshandbok 17.6 Verktyg för gruppkommunikation v1.0

Laboration i tidsdiskreta system

En generell prediktiv kodare utnyttjar signalens utseende N steg tillbaka i tiden för kodningen, dvs vi kodar efter den betingade fördelningen

Linjär prediktion. Prediktiv kodning. Linjär prediktion. Prediktiv kodare och avkodare

LiTH Lab1: Asynkron seriell dataöverföring via optisk länk Laboration 1. Asynkron seriell dataöverföring via optisk länk

RemoteBud. Inlämnas: Patrik Johnsson, e01pjo Viktor Karlsson, e01vk

Lab 1 Analog modulation

SYSTEM. Tillämpad Fysik Och Elektronik 1 SYSTEMEGENSKAPER. Minne Kausalitet Tidsinvarians. Linjäritet Inverterbarhet Stabilitet. System.

Tentamen i TMA 982 Linjära System och Transformer VV-salar, 27 aug 2013, kl

Bildbehandling i frekvensdomänen. Erik Vidholm

Flerdimensionell signalbehandling SMS022

LABORATIONSINSTRUKTION DIGITAL REGLERTEKNIK. Lab nr. 3 DIGITAL PI-REGLERING AV FÖRSTA ORDNINGENS PROCESS

Psykoakustik. Ljudtrycksnivå. Hörselns omfång. Hörnivå(loudness) Människans hörsel är ganska väl studerad och det finns bra modeller för den.

Introduktion till CUBASIS VST v Patrik Eriksson 2002

TANA17 Matematiska beräkningar med Matlab

Förmodligen är vi ganska många som

Csound. Csound exempel

Föreläsning 9, Bestämning av tidsdiksreta överföringsfunktioner

TEM Projekt Transformmetoder

Tillämpad digital signalbehandling Laboration 1 Signalbehandling i Matlab och LabVIEW

KURSPLAN I MUSIK OM SKOLAN STYRDOKUMENT

Lab lanserade R.A. Moog Inc. en ny synt: Minimoog. Den var designad av Bill Hemsath och Robert Moog och kom att revolutionera musikhistorien.

ENKEL Programmering 3

Kod: Datum Kursansvarig Susanne Köbler. Tillåtna hjälpmedel. Miniräknare Linjal Språklexikon vid behov

Laboration i datateknik

F5 Introduktion till digitalteknik

Laboration Fuzzy Logic

Föreläsning 10, Egenskaper hos tidsdiskreta system

Aalto-Universitetet Högskolan för ingenjörsvetenskaper. KON-C3004 Maskin- och byggnadsteknikens laboratoriearbeten DOPPLEREFFEKTEN.

Rapport Digitala Projekt EITF11 Grupp 4 Axel Sundberg, Jakob Wennerström Gille Handledare: Bertil Lindvall

Adobe Acrobat Connect Pro. E-möte. Studenthandledning

Vad är spektralanalys? Spektralanalys. Frekvensinnehåll. Enkelt exempel

Projekt 1 (P1) Problembeskrivning och uppdragsspecifikation

Introduktion till användning av PicoLog TC-08

Flerdimensionella signaler och system

Systemskiss. Redaktör: Anders Toverland Version 1.0. Status. LiTH Fordonssimulator. Granskad Godkänd. TSRT71 Anders Toverland

Laboration i Fourieranalys för F2, TM2, Kf2 2011/12 Signalanalys med snabb Fouriertransform (FFT)

SIMULINK. En kort introduktion till. Polplacerad regulator sid 8 Appendix Symboler/block sid 10. Institutionen för Tillämpad Fysik och elektronik

4/27/12. Fönstring i MDCT. Föreläsning 10: Ljudkodning ( Audio Coding ) 1. Inledning PCM, standardmetoder, MDCT, psykoakustik, ljudtryck

Vardagssituationer och algebraiska formler

Vad är Google Hangouts?

Överföringsfunktioner, blockscheman och analys av reglersystem

Algoritm för uppskattning av den maximala effekten i eldistributionsnät med avseende på Nätnyttomodellens sammanlagringsfunktion

Språkljudens akustik. Akustik, akustiska elementa och talanalys

Spektrala Transformer

Datorövning 1: Fördelningar

1 Försnack och ordlista

GRUNDKURS I SIGNALBEHANDLING (454300), 5sp Tentamen

LexCom Home Certifieringsutbildning

DIGITAL KOMMUNIKATION

Källa: Kunskapsträdet - Fysik

Operationsfo rsta rkarens parametrar

Föreläsning 11 Reglerteknik AK

Tanka program KAPITEL 7. Shareware och freeware. Shareware. Freeware

Utskrift av inspelat samtal hos Arbetsförmedlingen

Lab 4: Digital transmission Redigerad av Niclas Wadströmer. Mål. Uppstart. Genomförande. TSEI67 Telekommunikation

CDC en jämförelse mellan superskalära processorer. EDT621 Campus Helsingborg av: Marcus Karlsson IDA

Tentamen ssy080 Transformer, Signaler och System, D3

Föreläsning 11. Reglerteknik AK. c Bo Wahlberg. 8 oktober Avdelningen för reglerteknik Skolan för elektro- och systemteknik

F5 Introduktion till digitalteknik

Övervakningssystem. -skillnader i bilder. Uppsala Universitet Signaler och System ht Lärare: Mathias Johansson

Reglerteknik M3. Inlämningsuppgift 3. Lp II, Namn:... Personnr:... Namn:... Personnr:...

Föreläsning 8, Introduktion till tidsdiskret reglering, Z-transfomer, Överföringsfunktioner

Laboration i Fourieranalys för F2, TM2, Kf2 2013/14 Signalanalys med snabb Fouriertransform (FFT)

TUTORIAL 3: ATT STARTA ETT NYTT PROJEKT, IMPORTERA ELLER DIGITALISERA MATERIAL, SAMT SORTERA DET.

Ljudteknikern.se - din ljudtekniker på nätet

Systemskiss. LiTH. Autopositioneringssystem för utlagda undervattenssensorer Erik Andersson Version 1.0. Status

Transkript:

Ett projekt i Signaler och system Handledare: Mathias Johansson Grupp: IT3 Datum: 2002-12-10 Sammanfattning En vocoder är en ljudeffekt som ofta används för att göra om en människoröst till en robotröst. I detta projekt har en sådan implementerats i MATLAB med gott resultat. Två försök gjordes även att tillverka en realtidsvocoder, dels på en hårdvaru-dsp, och även i MATLAB-verktygslådan Simulink. Inget av dessa slutfördes pga. diverse begränsningar. Erik Andersson 811001-1437 Jonas Jämtberg 800705-7550 Mattias Seeman 770429-0076 Mathias Thore 810830-8597

INTRODUKTION 3 BAKGRUND 3 PROBLEMFORMULERING 3 PROJEKTETS MÅL 3 VAD EN VOCODER VERKAR GÖRA 3 VAD VOCODERN VERKLIGEN GÖR 3 LÖSNING 4 REALTID 8 RESULTAT 8 SLUTSATSER 8 VAD KAN MAN GÖRA MER 8 REFERENSER 8 APPENDIX 9 VOCODE.M 9 MAKE_FORMANT.M 9 WINDOW.M 9 OVERLAP25.M 10 FADE_ENDS.M 10 Sid. 2

Introduktion En vocoder är en ljudeffekt, som tar en mänsklig röst som input. I vocodern behandlas rösten, för att på andra sidan komma ut i en mera robotliknande version. Det gamla syntbandet Kraftwerk använde denna effekt flitigt i väldigt många av sina låtar (t.ex. Autobahn, die Roboter osv.). Många musiker än idag fortsätter av olika anledningar att använda vocoder, kanske mest för att det låter tufft. Bakgrund En människoröst består av två delar; en bärvåg och en formant. Stämbanden genererar en bärvåg vars utseende är mer eller mindre konstant medan man pratar, så när som på tonhöjd. Formanten å andra sidan beskriver hur man med hjälp av sina talorgan dämpar eller framhäver vissa frekvenser i bärvågen, för att få fram olika ljud. Tekniken utvecklades från början för att komprimera tal genom att minska signalens bandbredd dramatiskt och används idag flitigt inom t. ex. GSM. Problemformulering Projektets mål Målet med projektet är att framställa en enkel vocoder. Förutsättningen är att det förmodligen går i Matlab, eftersom det tydligen ska finnas en del funktioner där som skulle vara till nytta. Ännu häftigare vore förstås att bygga en realtidsvocoder i hårdvara. Det finns även realtidsvocoders i form av dataprogram, men det kanske är ett svårt mål att uppnå i ett så här litet projekt. Vad en vocoder verkar göra Vocoderns jobb är att använda röstformanten för att modulera en annan bärvåg. Genom denna operation uppstår ett robotliknande tal. Vocodern tar alltså två insignaler. Dels en röstsignal, och dels en bärvåg som ska moduleras. Hur vocodern till sist låter beror alltså naturligtvis på hur den är byggd, men också på vilken bärvåg som skickas in. Vad vocodern verkligen gör Röstsignalen delas upp i frekvensband (16 64 stycken verkar lämpligt) ur vilka den momentana formanten bestäms genom att ett medelvärde filter används på varje band. Bärvågen delas upp i lika många frekvensband som röstsignalen, och moduleras sedan med var sin del av formanten, för att slutligen mixas samman. Sid. 3

Lösning Det första som gjordes i MATLAB var att implementera en generell vocoderalgoritm. Inom gruppen fanns det nämligen två falanger, varav den ena ville använda fönstring, medan den andra inte var säker på att detta behövdes. Därför skrevs vocodern så pass allmän att fönstring enkelt skulle kunna implementeras senare om så behövdes. (se vocode.m) Formanten togs fram genom att FFT:n av röstsamplen, programmet, beräknades. Se figur 1. Figur 1. Sid. 4

Därefter togs ett medelvärde för varje band fram. Ursprungsdata i hela bandet i formantmatrisen ersattes med detta medelvärde. På så vis ficks en diskretiserad, förenklad formant fram. Se figur 2. (se make_formant.m) Figur 2. Sid. 5

Sedan fouriertransformerades även bärvågen, varefter de två transformerna multiplicerades ihop elementvis. Det färdiga resultatet ficks sedan fram genom att inversfouriertransformera produkten. Även om detta kanske fungerar i teorin, hördes inga välljudande resultat i hörlurarna. Enkel fönstringskod skrevs för att prova om det var där felet låg. (se window.m). Denna funktion delar upp ljudfilerna i fönster, som sedan vocodas var för sig. Genom detta kom vocodern att låta som just en vocoder. Det var dock inte ett fullständigt tillfredsställande ljud; i skarvarna mellan fönstren uppstod höga missljud på grund av diskontinuiteter. Se figur 3, där en skarv tydligt syns vid sampel 2048. Figur 3. Sid. 6

Detta dög inte. Lösningar söktes i litteratur och på Internet, men inget konkret användbart kunde hittas. Lösningen visade sig vara att använda överlappande fönster, där överlappet tonades ut linjärt och mixades ihop additivt med nästföljande fönsters intonade överlapp. (se overlap25.m, fade_ends.m och figur 4). Detta gav tillräckligt välljudande resultat, och vocodern var färdig. Figur 4. Sid. 7

Realtid När väl offline-vocodern var implementerad i MATLAB och fungerade tillfredställande inleddes nästa fas av projektet; att implementera en fungerande realtidsvocoder. Det första fruktlösa försöket gjordes med ett DSP-kort från Texas Instruments. Uppgiften dog i sin linda då inlärningströskeln för kodning av kortet visade sig vara alltför hög i relation till projektets tidsram. Nästa idé till realtidsvocoder var att implementera den i MATLABs Simulink, ett ramverk för realtidsimulering. Verktyget är kraftfullt men tidsramen tillät oss inte att fullt ut utforska möjligheterna att slutföra fasen. Resultat Tyvärr resulterade projektet inte i någon fungerande realtidsvocoder men den framställda offlineversionen gav över förväntan välljudande resultat. Slutsatser Vi har hittat ett fint sätt att modifiera samplingar och för att skapa jättehäftiga ljud. Med en större tidsram hade en hårdvarubaserad version förmodligen kunnat byggas ihop. Vad kan man göra mer För att få till fina effekter i en vocoder kan man som sagt prova med olika bärvågor. Men man kan även mixtra med formanten på olika sätt. Exempelvis kan fler/färre frekvensband användas eller formanten blandas om, inverteras osv. Vocodern kan även fås att sjunga genom att ändra bärvågens tonhöjd under pågående vocodning. Referenser http://www.sirlab.de/linux/descr_vocoder.html Sid. 8

Appendix vocode.m function x = vocode(formant,carrier,bands) s = min(max(size(formant)), max(size(carrier))); f = fft(formant); c = fft(carrier); f = make_formant(f,bands,s)'; %c = real(c).* abs(f) + i*imag(c).*abs(f); c = c.* f; x = real(ifft(c)); make_formant.m function x = make_formant(formant,dbands,total_freqs) dbands = dbands * 2; freqs_per_band = total_freqs / dbands; x = zeros(1,total_freqs); for i = 1:freqs_per_band:total_freqs, x(i:i+freqs_per_band-1) = mean(formant(i:i+freqs_per_band-1)); end window.m function g = window(formant, carrier, no_bands, samples_per_window) s = size(formant); s = s(1); rest = mod(s, samples_per_window); g(s) = 0; for i = 1:samples_per_window:s-rest, g(i:i+samples_per_window - 1) = vocode(formant(i:i+samples_per_window - 1), carrier(i:i+samples_per_window - 1), no_bands); end Sid. 9

overlap25.m function g = overlap25(formant, carrier, no_bands, samples_per_window) s = min(max(size(formant)), max(size(carrier))); rest = mod(s, samples_per_window); qwin = samples_per_window / 4; g(s+qwin) = 0; %samples_per_window for i = qwin+1:samples_per_window:s-rest-4 * qwin, end w = samples_per_window +qwin 1; win = vocode(formant(i-qwin:i+w), carrier(i-qwin:i+w), no_bands); win=fade_ends(win); g(i-qwin:i+w) = g(i-qwin:i+w) + win(1:samples_per_window*1.5); g = g / max(abs(g)); fade_ends.m function amp = fade_ends(x) len = max(size(x)); qlen = len / 4; amp = ones(1,len); amp(1:qlen) = [0:qlen-1]/qlen; amp(3*qlen+1:len) = 1 - [0:qlen-1]/qlen; amp = amp.* x'; Sid. 10