J
Johannes Bauer
Guest
Hallo Gruppe,
ich habe mir einen Rauschgenerator gebaut mit einem AVR ATtiny26. Mega
simples Design: PRNG erzeugt 8-Bit Wort, wirft es auf PORTA, R2R,
Verstärker, Lautsprecher.
Es geht nicht um irgendwie physikalisch korrektes rosa/braunes Rauschen,
sondern darum, dass das -- klingt blĂśd, weiĂ ich -- "sanft" klingt und
eben in Software "abschwächbar" ist. Konkret verändere ich also die
Verteilung Energie/Frequenz in Software.
Das ist unheimlich simpel: Ich habe einen 8-Bit Akkumulator, der jeweils
auf PORTA ausgegeben wird. In jeder Iteration wird der durch
accu += (prng() / divisor)
Voller Code: https://github.com/johndoe31415/tiny26noise/blob/master/main.c
Verändert. Je grĂśĂer "divisor", desto "sanfter" das Rauschen.
Prinzipiell funktioniert das auch prima, mit einer Einschränkung: In der
Praxis erhalte ich mit grĂśĂeren Divisor-Werten auch immer ein lästiges
knacksen.
Da das immer an denselben Stellen auftritt in demselben Pattern (ist ja
ein 100% deterministischer PRNG) nehme ich an, dass das an der Division
liegt, die auf dem AVR in Software emuliert wird und daher nicht
Laufzeitkonstant ist.
Jetzt habe ich Ăźberlegt, wie ich das besser machen kann. Klar, kann nur
Zweierpotenzen als Teiler zulassen, aber dann ist der Unterschied
zwischen zwei Levels recht stark. Fällt jemandem eine gute Idee ein, wie
man das ohne Hardwaredivision, nur mit Integerarithmetik und in
konstanter Laufzeit hinkriegt? Mir fehlt gerade eine gute Idee dafĂźr.
Viele GrĂźĂe,
Johannes
--
"Performance ist nicht das Problem, es läuft ja nachher beides auf der
selben Hardware." -- Hans-Peter Diettrich in d.s.e.
ich habe mir einen Rauschgenerator gebaut mit einem AVR ATtiny26. Mega
simples Design: PRNG erzeugt 8-Bit Wort, wirft es auf PORTA, R2R,
Verstärker, Lautsprecher.
Es geht nicht um irgendwie physikalisch korrektes rosa/braunes Rauschen,
sondern darum, dass das -- klingt blĂśd, weiĂ ich -- "sanft" klingt und
eben in Software "abschwächbar" ist. Konkret verändere ich also die
Verteilung Energie/Frequenz in Software.
Das ist unheimlich simpel: Ich habe einen 8-Bit Akkumulator, der jeweils
auf PORTA ausgegeben wird. In jeder Iteration wird der durch
accu += (prng() / divisor)
Voller Code: https://github.com/johndoe31415/tiny26noise/blob/master/main.c
Verändert. Je grĂśĂer "divisor", desto "sanfter" das Rauschen.
Prinzipiell funktioniert das auch prima, mit einer Einschränkung: In der
Praxis erhalte ich mit grĂśĂeren Divisor-Werten auch immer ein lästiges
knacksen.
Da das immer an denselben Stellen auftritt in demselben Pattern (ist ja
ein 100% deterministischer PRNG) nehme ich an, dass das an der Division
liegt, die auf dem AVR in Software emuliert wird und daher nicht
Laufzeitkonstant ist.
Jetzt habe ich Ăźberlegt, wie ich das besser machen kann. Klar, kann nur
Zweierpotenzen als Teiler zulassen, aber dann ist der Unterschied
zwischen zwei Levels recht stark. Fällt jemandem eine gute Idee ein, wie
man das ohne Hardwaredivision, nur mit Integerarithmetik und in
konstanter Laufzeit hinkriegt? Mir fehlt gerade eine gute Idee dafĂźr.
Viele GrĂźĂe,
Johannes
--
"Performance ist nicht das Problem, es läuft ja nachher beides auf der
selben Hardware." -- Hans-Peter Diettrich in d.s.e.