Hangsugárzók valós effektív terhelésének mérése mikrovezérlővel 4.

Az előző három cikk alapján lényegében fel tudunk mutatni egy fizikailag is létező, az elvi leírás szerint működő kísérleti példányt, azonban a kész végleges változatnál még nem tartunk. Egyrészt szükséges még egy sor fejlesztés, pl célszerű lenne legalább kétcsatornás megvalósítás, hogy egy sztereó rendszer mindkét csatornája függetlenül mérhető és kijelezhető legyen, ill. meg kell még oldani a hangsugárzókra jellemző magastartománybeli alacsonyabb effektív terhelhetőség figyelembevételét is. Másfelől pedig konkrét tapasztalatok is vannak a mintavételezett jellel történő számítás kapcsolán. Korábban a hangdobozépítős oldalamon közzétettem egy C-ben írt kisebb programot, mely ennek a készüléknek egyfajta szoftveres előfutárának is tekinthető. Ez a program wav audio fájlok elemzését végezte, kiszámolta ill. kigrafikonozta adott műsorjelek csúcs, hosszú idejű termikus átlag és crest-faktor jellemzőket. (pl. ez a kép is egy ilyen mérés eredménye) Azonban egy D/A konverzió – analóg teljesítményerősítő – A/D konverzió lánc rányomja a hatását a mérésre, talán érdemes is ezen utóbbival kezdeni.

Az A/D konverzió problémái

A dolog lényege, hogy a wav-ból számolt grafikonok hajszál pontosak, pl egy szinusz, vagy négyszög jelre pontosan azt a csúcs/RMS arányt számolja, amit várunk, de a mikrovezérlővel digitalizált jelnél viszont már pontatlan. Ezalatt azt értem, hogy négyszögjelnél a csúcs és az effektív teljesítmény megegyezik, de a készüléknél nem ez volt a helyez, az effektív kevesebb volt. Először az IIR szűrőben feltételeztem BUG-ot, de aztán kézzel utánamérve kiderült, hogy nem az effektívvel van a baj (az a pontos), hanem a csúcs a pontatlan. Itt már lehetett sejteni a nyilvánvalót; túllövés kerül a jeltranziensekre, így pl a négyszögjel fel- és lefutó éleire is. Hát aki látott már mérést végfokokról, az látott már túllövéses és kissé belengő négyszögjelet, nincs ezen mit csodálkozni. A műszer meg szigorúan azt csinálja amit kell, csúcsot mér, és a túllövés alkotja a csúcsot, nem a négyszögjel háta. Mivel akár azt is mondhatnánk, hogy ugyan, a végfok magánügye, ha néha túllő egy élen, ez minket ne érdekeljen már, főleg ha az effektív értéket ez nem hamisítja meg, akkor nem is kellene foglalkozni vele. Csak hát, így a végerősítő kivezérlése se követhető jól nyomon, ami miatt végülis a csúcsjel mérését bevettük a buliba. Ezután átkötöttem a kütyüt a végfok kimenetéről a hangkártya egyik kimenetére, kikerült az analóg fokozatból nemcsak a teljesítményerősítő, hanem a bemeneti soros ellenállás is. Mindjárt sokkal jobb lett a helyzet, de még mindig nem tökéletes. Így is túllő a csúcs, csak már nem annyira. Az a helyzet ugyanis, hogy nemcsak a végfokban keletkezik túllövés, sőt, nem csak a hangkártya kimeneti analóg áramköreiben, de szoftveresen is keletkezik túllövés és lengés. Köszönhető ez a hangkártyák meghajtószoftvereinek agyon-FIR-szűrőzött kimenetének. Mit is akarok ezzel mondani: A mai hangkártyák nem natív felbontással működnek, van egy 44100Hz mintavételű hanganyag, és van egy 48000Hz kimeneti mintavételezésű hangkártyánk. Vagy 96000Hz,  vagy 192000Hz… A lényeg, hogy a hangkártya mindig kvantál, bitmélységet is és mintavételi frekvenciát is, majd elsimítja ennek jeltorzulásait egy FIR aluláteresztő szűrővel, pontosan ennek köszönhető, hogy majd minden mai túlmintavételes CD/DVD játszó vagy hangkártya a FIR szűrő impulzusválaszát produkálja (ld. akár a régi HFM impulzus-válasz méréseit CD játékosokon) A FIR aluláteresztő kernele és egyben impulzusválasza egy y=sin(x)/x alapú függvény, mely kb így fest: (A kép forrása: LINK)

