Original-Bericht (Word Dokument)

Werbung
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 FourierAnalyse 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
 der Anschlag, das Anblasen, das Anstreichen usw. (die Art, wie ein Klang beginnt)
 das Vorhandensein oder Nichtvorhandensein von Vibratos und Tremolos (bebende und
zitternde Änderungen in Frequenz und Lautstärke)
 die Geschwindigkeit, mit der sich die Harmonischen aufbauen
 das Abfallen (die Rate, mit der der Klang wieder abnimmt)
 das Ausklingen (die Rate, mit der die Schallstärke nach einer gespielten Note abklingt)
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
y (t ) 
a0
 [an  cos(n 0 t )  bn  sin(n 0 t )]
2 n1
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.
Skizze: Tonnotation(c , c‘ , c‘‘),siehe Ordner„15 Frequenzspektren…“
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.
Link: 15 Frequenzspektren und wav-Dateien (Einzeltöne), siehe Ordner „15 Frequenzspektren…“
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 FFTSize, 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. In den folgenden Beispielen wird dieses Phänomen hörbar gemacht. Der Anfang
des Brass-Band Stückes „Poem“ ist besser zu erkennen als das „Durcheinander“ in Vivaldis
Sommer, Presto.
Beispiele: Vivaldi, Sommer Presto, FFT-Size 6/ Poem, Anfang, FFT-Size 6, siehe Ordner „Beispiele“
Zum Vergleich: Vivaldi, Sommer, Presto, Original, siehe Ordner „Beispiele“
(Poem, Anfang, Original kommt weiter unten)
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: Poem, Anfang, Original/ Poem, Anfang, FFT-Size 12, siehe Ordner „Beispiele“
Vergleicht man die beiden 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 mehr zu erkennen. Sie sind in der harmonischen
Analyse und Synthese verlorengegangen.
Bilder: Frequenzspektren, siehe Ordner „Beispiele“
Das Programm FOUR.CPP
Mit den drei Programmen FOUR.CPP, FOURCOR.CPP und FOURGRAF.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 WAVDateien. 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.
Herunterladen