Fourier Analyse

Inhalt

Fourier-Analyse und Musik

Mathematische Grundlage und Umsetzung

Tonanalyse an Einzelinstrumenten

Versuche mit mehrstimmigen Beispielen

Das Programm FOUR.CPP

Fourier-Analyse und Musik

Klänge sind Schallwellen (im Hörbereich), die sich aus Grund- und Obertönen zusammensetzen, sie sind somit meist nicht mehr sinusförmig, aber immer noch periodisch. Das Verhältnis der Obertöne zum Grundton ist im Idealfall ganzzahlig, wodurch die Fourier-Analyse als harmonische Analyse des Klanges angewandt werden kann. Selbst wenn es den „Idealfall" in Wirklichkeit nicht gibt, können mit der Fourier-Analyse die meisten Instrumente, vor allem aber Saiten- und auch Blasinstrumente sinnvoll harmonisch analysiert werden, da ihre Schallerzeuger zweidimensional sind (Saite oder Luftsäule). Problemfälle sind Membraninstrumente (dreidimensionale Schallerzeuger), beispielsweise Kesselpauken (Frequenzverhältnisse der verschiedenen Schwingungsmoden nicht ganzzahlig).

Schwierig wird es auch, wenn zwei oder mehrere Instrumente bis zum Sinfonieorchester zusammenspielen. Je nach Harmonie und Akkordaufbau entstehen so im Klangbild nur schon zwischen den Grundtönen der jeweiligen Instrumente nicht mehr ganzzahlige Verhältnisse; und mit den Obertönen zusammen gleicht das Frequenzspektrum fast demjenigen eines Geräusches.

Da erscheint es fast als kleines Wunder, dass unser Ohr imstande ist, beispielsweise die Instrumente des Orchesters in Vivaldis "Sommer, Presto" einzeln zu erkennen.

Verblüffend ist auch, wie gut unser Ohr eine Veränderung eines Klangcharakters wahrnehmen kann, die von einer nur minimen Änderung der Intensität einer Harmonischen (eines Obertones) hervorgerufen wurde. Mit anderen Worten bedeutet dies, dass kleine „Fehler" der Fourier-Analyse gut hörbar sind.

Obwohl das Spektrum eines Klangs (also die harmonische Analyse) wichtig ist, wenn man das Instrument erkennen will, mit dem der Klang erzeugt wurde, spielen für die Klangcharakterisierung auch andere Merkmale eine grosse Rolle, beispielsweise

Mit der Fourier-Analyse lässt sich – abhängig von der Grösse des Rechenaufwandes oder der Anzahl der gewählten Schritte – ein Klang so genau analysieren, dass das Resultat für viele Anwendungen brauchbar ist. Es ist aber unmöglich, auf diesem Weg alle Merkmale der Klangcharakterisierung in den Griff zu kriegen.

Mathematische Grundlage und Umsetzung

Die Idee der Fourierreihenentwicklung ist es, ein Signal (Amplitude nach Zeit), anhand Cosinus und Sinus Schwingungen darzustellen. Mit Hilfe dessen öffnen sich viele interessante Möglichkeiten in der Signalverarbeitung. So stützen sich heute viele Bereiche der „digitalen Akustik" auf die Möglichkeiten der Fourier Analyse. Wie aber kommt eine solche Fourierreihe zu stande. Die Reihe ist folgendermassen aufgebaut

Dabei ist a0 ein fester Wert undabhänig der Kreisfrequenz w0. Die beiden Fourierkoeffizienten an und bn (Index n) sind die eigentlich interessanten Bestandteile, welche anhand fest gegebener Algorithmen berechnet werden können. y(t) ist demnach die neue Funktion, respektive deren Werte abhängig der Zeit. Mit Hilfe dieser Reihe lässt sich theoretisch ein Musiksignal komplett aus Cosinus- und Sinus-Schwingungen ausdrücken. Auf die dabei entstehenden Probleme gehen wir später genaur ein. Die Fourierreihen aber so anzuwenden macht (fast) keinen Sinn. Vielmehr wird sie benötigt um sich Kenntnis des Frequenzspektrums eines Signals zu machen. Dabei ist aber vorsicht geboten. Denn wie erwähnt können bei der Fourierreihe nur ganzzahlige Vielfache der Grundfrequenz entwickelt werden. Im Normalfall aber enthält ein Musiksignal aber auch Frequenzen, die zwischen diesen liegen, wenn auch möglicherweise verschwindend klein. Im Allgemeinen aber ist davon auszugehen, dass ein geschultes „Musikohr" auch kleinste Änderung sehr gut feststellen kann! Bei der Entwicklung akustischer Werkzeuge bedarf es deshalb gut überlegter Schritte.