FIR szűrő kernele (impulzus-válasza)

És nézzük meg pl egy HFM mérést néhány CD játszóról:

és akkor már egy erősítőről is:

Vegyük észre, hogy míg a CD játékos az él előtt és után is rezeg, addig a végfok csak az él után. Olyan pedig, hogy valami előbb kezd rezegni, mint hogy gerjesztést kapjon a valós világban nincs, csak a digitális jelfeldolgozásban. Nem kérdés tehát, hogy a CD-nél a lengés a túlmintavételező (vagy csak simán jelfeldolgozó) FIR szűrő következménye. És ne legyenek illúzióink, ilyen, vagy ennél sokkal rosszabb lesz egy hangkártya kimenete is, ugyanis, míg a CD játszó túlmintavételezéskor egész többszöröst választ FS-nek (pl 88.2kHz, 176.4kHz), addig a hangkártya nem, ami további jeltorzulásokhoz vezet. A digit túlmintavételezés lengése esetenként a kütyü FS/2 frekvenciája fölött is lehetnek, ezzel aliasing frekvencia-tartományban még jobban nehezítheti a dolgunkat, ill a mérendő végfokozat lengései egészen biztosan aliasinget okoznak. A megoldás részben adja magát: aliasing szűrőt kell alkalmazni. Eleinte úgy véltem, nem lesz ilyenre szükség, ugyanis kellően nagy lesz a mintavételi freki, de pl. egy végfok többnyire 50-100kHz-en jelentkező lengéseivel így nem tudunk mit kezdeni; bejut, és ráadásul hamis frekvencián. A passzív feszültségosztós bemenet tehát nem fog jól működni, mindenképpen aktív szűrős bemenet kell, és olyan, hogy magának a szűrőnek se legyenek lengései, valamint úgy vélem, legalább negyedrendű meredekséggel kellene rendelkeznie. Tesztelni kell majd azt is, hogy ezt a szűrőt egyszerű tranzisztoros fokozattal (pl. emitterkövetőkkel) valósítsuk meg visszacsatolás-mentesen, vagy műveleti erősítővel. (érzésem szerint a tranziens viselkedés szempontjából a sima tranzisztoros jobban fog vizsgázni). Az eddigieket lehet még fokozni, ha méréskor a csúcsot nem egyetlen minta csúcsában értelmezzük, hanem néhány minta átlagában. (pl. azt mondjuk, hogy legalább 100µs széles legyen az a csúcs, vagy 100µs-al (10kHz periódusideje) elsimítjuk. És racionális lépésnek tűnhet, mert hát egy klip se klip, ha az csak egy 20µs ideig egy mintán állt csupán be. Ezen tehát kell még dolgozni, de hangsúlyozom, a hosszú időre átlagolt effektív teljesítményt ezek a kis túllövések nem befolyásolják, mivel nagyon kis energiájuk van, a keskeny (tűimpulzus szerű) mivoltuk miatt. (Meg hát végülis ezt is megkapja a hangszóró, ebből a szemszögből meg teljesen jogos, ha bekerül a mérésbe)

Magastartomány kezelése

Az eredeti BEAG szabadalmi leírásban is kitérnek arra a tényre, hogy a hangsugárzók közép és magashangszórói sokkal kisebb effektív terhelést bírnak, mint a mély vagy mély-közép hangszórók. Maga a műsorjel is olyan szokott lenni, hogy bár nagy csúcsok lehetnek a magastartományban is, de effektív értéken a magas mindig sokkal gyengébb, kb úgy 8-10dB-el. Hibát követnénk el, ha nem készítenénk erre fel a készüléket, hiszen olyan állapot is előállhat, hogy míg a készülék még messze nem jelez túlterhelést, addig a magas szekció már túlterhelt. Különösen akkor számíthatunk erre, ha EQ-t, hangszínszabályzót is használnak. A BEAG úgy oldotta meg a problémát, hogy egy frekvenciafüggő leosztást alkalmaz, amivel lényegében egy magasemelést hoz létre, így a magas hangokra érzékenyebb a védelem. Mi is használhatnánk ilyen analóg megoldást a mikróvezérlő előtt, pl 10dB-es magasemelés 2kHz törésponttal. De ilyen szűrőt szoftveresen is implementálhatunk, ráadásul így külön számolhatnánk a magastartomány terhelését a szélessávú terhelés mellett, vagy egyszerűen külön mérjük pl. a 2kHz alatti és 2kHz feletti tartományt. Ezen is még sokat kell gondolkodni, hogy melyik változat lenne jobb, és az hogyan legyen majd kialakítva.

Többcsatornás mérés

Ahogy a bevezetőben említettem, legalább sztereóra célszerű lenne kiterjeszteni a mérést. Az ATmega ADC konvertere azonban erre nem nyúlt lehetőséget, így is képességei felett működtetjük. Megoldható lenne a feladat egy jobb külső ADC konverterrel, mert számítási kapacitással győznénk nem csak a sztereót, de akár a négycsatornás esetet is. Egy másik megoldás lehet magának a mikróvezérlőnek a többszörözése, minden mikróvezérlő csak egy csatornát mér, a beépített saját ADC konverterével, de egy kijelzőn jelenne meg minden eredmény. A kijelzőkezelést végezhetné csak az egyik mikróvezérlő, a többitől pedig lekéri a mérési adatokat, vagy időszeletekben kiosztjuk a kijelző írásjogot az eszközök között, stb.

Végszó

Igazából most eddig jutott ez a projekt, a közeljövőben inkább csak szoftveres bizergálás lesz, pl. az előbb említett külön magas csatorna mérés IIR szoftveres szűrővel, vagy még a nagyon korán említett crest-factor számolás, de az meg addig nem aktuális, amíg a csúcsmérés, a túllövések problémája meg nem oldódik. Kész, dobozolt, kifényezett verzió születésére sajnos egy kicsit várni kell.

Frissítés: Nagyon úgy fest, hogy akadnak erre a feladatra alkalmasabb mikróvezérlők is, mint pl. a Texas Instruments MSP430 sorozat valamely tagja, mely adatlapja 200ksps/10bit felbontású ADC konvertert ígér. Ezzel már nemhogy kettő, de akár még négy csatornán is tudnánk mérni! Hátránya viszont, hogy hiányzik belőle a hardveres szorzóutasítás, ami miatt itt a számítási képesség lenne karcsúbb. Aztán szintén alkalmasabb a Microchip dsPIC30 vagy -33 sorozat valamely tagja, melyben a gyors és sok típusnál már 12 bites A/D konverteren túl rengeteg DSP specifikus művelet is van, lényegében egy digitális jelfeldolgozásra kihegyezett mikróvezérlőről beszélünk. Sajnos azonban a dsPIC-hez gyenge a fellelhető (főleg magyar nyelvű) irodalom, pedig a sok DSP lehetőség kiaknázásához kellene egy jó és érthető leírás is. Ennek ellenére jó eséllyel ez lesz a következő eszköz, amit kipróbálok.
Frissítés a frissítésben: Időközben beszereztem a fent említett cuccok egy részét, nevezetesen egy pickit2 PIC programozót DSPIC33FJ64MC802-I/SP névre hallgató mikróvezérlővel és egy Texas Instrument MSP 430G2 LaunchPad Development kit (rev 1.5) névre keresztelt fejlesztőpanelt, amihez a hozzá járó két mikróvezérlőn kívül egy MSP430G2553IN20 típusúval is megfejeltem. Vettem továbbá nagyobb (20×4 karakteres) kék LCD kijelzőt és egy Nokia 5110 grafikus kijelzőt, meg még egy rakás egyéb segédanyagot. Szóval eszköz most van, kérdés, hogy időben hogy fogok állni… A dsPIC vonal fejlesztő/égető szoftverek terén nagyon makacskodik, 3 nap alatt még egy üres (végtelen üres ciklust tartalmazó) kódot se sikerült hibaüzenet nélkül lefordítani és a chipbe erőszakolni. Elképesztően kaotikus tehát a dsPIC-es helyzet, ami azért is szomorú, mert ez egy igen erős vas lenne ilyen feladatokra.

Frissítés 2.: Készítettem egy mérést a túllövéses problémáról négy Audacity programmal generált mérőjel segítségével. A jeleket 0.5 (-6dB) full scale amplitúdóval hoztam létre, a hangkártya és a lejátszó 0dB hangerő beállítások melletti lejátszásával. A következő táblázat mutatja a mérési eredményeket:

Mérési hibák (túllövés)

Az A oszlopban a mérőjel fajtája, a B oszlopban a készülék kijelzőjén leolvasható csúcsteljesítmény, C oszlop a kijelzőn olvasható Long Term Power hosszú idejű termikus átlagteljesítmény, az utolsó oszlop pedig NEM a saját csúcs méréshez, hanem a négyszögjel 72W értékéhez számított crest-faktor értékek. Az első dolog, amit észre kell venni, hogy a csúcsértékek nem egyeznek, pedig minden generált minta csúcsértékben egyforma. A négyszög és a zaj csúcsértéke torony magasan a legnagyobb, ezek a legtranziensebb jelek, ezeken jönnek leginkább létre túllövések, de azért a fűrész is nagyon-nagyon magas. A szinusz jelre elvileg nem kerülhet túllövés, mivel nincs tranziense. Mégis, kicsit ez is magasabb a kelleténél. Gyakorlatilag minden mérésnél a négyszögjel átlagértékét, azaz a 72W értéket kellene kapni, de még a szinusznál is kicsit magasabbra jön ki. Nagyon jól jönne ilyenkor egy oszcilloszkóp, hogy az ember lássa, hogy ténylegesen mi a helyzet a jelalakokkal. Azonban ahogy korábban is mondtam, kézi mérés alapján az átlagértékek egész pontosnak mutatkoztak, és itt is azt látjuk, hogy a szinusz effektív értéke kb 3dB-el kisebb, mint a négyszögé, a fűrészjel is egész szépen hozza a papírformát (4,77dB lenne a pontos érték), a zajnál pedig tanácstalan vagyok, meg kellene mérni a zajunk eloszlásfüggvényét, mert egyenletes eloszlású zaj esetén ennek egyeznie kellene a fűrészjel értékével, de talán csak valamiféle haranggörbés eloszlással generálta a zajt az Audacity. Ami a lényeg; ez a mérés is azt igazolja, hogy nem az átlagértékek mérésével van a baj, az még ha kicsi tűréssel is (ami lehet a kevés kvantálási szint, vagy egyszerűen a túlhajtott ADC kvantálási hibája) de hozza a várt értékeket. A csúcsértéknél kell a dolgok körmére nézni.

Helyzetjelentés: 2017.04.26. Pillanatnyilag a változókezelést vezetem át regiszterekből a RAM-ba, mert kelleni fognak a szabad regiszterek. Sikerült az összes filter változót RAM-osítani, csak a mintavételezéssel kapcsolatos és számláló változók maradnak regiszterekben. Ha ez a folyamat kész (lényegében éppen most lett kész), akkor kísérletképpen kap egy olyan debug kódrészt, hogy a mintavételezett mintákat 512 bájt erejéig a RAM-ba írja, majd amikor ez megvan, átmásoljsa az eepromba. Ezt kiolvasva talán sikerül megtalálni a csúcsmérés pontatlanságait okozó jeltorzulásokat. Mellesleg most egy kis simítást alkalmazok a csúcsjelen, és most lényegesen pontosabb csúcs/effektív viszonyokat mér a készülék. Elég valószínű, hogy külső aliasing, plusz belső szűrés/átlagolás megoldja ezt a kérdést. A továbbiakban pedig konkrét továbbfejlesztés következik, el fogom látni a mintavételezőt egy kezdetben 2kHz-re fixen beállított másodrendű Butterworth felüláteresztő IIR szűrővel, és ennek a kimenetén is végrehajtja majd a program a hosszú idejű átlag mérését, így külön mérve és kijelezve lesz a magastartomány is. A későbbiekben a töréspont néhány fix értéken állítható/léptethető lesz. Opcionálisan egy kis időgrafikont is tervezek, a hosszú idejű átlagértéknek, amit az LCD összesen 8 lehetséges egyedi karakterével oldok majd meg. A 8 karakter egy sorba egymás mellé kerül, és a karakterek bitképének módosításával egy 40×8 pixel grafikus területet tudunk létrehozni a kijelzőn (ld IIR szűrős spektrumanalizátoromban történő hasonló megoldást) vagy pedig 2×4 karakterhelyen 20×16 pixeles terület lesz. Aztán, ha végül minden jól áll majd, akkor lehet hogy készül egy kész verzió, 2db olcsó ATmega48PA-PU-val kétcsatornás mérésre és 1db 20×4 karakteres kijelzőre dolgozva, saját (nem lyukacsos) szépen tervezett nyákkal, analóg aliasing bemeneti szűrővel, saját táppal stb. Lényegében egy dobozolt, használatra kész változat.

Frissítés 2017.09.08: Sajnos a helyzet nem nagyon változott, a projekt egyelőre egyhelyben áll. Ellenben a korábbi PC-s C kódot kiegészítettem egy aprósággal, nevezetesen, hogy amplitúdóeloszlás függvényt (hisztogram) is generáljon a wav mintából. Egy ilyen a következőképpen néz ki:

 

A képen egyenletes eloszlású zaj (kék), gauss zaj (piros), fűrészjel (sárga), szinuszjel (zöld) és zenei mintaként egy Metallica zeneszám (bordó) grafikonja szerepel. Az ábra lényegében az amplitúdóértékek előfordulását ábrázolja -1 és +1 értékek között. (a skála számozás most nem releváns, 1-256 a mérés amplitúdó-felbontása), a függőleges irányban pedig a 10s mintában az előfordulások száma látható. Ami a lényeg, hogy látjuk, hogy míg a zenei mintán a 0 közeli értékek torony magasan nagyobb gyakorisággal vannak jelen, addig egy szinuszjel esetén pont hogy a szélső amplitúdóértékek a gyakoribbak, a köztes értékekkel szemben. Azaz, zenénél többet tartózkodik a jel a 0 közelében, és csak nagyon keveset a csúcsokon, addig a szinuszjel sokat tartózkodik a csúcsok közelében, és a nullán meg keveset. Az egyenletes eloszlású jeleknél (egyenletes eloszlású zaj és a fűrész) a vízszintes vonal nem meglepő eredmény. Négyszögjel ugyan nem szerepel a grafikonban, de nem nehéz kitalálni, hogy az kizárólag a két szélső értéken van csak, közötte nincs értéke. De mért is fontos ez az ábra a wattos terhelés szempontjából? Nos, felfoghatjuk úgy, hogy a jel minden értéke egy időegységnyi terhelést jelent. Minél nagyobb ebben az időegységben az amplitúdóérték abszolút-értékben, annál nagyobb az időegységben létrejövő terhelés is, sőt, négyzetesen! Az ábra összegzi, hogy a különböző amplitúdó értékek hányszor szerepelnek a mintában, így az általuk okozott terhelésegységeket is. Ha az ábra olyan, hogy csak a széleken tartalmaz értéket (ilyen a négyszögjel) akkor a legnagyobb az átlagterhelés is. Ha csak a nullán (középeb) tartózkodik, az a nincs jel, a terhelés 0 Watt. Ha az amplitúdó-tartomány széleire koncentrálódik a grafikon (jelen esetben két csúcs formájában; pl. szinusz) akkor nagyon sok a leadott teljesítmény. Ha a 0 érték köré koncentrálódik egy db csúcs, akkor pedig kevés. Minél karcsúbb ez a 0 közeli csúcs, annál kevesebb az átlagteljesítmény, ill minél karcsúbban simul a szélekre, abban az esetben annál több. Látjuk, hogy a zene pl. kevesebbet terhel, mint a 10dB crest-faktorú gauss-zaj. A választott zenei minta legrosszabb crest-factora egyébként 14dB, azaz egy viszonylag visszafogott terhelésű minta:

 

Úgy vélem, hogy a hisztogram valós idejű hosszú időállandós generálását is meg lehetne oldani a készülékkel, és egy ilyen grafikon talán szemléletesebben tudná indikálni a terhelés nagyságát. Mivel a teljesítmény az amplitúdó négyzete, így lehetne négyzetesíteni is az ábrát. Sőt, magából az ábrából is lehetne CF értéket számolni, de ehhez még kicsit foglalkoznom kell a téma elméleti részével.

Frissítés 2018.04.01: Szkóppal ellenőrizve a digitalizálandó jelet nem csak a fent említett belengések okoznak “hamis” csúcsmérést, hanem egy másik jelenséget is sikerült tetten érni, nevezetesen a jel trapézosodását. Ezt a soros csatoló kondenzátor okozza, nem is értem, mért nem gondoltam eddig rá. Még az 1kHz-es négyszögjelen is keletkezik egy enyhe trapéztorzítás, az alacsonyabb frekvenciákon pedig fokozódik.