Lösungen zu den Übung MTA SS2011

Übung 1

Aufgabe 1

Erzeuge zwei kurze Audio-Files (max. 20 s), davon eines mit Music von einer CD deiner Wahl (wobei sich Music 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 (auf Übersteuerung achten !). Wähle hier eine Abstastfrequenz von 22 kHz, 16 bit Auflösung, mono. Die Einstellungen wie Abtastrate, Bitzahl und Kanalzahl können in Wavestudio Samplitude vorgenommen werden. Die Eingangsquelle (wahlweise Audio-CD oder Mikrofon) kann im Windows-Mixer 'Aufnahme' eingestellt werden. Lies beide Wave-Files mit wave_io ein und erkläre die Angaben im Header ! Wie hoch ist die Bitrate für die beiden Dateien?

Lösung

Es wurde eine Abtastfrequenz von 44,1kHz verwendet, um das Audio-File von der CD einzulesen. Ziel war es das Shannon-Nyquist Theorem nicht zu verletzen.

Sprachaufnahme:

InputSprachaufnahme.wav
infile: InputSprachaufnahme.wav outfile: OutputSprachaufnahme.wav
filelength 1377722	>> Dateigröße ca. 1 MB
samples 688128		>> Anzahl der Samples
rate 22050		>> Frequenz der Abtastung 22 kHz
bits 16			>> Bitrate
bytes per sample 2	>> 16Bit Abtastung pro Sample
channels 1		>> Mono
Bitrate: 352800

OutputSprachaufnahme.wav
filelength 1376292	>> Dateigröße ca. 1 MB
samples 688128		>> Anzahl der Samples
rate 22050		>> Frequenz der Abtastung: 22kHz
bits 16			>> Bitrate
bytes per sample 2	>> 16Bit Abtastung pro Sample
channels 1		>> Mono
Bitrate: 352800

Musikaufnahme:


CDImport1.wav
infile: CDImport1.wav outfile: cdout.wav
filelength 38210918 	>> Dateigröße ca. 37 MB
samples 19105296	>> Anzahl der Samples
rate 44100		>> Frequenz der Abtastung  44,1 kHz
bits 16			>> Bitrate 
bytes per sample 4 	>> 32 Bit Abtastung pro Sample
channels 2 		>> Stereo
Bitrate: 1411200

cdout.wav
filelength 38210628 	>> Dateigröße ca. 37 MB
samples 19105296 	>> Anzahl der Samples 
rate 44100 		>> Frequenz der Abtastung
bits 16			>> Bitrate
bytes per sample 4	>> 32 Bit Abtastung pro Sample
channels 2		>> Stereo
Bitrate: 1411200

2. Aufgabe - Aliasing

2.1 Modifiziere wave_io.c dahingehend, dass die Samples in der WAV-Datei in eine (lesbare) ASCII-Datei geschrieben werden. Lies die Dateien sine_lo.wav und sine_hi.wav (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 Spektralanalyse-Tool GRAM (Plots ins Protokoll !).

(Vorgehensweise: Menüpunkt Analyze File, Einstellungen: Freq Scale: Linear, FFT Size: 512, Time scale: 1 msec)

Antwort: Eine Wave Datei wird in ein Array bitweise eingelesen und die entsprechenden Amplitudenwerte pro Bit zeilenweise in eine Textdatei namens sine_hi.txt und sine_lo.txt geschrieben.

Ein Auszug beider Dateien kann an dieser Stelle bewertet werden. Die Autoren zogen es vor lediglich die Abrisse darzustellen, weil die Textdateien, unhandlich groß sind und die Zeilen nicht mehr aussagen, als diese Ausschnitte es schon tun.


Ausschnitt: sine_hi.txt
0
10606
-15000
10606
0
-10606
15000
-10606
0
10606
-15000
10606
0

Sine_hi.wav
f0 = 16 * 1.5 / 4
f0 = 6 kHz



Ausschnitt: sine_lo.txt
0
13858
10606
-5740
-15000
-5740
10606
13858
0
-13858
-10606
5740
15000
5740
-10606
-13858
0

Sine_lo.wav
f0 = 16 * 1.5 / 8
f0 = 3 kHz

Zum Anhören der Dateien, bitte auf den jeweiligen Link klicken. Sine_hi.wav sowie Sine_lo.wav

Der Code zur Umwandlung der Datei kann über folgenden Link abgerufen werden. -->wave_io.c

 

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 !)?

Antwort: Die obere akustische Wahrnehmungsgrenze des Menschen liegt bei ca. 20 kHz. Frequenzen dieses Bereichs werden erfasst, wird die Abtastfrequenz dagegen zu gering gesetzt, kommt es zu Quantisierungsfehlern. Die folgende Grafik zeigt:

 

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.

Antwort: Es werden zu hohe Frequenzen herausgefiltert, da Soundkarten einen Tiefpass von ca. 20kHz haben.

 

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?

Antwort: Frequenzen: Jedes zweite Sample wird entfernt. Durch den Effekt Faltungszerrung hat Sine_hi.wav eine Frequenz von 2kHz. Sine_lo.wav behält die gleiche Frequenz. Durch geeignete Bandbegrenzung würde das Aliasing/der Aliasing-Effekt verringert werden.

Die resultierenden Dateien sind Sine_hi_down.wav sowie Sine_lo_down.wav.

Sine_hi vor der Bearbeitung.

Sine_lo vor der Bearbeitung.

Sine_lo nach der Bearbeitung.

Sine_hi nach der Bearbeitung.

3. Aufgabe - Bitreduzierung

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 ?

Antwort:
2⁸ = 256 Amplitudenstufen
2¹⁶ = 65536 Amplitudenstufen


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'.)

Antwort:

	read_wave(&wave, &n_wave, &freq_in, &bits_in, in_name, &header);

	// Downsampling
	  for(i=0;i < n_wave / 2 ;i++){
		wave[i] = wave[2 * i];
	  }
	  freq_in /= 2;
	  n_wave /= 2;
	  
	  if (out)
	     write_wave(wave, n_wave, freq_in, bits_in, out_name, &header);

	  free(new_wave);
	  


3.3 Mit dem entstandenen Programm verändern wir die in Aufgabe 1 erzeugten Wave-Dateien. Ab welcher Bitzahl tritt bei Music/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?

Antwort: Bei der CD-Aufnahme tritt bei 8Bit ein leichtes Rauschen auf.

CD Aufnahme (reduziert) 2⁷ = 128 Amplitudenstufen
CD Aufnahme (reduziert) 2⁸ = 256 Amplitudenstufen


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. Welchen Charakter hat das Rauschen bei einer Reduktion um 1 Bit, wie verändert es sich bei zunehmender Bit-Reduktion?

Antwort: Es war ein starkes Rauschen zu hören. Nur sehr leicht konnte ein Ton der Musik vernommen werden. Der folgende Quelltext beschreibt die Art und Weise der Veränderung.

	// 1 Bit Quantisierung

	new_wave = (short*) malloc(n_wave*sizeof(short));

	for (i = 0; i < n_wave; i++ ) {
	new_wave[i] = wave[i];
	wave[i] /= pow(2, n);
	wave[i] *= pow(2, n);
	wave[i] -= new_wave[i];
	wave[i] *= pow(2, 16 - n - 1);
	}

	if (out)
	write_wave(wave, n_wave, freq_in, bits_in, out_name, &header);

	free(new_wave);

CD Aufnahme auf ein Bit reduziert.




Autoren

Lösungen wurden erarbeitet von Claudia Schäfer und Sebastian Morkisch


Sämtliche Aufgabentexte stammen aus folgender Quelle: Aufgaben



www.semo-design.de © 2011