So kann z.B ein Filter auf Fourierbasis programmiert werden. Die dabei entstehenden Schwierigkeiten und Tücken sind aber nicht zu unterschätzen. Denn ein Filter stammt urspünglich aus der „Analogwelt". Es gibt heute sogar Musiker, die behaupten den Unterschied zwischen einem digitalen und analogen Filter feststellen zu können.

Anwendung der Fourier-Analyse in Goldwave

Goldwave führt die harmonische Analyse und Synthese „gleichzeitig" aus, indem Klangbilder beispielsweise um eine Oktave erhöht oder vertieft werden. Werden diese Schritte nacheinander ausgeführt, kann man das Ergebnis mit dem Original direkt vergleichen und so die Auswirkungen der harmonischen Analyse und Synthese hörbar machen.

Tonanalyse an Einzelinstrumenten

Eine mögliche Anwendung der Fouriertransformation ist die Veränderung von Frequenzen, respektive von Tonhöhen. Dies lässt sich so weit treiben, dass man ganze Konzertstücke in deren Tonhöhe verändern kann, ohne dass die Gesamtspieldauer verändert wird.

Nun stellt sich die Frage, ob es möglich ist, eine Cellostimme mit einer Violine aufzuzeichnen und nachher per Computer auf die Tonhöhe eines Cellos zu transformieren.

Grundsätzlich ist es möglich, nur ist das menschliche Ohr dabei nicht zu unterschätzen. Damit sich ein gewisser Erfolg einstellt darf man bestimmte Grenzen nicht überschreiten. Diese sind vorher in Versuchen zu ermitteln. Bei Vergleichen wird der transformierte Ton immer etwas anders tönen, wie es im Original tönen würde. Aber in gewissen Fällen ist die Ähnlichkeit erstaunlich.

Die perfekten Instrumente für derartige Transformationen wären wohl solche mit möglichst wenigen Obertönen, das heisst Instrumente, die ausser der Sinusschwingung auf einer bestimmten Frequenz kaum andere, vor allem höhere Frequenzen erzeugen. Gleichzeitig sollte der Ton konstant bleiben, ohne sich abzuschwächen wie beim Zupfen einer Gitarre. Bei Instrumenten, die dem idealen nahe kommen, denke ich vor allem an Streichinstrumente, wie Geige, Bratsche, Cello oder auch Kontrabass.

Das Experiment

Leider hatte ich keine Instrumente, die dem idealen nahe kommen, zur Verfügung. So führte ich diese Versuchsreihe mit Blechblasinstrumenten durch. Und zwar mit einem Tenorhorn und einem Flügelhorn (beide auf B gestimmt, das Flügelhorn eine Oktave höher). Das Flügelhorn ist gleich gestimmt wie die Trompete, hat aber einen weicheren Ton, was bei Transformationen dem Tenorhorn näher kommt. Bei diesen Instrumenten stellt sich ein weiteres Problem ein: es ist nicht möglich zwei Mal hintereinander einen exakt gleichen Ton zu spielen. Dies wurde hier vernachlässigt. Zudem wurden die Aufnahmen ohne Stimmgerät und ohne hohe Qualitätsansprüche gemacht.

Als Originaltöne machte ich Aufnahmen vom Ton C, in verschiedenen Tonhöhen (Oktaven), soweit es der Tonumfang des jeweiligen Instrumentes erlaubte. Beim Tenorhorn sind dies: c , c’ und c’’, und beim Flügelhorn c und c’. Hierbei würde das c des Flügelhorns ungefähr der Grundfrequenz des c’ des Tenorhorns entsprechen.

