Spektrala transformer Laboration: Vokalsyntes

Relevanta dokument
Spektrala transformer Laboration: Vokalsyntes

Laboration i tidsdiskreta system

DT1130 Spektrala transformer Tentamen

DT1130 Spektrala transformer Tentamen

DT1130 Spektrala transformer Tentamen

DT1120/DT1130 Spektrala transformer Tentamen

DIGITALA FILTER. Tillämpad Fysik Och Elektronik 1. Frekvensfunktioner FREKVENSSVAR FÖR ETT TIDSDISKRET SYSTEM. x(n)= Asin(Ωn)

Spektrala transformer Laboration: DTMF-detektor

DT1130 Spektrala transformer Tentamen

2F1120 Spektrala transformer för Media Tentamen

Spektrala Transformer

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

Digital Signalbehandling i Audio/Video

REGLERTEKNIK Laboration 5

Signalanalys med snabb Fouriertransform

Laboration i Fourieranalys, TMA132 Signalanalys med snabb Fouriertransform

Reglerteknik AK. Tentamen 24 oktober 2016 kl 8-13

Resttentamen i Signaler och System Måndagen den 11.januari 2010, kl 14-19

Spektrala transformer Laboration: JPEG-kodning

REGLERTEKNIK Laboration 4

Analys/syntes-kodning

Faltningsreverb i realtidsimplementering

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

System. Z-transformen. Staffan Grundberg. 8 februari 2016

Laborationsprojekt i digital ljudsyntes

Övningar med Digitala Filter med exempel på konstruktion och analys i MatLab

TSBB16 Datorövning A Samplade signaler Faltning

Introduktion Digitala filter. Filter. Staffan Grundberg. 12 maj 2016

Kompletterande räkneuppgifter i Spektrala Transformer Komplex analys, sampling, kvantisering, serier och filter Laura Enflo & Giampiero Salvi

MODELLERING AV DYNAMISKA SYSTEM OCH INLUPP 2

Talets akustik repetition

DIGITALA FILTER DIGITALA FILTER. Tillämpad Fysik Och Elektronik 1

KÄLLA-FILTER. Repetition. Talapparaten i källa-filter perspektivet. Repetition (ff) Ljudkällor i talapparaten (ff) Ljudkällor i talapparaten

TSDT15 Signaler och System

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

MODELLERING AV DYNAMISKA SYSTEM OCH INLUPP 2

RÄKNEEXEMPEL FÖRELÄSNINGAR Signaler&System del 2

DT1120 Spektrala transformer för Media Tentamen

Miniräknare, formelsamling i signalbehandling.

Tillämpning av komplext kommunikationssystem i MATLAB

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

Spektrala Transformer

Spektrogram att göra ljud synligt

Laplace, Fourier och resten varför alla dessa transformer?

Föreläsning 10, Egenskaper hos tidsdiskreta system

Grundläggande signalbehandling

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

Flerdimensionell signalbehandling SMS022

Flerdimensionella signaler och system

Tentamen ssy080 Transformer, Signaler och System, D3

Liten MATLAB introduktion

TSKS21 Signaler, Information och Bilder Lab 2: Digitalisering

Språkljudens akustik. Akustik, akustiska elementa och talanalys

Lab skapades Ove (Orator Verbis Electris) av Gunnar Fant, KTH.

Spektrala transformer Laboration: JPEG-kodning

GRUNDKURS I SIGNALBEHANDLING (454300), 5sp Tentamen

1. Vi har givet två impulssvar enligt nedan (pilen under sekvenserna indikerar den position där n=0) h 1 (n) = [ ]

Projekt 3: Diskret fouriertransform

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

Laboration 3 Sampling, samplingsteoremet och frekvensanalys

Exempelsamling Grundläggande systemmodeller. Klas Nordberg Computer Vision Laboratory Department of Electrical Engineering Linköping University

Lab 1 Analog modulation

Laplace, Fourier och resten varför alla dessa transformer?

Signalbehandling Röstigenkänning

Digital signalbehandling Digitalt Ljud

Tentamen i Signaler och kommunikation, ETT080

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

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

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

TAIU07 Matematiska beräkningar med Matlab

Signal- och bildbehandling TSBB03

LUNDS TEKNISKA HÖGSKOLA Institutionen för Elektro- och Informationsteknik

Exempelsamling Grundläggande systemmodeller. Klas Nordberg Computer Vision Laboratory Department of Electrical Engineering Linköping University

