Een audiocodec gebruiken om de audioprestaties in embedded systemen gemakkelijker te optimaliseren

Update: 8 december 2023

Veel ontwerpers nemen audiocodecs op in hun op microcontroller gebaseerde embedded systeemontwerpen om hifi-audio toe te voegen. Daarbij moeten ze uitzoeken hoe ze de audiocodec kunnen afstemmen op hun toepassing. Zonder afstemming kan de applicatie plat of van slechte kwaliteit blijven klinken, zelfs met een goede codec en luidspreker. Het probleem is dat elke luidspreker zijn eigen frequentierespons heeft en daarom moet de codec worden afgestemd op de luidsprekerkarakteristieken, rekening houdend met het soort audio dat wordt afgespeeld en de vereiste respons.

De oplossing voor het afstemmen van het audioweergavesysteem is om geen hardwarefiltering te gebruiken, maar in plaats daarvan gebruik te maken van de eigen digitale filterblokken van de audiocodec. Elke codec heeft dit blok zodat een ontwikkelaar de uitvoer kan filteren met behulp van hoogdoorlaat-, laagdoorlaat- en banddoorlaatfilters. Hierdoor kan de luidsprekerrespons zorgvuldig worden afgestemd en zelfs aangepast, indien nodig.

Dit artikel bespreekt de interne digitale audioblokken die in codecs zijn opgenomen, met behulp van een codec van AKM Halfgeleider als voorbeeld. Het zal ook verschillende tips en trucs bespreken voor het afstemmen van de codec waarmee ontwikkelaars hun ontwikkeling van het afspelen van audio kunnen versnellen en tegelijkertijd de geluidskwaliteit van een systeem verbeteren.

Inzicht in de karakteristieken van de frequentierespons van de luidsprekers

In het artikel "Een audiocodec en microcontroller selecteren en gebruiken voor ingesloten audiofeedbackbestanden" werd de basis besproken van het selecteren en toevoegen van een codec aan een systeem. De volgende stap is om die codec te gebruiken om de best mogelijke audio-uitvoer te krijgen.

Er zijn verschillende factoren die bijdragen aan hoe de audio die uit een systeem komt, zal klinken. Deze factoren zijn onder meer:

  • De behuizing van de spreker
  • Hoe de luidspreker is gemonteerd
  • De audiofrequenties die worden afgespeeld
  • De frequentierespons van de luidspreker

Na een zorgvuldige afweging van deze factoren, zal een ontwikkelaar snel beseffen dat het afstemmen van een audiosysteem alleen nuttig is wanneer het zich in de uiteindelijke productiestatus bevindt. Natuurlijk kan het systeem worden afgestemd met een printplaat (printplaat) en de luidspreker buiten een behuizing, maar je moet niet verwachten dat dezelfde afstemparameters van toepassing zijn wanneer de luidspreker is gemonteerd en in de behuizing zit.

Als het mechanische team de systeembehuizing en -montage goed heeft ontworpen, is het belangrijkste kenmerk dat de ontwikkelaar nauwlettend in de gaten moet houden de frequentierespons van de luidspreker. Elke luidspreker heeft verschillende kenmerken en responscurves. Zelfs luidsprekers met hetzelfde onderdeelnummer hebben vaak kleine variaties in frequentierespons, maar de fabrikant geeft meestal een typische frequentieresponscurve. Afbeelding 1 toont bijvoorbeeld de frequentieresponscurve voor een CUI Devices GC0401K 8 Ohm (Ω), 1 watt luidspreker. De GC0401K is geschikt voor frequenties tussen 390 Hertz (Hz) en 20 kilohertz (kHz).

Afbeelding 1: De GC0401K 8 Ω, 1 watt luidspreker van de CUI Devices is geschikt voor frequenties tussen 390 Hz en 20 kHz. (Afbeeldingsbron: CUI-apparaten)

Luidsprekers worden doorgaans beoordeeld voor het gebied van hun responscurve waar de respons relatief vlak is. Een nadere beschouwing van figuur 1 laat zien dat de frequentierespons voor de GC0401K begint af te vlakken bij ~ 350 Hz en relatief vlak blijft tot ten minste 9 kHz. De high-end frequenties hebben wat drop-off maar zijn nog steeds stabiel tot 20 kHz.

Een andere luidsprekerfrequentierespons is te zien in CUI Devices 'GF0668 (Figuur 2). Deze speaker is iets groter en kan 3 watt leveren. Het frequentiebereik ligt tussen 240 Hz en 20 kHz. Deze luidspreker kan iets lagere frequenties halen dan de GC0401K, maar merk nogmaals op dat binnen het gespecificeerde bereik de curve relatief vlak is met overal enkele dalen en pieken.

Afbeelding 2: De frequentierespons voor de GF0668 8 Ω, 3 watt luidspreker van CUI Devices laat zien waarom deze geschikt is voor het bereik van 240 Hz tot 30 kHz. (Afbeeldingsbron: CUI-apparaten)

