Diese Seite steht in folgenden Sprachen zur Verfügung:
Sie befinden sich: Home » Medientechnologien » Übung-1
Inhalt dieser Seite:
Wählen Sie eine weitere Seite:
Einführung:
Zur Verdeutlichung der Vorgänge bei der digitalen Audio-Verarbeitung werden wir verschiedene Manipulationen auf dem digitalisierten Audiosignal (in Form von Microsoft-WAV-Dateien) selbst programmieren. Dazu werden die Java-Methoden read_wav und write_wav aus der Klasse WavFile zum Ein-und Auslesen von Wave-Dateien zur Verfügung gestellt. Diese werden aus der main-Methode der Klasse wave_io aufgerufen. Wave_io, bzw. main wird daher entsprechend um einen Programmblock erweitert werden, der die genannten Manipulationen realisiert.
Zur Aufzeichnung, Darstellung und Wiedergabe der Wave-Dateien wird im Labor das Programm
verwendet. Die Klasse wave_io in der vorliegenden Form liest lediglich eine Wave-Datei ein und speichert sie gegebenenfalls unter einem anderen Namen wieder ab. Wir werden die IDE Eclipse nutzen, um wave_io zu erweitern und das Programm auch stets innerhalb der IDE ausführen. Das heißt, wir legen wave_io in Eclipse als Java Project an und kompilieren und führen es aus darin aus. Unter "Run configurations" lassen sich die Übergabeparameter, d.h., Ein- aus Ausgabedateinamen festlegen:
Arguments:
[ nach oben ] [ Website-Navigation ]
Erzeuge zwei kurze Audio-Files (max. 5 s), davon eines mit Musik deiner Wahl aus dem Internet (wobei sich Musik mit einer relativ hohen Dynamik, d.h. Wechsel zwischen relativ leisen und lauten Abschnitten empfiehlt). Wähle eine geeignete Abtastfrequenz (begründen !) und achte auf gute Aussteuerung. Das zweite Audio-File soll eine Sprachaufnahme (mit dem Headset aufgesprochen) enthalten (Übersteuerung vermeiden !). Wähle hier eine Abtastfrequenz von 22 kHz, 16 bit Auflösung, mono. Die Einstellungen wie Abtastrate, Bitzahl und Kanalzahl können im
vorgenommen werden. Die Eingangsquelle (wahlweise Audio-CD oder Mikrofon) kann im
eingestellt werden. Benenne die Dateien "Musik_NameArbeitsgruppe.wav" und Sprache_NameArbeitsgruppe.wav". Schick mir die beiden WAV-Dateien unter Nennung deiner Arbeitsgruppe per Mail. In den folgenden Übungen wirst du diese Dateien oft als Ursprungssignale verwenden. Sollten sie verloren gehen, kannst du sie notfalls wieder von mir erhalten. Darauf werde ich dir zwei WAV-Dateien mit Testsignalen zusenden, die du bei den folgenden Aufgabenpunkten benötigst, sine_hiXX.wav und sine_loXX.wav. Nun lies die Musik- und die Sprachdatei mit wave_io ein und erkläre die Angaben im Header ! Wie hoch ist die Bitrate für die beiden Dateien?
[ nach oben ] [ Website-Navigation ]
2.1 Modifiziere wave_io dahingehend, dass die Samples in der WAV-Datei in eine (lesbare) ASCII-Datei geschrieben werden. Lies die von mir geschickten Dateien (Sampling-Frequenz: 16 kHz) ein und bestimme aus den resultierenden Zahlenfolgen in der ASCII-Datei die Frequenz der Sinus-Schwingungen (Begründen und jeweils eine Periode für das Protokoll abspeichern). Überprüfe Deine Schätzung mit dem
(Plots ins Protokoll !).
(Vorgehensweise: Menüpunkt Analyze File, Einstellungen: Freq Scale: Linear, FFT Size: 512, Time scale: 1 msec)
[ nach oben ] [ Website-Navigation ]
2.2 Bei der zeitlichen Diskretisierung eines Analogsignals muß das sogenannte Abtasttheorem eingehalten werden. Wie lautet es und wie läßt sich der Grenzfall, für den es gerade noch gilt, illustrieren (Zeichnung !)?
2.3 Bei herkömmlichen Soundkarten tritt systembedingt kein Aliasing auf, weil das Audiosignal stets geeignet vorbehandelt wird (wie ?). Mit einem kleinen Trick läßt sich Aliasing jedoch nachweisen. Diese auch als Down-Sampling bekannte Methode besteht darin, dass man bei einer WAV-Datei z.B. jeden zweiten Abtastwert wegwirft. Man erhält so eine Wellenform, die genau die Hälfte der ursprünglichen Abtastfrequenz aufweist. Wenn man das Signal nicht vorher bandbegrenzt hat, können Aliasing-Verzerrungen hörbar werden.
2.4 Modifiziere wave_io dahingehend, dass vom eingelesenen Signal jeder zweite Abtastwert verworfen wird und das resultierende Signal abgespeichert wird. Der Header muß natürlich entsprechend verändert werden! Wende das resultierende Programm zunächst auf 'sine_lo.wav' und 'sine_hi.wav' an. Welche Frequenzen erscheinen nach dem Down-Sampling (Spektrogramm und WAVs ins Protokoll !)? Was würde passieren, wenn man geeignet bandbegrenzen würde?
[ nach oben ] [ Website-Navigation ]
3.1 Die herkömmlichen PC-Soundkarten arbeiten meist entweder mit 16 oder 8 bit-Auflösung. Wie groß ist die Anzahl der bei diesen beiden Werten darstellbaren Amplitudenwerten ?
3.2 Wir wollen nun wave_io so modifizieren, dass wir die Bitzahl reduzieren können. Dazu können wir z.B. alle Samples durch eine Potenz von 2 teilen (Integer-Division ohne Rest). Damit das resultierende Signal nicht leiser wird als das Original, kompensieren wir die Operation durch Multiplikation mit derselben Zweierpotenz. Zu beachten: Der Datentyp hat nach wie vor 16 bit!
(Denselben Effekt erreicht man auch durch einfaches logisches 'Verunden' mit einem entsprechenden HEX-Wert, indem man mit dem LSB beginnend Bits 'ausblendet'.)
[ nach oben ] [ Website-Navigation ]
3.3 Mit dem entstandenen Programm verändern wir die in Aufgabe 1 erzeugten Wave-Dateien. Ab welcher Bitzahl tritt bei Musik/Sprache eine hörbare/deutliche Verschlechterung der Qualität ein? Bei wieviel Bit ist das Sprachsignal noch verständlich ? (Waves für all diese Fälle ins Protokoll, Ausschnitte als Plots)
Was charakterisiert das entstehende Quantisierungsgeräusch und macht es besonders störend?
3.4 Modifiziere Dein Programm noch einmal so, dass auch das Differenzsignal zwischen Original und bitreduziertem Signal, das heißt, das Quantisierungsrauschen ausgegeben werden kann. Dabei musst du bedenken, dass z.B. bei 1 Bit Reduzierung das Quantisierungsrauschen nur von -1 bis +1 verlaufen würde. Dieser Wertebereich wäre viel zu klein, als dass man das Rauschen beim Abspielen als 16bit-Wert noch hören könnte. Daher muss das Rauschen durch Multiplikation mit einer 2er Potenz verstärkt werden. In anderen Worten: Hat man vorher durch 2^n geteilt, sollte man das Differenzsignal vor dem Abspeichern mit 2^(16-n-1) multiplizieren. So ist sichergestellt, dass der Verstärkungsfaktor mit der Anzahl der gelöschten Bits kleiner wird. Welchen Charakter hat das Rauschen bei einer Reduktion um 1 bit, wie verändert es sich bei zunehmender Bit-Reduktion? (Waves für all diese Fälle ins Protokoll, Ausschnitte als Plots)
[ nach oben ] [ Website-Navigation ]
Informationen zu dieser Seite:
Letzte Änderung: 25-Juli-2006
URL dieser Seite: http://public.beuth-hochschule.de/~mixdorff/mmt1/uebung1.html
•Seitenende•