Laboration 1 - Simplexmetoden och Modellformulering

Digitala filter. FIR Finit Impulse Response. Digitala filter. Digitala filter. Digitala filter

Impulssvaret Betecknas h(t) respektive h(n). Impulssvaret beskriver hur ett system reagerar

Spektrala Transformer

( ), så kan du lika gärna skriva H ( ω )! ( ) eftersom boken går igenom laplacetransformen före

G(s) = 5s + 1 s(10s + 1)

Tentamen ssy080 Transformer, Signaler och System, D3

Tentamen i Styr- och Reglerteknik, för U3 och EI2

Digital signalbehandling Kamfilter och frekvenssamplande filter

LUNDS TEKNISKA HÖGSKOLA Inst. for Elektro- och Informationsteknik. SIGNALBEHANDLING I MULTIMEDIA, ETI265 Inlämningsuppgift 1 (av 2), Task 1 (out of 2)

REGLERTEKNIK KTH. REGLERTEKNIK AK EL1000/EL1110/EL1120 Tentamen , kl

Exercises Matlab/simulink V

1. Ange samtliga uppsättningar av heltal x, y, z som uppfyller båda ekvationerna. x + 2y + 24z = 13 och x 11y + 17z = 8.

Vektorgeometri för gymnasister

Föreläsning 11, Dimensionering av tidsdiskreta regulatorer

Hambley avsnitt

3D- LJUD. Binaural syntes med hjälp av HRTF- filter och duplexteorin. DT1174 Ljud som informationsbärare Sandra Liljeqvist

Signalbehandling, förstärkare och filter F9, MF1016

A

FÖRELÄSNING 13: Analoga o p. 1 Digitala filter. Kausalitet. Stabilitet. Ex) på användning av analoga p. 2 filter = tidskontinuerliga filter

Laboration 4: Stora talens lag, Centrala gränsvärdessatsen och enkla punktskattningar

Stabilitetsanalys och reglering av olinjära system

Hambley avsnitt

Datorövning 2 Matlab/Simulink. Styr- och Reglerteknik för U3/EI2

Optimal Signalbehandling Datorövning 1 och 2

ERE 102 Reglerteknik D Tentamen

Transkript:

Spektrala transformer Laboration: Vokalsyntes 1 Introduktion I denna laboration är målsättningen att du ska få handgripliga erfartenterer av digital filtrering. Du ska implementera en enkel men användbar typ av återkopplat filter - tvåpolsresonator, och använda den för att simulera mänskligt tal. 2 En modell av vokalproduktion Produktion av vokalljud i mänskligt tal kan grovt sett beskrivas så här: luft pressas ur lungorna mellan stämbanden, vilket ger upphov till ljudpulser, som fortplantas genom talröret (strupen, munhålan, näshålan, etc). Talröret formar ljudet olika beroende på form och läge hos tunga, käke, läppar mm, och producerar den slutliga ljudsignalen. Stämbanden kan därför ses som en ljudkälla, och talröret som ett filter. Denna populära beskrivningsmodell kallas källa-filter-modellen och den ska du tillämpa i denna laboration. Det filter som talröret utgör har en komplicerad överföringsfunktion, som innehåller ett antal resonansfrekvenser som kallas formanter. För vokaler kan filtret effektivt appoximras med ett antal tvåpolsresonatorer som parallellkopplas, där varje formant motsvaras av en resonator. Vanligtvis räcker det med att modellera de fyra första formanterna, vars centrumfrekvenser brukar betecknas F 1, F 2, F 3 och F 4, med tillhörande bandbredder B 1, B 2, B 3 och B 4 3 Utförande Du ska utföra ett antal uppgifter med hjälp av Matlab, och svara på de frågor som ställs i peket. Laborationen utföres självständigt, antingen enskilt eller i grupp om två. Börja med att hämta lab-reson.zip från kurshemsidan. Denna fil innehåller några hjälpfunktioner och andra filer som du kommer att behöva. Packa upp arkivet i din hemkatalog och använd detta som working directory i matlab. I matlabkoden i peket betecknas alltid arrayer och matriser med versaler, medan skalärer betecknas med gemener. Vidare används genomgående konventionen att skriva all kod med skrivmaskinsstil. Den kod som efterfrågas (och ska redovisas) ska oftast vara i form av matlabfunktioner. Ofta beskrivs även hur du kan testa att funktionen gör vad den ska. Du gör klokt i att skriva dessa tester i m-filer (behöver ej vara funktioner) för att göra själva testandet rationellt och konsekvent. Var noga med att dokumentera vad du gör och spara kod, plottar, bilder, ljudfiler och vad det kan vara till redovisningstillfället, då du ska redogöra för hur du kommit fram till dina resultat. 1 (6)

