Analys/syntes-kodning Många talkodare bygger på en princip som kallas analys/syntes-kodning. Istället för att koda en vågform, som man normalt gör i generella ljudkodare och i bildkodare, så har man parametrisk modell av källan. Kodaren (analys-delen) försöker estimera modellparametrarna ur signalen som ska kodas. Dessa parametrar skickas över till avkodaren (syntes-delen) som använder dem för att rekonstruera en avkodad signal. Detta fungerar bra för signaler där det finns en bra modell av källan, som mänskligt tal. Däremot är det inte så användbart för kodning av generella ljud- och bildsignaler. Den avkodade signalen kan skilja sig en hel del från originalsignalen, men ändå låta väldigt lik.
Analys genom syntes En variant av analys/syntes-kodning är analys-genom-syntes-kodning (analysis-by-synthesis). Kodaren innehåller även en avkodardel, och man försöker hitta de modellparametrar som ger en avkodad signal som liknar (i någon mening) originalsignalen.
Mänskligt tal Ljud genereras genom att luft pressas ut genom stämbanden. Om stämbanden är spända genereras toner och övertoner. Om stämbanden är avslappnade genereras ett brusliknande ljud. Ljudet passerar sen genom strupe, svalg, munhåla och näsa. Med tunga, läppar och tänder kan man påverka ljudet. Allting efter stämbanden (det s.k. talröret, vocal tract) kan på ett bra sätt modelleras som ett linjärt filter.
Mänskligt tal
Exempel på talljud
Exempel på talljud
Modell för tal En enkel modell för mänskligt tal: Brus Filter Tal Pulskälla Talet ses som en sekvens av antingen tonade (voiced) eller tonlösa (unvoiced) ljud. De tonade ljuden modelleras som ett filtrerat pulståg, medan de tonlösa ljuden modelleras som filtrerat brus. Parametrarna i modellen är alltså filterparametrar, växlingar mellan tonat och tonlöst ljud, och pulstågets utseende. Framför allt försöker man estimera grundtonen, något som påverkar avståndet mellan pulserna (pitch period).
Modell för tal, forts. Talsignalen y n modelleras som y n = M a i y n i + Gɛ n i=1 Sändaren (kodaren) delar in signalen i segment, typiskt mellan 150 och 250 sampel (vid samplingsfrekvensen 8 khz). För varje segment bestäms om det är ett tonat eller ett tonlöst ljud. För tonade ljud bestäms pitch period P och ett passande pulståg. Filterparametrarna a i och G bestäms. Alla dessa parametrar skickas över till mottagaren som kan återskapa ljudet enligt modellen. Kodningen är alltså en typ av prediktiv kodning. Den största skillnaden mot vår tidigare beskrivning är att huvuddelen av datatakten går åt att beskriva filterkoefficenterna istället för prediktionsfelet.
Pulståg Pulstågen som används kan variera i komplexitet. I det enklaste fallet använder man pulser av samma amplitud på konstanta avstånd från varandra. Pulståget beskrivs då av pitch period och startposition för den första pulsen. Man kan även låta amplituder och positioner för pulserna variera fritt. Man kan då få ett pulståg som bättre kan beskriva den verkliga signalen, men det går åt fler bitar i kodningen.
Pulståg, exempel 1 1 0.8 0.8 0.6 0.6 0.4 0.4 0.2 0.2 0 0 0.2 0.2 0.4 0.4 0.6 0.6 0.8 0.8 1 1 20 40 60 80 100 120 140 160 180 200 20 40 60 80 100 120 140 160 180 200 1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1 20 40 60 80 100 120 140 160 180 200
Tonat eller tonlöst? Tonade ljud har oftast högre energi (högre amplitud) än tonlösa ljud. Tonlösa ljud innehåller oftast högre frekvenser än tonade ljud. Ett sätt att avgöra om ett segment är tonat eller tonlöst kan därför vara att jämföra segmentets energi med bakgrundsbruset, och att räkna antalet nollgenomgångar.
Estimering av pitch period Man kan använda autokorrelationsfunktionen R yy (k) för att estimera P. För en periodisk signal har akf:en ett maximum för k = P. En annan, bättre metod, är att använda average magnitude difference function (AMDF). Den definieras som AMDF (P) = 1 N k 0+N i=k 0+1 y i y i P där k 0 beror av vilket segment vi befinner oss i och N är segmentets storlek. AMDF kommer att ha ett minimum där P är lika med segmentets pitch period. AMDF kan även användas för att avgöra om segmentet är tonat eller tonlöst. För tonlösa ljud kommer AMDF ha väldigt grunda minimum, som inte skiljer sig särskilt mycket från medelvärdet.
AMDF AMDF för ett tonat (e) och ett tonlöst (s) ljud.
Exempel 0.6 0.4 0.2 0 0.2 0.4 0.6 0 50 100 150 200 250 Ett segment om 256 sampel från en talsignal.
Exempel 0.08 0.06 0.04 0.02 0 0.02 0.04 0 10 20 30 40 50 60 70 80 90 100 Estimerad autokorrelationsfunktion. Ger pitch period 31.
Exempel 0.4 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 0 10 20 30 40 50 60 70 80 90 100 Estimerad AMDF. Ger pitch period 31.
Estimering av filterparametrar Vi vill hitta a i sådana att medelvärdet av det kvadratiska felet en 2 minimeras, där M en 2 = (y n a i y n i Gɛ n ) 2 Minimering av väntevärdet E{e 2 n} ger följande ekvationssystem i=1 a j E{e 2 n} = 0 M a i E{y n i y n j } = E{y n y n j } i=1 För att kunna lösa detta behöver vi skatta E{y n i y n j }, vilket kan göras med autokorrelationsmetoden eller med autokovariansmetoden.
Autokorrelationsmetoden Vi antar att y n är stationär, vilket betyder att E{y n i y n j } = R yy ( i j ) Vi använder bara samplen i det aktuella segmentet, så vi kan skatta autokorrelationsfunktionen som R yy (k) = n 0+N 1 n=n 0+k y n y n k där n 0 är index för det första samplet i segmentet och N är segmentets storlek.
Autokorrelationsmetoden, forts. Ekvationssystemet kan då uttryckas som Rā = p där R = och ā kan relativt enkelt lösas ut. R yy (0) R yy (1)... R yy (M 1) R yy (1) R yy (0)... R yy (M 2)...... R yy (M 1) R yy (M 2)... R yy (0) ā = [a 1 a 2... a M ] T p = [R yy (1) R yy (2)... R yy (M)] T
Autokovariansmetoden Vi antar inte att y n är stationär. Vi definierar som kan estimeras som c ij = E{y n i y n j } c ij = n 0+N 1 n=n 0 y n i y n j Notera att vi använder sampel utanför segmentet i skattningen.
Autokovariansmetoden, forts. Ekvationssystemet kan då uttryckas som Cā = s där och C = c 11 c 12... c 1M c 21 c 22... c 2M...... c M1 c M2... c MM s = [c 10 c 20... c M0 ] T
LPC-10 Amerikansk talkodningsstandard för datatakten 2.4 kbits/s. Segment om 180 sampel, dvs 54 bitar/segment. Pitch period 60 möjliga värden. 10 filterkoefficienter för tonade ljud, 4 koefficienter för tonlösa ljud. Ger ett ganska syntetiskt ljud. Inte så bra om bakgrundsbruset är högt.
Long Term Prediction (LTP) Ofta använder man även en prediktor som estimerar utgående från signalens utseende en period P tillbaka i tiden M K y n = a i y n i + α j y n P j+1 + Gɛ n i=1 j=1 Filterdelen med a i kallas då short term prediction.
RELP Regular Excitation Linear Prediction I en RELP-kodare gör man inget val mellan tonade och tonlösa ljud. Man estimerar pitch period P, och filterkoefficienter a i och α j. Efter inversfiltrering får man en residualsignal som lågpassfiltreras, nersamplas (typiskt med en faktor 3 eller 4) och kvantiseras och skickas över sampel för sampel. En RELP-kodare är alltså mer lik en traditionell prediktiv kodare, där man skickar prediktionsfelet (residualsignalen). Observera att kvantiseringen ligger utanför prediktorloopen. Detta gör inte så mycket på de korta segment som man kodar.
RELP
Multi-pulse LPC (MP-LPC) MP-LPC är en analys-genom-syntes-kodare. Kodaren estimerar filterkoefficienter. Kodaren försöker sen hitta ett optimalt pulståg (position och amplitud för ett antal pulser) som avkodas till en signal så nära originalsignalen som möjligt. En nackdel med MP-LPC är att kodningen är ganska beräkningskrävande. Används i Skyphone, ett system för telefoni från flygplan med datatakten 9.6 kbit/s
MP-LPC
Exempel, MP-LPC 0.25 0.2 0.15 0.1 0.05 0 0.05 0.1 0.15 0.2 0 20 40 60 80 100 120 140 160 180 200 Ett segment om 200 sampel från en talsignal.
Exempel, MP-LPC Vi anpassar ett 5-koefficenters filter till signalen enligt autokorrelationsmetoden. Filterkoefficienterna (innan kvantisering) är: 1.5373 0.2515 ā 0.2400 0.1754 0.0912
Exempel, MP-LPC Ett pulståg med tio pulser optimeras så att den avkodade signalen är så lik originalsignalen som möjligt 0.08 0.06 0.04 0.02 0 0.02 0.04 0.06 0.08 0 20 40 60 80 100 120 140 160 180 200
Exempel, MP-LPC 0.25 0.2 0.15 0.1 0.05 0 0.05 0.1 0.15 0.2 0 20 40 60 80 100 120 140 160 180 200 Rekonstruerad signal.
Exempel, MP-LPC 0.25 0.2 0.15 0.1 0.05 0 0.05 0.1 0.15 0.2 0 20 40 60 80 100 120 140 160 180 200 Originalsignal och rekonstruerad signal.
RPE-LTP Regular Pulse Excitation with Long Term Prediction Den första kodningsmetoden som användes i GSM. Den har senare ersatts av andra metoder. Kan ses som en hybrid mellan RELP och MP-LPC. Kodaren försöker hitta ett pulståg som avkodas till en signal så nära originalsignalen som möjligt. Pulserna begränsas till att ligga i ett regelbundet mönster. Kodaren använder datatakten 13 kbit/s. Med felrättning används totalt en datatakt på 22.8 kbit/s.
RPE-LTP
Code Excited Linear Prediction (CELP) Analys-genom-syntes. Kodaren estimerar filterkoefficienter, och försöker sen hitta en excitationssignal från en kodbok som avkodas till en signal nära originalsignalen. Det är alltså en form av vektorkvantisering, oftast av typen gain-shape. Det som skickas över till mottagaren är alltså filterparametrar, index i kodboken och förstärkningsparametrar. Ofta använder man en kombination av en fix och en adaptiv kodbok. Varianter finns, där man estimerar filterparametrarna från redan överförda sampel. Eftersom avkodaren också har tillgång till gamla sampel, behöver man bara skicka index i kodboken.
CELP
CELP i GSM Ehanced Full Rate Algebraic CELP Datatakt 12.2 kbit/s Adaptive Multi-Rate Algebraic CELP Datatakt mellan 4.75 kbit/s och 12.2 kbit/s (i 8 steg). Kodaren försöker anpassa sig till kanalkvaliteten. Om det är en dålig kanal använder talkodaren en låg datatakt och många bitar läggs på den felrättande koden. För bra kanaler behöver man inte så mycket felrättning och kan då ha en högre takt på talkodaren. Kanalen är antingen totalt 22.8 kbit/s eller 11.4 kbit/s (half rate channel).