Forum: Digitale Signalverarbeitung / DSP / Machine Learning SciLab / FFT


von Florian M. (bueroklammer)


Lesenswert?

Hallo,

kann mir jmd. sagen weshalb Zeile 4 "nur" zu einer Verringerung der 
Sound-Qualität führt? Ich habe eigentlich erwartet, dass im Bereich 
20001 bis 421000 nichts zur hören ist. Ich vermute ich habe irgendwo 
einen grundlegenden Denkfehler ;)

# Einlesen der ersten 441000 Samples
1: [Y,Fs,bits]=wavread("old.wav",441000)
# Durchführung der FFT -> Überführung in den Frequenzbereich
2: FFT=fft(Y)
# Lediglich eine neue Zuweisung
3: FFT_filtered=FFT
# Die Arrayfelder 200001 bis 421000 "nullen"
4: FFT_filtered(20001:421000)=0
# Durchführung der inversen FFT -> Rückführung in den Zeitbereich
5: Y_filtered=real(ifft(FFT_filtered))
# Abspeichern des Ergebnisses in einer neuen wav-Datei
6: wavwrite(Y_filtered, Fs, "new.wav")

von Kai S. (kai1986)


Lesenswert?

Hallo,

dein Fehler liegt darin, das du die Abtastfrequenz mit der 
Signalfrequenz verwechselst. Wenn du alle Datenpunkte im Frequenzbereich 
oberhalb von 20000 Punkten weg lässt, dann beschränkst du die Signal auf 
10 kHz. Das Stichwort ist Abtasttheorem bzw. Nyquistfrequenz

http://de.wikipedia.org/wiki/Abtasttheorem

http://de.wikipedia.org/wiki/Nyquist-Frequenz



Gruß Kai

von Florian M. (bueroklammer)


Angehängte Dateien:

Lesenswert?

Hallo Kai,

danke für die Antwort. Wenn ich aber die Originaldatei und das 
modifizierte File beispielsweise mit Audacity einer Frequenzanalyse 
unterziehe, liegt das Original bei +/- 20kHz und das bearbeitete File 
bei +/- 2.5kHz.

Wenn ich Dich richtig verstanden habe, dann müssten aber mind. Anteile 
bis 10kHz zu sehen sein?

Gruss
Florian

von Johannes E. (cpt_nemo)


Lesenswert?

Wenn dein Signal mit 44,1 kHz abgetastet ist und du davon 441000 Samples 
verwendest, dann sind das 10 Sekunden.

Das Spektrum hat gleich viele Punkte wie das Originalsignal, also auch 
441000 Punkte, die Auflösung im Frequenzbereich ist 0,1 Hz (1 / 10 s).

Florian M. schrieb:
> FFT_filtered(20001:421000)=0

Der Array-Index 20000 entspricht 2 kHz.

Das Spektrum einer diskreten Fouriertransformation ist periodisch mit 
der Abtastfrequenz, deshalb entspricht der Index 421000 der Frequenz -2 
kHz.

Du Filterst also alle positiven Frequenzen oberhalb 2 kHz weg und die 
negativen Frequenzen unterhalb -2 kHz.

Vermutlich ist das nicht das, was du haben möchtest.

Teste es mal so:
  FFT_filtered(200001:241000)=0

Damit werden nur die Frequenzen oberhalb 20 kHz (und unterhalb -20 kHz) 
weggefiltert.

von Florian M. (bueroklammer)


Lesenswert?

Mir ging es weniger um die Qualität des (neu) erzeugen WAV-File als um 
das Verständnis, warum sich die Sache so verhält. Hat mir 
weitergeholfen, vielen Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.