3.1 Tvåpolsresonatorn En tvåplolsresonator är en enkel typ av återkopplat filter som beskrivs av överföringsfunktionen H(z) = 1 (1 Re jθ z 1 )(1 Re jθ z 1 ) som har två poler i det komplexa planet på avståndet R från origo, och med vinklarna ±θ. (Dessutom har den två nollställen i origo, men dessa påverkar inte frekvenssvaret.) Tvåpolsresonatorn har ett frekvenssvar som består av en topp, vars läge i frekvensled bestäms av polvinkeln θ, och toppens spetsighet bestäms av polradien R (ju närmare R är 1, desto spetsigare topp). Impulssvaret hos en tvåpolsresonator kan beskrivas som en dämpad svängning, där graden av dämpning bestäms av R - ju mindre R desto mera dämpning får man. Specialfallet när R = 1, dvs polerna ligger på enhetscirkeln, ger en helt odämpad svängning dvs en oscillator. R > 1 ger ett instabilt filter. I denna laboration vill vi styra resonatorn i termer av resonansfrekvens f och bandbredd ψ. Polernas parametrar R och θ kan approximativt bestämmas ur frekvensen f och bandbredden ψ enligt följande 1 : R 1 ψ/2 θ 2πf där f och ψ är resonansfrekvens resp. bandbredd som fraktion av samplingsfrekvensen, dvs f = 0.5 motsvarar nykvistfrekvensen. Förberedelseuppgift (utan matlab) Skriv om uttrycket för överförinsfunktionen H(z) ovan på formen H(z) = b 0 a 0 + a 1 z 1 + a 2 z 2 och bestäm koefficienterna a k uttryckt i frekvens f och bandbredd ψ. Studerar man H(z) ser man att täljarens enda koefficient b 0 kommer att tjäna som någon sorts global förstärkningsfaktor. Detta är speciellt viktigt om resonansfrekvensen ska vara variabel, är det ofta önskvärt att filtrets totala förstärkning är oberoende av resonansfrekvensen. Vi kan låta b 0 ta hand om detta åt oss, genom att välja den så att filtrets förstärkning vid resonansfrekvensen alltid är ett. Detta fås då b 0 = (1 R 2 )sin θ Verifiera gärna att det stämmer med egna uträkningar! Uppgift 1: statiska vokaler I den första uppgiften ska du använda det inbyggda matlabkommandot filter för att skapa ett statiskt tvåpolsfilter enligt ovanstående överföringsfunktion. Som inparametrar till filter 1 dessa approximationer gäller när R 1, dvs för relativt skarpa resonanser, vilket kan antas i denna laboration 2 (6)

Magnitude (db) 40 20 0 5.5 5 4.5 4 Phase (degrees) 20 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Normalized Frequency ( π rad/sample) 50 0 50 100 3.5 3 2.5 2 1.5 1 150 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Normalized Frequency ( π rad/sample) 0.5 0 10 20 30 40 50 60 70 80 90 100 Figur 1. Frekvenssvar och impulssvar för tvåpolsresonatorn då f = 0.1 och b = 0.05. anger man två vektorer B och A som innehåller koefficienterna b 0,b 1,... resp. a 0,a 1,..., samt en vektor X - indatasekvensen som ska filtreras. För mer info, se help filter. Innan du ger dig på att göra vokalljud är det bra att verifiera att filtret gör vad det ska. Ett bra sätt att göra detta är att plotta frekvenssvar och impulssvar för filtret. Frekvenssvaret får du med kommandot freqz(b,a). Impulssvaret fås genom att mata in en impuls (se tipsruta nedan). I figur 1 kan du se hur dessa plottar bör se ut för f = 0.1 och b = 0.05. Pröva även med andra värden på f och ψ tills du förstår hur saker hänger ihop. Med hjälp av ditt tvåpolsfilter ska nu syntetisera några statiska vokaler. Använd två parallellkopplade filter för att simulera de två första formanterna F1 och F2. I tabell 1 finner du typvärden på formantfrekvenserna för de Svenska vokalerna. Som källfunktion (dvs stämband ) kan du använda ljudfilen source.wav. Läs in filen med kommandot [X,fs] = wavread( source.wav ) och filtrera med frekvenser ur tabellen, för några olika vokaler som du väljer. Bandbredden kan du sätta till 50 Hz. Lyssna, och spara ljuden till fil och titta gärna på spektrum i exempelvis WaveSurfer 2. Notera att frekvenser och bandbredder naturligtvis måste räknas om till normerad frekvens, dvs delas med samplingsfrekvensen. Matlab-tips En insignal med en impuls skapas enkelt med X = [1 zeros(1,n-1)] där n är önskad sekvenslängd. För plottningen kan det vara bra att även skapa en vektor med tidsvärden: T = 0:n-1 då kan du plotta insignal och utsignal i samma figur med plot(t,x, o-,t,y, *- ) Matlab-tips För att läsa in en ljudfil som en vektor använder du funktionen wavread(). 2 Laddas hem från www.speech.kth.se/wavesurfer 3 (6)