Tonnotation (c , c‘ , c‘‘)

Der Versuch bestand nun darin, Einzeltöne auf Basis der Fouriertransformation jeweils um eine oder zwei Oktaven anzuheben oder zu vertiefen und diese mit anderen Tönen derselben Grundfrequenz zu vergleichen. Die Tonveränderungen wurden durchgeführt mit dem Shareware-Programm GoldWave, und zwar mit der Funktion Pitch, welche auf der Basis der Fouriertransformation arbeitet und dadurch auch die Spieldauer nicht verändert. Der Vergleich geschieht qualitativ durch den Vergleich des Frequenzspektrums und durch Hörproben.

15 Frequenzspektren von Einzeltönen (Zum Abspielen des zugehörigen Tons: Spektrum Anklicken!)

Bei Betrachtung des Frequenzspektrums ist die Ähnlichkeit der transformierten Töne c des Flügelhorns mit dem c des Tenorhorns auffallend und die Übereinstimmung der transformierten Töne c’ der beiden Instrumente miteinander. Speziell erstaunt die Ähnlichkeit vom c’’ des Tenorhorns mit dem c’ des Flügelhorns. Beides lässt sich teilweise durch die Anspannung beziehungsweise der Entspannung des Spielenden erklären. Bei Blechblasinstrumenten mit Kesselmundstück, wozu beide Instrumente zählen, lassen sich tiefe Töne relativ entspannt spielen, sehr hohe Töne erfordern allerdings mehr Übung und Kraft vom Spieler und werden dementsprechend auch relativ angespannt gespielt.

Wo das Frequenzspektrum nur geringe Unterschiede zeigt meldet uns unser Ohr schon grössere Unterschiede. Dies ist bei der Veränderung von Tonhöhen auch das grösste Hindernis und stellt an die Qualität der Aufnahme höhere Ansprüche. Zudem müsste es unter Umständen manuell weiterbearbeitet werden.

Versuche mit mehrstimmigen Beispielen

FFT- Size

