Zijn er DSP C++ programmeurs hier?

Ok toch nog even dan. Ik heb nog genoeg kruit, maar ik heb helemaal geen zin om met kruit te schieten, wel om op normale toon over softsynth theorie te discussieren. Daarom even alleen een reactie op "onbeschoft" en "arrogant": hoe zou je je "Harry Pottercode"-opmerking zelf klassificeren dan? "Vriendelijk" en "constructief"?

Verder leg je me voortdurend zaken in de mond die ik niet heb gezegd ("DSP-benadering die niet langzamer is, zoals jij beweert", ), ontken je dat je zelf bepaalde dingen hebt gezegd (#36 gaat over een toongenerator o.b.v. een gesamplede toon; dat is geen wavetable lookup?) en noem je mijn antwoorden op je eigen vragen ineens "totaal irrelevant voor de discussie".

Nou, dat noem ik dan onbeschoft en arrogant.


nee zmooc, ik ga hier geen tijd meer insteken. Ik wil alleen nog on topic praten over DSP. Je hebt zelf de deur met een luide klap dicht gesmeten en mag bij jezelf te rade gaan wie hier nou eigenlijk arrogant doet en anderen de les leest.
 
toongeneratoren en DSP

toongeneratoren en DSP

Altijd jammer als een belangrijke discussie op synthforum dreigt vast te lopen door "gedoe". Daarom maar even slikken en het nieuwe jaar volle goede moed en voornemens openen met een bericht on topic!

Er werd in deze draad beweerd dat DSP pas om de hoek komt kijken als je een filter wilt gaan programmeren en niet bij bijv. oscillatoren of mixers. Aan de hand van een voorbeeld wil ik laten zien dat die stelling, hoewel begrijpelijk, niet is vol te houden en dat DSP betrekking heeft op alle aspekten van de discrete simulatie van typische synthesizerklanken zoals we die kennen sinds de eerste synth's van Moog en Oberheim. DSP geeft een beschrijving en een verklaring van alle technische kanten daarvan; en die heb je nodig als je een sofsynth wilt gaan programmeren.

Als voorbeeld neem ik de digitale (of beter gezegd: discrete) simulatie van een "klassieke", analoge synthesizergolfvorm, de blokgolf. De golfvorm daarvan is simpel en het is kinderspel om die digitaal weer te geven: je maakt een rij getallen die bestaat uit twee segmenten van gelijke lengte: het eerste segment bestaat uit steeds hetzelfde positieve getal. Het tweede segment maak je door de getallen van het eerste te vermenigvuldigen met -1. Bijvoorbeeld +10,+10,+10,+10,-10,-10,-10,-10. Als je die reeks steeds maar herhaalt, krijg je inderdaad een blokgolf. Hoe langer de segmenten, des te lager de toon.

Dit is de manier waarop de blokgolf het vaakst in software wordt vorm gegeven. Het idee heeft iets heel evidents, het is simpel van opzet, gemakkelijk te realiseren en je kunt toch moeilijk beweren dat er diepe DSP-inzichten achter zitten. Vandaar dat het wel begrijpelijk is om te zeggen dat je geen DSP nodig hebt om een blokgolf te programmeren.

Maar wat valt er te zeggen over de klank van deze discrete blokgolf?
Er bestaat een oude en taaie discussie over klank- of karakterverschillen tussen digitaal en analoog. Sommigen vinden dat een achterhoedediscussie, anderen houden stug vol dat analoog veel levendiger, natuurlijker en wamer klinkt dan digitaal. Nu is de vraag: kun je een verschil horen tussen deze digitale blokgolf en een van, laten we zeggen, een Moog synth? Ikzelf kan het antwoord daarop niet geven, want ik heb geen analoge synth. Maar er is veel fundamentelere vraag die ik wel kan beantwoorden. Die vraag luidt: kun je aantonen dat de discrete blokgolf van hierboven anders MOET klinken dan een continue blokgolf?
Het antwoord is verrassend. Ja inderdaad: er bestaat een objectief aantoonbaar en trouwens ook duidelijk hoorbaar verschil tussen klankkleuren van beide tonen. Dat hangt samen met de verschillen in spectra.

In elk inleidend boek over synthesizers vind je het eenvoudige spectrum van een continue blokgolf:
(1) het spectrum is oneindig, d.w.z. een blokgolf heeft oneindig veel boventonen (daarvan hoor je uiteraard slechts het gedeelte tot aan de toongrens, zeg 15-20 kHz); alle boventonen met een even nummer hebben een amplitude gelijk aan 0, dus die hoor je niet. Dat geeft de blokgolf die herkenbare holle, nasale klank.
(2) er bestaat een simpele wiskundige formule (al door Fourier zelf gegeven!) voor de sterkte van elke boventoon; die is omgekeerd evenredig met het nummer ervan; bijvoorbeeld als de grondtoon een amplitude heeft die gelijk is aan 1, dan heeft de 17de boventoon een amplitude van 1/17.

Als je dat vergelijkt met het spectrum van de discrete blok, ontdek je een paar belangrijke verschillen.
(1) het spectrum van de discrete blok is uiteraard NIET oneindig. Volgens de samplingtheorie (stelling van Nyquist) is de frequentie van de hoogste boventoon altijd lager dan of gelijk aan de halve samplingfrequentie.
(2) Net al bij de continue blokgolf bestaat er ook voor het spectrum van de discrete blokgolf een wiskundige formule die vertelt hoe sterk elke boventoon is. Maar die formule is niet dezelfde als die van het spectrum van de continue blokgolf! Met andere woorden: de DSP-theorie voorspelt dat de discrete blokgolf, zoals die wordt opgewekt met de methode van hierboven, anders zal klinken, immers het amplitudespectrum verschilt.

Dit toont al aan dat je niet om DSP heen kunt als je een natuurgetrouwe digitale simulatie van een analoge synthklank wilt maken. Maar er is meer. Een van de belangrijkste producten van DSP is de FFT waarmee je het spectrum van een willekeurig geluid kunt berekenen en die je in heel veel audiosoftware aantreft. Juist door die FFT hoef je die spectrumformule van de discrete blokgolf niet eens te kennen en kun je direct vast stellen dat het spectrum van de continue en de discrete blokgolf duidelijk van elkaar verschillen.

Met de FFT stel je vast dat alle boventonen van de discrete toon ietsje sterker zijn dan die van de continue toon. Dit verschil neemt zelfs toe met de frequentie, zodat de afwijking steeds groter wordt. Het klankeffect daarvan is dat de discrete blokgolf net zo klinkt als een continue NADAT die door een hoogdoorlaatfilter (met een heel geleidelijk verlopende flank) is gehaald. Daarom klinkt de discrete een tikje scherper, minder warm, dan de continue.

Zie nou wel, roepen de Analogen, hier heb je het objectieve bewijs dat analoog warmer en natuurlijker klinkt dan digitaal!
Maar dat is natuurlijk onzin, en de oplossing is simpel en volgt ook direct uit de DSP-theorie: maak een Fouriersynthese van 1 blok periode met daarin alle boventonen exact dezelfde amplitudes hebben als de contine blokgolf, tot aan de halve sampling frequentie. Zo krijg je een discrete blokgenerator die even warm klinkt als een continue!
 
Laatst gewijzigd:
@WaveGuide7... dat praatje over die 'Analogen' is toch niet omwille van m'n mp3-posting, hé ?
Ikzelf heb nu trouwens enkel nog digitale synths (de betere dan wel :D). Maar, uit praktijk-ervaring weet ik dat maar heel weinig digitale synths de modulatie mogelijkheden van analoge synths goed kunnen evenaren. Die mp3 is eerder een uitdaging voor diegene die beweerd dat hij/zij dit ook met zijn/haar digitale synths kan. Ik zeg niet, dat dit niet kan ! Alleen vind ik het raar dat met al het moderne DSP-geweld die mogelijkheid toch maar zelden terug te vinden is.
Mogelijk zal ik het zelf eens terug proberen met wat ik nu bezit (questie van tijd en zin).
Het eeuwige gezever analoog is beter, warmer kan niet op een digitaal forum uitgevochten worden, dus dom om er ook aan te beginnen.
 
Dat is een interesant stukje tekst waveguide!

Weer wat wijzer:okdan:

Zoals eerder aan gegeven post ik hier mijn eerste module
De MyFM2

Er zit ook een plaatje bij voor wat uitleg

Wat is de bedoeling van deze module?
Omdat ik van EVM de gratis Se Osc had gedownload en daar dus geen fm op zit
ben ik een module gaan maken die zorgt voor het fm gedeelte
de module heeft 2 ingangen

Input 1
ModIn

en twee uit gangen Out1 en Out 2

Nou is output 2 ook bruikbaar maar als de waarde van de mod in te hoog is dan krijg je een distorted geluid

out 1 is beter

Als je bijv twee osc's neemt en dan eentje in input 1 en de andere in mod in
dan gaat het signaal van de mod in op de golf van osc1 mee
door het singaal wat binne komt bij de mod in eerst te vermenigvuldige of gewoon harder instuuren
kan je de hoeveelheid bepalen dit kan je makkelijk doen door een leveladj voor osc2 en de mod in te hangen met daar aan een draaiknop en zijn maximale waarde op 30 te zetten.

Ik heb ook even de code op gezocht van het fm ? gedeelte
Nou weet ik niet zo veel van dsp programeren of wiskunde dus ben al blij dat het onderstaande werkt en nog bruikbaar is ook !

Y -Input 1
M - Modin
PI - 3.14159265358979323846264338327
Aout - Output1

AC=-2
AC=Y*sin(PI*M);
Aout=AC+Y;
 

Attachments

  • Gijs-FM-SE.zip
    71,1 KB · Bekeken: 107
  • MyFm2.bmp
    129,3 KB · Bekeken: 112
Dat "moderne DSP-geweld" (#64) is misschien minder doorgedrongen in muziekapparatuur dan je zou denken. Je zou voor de aardigheid eens kunnen nagaan hoe de golfvorm van een blokgolf afkomstig uit een van je eigen digisynth's eruit ziet. Is dat een mooie, strakke kanteel? Dan hoor je geen zuivere blokgolf (#63). Een discrete blokgolf die klinkt als een echte, continue ("analoge") blokgolf moet eruit zien als een bibberig golfje met de bekende "ezelsoren" (de zg. "overshoot" t.g.v. Gibbs-fenomeen).

Ik denk dat ontwikkelaars dat heel goed weten, maar bewust niet zo implementeren, omdat ze terecht bang zijn dat synthgebruikers de vertrouwde blokvorm dan niet meer zouden herkennen en daardoor gaan denken dat het apparaat of de toongenerator niet deugt. Bovendien, als het gaat om subtractieve synthese, wie kan het nou eigenlijk wat schelen dat een strakke, discrete blokgolf ietsje scherper klinkt dan een analoge? Met filters regel je de uiteindelijk klank.

Maar ik zie niet in waarom digitale synth's minder modulatiemogelijkheden zouden hebben als analoge. Digitale signaalverwerking is immers in alle opzichten superieur aan de analoge. Welke modulaties bedoel je precies?
 
Dat "moderne DSP-geweld" (#64) is misschien minder doorgedrongen in muziekapparatuur dan je zou denken. Je zou voor de aardigheid eens kunnen nagaan hoe de golfvorm van een blokgolf afkomstig uit een van je eigen digisynth's eruit ziet. Is dat een mooie, strakke kanteel? Dan hoor je geen zuivere blokgolf (#63). Een discrete blokgolf die klinkt als een echte, continue ("analoge") blokgolf moet eruit zien als een bibberig golfje met de bekende "ezelsoren" (de zg. "overshoot" t.g.v. Gibbs-fenomeen).
Wel WaveGuide7 dat is nu net wat ik ook denk. Veel blabla weinig VA.
Een van de eerste dingen die ik meestal doe is de golfvormen van m'n synth visualiseren (CoolEdit in my case, vroeger ook met een oscilloscoop). Zelden zie je die mooie blok- zaag- of andere golfvormen zoals ze zouden moeten zijn. De bron is dus al subtractief bewerkt... (of ook additief)
Ik denk dat ontwikkelaars dat heel goed weten, maar bewust niet zo implementeren, omdat ze terecht bang zijn dat synthgebruikers de vertrouwde blokvorm dan niet meer zouden herkennen en daardoor gaan denken dat het apparaat of de toongenerator niet deugt. Bovendien, als het gaat om subtractieve synthese, wie kan het nou eigenlijk wat schelen dat een strakke, discrete blokgolf ietsje scherper klinkt dan een analoge? Met filters regel je de uiteindelijk klank.
Hier vrees ik dat je spijtig genoeg weerom juist bent, ten nadele van diegene die wel kennis hebben van subtractieve synthese !
Wat er niet inzit kan je er ook niet (meer) uithalen hé. Temeer indien ... zie hieronder.
Maar ik zie niet in waarom digitale synth's minder modulatiemogelijkheden zouden hebben als analoge. Digitale signaalverwerking is immers in alle opzichten superieur aan de analoge. Welke modulaties bedoel je precies?
Ik heb het vnl. over de kwaliteit van de modulatiemogelijkheden. Zoals reeds vermeld audio-modulaties, dus vooral op de bron zelf : de oscillators. Daar die meestal miserable zijn is de rest ook weinig zinvol (temeer bij subtractief).
 
Laatst gewijzigd:
@Sidx8580:

Y -Input 1
M - Modin
PI - 3.14159265358979323846264338327
Aout - Output1

Als ik het goed begrijp, zijn Y, M en Aout drie tijdsignalen.
Dan de regels daaronder:

AC=-2
AC=Y*sin(PI*M);
Aout=AC+Y;

AC krijgt eerst de waarde -2, maar die wordt in de regel daaronder overschreven door Y*sin(PI*M). ???
Y*sin(PI*M) wil zeggen dat AC een vermenigivuldiging (modulatie) is van signaal Y met de sinus van een met PI opgeschaalde versie van signaal M.
Maar als M een gesampeld signaal is, wat ik aanneem, dan bestaat het helemaal uit gehele getallen (samples zijn integers) en sin(PI*heelgetal) = 0.
Dus AC = Y*0 = 0
en Aout = Y.

Er gebeurt in deze code dus helemaal niks.
Behalve natuurlijk dat de input op een omslachtige manier doorgelust naar de output.
Is dit een geintje of heb ik iets gemist?
 
Uuh nee geen geintje

Dit is 1 van mijn eerste dsp probeersels gebaseert op de Fm formule

Y en M daar moet een osc in
vervolgens gaat M op de freqentie van Y zitten van daar ook het PI verhaal aangezien een geluids golf rond is

Hij doet wel degelijk wat in me Mini fm synth heb ik deze module gebruikt
en het klinkt wel als fm

Y en M daar komen audio singalen in

even een audio sample van twee sinusen gecombineerd door de onderstaande code
waar bij het singaal van osc2 die naar M gaat telkens harder word en zachter

Trouwens nou werkt dit in synthedit en de code is gemaakt om oscilatoren of filters te combineren met elkaar nou weet ik niet of deze code zou werken in een ander opzet
 

Attachments

  • sinsin.mp3
    174,8 KB · Bekeken: 120
Laatst gewijzigd:
Hoi Sidx8580,
Ook al lijkt het er misschien op, hier is geen sprake van FM, want de frequentie van Y wordt niet door die van M gemoduleerd.
De zwiep die je hoort komt, zoals je zelf al opmerkte, door het harder en zachter worden van M. Maar in die zwiep vindt geen interactie plaats met Y, maar met, wat je zou kunnen noemen, een "carrier van 0 Hz"!
Wat er na die "0 Hz FM" gebeurt is Amplitude Modulatie met Y, gevolgd door een mix met diezelfde Y!!
:yamaha:
 
Ben ik toch blij dat het wat doet :P

En het zit aardig in de richting van wat ik wou bereiken dus ben alsnog trots op me eerste se module :D

Maar hoe zou ik echte fm kunnen bereiken?
of moet ik dan een osc bouwen ?
 
Yup, best via phase modulation. Die oscillator bestaat enerzijds uit een 'phasor' (een ramp waveform/counter met een bepaalde bepaalde frequentie) en een (co)sinusfunctie. Die phasor stelt de phase voor van de oscillator. deze kun je dan met een input (een andere golfvorm - meestal dezlfde osc als boven beschreven) moduleren.

http://crca.ucsd.edu/~msp/techniques/latest/book.pdf

pag 143 fig 5.15b

(Waveguide7 zal het waarschinlijk beter kunnen uitleggen, ik ben al blij dat ik het begrijp :p)
 
Back
Top