Tabell 1. Formantfrekvenser i Hz för Svenska vokaler (efter Fant) Vokal exempel F 1 F 2 F 3 F 4 O: rot 300 600 2350 3250 O rott 350 700 2600 3200 Å: rå 400 700 2450 3250 Å rått 500 850 2550 3250 A: bar 600 950 2550 3300 A barr 750 1250 2500 3350 I: bil 250 2200 3150 3750 I Bill 350 2150 2750 3500 E: deg 350 2250 2850 3550 E/Ä vägg 500 1900 2550 3350 Ä3 herr 650 1700 2500 3450 Y: ny 250 2050 2700 3300 Y nytt 300 2000 2400 3250 Ö: föd 400 1750 2300 3350 Ö född 550 1550 2450 3300 Ö3 för 550 1150 2450 3250 U: duk 300 1650 2250 2250 U puck 450 1050 2300 3300 För att lyssna på en matlab-vektorn Y som ett ljud med samplingsfrekvensen 16000 Hz kan du använda kommandot soundsc(y,16000) För att skriva samma ljud som en wave-fil använder du wavwrite(y,16000, mitt_ljud.wav ) 3.2 Tidsvariabelt filter I talsignalen (och i alla andra någorlunda intressanta ljud) så varierar frekvesninehållet kontinuerligt över tiden. Detta innebär att om man ska modellera tal med ett filter, måste filterparametrarna kunna variera. Problemet i detta fall är att matlabs filter inte tillåter variabla filterkoefficienter, så vill man göra detta måste man antingen filtrera små bitar (typ 10 millisekunder) åt gången, eller så får man göra sin egen filterfunktion. Det senare är mer lärorikt och inte alls så svårt som det kanske låter. Uppgift 2: en tidsvariabel resonator Skriv en funktion som implementerar en tidsvariabel tvåpolsresonator - ett formantfilter. Funktionen ska följa nedanstående prototyp (dvs ha samma in/utparametrar): function Y = formantfilter(f,bw,x) % % formantfilter - time-varying two-pole resonator filter % % input: 4 (6)

