Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

analoge elektronica ==> software DSP

Pagina: 1
Acties:
  • 334 views sinds 30-01-2008
  • Reageer

  • terabyte
  • Registratie: September 2001
  • Laatst online: 06-07 23:08

terabyte

kan denken als een computer

Topicstarter
Introductie

Ik ben bezig met een hobbyprojectje, waarbij ik een bestaande synthesizer vertaal naar een softwarematige equivalent dat zo goed mogelijk overeenkomt met het origineel. De synth zelf heb ik niet (als ik het wel zou hebben zou ik geen softwareversie hoeven te schrijven :P), maar de schema van de elektronica + bijbehorende lijst/specs van componenten heb ik wel.

Het probleem is dat ik niet genoeg kennis heb van analoge elektronica. ik ben geen Electronics Engineer, maar een informaticus in opleiding.
Ik weet wel genoeg over DSP's (transferfunctie, bode plots, etc.). Verder heb ik wel een basiskennis (analoge) electronica (kennis over weerstanden, transistoren, condensatoren, etc.) en belangrijke schakelingen zoals op-amps, maar niet de belangrijke wiskundige theorie daarachter.

Het probleem

Het probleem is dat ik niet in staat ben zelfstandig een analoge schakeling te vertalen in een software digital signal processor.

Ik heb natuurlijk wel zoveel mogelijk zelf geprobeerd dingen uit te vogelen.
Ik heb bijvoorbeeld delen van de schakeling als 'netlist' ingevoerd in gnucap, een SPICE-compatible circuit simulator om zo uit te vinden wat bepaalde delen van de schakeling doen.

Voorbeeld deelprobleem

Er is een onderdeel waarbij white noise door een schakeling wordt geleid. De schakeling is voor mij een black box.
Aan mijn research vooraf weet ik dat het een low pass filter (RC) schakeling is, omdat er een weerstand en condensator in zit, waarbij de condensator met aarde verbonden is. Maar ik ben dus benieuwd naar de exacte frequentiekarakteristieken: voer een signaal in met een bepaalde frequentie, wat is de daarbij behorende 'gain' (een multiplicatiefactor op schaal 0 tot 1).

Naast de bekende RC filter zijn nog een paar extra weerstanden en een elco opgenomen. Ik als niet-elektronica specialist weet niet wat de invloeden zijn van die componenten zijn. Daarom heb ik dat stukje schema in gnucap laten doorrekenen. Het blijkt dat de black box niet een LPF is, maar een soort bandpass filter. Met gnuplot heb ik een formule gevonden die daarbij hoort (kan GoT \LaTeX notatie aan?).

Nu is mijn doel de gevonden formule (gainfactor als functie van frequentie) om te zetten naar een transferfunctie en uiteindelijk een DSP. Hoe doe ik dat?

[ Voor 6% gewijzigd door terabyte op 21-07-2004 20:29 ]


  • XTerm
  • Registratie: Juli 2001
  • Laatst online: 10-06 17:45
Kan je het schema (met waarden) even tekenen ?
offtopic:
Woei, ik wist niet dat er nog GNUcappers op GoT rondliepen !!

  • terabyte
  • Registratie: September 2001
  • Laatst online: 06-07 23:08

terabyte

kan denken als een computer

Topicstarter
Hier het schema van het beschreven subprobleem:

Afbeeldingslocatie: http://www.tweakers.net/ext/f/37920/full.gif

links: input white noise,
midden: 'black box'
rechts: output gefilterde signaal.

Aangezien je blijkbaar bekend bent met gnucap, terwijl ik slechts een beginner ben, heb ik nog twee vragen:
- dien je een elco op dezelfde manier in je netlist in te voeren als een gewone condensator?
- hoe kun je de output van gnucap (bijv ac commando) wijzigen zodat het niet bijv 1.265K uitvoert, maar 1265 (dit ivm betere compatibiliteit met gnuplot). Nu moet ik dat allemaal handmatig doen.

[ Voor 16% gewijzigd door Verwijderd op 22-07-2004 19:42 ]


  • Scheppie
  • Registratie: Juli 2002
  • Laatst online: 24-11 11:33
Dit is idd een banddoorlatend filter de versterking van deze schakeling is altijd kleiner dan 1. Dit wordt ook wel een passief filter genoemd.
De combinatie van R18 en C3 is namelijk een HPF (hoogdoorlaat), in serie met een LPF bestaande uit R7 en C10. Zowel het HPF als het LPF heeft een kantelfrequentie.
De kantelfrequenties zijn te berekenen volgens de formule Omega k = 1/R*C, waarbij Omega = 2*Pi*f.
Verder zal omdat dit een filter van de eerste orde is de demping van het filter op de kantelfrequenties 3bB zijn, verder zal bij het LFP de demping voor de kantelfrequentie 10dB per decade (factor tien in de frequentie) zijn en voor de HPF 10 dB demping na de kantelfrequentie.

