Sie sind auf Seite 1von 2

MT- Übung 1

Audio-Grundlagen: Abtastung, Aliasing, Quantisierung

Zur Verdeutlichung der Vorgänge bei der digitalen Audio-Verarbeitung sollen verschiedene Manipulationen auf
dem digitalisierten Audiosignal (in Form von Microsoft-WAV Dateien) programmiert werden. Die Java-
Methoden read_wav und write_wav aus der Klasse WavFile werden zum Ein-und Auslesen von Wave-Dateien
zur Verfügung gestellt (moodle). Diese werden aus der main-Methode der Klasse wave_io aufgerufen. Diese
wave_io in der vorliegenden Form liest lediglich eine Wave-Datei ein und speichert sie ggf. unter einem
anderen Namen wieder ab. Lege für die Implementierung ein leeres Java-Projekt an (z.B. in Eclipse) und füge
die Dateien hinzu. Unter "Run configurations" lassen sich dann die Übergabeparameter, d.h., Ein- aus
Ausgabedateinamen festlegen.
Argumente:
 input.wav (Wave-Datei 'input.wav' wird eingelesen und Header-Daten werden angezeigt)
 input.wav output.wav (Wave-Datei 'input.wav' wird eingelesen und in die Datei 'output.wav' kopiert)

1. Aufgabe – Audios erzeugen


a. Erzeuge zwei kurze Audio-Files (max. 5sec), davon eines mit Musik deiner Wahl aus dem Internet
(melodisch und mit relativ hoher Dynamik, d.h. einem Wechsel zwischen relativ leisen und lauten
Abschnitten). Verwende für die Musikaufnahme (44.1kHz und 16bit, stereo) ein virtuelles Kabel, um
Hintergrundgeräusche zu vermeiden! Das zweite Audio-File soll eine selbst gesprochene Sprachaufnahme
(22kHz und 16bit, mono) sein, die du mit einem Mikrofon aufnehmen musst. Vermeide also auch hier
Hintergrundgeräusche! Achte bei beiden Audios auf eine gute Aussteuerung, d.h. wähle eine angemessene,
also nicht zu laute oder leise Lautstärke.
Benenne die Dateien in „Musik_Gruppenname.wav" und „Sprache_Gruppenname.wav". In den Übungen
wirst du sie als Ursprungssignale verwenden.
Schick die WAV-Dateien unter Nennung deines Gruppennamens im Betreff an ahoenemann@beuth-
hochschule.de. Darauf werde ich dir zwei WAV-Dateien mit Testsignale (sine_hiXX.wav, sine_loXX.wav)
zusenden, die du für diese Übungsaufgaben benötigst.
Abgabe: Eigene Sprach- und Musikdatei

2. Aufgabe – Aliasing
a. Bei der zeitlichen Diskretisierung eines Analogsignals muss das sogenannte Abtasttheorem eingehalten
werden. Wie lautet es? Erläutere den Grenzfall anhand einer Skizze. Welches Problem kann beim Grenzfall
auftreten?
b. Bei herkömmlichen Soundkarten tritt systembedingt kein Aliasing auf, weil das Audiosignal stets geeignet
vorbehandelt wird. Wie sieht diese Vorbehandlung aus?
c. Mit einem kleinen Trick lässt sich jedoch Aliasing nachweisen. Diese auch als Down-Sampling bekannte
Methode besteht darin, dass man bei einer WAV-Datei 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.
Modifiziere wave_io dahingehend, dass vom eingelesenen Audiosignal jeder zweite Abtastwert verworfen
wird und das resultierende Signal abgespeichert wird. Der Header muss entsprechend verändert werden!
d. Wende das erstellte Programm auf die von mir geschickten Sinusdateien an (sine_hiXX.wav und
sine_loXX.wav) an. Welche Frequenzen erscheinen nach dem Down-Sampling? Lass dir die Sinusdateien in
GRAM anzeigen und erläutere die Ergebnisfrequenz beider Dateien!
Abgabe: Originale und downgesampelte Sinussignale, Screenshot GRAM, Erläuterungen, Source Code ggf. mit
Dokumentation
3. Aufgabe – Bitreduzierung
a. Die herkömmlichen PC-Soundkarten arbeiten meist entweder mit 16 oder 8 Bit-Auflösung. Wie groß ist die
Anzahl bei diesen beiden Werten darstellbaren Amplitudenwerten?
b. Modifiziere wave_io dahingehend, dass die Bitanzahl reduzieren wird. Dazu werden alle Samples durch die
Potenz von 2 geteilt (Integer-Division ohne Rest). Damit das resultierende Signal nicht leiser wird als das
Original, wird die Operation durch Multiplikation mit derselben 2er Potenz kompensiert. Der Datentyp hat
nach wie vor 16 Bit.
Mit dem entstandenen Programm sollen nun die erzeugten Sprache- und Musikdateien bitreduziert
werden. Reduziere die Aufnahmen um 1 Bit. Führe weitere Reduzierungen durch, solange eine deutlich
hörbare Verschlechterung der Qualität erreicht ist.
c. Ab welcher Bitzahl tritt bei den bitreduzierten Audios eine deutlich hörbare Verschlechterung der Qualität
ein?
d. Modifiziere dein Programm noch einmal so, dass auch das Differenzsignal zwischen Original und
bitreduziertem Signal, d.h. der Quantisierungsfehler ausgegeben werden kann. Dabei musst du bedenken,
dass z.B. bei der 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 16 Bit 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.
Abgabe: 1 Bit reduzierte Aufnahmen sowie bitreduzierte Aufnahme (Sprache und Musik), bei denen das
Quantisierungs-rauschen deutlich hörbar wurde (mit Angabe der reduzierten Bitzahl), korrespondierende
Differenzsignale, Spektrogramm GRAM für die Audios (reduziert und Differenzsignal), Erläuterungen, Source
Code ggf. mit Dokumentation