Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

1/f-Rauschen erzeugen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Unzi



Anmeldungsdatum: 26.05.2006
Beiträge: 5
Wohnort: Erfurt, Thüringen, Dtl.

BeitragVerfasst am: 13.03.2007, 16:25    Titel: 1/f-Rauschen erzeugen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 13.03.2007, 21:32    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 13.03.2007, 21:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Elvis



Anmeldungsdatum: 01.06.2006
Beiträge: 818
Wohnort: Deutschland, BW

BeitragVerfasst am: 13.03.2007, 21:44    Titel: Antworten mit Zitat

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ß. zwinkern
Ich stelle mir die Einarbeitung in DirectSound (DirectX) übrigens sehr spannend
vor. lächeln


Grüße, Elvis
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 13.03.2007, 23:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 13.03.2007, 23:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 13.03.2007, 23:38    Titel: Antworten mit Zitat

tja, dann muss man eben hardware-nah arbeiten.. es gibt ja schließlich auch wave-player für den pc-speaker happy
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 14.03.2007, 08:35    Titel: Antworten mit Zitat

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 durchgeknallt lachen
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 14.03.2007, 10:19    Titel: Antworten mit Zitat

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 lächeln

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ächeln
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 17.03.2007, 16:01    Titel: Antworten mit Zitat

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 lächeln

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 17.03.2007, 20:45    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Unzi



Anmeldungsdatum: 26.05.2006
Beiträge: 5
Wohnort: Erfurt, Thüringen, Dtl.

BeitragVerfasst am: 26.03.2007, 17:37    Titel: Antworten mit Zitat

Also wenn ich versuche eure Korrekturen einzubauen führt das zu nichts, es müsste ein neuer Algo her. Danke! Unzi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Unzi



Anmeldungsdatum: 26.05.2006
Beiträge: 5
Wohnort: Erfurt, Thüringen, Dtl.

BeitragVerfasst am: 26.03.2007, 19:04    Titel: Antworten mit Zitat

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 lächeln. Danke euch trotzdem!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz