Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Unzi
Anmeldungsdatum: 26.05.2006 Beiträge: 5 Wohnort: Erfurt, Thüringen, Dtl.
|
Verfasst am: 13.03.2007, 16:25 Titel: 1/f-Rauschen erzeugen |
|
|
Hallo,
ich brauche für einen Musik-Vortrag einen möglichst für Normalsterbliche verständlichen Algorithmus zum Erzeugen von 1/f-Rauschen auf dem PC-Speaker (SOUND-Befehl), das ich dann simultan noch auf den Bildschirm zeichnen möchte. Ich habe bereits auf mehreren Seiten gelesen, dass es quasi keinen einfachen Algorithmus gibt, aber ohne wenigstens die Grundlagen zu verstehen, kann ich die C-Algorithmen nicht transformieren (http://www.firstpr.com.au/dsp/pink-noise/phil_burk_19990905_patest_pink.c). In dem tollen Musikbuch (Musik um uns Sekundarbereich II, Metzler) stimmt zwar die Grafik, aber wenn jemand die Fehler in dem Code überhaupt finden könnte, der daneben steht, wäre das schon super:
Code: | FUNCTION eins_f(letzt,umfang)
' letzt - zuletzt berechneter Wert
' umfang - Wertebereich (2^n)
neu=0
k=umfang/2
bit=1/umfang
DO
j=letzt/k
if j=1 then letzt=letzt - k
if RND < bit then j=1-kj (?)
new=new+(j*k)
k=k/2
bit=bit*2
LOOP UNTIL k < 1
eins_f = neu
END FUNCTION |
Ich bin für jede Hilfe dankbar!
Unzi |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 13.03.2007, 21:32 Titel: |
|
|
Hallo
Also ich habe zwar noch nie etwas von 1/f-Rauschen gehört und habe auch keine Ahnung, was das Beispielprogramm machen soll (ist ja auch nur eine Function, das dazugehörende Hauptprogramm zu sehen wäre sicher hilfreich), aber ich versuch trotzdem mal, eine Antwort zu geben.
Code: | if RND < bit then j=1-kj |
Da fehlt wohl zwischen k und j am Ende ein Operator. Ich verstehe das Programm wie gesagt nicht, aber ich schätze mal, da könnte ein Multiplikationszeichen fehlen, also k * j.
Dann wird einmal eine Variable Namens "neu" und dann eine, die "new" heisst verwandt. Ich glaube, damit ist eigentlich die gleiche Variable gemeint, denn sonst macht das Ganze für mich noch weniger Sinn.
Und noch etwas grundsätzliches. Mit dem SOUND-Befehl kannst du nur ein Rechtecksignal mit wählbarer Länge und Frequenz erzeugen. Ich denke für ein Rauschen müsstest du auf die Soundkarte zugreifen, was auch möglich ist, die Sache aber weiter verkompliziert.
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 13.03.2007, 21:39 Titel: |
|
|
Da k und j auf der Tastatur direkt nebeneinander liegen, könnte mit kj natürlich auch nur k oder nur j gemeint sein (versehentliches Drücken beider Tasten statt einer). Im Zweifelsfall würde ich einfach mal alle drei Möglichkeiten ausprobieren, welche ein sinnvolles Ergebnis liefert. |
|
Nach oben |
|
 |
Elvis

Anmeldungsdatum: 01.06.2006 Beiträge: 818 Wohnort: Deutschland, BW
|
Verfasst am: 13.03.2007, 21:44 Titel: |
|
|
Wenn der/die Musiklehrer/in keinen Wert auf die Programmierarbeit legt, was
ich stark vermute, würde ich mir ein Programm suchen, bei dem man am be-
sten noch viel Einstellmöglichkeiten hat. Außer du hast noch 3-4 Wochen Zeit,
und dir macht Programmieren und auch die Einarbeitung in nicht ganz einfach
zu verstehende Themen Spaß.
Ich stelle mir die Einarbeitung in DirectSound (DirectX) übrigens sehr spannend
vor.
Grüße, Elvis |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 13.03.2007, 23:08 Titel: |
|
|
Wenn man Rechteck-Wellen erzeugen kann so könnte man doch sehr viele Rechteck-Wellen mit verschiedenen Frequenzen übereinander legen und so schlussendlich ein Rauschen erhalten... oder braucht es verschiedene Wellenformen? Rechteck hat ja Obertöne, wenn auch nich so viele wie Sägezahnwellen.. _________________ ...längre blomstre gamle nord... |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 13.03.2007, 23:33 Titel: |
|
|
c.m.obrecht hat Folgendes geschrieben: | Wenn man Rechteck-Wellen erzeugen kann so könnte man doch sehr viele Rechteck-Wellen mit verschiedenen Frequenzen übereinander legen... |
So funktioniert der SOUND-Befehl aber nicht. Mit der Wahl der Frequenz wird dabei einfach nur ein Teiler eingestellt, der das Signal eines Rechteckgenerators mit gleichbleibendem Takt herunterteilt.Also kann man immer nur eine Frequenz gleichzeitig ausgeben und das Impuls/Pausenverhältnis bleibt auch immer gleich. Ausserdem kann man die Amplitude dieses Rechtecksignals nicht einstellen. _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 13.03.2007, 23:38 Titel: |
|
|
tja, dann muss man eben hardware-nah arbeiten.. es gibt ja schließlich auch wave-player für den pc-speaker  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 14.03.2007, 08:35 Titel: |
|
|
c.m.obrecht hat Folgendes geschrieben: | Wenn man Rechteck-Wellen erzeugen kann so könnte man doch sehr viele Rechteck-Wellen mit verschiedenen Frequenzen übereinander legen und so schlussendlich ein Rauschen erhalten... oder braucht es verschiedene Wellenformen? Rechteck hat ja Obertöne, wenn auch nich so viele wie Sägezahnwellen.. |
Ein Rechtecke hat weniger Oberwellen als ein Sägezahn
Ein Perfektes Rechteck hat Unendlich viele Oberwellen, auch wenn die meisten (also fast alle) sowohl von Frequenz als auch Amplitude her Unhörbar sind. _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 14.03.2007, 10:19 Titel: |
|
|
Ach so das kann nur einen TOn gleichzeitig geben... aber sollte doch irgendwie möglich sein mehrere Töne zu erzeugen, klingt sonst ja nicht allzu interessant
Rechteckwellen haben mehr Oberwellen? OK wenn sie nicht hörbar sind, ich meinte einfach weil Sägezahnwellen am meisten hörbare Obertöne haben  _________________ ...längre blomstre gamle nord... |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 17.03.2007, 16:01 Titel: |
|
|
c.m.obrecht hat Folgendes geschrieben: | Rechteckwellen haben mehr Oberwellen? OK wenn sie nicht hörbar sind, ich meinte einfach weil Sägezahnwellen am meisten hörbare Obertöne haben  |
Jetzt muss ich mir die Mathematischen Grundlagen ansehen, ich vermute das Sägezahn auch Unendlich viele Oberwellen hat.
Sägezahn
Rechteck
Dreieck _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 17.03.2007, 20:45 Titel: |
|
|
Michael Frey hat Folgendes geschrieben: | Jetzt muss ich mir die Mathematischen Grundlagen ansehen, ich vermute das Sägezahn auch Unendlich viele Oberwellen hat. |
Davon gehe ich auch mal aus. Die Fourriersynthese ist ja immer nur eine Näherung. Ich denke man bekommt damit nie eine perfekte Gerade hin und vor allem keine Ecken. Diese sind ja auch nicht differenzierbar, eine Funktion aus überlagerten Sinuskurven ist das dagegen überall. Ob das schon ein hinreichender mathematischer Beweis ist, weiss ich aber auch nicht. Ist ja auch egal, in der Praxis gibt es sowieso keine perfekten Rechteck- oder Sägezahnsignale, weil nichts unendlich schnell abläuft.. _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Unzi
Anmeldungsdatum: 26.05.2006 Beiträge: 5 Wohnort: Erfurt, Thüringen, Dtl.
|
Verfasst am: 26.03.2007, 17:37 Titel: |
|
|
Also wenn ich versuche eure Korrekturen einzubauen führt das zu nichts, es müsste ein neuer Algo her. Danke! Unzi |
|
Nach oben |
|
 |
Unzi
Anmeldungsdatum: 26.05.2006 Beiträge: 5 Wohnort: Erfurt, Thüringen, Dtl.
|
Verfasst am: 26.03.2007, 19:04 Titel: |
|
|
OK hat sich erledigt, ich habe diesen hier genommen, wens interessiert:
Code: | FUNCTION pink! (j%, umfang%)
IF j% = 0 THEN
blue! = RND(1) * umfang% / 3
green! = RND(1) * umfang% / 3
red! = RND(1) * umfang% / 3
ELSEIF j% = 1 THEN
red! = RND(1) * umfang% / 3
ELSEIF j% = 2 THEN
green! = RND(1) * umfang% / 3
red! = RND(1) * umfang% / 3
ELSEIF j% = 3 THEN
red! = RND(1) * umfang% / 3
ELSEIF j% = 4 THEN
blue! = RND(1) * umfang% / 3
green! = RND(1) * umfang% / 3
red! = RND(1) * umfang% / 3
ELSEIF j% = 5 THEN
red! = RND(1) * umfang% / 3
ELSEIF j% = 6 THEN
green! = RND(1) * umfang% / 3
red! = RND(1) * umfang% / 3
END IF
pink! = red! + green! + blue!
END FUNCTION
|
Einleuchtend, wenn man ihn einmal verstanden hat, und irgendwie auch funktionstüchtig . Danke euch trotzdem! |
|
Nach oben |
|
 |
|