infile: sprache.wav outfile:
filelength 329550
samples 164587
rate 22050
bits 16
bytes per sample 2
channels 1
Bitrate = 22050Hz * 16 bits * 1 Channel = 352 kbit/s
infile: musik2.wav outfile:
filelength 3323492
samples 1661558
rate 44100
bits 16
bytes per sample 4
channels 2
Bitrate = 44100 * 16 bits * 2 Channels = 1,411 Mbit/s
- filelength: Dateilänge. Entspricht samples * bytes per sample
- samples: Anzahl der Abtastungen
- rate: Abtastrate, Anzahl samples pro Sekunde
- bits: Anzahl bits pro sample
- channels: Anzahl der aufgezeichneten Kanäle
Hinzugefügte Code ist:
unsigned int i;
FILE *prt;
// ...
prt = fopen ("prt.txt","wt");
for(i=0; i < n_wave; i++){
fprintf(prt, "%i \n", wave[i]);
}
fclose(prt);
| sine_lo.wav Abtastung | sine_hi.wav Abtastung: |
| 0 | 0 |
| 13858 | 10606 |
| 10606 | -15000 |
| -5740 | 10606 |
| -15000 | 0 |
| -5740 | -10606 |
| 10606 | 15000 |
| 13858 | -10606 |
| 0 | |
| -13858 | |
| -10606 | |
| 5740 | |
| 15000 | |
| 5740 | |
| -10606 | |
| -13858 | |
| | |
| Frequenz: 3kHz | Frequenz: 6khZ |
Berechnung der Frequenz erfolgte mit der Formel:
Abtastrate / Anzahl Samples * Anzahl Schwingungen
Das Abtasttheorem besagt, dass ein kontinuierliches, bandbegrenztes Signal, mit einer Minimalfrequenz von 0 Hz und einer Maximalfrequenz
, mit einer Frequenz größer als
gleichförmig abgetastet werden muss, damit man aus dem so erhaltenen zeitdiskreten Signal das Ursprungssignal ohne Informationsverlust, aber mit unendlich großem Aufwand (d.h. unendlich viele Abtastpunkte), exakt rekonstruieren oder – mit endlichem Aufwand – beliebig genau approximieren kann.
_Quelle: Wikipedia
Quelle: http://public.beuth-hochschule.de/~mixdorff/mmt1/files/schwingungslehre.pdf
Zu hohe Frequenzen werden von der Soundkarte per Tiefpassfilter entfernt. Der Grenzwert liegt bei ca. 20kHz.
Hinzugefügter Code:
// -------------- 2.4 downsampling ----------------------
for (i=0; i < n_wave / 2; i++){
wave[i] = wave[i*2];
}
freq_in /= 2;
n_wave /= 2;
// -------------- 2.4 downsampling end ------------------
sine_hi.wav erleidet durch das Downsampling Faltungsverzerrungen, da das Abtasttheorem nicht mehr eingehalten werden kann. Die Frequenz reduziert sich auf ein Drittel auf 2kHz.
sine_lo.wav behält seine Frequenz, da ihre Ausgangsfrequenz schon niedrig genug ist um auch nach dem Downsampling das Abtasttheorem einzuhalten.
8 Bit = 2^8 = 256 unterschiedlie Amplitudenwerte. 16 Bit = 2^16 = 65536 unterschiedlie Amplitudenwerte.
Hinzugefügter Code:
// --------------3.2 bit reduction ----------------------
for (i =0; i < n_wave; i++){
wave[i] /= 512;
wave[i] *= 512;
}
Bitreduzierte Sprachdatei: sprache_bitreduced.wav
Merkliche Qualitätsverringerung tritt bei 8-bit Reduktion auf. Das Quantisierungsgeräusch äußert sich in abgehackter Sprache, wobei jeweils Anfang und Ende von Worten verloren gehen.
Bitreduzierte Musikdatei: musik_bitreduced.wav
Merkliche Qualitätsverringerung tritt bei 9-bit Reduktion auf. Das Quantisierungsgeräusch äußert sich in einem permanenten Hintergrundrauschen.
Hinzugefügter Code:
// -------------- 3.4 difference signal ------------------
const int bit=9;
short *new_wave;
// [...]
new_wave = (short*)malloc(n_wave*sizeof(short));
for(i=0; i < n_wave; i++){
new_wave[i] = wave[i];
wave[i] /= pow(2.0,bit);
wave[i] *= pow(2.0,bit);
wave[i] -= new_wave[i];
wave[i] *= pow(2.0, 16-bit-1);
}
// -------------- 3.4 difference signal end --------------
Plot der Bitreduktion (8 Bit):
Plot des Differenzsignals:
Bitreduzierte Sprachdatei mit Differnezsignal: sprache_bitreduced-diff-8bit.wav
Plot der Bitreduktion (9 Bit):
Plot des Differenzsignals:
Bitreduzierte Musikdatei mit Differenzsignal: musik_bitreduced-diff-9bit.wav