Hur man använder en ljudcodec för att enklare optimera ljudprestandan i inbäddade system

Av Jacob Beningo

Bidraget med av DigiKeys nordamerikanska redaktörer

Många utvecklare inkluderar ljudcodecar i sina microcontrollerbaserade inbäddade systemkonstruktioner med syftet att få till ett högkvalitativt ljud. För att lyckas med detta måste de förstå hur ljudcodecen ska ställas in för applikationen. Utan rätt inställning kan slutprodukten låta platt eller ha dålig kvalitet, även med en bra codec och högtalare. Problemet är att varje högtalare har sitt eget frekvenssvar och därför måste codecen ställas in efter högtalaregenskaperna, samtidigt som hänsyn tas till vilken typ av ljud som ska spelas upp och det svar som förväntas.

Lösningen på att ställa in uppspelningssystemet är inte att använda hårdvarufiltrering utan att istället utnyttja ljudcodecens egna digitala filterblock. Varje codec har detta block för att låta utvecklare filtrera utdata med högpass-, lågpass- och bandpassfilter. Detta gör att högtalarsvaret kan ställas in noggrant och även finjusteras efter behov.

Denna artikel tar upp de interna digitala ljudblock som ingår i codecar, med hjälp av en codec från AKM Semiconductor som ett exempel. Den går också igenom flera tips och tricks för hur man ställer in codecen, vilket hjälper utvecklare att påskynda utvecklingen av ljuduppspelningen och samtidigt förbättra systemets ljudkvalitet.

Förstå högtalarens frekvenssvarskaraktäristik

Artikeln "Hur man väljer och använder en ljudcodec och microcontroller för inbäddade ljudåterkopplingsfiler" diskuterade grunderna för att välja och lägga till en codec i ett system. Nästa steg är att använda denna codec för att få bästa möjliga ljudutgång.

Det finns flera olika faktorer som bidrar till hur ljudet som kommer ut från ett system kommer att låta. Dessa faktorer inkluderar:

  • Högtalarens hölje
  • Hur högtalaren är monterad
  • Ljudfrekvenserna som spelas
  • Högtalarens frekvensrespons

Efter noggrant övervägande av dessa faktorer, inser en utvecklare snart att det är praktiskt att ställa in ett ljudsystem när det är i sitt slutliga produktionstillstånd. Visst, systemet kan ställas in med ett kretskort och högtalaren utanför sitt hölje, men man ska inte tro att samma inställningsparametrar ska fungera när högtalaren är monterad i sitt hölje.

Om de mekaniska konstruktörerna har utformat systemhöljet och infästningen på rätt sätt, är högtalarens frekvenssvar den viktigaste egenskap som utvecklaren behöver följa noga. Varje högtalare har olika egenskaper och svarskurvor. Även högtalare med samma artikelnummer har ofta små variationer i frekvensrespons, men tillverkaren erbjuder normalt vanligtvis en typisk frekvenssvarskurva. Exempelvis visar figur 1 frekvenskurvan för CUI Devices-högtalaren GC0401K (8 ohm/1 watt). GC0401K är klassad för frekvenser mellan 390 Hz och 20 kHz.

Diagram över CUI Devices högtalare GC0401K (8 ohm/1 watt) Figur 1: CUI Devices högtalare GC0401K på 8 ohm/1 watt är klassad för frekvenser mellan 390 Hz och 20 kHz. (Bildkälla: CUI Devices)

Högtalare klassificeras vanligtvis för området på deras svarskurva där svaret är relativt platt. En närmare titt på figur 1 visar att frekvenssvaret för GC0401K börjar plana ut vid ca. 350 Hz och förblir relativt platt åtminstone upp till 9 kHz. Högfrekventa frekvenser ger ett visst tapp, men är fortfarande stabila upp till 20 kHz.

Ett annat högtalarfrekvenssvar kan ses i CUI Devices GF0668 (Figur 2). Denna högtalare är lite större och kan avge 3 watt. Frekvenssvarsklassningen är 240 Hz till 20 kHz. Denna högtalare kan återge något lägre frekvenser än GC0401K, men notera igen att inom det angivna intervallet är kurvan relativt platt med några dalar och toppar över hela intervallet.

Graf över frekvenssvaret för CUI Devices högtalare GF0668 på 8 ohm/3 watt (klicka för att förstora) Figur 2: Frekvenssvaret för CUI Devices högtalare GF0668 på 8 ohm/3 watt visar varför den är klassad för intervallet 240 Hz till 30 kHz. (Bildkälla: CUI Devices)