[ Voor 78% gewijzigd door Scheppie op 23-07-2004 09:17 ]


  • sebastius
  • Registratie: September 2000
  • Laatst online: 24-11 20:57

sebastius

Laten we lekker link gaan doen

Wat misschien wel grappig is om te kijken is de arcade emulator MAME. Er zijn namelijk een paar gasten bezig voor bepaalde hele oude games die alleen discreet geluid hebben, alle schema's ervan om te zetten naar software, naar formules dus. Misschien kun je daar het een en ander van lenen.

  • Mike Jarod
  • Registratie: Januari 2002
  • Niet online
terabyte schreef op 21 juli 2004 @ 20:28:
Introductie
waarbij ik een bestaande synthesizer vertaal naar een softwarematige equivalent
Welke synth had je precies in gedachten? En waar naartoe wil je het vertalen? Stand-alone software of bijvoorbeeld een VSTi (Cubase Virtual Instrument)?

offtopic:
voor de rest heb hier de ballen verstand van deze technische 'vertaling', maar als je er een VSTi oid van maakt dan wil ik best wat patches maken :Y)

  • terabyte
  • Registratie: September 2001
  • Laatst online: 06-07 23:08

terabyte

kan denken als een computer

Topicstarter
Mike Jarod schreef op 23 juli 2004 @ 10:36:
[...]
Welke synth had je precies in gedachten? En waar naartoe wil je het vertalen? Stand-alone software of bijvoorbeeld een VSTi (Cubase Virtual Instrument)?
Roland TR-909. Als dat af is ga ik verder met de TR-808 en de Alpha Juno series

Het wordt een open-source library, waarbij ik zelf een LADSPA interface ervoor zal schrijven (dat is een soort VST-standaard voor Linux). Aangezien het OSS is, kunnen anderen als ze willen er een Windows en/of Mac VSTi interface voor schrijven.

  • XTerm
  • Registratie: Juli 2001
  • Laatst online: 10-06 17:45
In GNUcap is een condensator een perfecte condensator. Het verschil tussen elco en andere is fysisch en irrelevant voor GNUcap. De output van AC is niet echt geschikt voor gnuplot, verdiep je even in transient analyse.

Om een freqentiedomeinanalyse te maken weet ik ook zo niet 1 2 3 een goeie oplossing...

  • Eraser127
  • Registratie: Maart 2001
  • Laatst online: 15:08

Eraser127

Nijkerk

waarom maak je dit? gewoon voor de fun? er is namelijk al een TR-909/TR-808/TR-606 gebaseerde software: D-Lusion Drumstation Ik heb em zelf en het werkt erg lekker.

[ Voor 3% gewijzigd door Eraser127 op 24-07-2004 21:44 ]

My Discogs


  • terabyte
  • Registratie: September 2001
  • Laatst online: 06-07 23:08

terabyte

kan denken als een computer