Een laatste reactie van de spreker die de moeite van het bekijken waard is, is de SP-2804Y van Soberton Inc. (Figuur 3). De SP-2804Y is een luidspreker van 500 milliwatt (mW) met een frequentiebereik van 600 Hz tot 8 kHz. De wetten van de natuurkunde zorgen ervoor dat hoe kleiner de spreker, hoe moeilijker het reageert op lagere frequenties. Dit betekent dat als ontwikkelaars de lagere frequenties niet uitfilteren en in plaats daarvan proberen de luidspreker op die frequenties aan te sturen, het resultaat kan zijn dat het geluid knorrig klinkt of defecten in tonen die anders kristalhelder zouden klinken.

Merk op dat er ook een significante dip is in de frequentierespons rond 10 kHz. Daarom heeft de luidspreker slechts een classificatie van 8 kHz, hoewel hij waarschijnlijk voor sommige toepassingen tot 20 kHz zou kunnen worden gebruikt.

Figuur 3: De frequentierespons van de SP-2804Y 8 Ω, 0.5 watt luidspreker van Soberton Inc. laat zien dat deze geschikt is voor frequenties van 600 Hz tot 8 kHz. Het heeft een dip na 10 kHz, maar is voor sommige toepassingen nog bruikbaar tot 20 kHz. (Afbeeldingsbron: CUI-apparaten)

Als we naar de frequentierespons van elke luidspreker kijken, is het duidelijk dat er een soort filtering en afstemming moet plaatsvinden, aangezien er enkele frequenties zijn waarop een luidspreker niet mag worden aangedreven. Als u bijvoorbeeld een 4 Hz bastoon op deze luidsprekers probeert aan te sturen, kan dit langdurige trillingen veroorzaken waarop hogere frequenties worden geïnjecteerd, wat resulteert in veel geluidsvervorming.

Ontleden van een audio digitaal filterblok

Een methode die in het verleden is gebruikt om ongewenste frequenties uit te schakelen, is om hardwarefilters te bouwen die naar de luidspreker leiden. Een hoogdoorlaatfilter van 500 Hz kan bijvoorbeeld voorkomen dat frequenties onder de 500 Hz ooit de luidspreker bereiken. Aan de andere kant kan een laagdoorlaatfilter worden gebruikt om audiotonen boven 15 kHz te verwijderen. Persoonlijke ervaring heeft geleerd dat als de stem van een vrouw wordt gebruikt met een kleine luidspreker die efficiënt is bij hogere frequenties, de spreker soms een hoge piep kan vertonen. Het zorgvuldig selecteren van de frequenties kan deze vervormingen verwijderen en schoner klinkende audio creëren.

Hoewel externe hardwarefilters het werk kunnen doen, brengen ze kosten met zich mee en nemen ze extra ruimte in beslag. Om deze redenen is het praktischer en efficiënter om de audio af te stemmen met behulp van het digitale filterblok dat in een audiocodec is ingebouwd.

Bijvoorbeeld het blokschema voor de AKM Halfgeleider Bij de 4637-bits audiocodec AK24 is het digitale filterblok gemarkeerd (Afbeelding 4).

Afbeelding 4: De AK4637 is een audiocodec met een mono-luidsprekeruitgang die audio kan afspelen en opnemen. Het bevat ook een intern audioblok dat kan worden gebruikt om inkomende en uitgaande audio te filteren om de geluidskwaliteit te verbeteren. (Bron afbeelding: AKM Semiconductor)

Het digitale filterblok bevat in dit geval verschillende filtermogelijkheden, waaronder:

  • Een hoogdoorlaatfilter (HPF2)
  • Een laagdoorlaatfilter (LPF)
  • Een vierbands-equalizer (4-bands EQ)
  • Automatische niveauregeling (ALC)
  • Een eenbands equalizer (1 band EQ)

Deze functies hoeven niet allemaal te zijn ingeschakeld. Ontwikkelaars kunnen selecteren welke functies ze nodig hebben en het blok in- en uitschakelen of de microfoon routeren of audio via hen afspelen. De echte vraag op dit moment is hoe de audiocodec moet worden berekend en geprogrammeerd.

Hoe digitale filterparameters te berekenen en te programmeren

In de meeste audiotoepassingen wordt een hoogdoorlaatfilter gebruikt om lagere frequenties te verwijderen en een laagdoorlaatfilter om hogere frequenties uit te sluiten. Een equalizer kan worden gebruikt om de frequentieresponscurve af te vlakken of om bepaalde tonen te benadrukken. Hoe deze instellingen precies moeten worden geselecteerd, valt buiten het bestek van dit artikel. Het zal in plaats daarvan kijken hoe de waarden die aan deze parameters zijn gekoppeld, moeten worden berekend en geprogrammeerd met de AKM AK4637 als voorbeeld.