Ett sista högtalarsvar som är värt att titta på är Soberton Inc.:s SP-2804Y (Figur 3). SP-2804Y är en 500 mW högtalare med ett frekvenssvar på 600 Hz till 8 kHz. Fysikens lagar gör att ju mindre högtalaren är, desto svårare har den att svara på låga frekvenser. Det betyder att om utvecklare inte filtrerar ut lägre frekvenser utan istället försöker köra högtalaren vid dessa frekvenser, kan resultatet bli lite sprakande ljud eller defekter i toner som annars skulle låta kristallklart.

Observera att det också finns ett betydande fall i frekvenssvaret runt 10 kHz. Därför är högtalaren endast klassad för upp till 8 kHz även om den förmodligen kan användas upp till 20 kHz i vissa tillämpningar.

Diagram över frekvenssvaret för Soberton Inc.:s högtalare SP-2804Y på 8 ohm/0,5 watt (klicka för förstoring) Figur 3: Frekvenssvaret för Soberton Inc.:s högtalare SP-2804Y på 8 ohm/0,5 watt visar att den passar frekvenser från 600 Hz till 8 kHz. Den har en dalsänka efter 10 kHz men den kan fortfarande användas upp till 20 kHz i vissa tillämpningar. (Bildkälla: CUI Devices)

Tittar man på varje högtalares frekvenssvar är det tydligt att någon form av filtrering och inställning måste ske, eftersom det finns vissa frekvenser där en högtalare inte ska köras. Om man exempelvis försöker köra en 4 Hz baston på dessa högtalare, kan det orsaka långvariga vibrationer på vilka högre frekvenser överlagras, vilket resulterar i en massiv ljudförvrängning.

Dissekering av ett digitalt ljudfilterblock

En metod som tidigare har använts för att sortera bort oönskade frekvenser, är att bygga hårdvarufilter som leder fram till högtalaren. Exempelvis kan ett högpassfilter för 500 Hz förhindra att frekvenser under 500 Hz ens kommer fram till högtalaren. I andra änden kan ett lågpassfilter användas för att ta bort alla ljudtoner över 15 kHz. Personlig erfarenhet har visat att om en kvinnas röst ibland används med en liten högtalare som är effektiv vid högre frekvenser, kan högtalaren avge ett högt missljud. Att noggrant välja frekvenser kan ta bort dessa förvrängningar och åstadkomma ett renare ljud.

Även om externa hårdvarufilter kan sköta denna bit, medför de extra kostnader och tar upp utrymme. Av dessa skäl är det mer praktiskt och effektivt att ställa in ljudet med det digitala filterblocket inbyggt i en ljudcodec.

Exempelvis har blockdiagrammet för AKM Semiconductors 24-bitars ljudcodec AK4637 det digitala filterblocket markerat (Figur 4).

Diagram över AKM Semiconductor AK4637 är en ljudcodec med mono-högtalarutgång (klicka för att förstora) Figur 4: AK4637 är en ljudcodec med mono-högtalarutgång som har funktioner för uppspelning och inspelning av ljud. Den innehåller ett internt ljudblock som kan användas för att filtrera inkommande och utgående ljud för att förbättra ljudkvaliteten. (Bildkälla: AKM Semiconductor)

Det digitala filterblocket innehåller i detta fall flera olika filtreringsfunktioner som inkluderar:

  • Ett högpassfilter (HPF2)
  • Ett lågpassfilter (LPF)
  • En fyrbandsutjämnare (4-band EQ)
  • Automatisk nivåkontroll (ALC)
  • En equalizer för ett band (1 band EQ)

Dessa funktioner behöver inte alla aktiveras. Utvecklare kan välja vilka funktioner de behöver och aktivera och inaktivera blocket eller dirigera mikrofonen eller spela upp ljud genom dem. Den verkliga frågan i detta läge är hur man beräknar och programmerar ljudcodecen?

Hur man beräknar och programmerar digitala filterparametrar

I de flesta ljudtillämpningar används ett högpassfilter för att ta bort lägre frekvenser och ett lågpassfilter används för att utestänga högre frekvenser. En equalizer kan användas för att jämna ut frekvenskurvan eller för att framäva vissa toner. Hur dessa inställningar ska väljas exakt ligger utanför denna artikels område. Vi tittar istället på hur man beräknar och programmerar de värden som är förknippade med dessa parametrar och använder AKM AK4637 som ett exempel.