Topicstarter
Eraser127 schreef op 24 juli 2004 @ 21:44:
er is namelijk al een TR-909/TR-808/TR-606 gebaseerde software: D-Lusion Drumstation Ik heb em zelf en het werkt erg lekker.
- voor windows 95/98/nt (heb ik niks aan, 'k gebruik Linux)
- het ondersteunt zelfs geen VST
- Ik maak een prog dat de echte hardware zo dicht mogelijk simuleert. De meeste 'drumsynths' hebben stiekem samples ingebouwd en dat hoor ik zo (dmv de 'clap-test': handclap is opgebouw uit white noise en opeenvolgende claps zijn altijd anders, dat geeft net iets extra's)

Verwijderd

Als je de overdrachtfunctie H(jw) van het analoge deel hebt, dan kun je dit gaan transleren naar het z-domein.

De overdracht van een analoge bandfilter ziet er iets uit als:

H(jw) = ( jw*t1 / 1+jw*t1 ) * ( 1 / 1+jw*t2)

w staat voor omega
t staat voor tau.

t1 is in dit geval de tau van het het hoogdoorlaatfilter
t2 de tau van het laagdoorlaatfilter

Bereken de tau door de kantelfrequenties van de analoge filters als volgt in te vullen: t = 1 / ( 2pi * f) -> waarbij f de kantelfrequntie is.

Nu moet je de H(jw) gaan transleren naar het z-domein:
Komt erop neer dat je 'jw' gaat vervangen door ( 1 - z^-1 ) / T
T is een belangrijke variabele in dit verhaal, dit is namelijk de sample-intervaltijd.

Als je dit gedaan hebt, dan moet je er voor zorgen dat dat er in de uiteindelijke deling geen z-waarden in aparte delingen staat. Ik zal even een voorbeeldje geven:

Ik neem voor t1 = 796 usec en voor t2 = 79,6 usec.
Voor de sample-intervaltijd neem ik 22.68 usec (= 44.1kHz)
Na translatie naar het z-domein krijg je dan:

( 35.1 - 35.1 * z^-1 ) / ( 162.76 - 284.916 * z^-1 + 123.157 * z^-2 )

Dit is een vrij moeilijke berekening, maar het komt erop neer dat je gewoon de waarden voor tau en T moet invullen en dan wat gaat schuiven met de z-waarden.

Ok, nu je de overdracht H(z) in het z-domein hebt, kun je verder gaan met de uiteindelijke differentievergelijking. Probeer te volgen hoe ik de getallen in de volgende formule invul:

Y(z) * (162.76 - 284.916 * z^-1 + 123.157 * z^-2) = X(z) * (35.1 - 35.1 * z^-1)
-->
162.76*y[n] - 284.916*y[n-1] + 123.157*y[n-2] = 35.1*x[n] - 35.1*x[n-1]
-->
y[n] = 0.21562*x[n] - 0.21562*x[n-1] + 1.75053*y[n-1] - 075668*y[n-2]


Deze laatste formule is dus de formule waar het om draait. Je uitgangsample y[n] is afhankelijk van je ingangsample x[n], het voorgaande ingangsample x[n-1], het voorgaande uitgangsample y[n-1] en het daar aan voorafgaande uitgangsample y[n-2]. Dit is makkelijk te implementeren in een DSP.

Ok, hierboven heb ik dus een voorbeeld neergezet van een algemeen banddoorlaatfilter. Dit is nog niet precies van toepassing op jouw filter, maar het geeft wel een idee hoe het opgelost zou kunnen worden. Ik heb overigens gebruik gemaakt van de methode van Euler om tot dit resultaat te komen. Op internet is veel te vinden over deze methode.
Vraag gerust om uitleg van dingen die je niet snapt. Ik ben zelf echter ook nog een beginner in de dsb wereld, dus ik snap er ook nog niet alles van :P

  • terabyte
  • Registratie: September 2001
  • Laatst online: 06-07 23:08

terabyte

kan denken als een computer

Topicstarter
Scheppie schreef op 23 juli 2004 @ 09:04:
Dit is idd een banddoorlatend filter de versterking van deze schakeling is altijd kleiner dan 1. Dit wordt ook wel een passief filter genoemd.
De combinatie van R18 en C3 is namelijk een HPF (hoogdoorlaat), in serie met een LPF bestaande uit R7 en C10. Zowel het HPF als het LPF heeft een kantelfrequentie.
De kantelfrequenties zijn te berekenen volgens de formule Omega k = 1/R*C, waarbij Omega = 2*Pi*f.
Verder zal omdat dit een filter van de eerste orde is de demping van het filter op de kantelfrequenties 3bB zijn, verder zal bij het LFP de demping voor de kantelfrequentie 10dB per decade (factor tien in de frequentie) zijn en voor de HPF 10 dB demping na de kantelfrequentie.
Omdat de meeste schakelingen iets ingewikkelder zijn dat de filters 'uit het boekje', heb ik een spice analyse gemaakt van de complete filter.
Om de kantelfrequenties te berekenen zorg ik dat de top van de verkregen gain-frequentie diagram exact 1 (== 0 dB) is. Vervolgens bepaal ik de frequenties bij gain = 0.707 (== -3 dB). Is dit een correcte aanpak of zit er een adder(tje) onder het gras?

Verwijderd

Als je de HPF en LPF op die manier apart berekend, dan zou je de kantelfrequenties juist moeten kunnen bepalen. Je moet dus gewoon meten wanneer de uitgang van de afzonderlijke filters gelijk is aan 0,707 (-3dB) keer de ingang van het afzonderlijke filter is.

Het enige wat me te binnen schiet, wat betreft het addertje onder het gras, is het feit dat de afzonderlijke filters elkaar (enigzins) beïnvloeden. Het laatste filter zorgt er dus voor dat de kantelfrequentie van het voorgaande filter ietsjes verschuift. Dit komt door de belasting van het laatste filter.
Als je nu gewoon je complete simulatie van het gehele bandfilter neemt, en dan bekijkt waar de uitgang van de afzonderlijke filters gelijk is aan 0,707 keer de ingang van het betreffende filter, dan zit je altijd goed.
Pagina: 1