% F (1xN row vector) - Time-varying resonance frequency (normalized by fs) % BW (real number) - Constant bandwidth (normalized by fs) % X (1xN row vector) - Input sequence % output: % Y (1xN row vector) - Output sequence Funktionen ska alltså ta en insekvens x(n) och filtrera den enligt filterekvationen y(n) = b 0 x(n) a 1 y(n 1) a 2 y(n 2) där b 0 och a n är desamma som de du fick fram i förberedelseuppgiften. Den viktiga skillnaden nu är att de ändras hela tiden, eftersom de beror av F som är en vektor av samma längd som X. Bandbredden kan vara konstant i denna laboration. tips: denna uppgift löses bäst med en for-slinga (se help for) - något som man annars ofta kan klara sig utan i matlab om man använder matriser på bra sätt. Om du vill testa funktionen kan du filtrera en brussignal med ett filtersvep låt f svepa från 0 till 0.5, t.ex. F = (1:8000)/16000;. En brussignal av samma storlek som F skapar du enkelt med N=rand(size(F));. Sätt bandbredden till 0.05. Lyssna på ljudet - det ska låta som någon sorts swooosch... Ett spektrogram över ljudet bör visa ett tydligt diagonalt stigande band. Att redovisa: m-fil. 3.3 En syntesapparat för vokaler Sista steget i laborationen är att syntetisera vokalsekvenser med hjälp av den nya resonatorn. Varje formant modelleras som en tvåpolsresonator med två formanter får man en hygglig approximation av överföringsfunktionen hos talröret. Resonatorerna parallellkopplas, precis som i första uppgiften. I naturligt tal så ändras talröret - och därmed formanterna - kontinuerligt, dvs de glider mellan olika vokaler. Frekvenserna i tabell 1 är en sorts riktvärden för normaltal, men i praktiken handlar det om et kontinuum (ofta refereat till som vokalrymden). När du syntetiserar vokalsekvenser i sista upgiften ska du ange vokalsekvensen med hjälp av riktvärdena, och sedan interpolera mellan dessa för att skapa kontinuerliga vokalövergångar. Uppgift 3: sammansättning Skriv ett program som syntetiserar vokalsekvenser med hjälp av din resonatorfunktion. För att underlätta, så finns filen vokaler.m som innehåller formantfrekvenserna i tabellen ovan, i form av en variabel för varje vokal (titta i filen så förstår du). Det innebär att du kan beskriva vokalsekvenser på formen U=[vA vi va vo] - (observera transponatet på slutet) - detta ger en matris med målvärden för vokalsekvensen där varje kolumn motsvarar en formant, och varje rad ett målvärde som motsvarar en vokal i vokalsekvensen. För att styra filtret ska sedan styrparametrarna (formantfrekvenserna) ska ha samma samplingsfrekvens som själva ljudsignalen, f s = 16000, så utifrån målvärdesmatrisen måste man interpolera för att få fram styrparametrarna. Det kan göras med kommandot interp1(). För att bespara dig lite möda kan du utgå från nedanstående rader. De gör så att målvärdena läggs ut med dur = 0.3 sekunders mellanrum och sedan interpoleras med en kubisk spline till matrisen P. Precis som i målvärdesmatrisen så motsvarar kolumnerna i P formantfrekvenser, men P kommer att ha lika många rader som det resulterande ljudet ska ha sampel (motsvarande N dur sekunder). Du kan alltså använda kolumnerna i P direkt för att styra ditt formantfilter. 5 (6)

fs=16000; dur=0.3; U=[vA vi va vi] ; n=size(u,1); P=interp1(1:n,U,1:1/(fs*dur):n, spline ) ; Du behöver även en röstkälla, och till att börja med kan du använda en brusvektor av längden n (se föregående uppgift). Syntetisera några vokalsekvenser! Bandbredden kan du sätta till samma som i uppgift 1. Glöm inte att frekvenser & bandbredd måste normeras (delas med f s) innan de går in till filtret! När du fått något som låter som viskade/hesa vokalsekvenser, kan du göra samma sak med en tonande röstkälla. Använd den bifogade funktionen simplesource() - det är en enkel implementation av en tidsvariabel röstkälla där varje röstpuls modelleras som en spik. Denna källa måste också ha en styrparameter, F 0 dvs grundtonsfrekvensen. Denna kan modelleras på samma sätt som formatfrekvenserna, och i samma steg, lägg bara till en rad när du skapar matrisen U: U=[vA vi va vi; 100 200 160 100] ;... så kommer den att interpoleras på samma sätt som formanterna, och dyka upp som en femte kolumn i P som kan styra röstkällan. F0 ligger normalt mellan 50-200 Hz för män och 100-300 Hz för kvinnor. Nu börjar det roliga. Försök få din vokalsyntesmaskin att säga olika saker (fundera ut ord och meningar som bara innehåller vokaler - det finns fler än man tror) och laborera med olika F0-konturer - stigande, fallande, topp i mitten, etc. Kan du få det att låta som en fråga? Vill man laborera mera så är det är även intressant att applicera olika skalfaktorer på de olika kolumnerna, för att skala formantfrekvenserna respektive grundtonen. Hur ändras rösten när formanterna skalas? Grundtonen? Kan du få rösten att låta mer manlig/kvinnlig/barnslig? Att redovisa: m-fil, ljudfiler och kommentarer. Matlab-tips För att skala kolumnerna i en matris kan man skapa en diagonal matris med skalfaktorer, som man multiplicerar med. Exempel: B=A*diag([2 1.5])skalar kolumnerna i A med 2, 1 respektive 0.5. 6 (6)