Först är det alltid en bra idé att granska databladet. Sidorna 7 och 8 visar i detta fall den viktigaste registerkartan för codecen. En första titt kan kännas avskräckande med tanke på att komponenten har 63 register. Många av dessa register styr dock det digitala ljudblocket. Exempelvis styr registren 0x22 till 0x3F equalizern. Registren 0x19 till 0x1C styr högpassfiltret, medan 0x1D till 0x20 styr lågpassfiltret.

Utvecklare kan normalt inte bara ange en frekvens som ska matas in i codecen. Istället finns en filterekvation som används för att beräkna filterkoefficienter, vilka sedan programmeras in i kodregistren för att skapa filtret vid önskad frekvens. För att exempelvis använda det digitala filterblocket för att skapa ett högpassfilter på 600 Hz, ska ekvation 1 användas:

Bild av ekvationer som behövs för att beräkna koefficienterna för ett högpassfilter Figur 5: De ekvationer som behövs för att beräkna koefficienterna för ett högpassfilter för det digitala filterblocket AK4637 visas. (Bildkälla: AKM Semiconductor)

En utvecklare kan här identifiera önskad tröskelfrekvens, fc, vilken i detta fall är 600 Hz. Ljudsamplingsfrekvensen, fs, är vanligtvis 48 kHz, men kan variera beroende på tillämpningen. Dessa värden placeras sedan i ekvationerna för beräkning av koefficienterna A och B, och dessa värden skrivs i sin tur till kodregistren via I2C vid start. Samma process kan användas för lågpassfilter och andra digitala blockfunktioner, även om överföringsfunktionerna ofta är olika, vilka måste använda sin egen uppsättning ekvationer (se databladet).

Tips och tricks för att ställa in en ljudcodec

De digitala filterblocken som ingår i en ljudcodec är ofta ganska flexibla och kraftfulla. Till och med en billig ljudcodec ger utvecklare de verktyg som krävs för att åstadkomma högkvalitativt ljud. När allt kommer kring är dock ljudcodecen bara en bit av pusslet. För att framgångsrikt kunna ställa in en ljudcodec finns det flera "tips och tricks" som utvecklare bör tänka på, exempelvis:

  • Se till att högtalaren är monterad i ett lämpligt hölje för tillämpningen. En felaktigt utformad högtalarlåda kan lätt förstöra ett annars perfekt uppspelningssystem.
  • Ställ inte in codec-ljudfilterblocken förrän systemet är fullständigt hopsatt i sin produktionskonfiguration. Inställningsparametrar kan i annat fall förändras.
  • Välj frekvensområde baserat på det ljud som ska spelas. Exempelvis kommer frekvensinställningarna för musik från gitarr, piano eller någon som talar att vara olika.
  • Använd det digitala balansblocket för att kompensera för högtalarens frekvensrespons. Vissa frekvenser låter naturligtvis högre och tydligare och kan behöva dämpas, medan andra kan behöva förstärkas.
  • Använd testtoner för att utvärdera systemets frekvensrespons. Med en enkel internetsökning kan man hitta mp3-filer för ett brett spektrum av ljudtoner som kan användas för att förstå ljuduppspelningssystemets frekvensrespons och hur det digitala filterblocket fungerar.
  • Lagra filterblockets konfigurationsinställningar i flash eller EEPROM så att de kan ställas in under tillverkningen, för att ta hänsyn till variationer mellan olika system (om det är ett problem).

Utvecklare som följer dessa tips och tricks kommer att upptäcka att de besparar sig en hel del tid och frustration när de försöker ställa in sitt ljuduppspelningssystem, och de kan släppa produkter på marknaden med de önskade ljudegenskaperna.

Slutsats

Att lägga till en ljudcodec i ett inbäddat system garanterar inte att det låter bra för slutanvändaren. Varje ljuduppspelningssystem måste ställas in noggrant. Det är möjligt att använda externa filter för att göra denna inställning, men ljudcodecar levereras med inbyggda digitala filtrerings- och balansfunktioner. Som vi visat kan dessa användas för att mata högtalaren med bara de frekvenser som den är bäst lämpad för. Med noggrann analys och tillämpning av filterinställningar kan utvecklare skapa det renklingande ljud som slutanvändare numer förväntar sig från sina produkter.

DigiKey logo

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.

Om skribenten

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo är konsult inom inbäddad programvara. Han har publicerat över 200 artiklar om utveckling av inbäddad programvara, och är en eftertraktad talare och teknisk utbildare med tre examina, däribland en master i teknik från University of Michigan.

Om utgivaren

DigiKeys nordamerikanska redaktörer