Das Resultat der Oktavierungen von Klangbildern hängt sehr stark von der gewählten FFT-Size, also von der Anzahl der Rechenschritte ab. Bei nur 2^6 = 64 Schritten (size 6) ist das Resultat unbrauchbar, erkennbar ist ein starkes Rauschen – nur wer das Original kennt, kann das Rauschen vielleicht musikalisch deuten. Je einfacher das gewählte Original ist (bzw. Je weniger verschiedene Frequenzen es aufweist, desto mehr erkennt man eine „Melodie" im Rauschen.

Wird die Anzahl der Rechenschritte jeweils verdoppelt, verschwindet das Rauschen langsam und das Resultat entspricht immer mehr dem Original. Bei der höchsten Anzahl Rechenschritte (FFT-Size 12 =2^12=2048) ist praktisch kein störendes Rauschen mehr erkennbar. Doch unser Ohr erkennt immer noch einen deutlichen Unterschied: der Klang des Originals ist „schöner", d.h. er wirkt im Vergleich zum errechneten Resultat viel tiefer und breiter.

Beispiel: Original / FFT-Size 12

Vergleicht man die Frequenzspektren, so fällt auf, dass im Spektrum des Originals nebst der dominanten Grundfrequenz und den wichtigsten tiefen Oberschwingungen auch zahlreiche, jedoch kleine Anteile von höheren Oberschwingungen auftreten. Genau diese Anteile sind im errechnenten Resultat kaum vorhanden.

Das Programm FOUR.CPP

Mit den zwei Programmen FOUR.CPP und FOURCOR.CPP haben wir versucht die Fourierreihenentwicklung in die Praxis umzusetzten. Wie wir schon im voraus erwartet hatten, wurde das Umsetzten der Fourierreihe in ein Programm durch viele Tücken und Eigenheiten der Mathematik erschwert.

Als erstes aber stand die WAV-Dateien Auslesung primär im Vordergrund, denn nur so war es möglich auch ein Musiksignal als Grundlage zu erhalten. Mit Hilfe einer guten Dokumentation gelang es aber schnell WAV Dateien einlesen zu können. Das Programm akzeptiert aber jetzt nur WAV Datein mit 44’100 kHz Samplingrate und 16 Bit Auflösung. Bei der Umsetzung wird immer nur der erste Kanal berücksichtigt.

Im Mittelpunkt der Fourierreihenentwicklung steht natürlich das finden der Koeffizienten. Diese Aufgabe stellte dann auch tatsächlich die grösste Hürde. Die Schwierigkeit liegt in der Richtigen Zeit und Intervallrechung im Programm. Folgende Zeilen verdeutlichen, dass das Umrechnen von Samplinrate in Kreisfrequenz, Samplingzahl zu Periode usw. nicht unbedingt übersichtlich ausfällt.

for (iCounter=0;iCounter<lnewNPC;iCounter++)

{

  • dArea+=( ((double) (myB->NullPhaseList[iCounter]))/(double) (myB->MaxValue) )*(1.0/(double) (StWInfo->dwSamplesPerSecond));
  • for (iCoeffC=0;(iCoeffC)<(myB->quality);iCoeffC++)

    {

    myB->ACoeff[iCoeffC]=myB->ACoeff[iCoeffC]+

  • ( ((double) (myB->NullPhaseList[iCounter]))/(double) (myB->MaxValue) )*(1.0/(double) (StWInfo>dwSamplesPerSecond))

    *(cos((double)((iCoeffC+1)*iCounter)*((double)2*PI/((double) myB->lNPC))))*(1.0/(double) (StWInfo>dwSamplesPerSecond))*dCorr;

  • myB->BCoeff[iCoeffC]=myB->BCoeff[iCoeffC]+

  • ( ((double) (myB->NullPhaseList[iCounter]))/(double) (myB->MaxValue) )*(1.0/(double) (StWInfo>dwSamplesPerSecond))

    *(sin((double)((iCoeffC+1)*iCounter)*((double)2*PI/((double) myB->lNPC))))*(1.0/(double) (StWInfo>dwSamplesPerSecond))*dCorr;

  • }

    }

    myB->A0Coeff=dArea*(2/(2*PI/(dOmega)));

    for (iCoeffC=0;(iCoeffC)<(myB->quality);iCoeffC++)

    {

  • myB->ACoeff[iCoeffC]=myB->ACoeff[iCoeffC]*(2/(2*PI/(dOmega*(double) StWInfo-dwSamplesPerSecond)));

    myB->BCoeff[iCoeffC]=myB->BCoeff[iCoeffC]*(2/(2*PI/(dOmega*(double) StWInfo->dwSamplesPerSecond)));

  • }

    Es lohnt sich deshalb im voraus genau zu überlegen, was wie umgerechnet werden muss. Eigentlich interessant wird es aber erst, wenn alle Programmteile fertiggestellt sind. Dann kann es losgehen mit dem Ausprobieren von verschiedenen Umwandlungen einiger WAV-Dateien. Schnell allerdings stellt sich Enttäuschung ein. Alle hohen Frequenzen bekommen bei der Umwandlung ein unschönes Rauschen oder sogar Knacken mit über, so als würde das Signal irgendwo clippen. Mit Hilfe eines WAV Bearbeitungsprogramms aber lässt sich feststellen, dass dem nicht so ist.

    Diesem Problem sind wir dann auch langsam systematisch nachgegangen, mit der Idee, höhere Frequenzen etwas zu dämpfen. D.h., die Koeffizienten linear der Steigung der Frequenz zu dämpfen. Sofort lässt sich ein logischerweise Tiefpassfilter ähnlichr Effekt feststellen. Die Störgeräusche verschwinden aber trotzdem nicht.

    Natürlich gibt es viele Verfahren um solche Störgeräusche zu entfernen, welche aber auf Fourierreihen basieren. Sie bieten sich also sicher nicht an! Vielmehr ist ein solcher Fehler am Ursprung zu eliminieren und nicht erst im nachhinein!

    Schlussendlich glaube ich aber mit diesem Programm viele gute und interessante Erkenntnise gesammelt zu haben.

    Uebersicht über alle Seminararbeiten