Ten eerste is het altijd een goed idee om de datasheet te bekijken. Pagina's 7 en 8 tonen in dit geval de allerbelangrijkste registermap voor de codec. Een eerste blik kan intimiderend zijn, aangezien het onderdeel 63 registers heeft. Veel van deze registers besturen echter het digitale audioblok. Registers 0x22 tot en met 0x3F besturen bijvoorbeeld de equalizer. Registers 0x19 tot en met 0x1C besturen het hoogdoorlaatfilter, terwijl 0x1D tot en met 0x20 het laagdoorlaatfilter regelen.

Ontwikkelaars kunnen meestal niet zomaar een frequentie specificeren om in de codec in te voeren. In plaats daarvan is er een filtervergelijking die wordt gebruikt om filtercoëfficiënten te berekenen, die vervolgens in de codecregisters worden geprogrammeerd om het filter op de gewenste frequentie te creëren. Als u bijvoorbeeld het digitale filterblok wilt gebruiken om een ​​hoogdoorlaatfilter bij 600 Hz te maken, gebruikt u vergelijking 1:

Figuur 5: Getoond worden de vergelijkingen die nodig zijn om de coëfficiënten te berekenen voor een hoogdoorlaatfilter voor het AK4637 digitale filterblok. (Bron afbeelding: AKM Semiconductor)

Een ontwikkelaar zou de gewenste afsnijfrequentie, fc, identificeren, die in dit geval 600 Hz is. De audiobemonsteringsfrequentie, fs, is doorgaans 48 kHz, maar kan variëren afhankelijk van de toepassing. Deze waarden zouden dan in de vergelijkingen voor het berekenen van coëfficiënten A en B worden geplaatst. Deze waarden worden vervolgens tijdens het opstarten over I2C naar de codecregisters geschreven. Hetzelfde proces zou worden gebruikt voor de laagdoorlaatfilters en andere digitale blokfuncties, hoewel de overdrachtsfuncties vaak verschillen, waardoor hun eigen set vergelijkingen moet worden gebruikt (raadpleeg het gegevensblad).

Tips en trucs voor het afstemmen van een audiocodec

De digitale filterblokken in een audiocodec zijn vaak behoorlijk flexibel en krachtig. Zelfs een goedkope audiocodec biedt ontwikkelaars de tools die nodig zijn om hifi-audio te genereren. Aan het eind van de dag is de audiocodec echter slechts een stukje van de puzzel. Om een ​​audiocodec met succes af te stemmen, zijn er verschillende "tips en trucs" die ontwikkelaars in gedachten moeten houden, zoals:

  • Zorg ervoor dat de luidspreker is gemonteerd in een geschikte behuizing voor de toepassing. Een onjuist ontworpen luidsprekerbox kan een verder perfect afspeelsysteem gemakkelijk verpesten.
  • Stem de audiofilterblokken van de codec niet af voordat het systeem volledig is geassembleerd in de configuratie voor productie-doeleinden. De afstemmingsparameters kunnen anders veranderen.
  • Selecteer het frequentiebereik op basis van de audio die wordt afgespeeld. De frequentie-instellingen voor muziek van een gitaar, piano of iemand die spreekt, zullen bijvoorbeeld allemaal anders zijn.
  • Gebruik het digitale balansblok om de frequentierespons van de luidspreker te compenseren. Sommige frequenties zullen van nature luider en duidelijker klinken en moeten mogelijk worden verzwakt, terwijl andere mogelijk moeten worden versterkt.
  • Gebruik testtonen om de frequentierespons van het systeem te evalueren. Een eenvoudige zoekopdracht op internet levert mp3-bestanden op voor een breed scala aan audiotonen die kunnen worden gebruikt om de frequentierespons van het audioweergavesysteem te begrijpen en hoe het digitale filterblok werkt.
  • Bewaar de filterblokconfiguratie-instellingen in flash of EEPROM zodat ze tijdens de fabricage kunnen worden ingesteld om rekening te houden met systeem-naar-systeemvariaties (als dat van belang is).

Ontwikkelaars die deze "tips en trucs" volgen, zullen merken dat ze behoorlijk wat tijd en verdriet besparen wanneer ze proberen hun audioweergavesysteem af te stemmen en ervoor zorgen dat het op de markt komt met de beoogde audiokenmerken.

Conclusie

Het toevoegen van een audiocodec aan een embedded systeem garandeert niet dat het goed zal klinken voor de eindgebruiker. Elk audioweergavesysteem moet zorgvuldig worden afgestemd. Het is mogelijk om externe filters te gebruiken om deze afstemming te bereiken, maar audiocodecs worden geleverd met ingebouwde digitale filter- en balansmogelijkheden. Zoals weergegeven, kunnen deze worden gebruikt om de luidspreker alleen de frequenties te voeden waarvoor deze het meest geschikt is. Met zorgvuldige analyse en toepassing van filterinstellingen kunnen ontwikkelaars de helder klinkende audio creëren die eindgebruikers gewend zijn van hun apparaten.