Ein MATLAB-Projekt zur Rauschunterdrückung in Audiosignalen mit verschiedenen Filterverfahren.
Dieses Projekt implementiert verschiedene Algorithmen zur Rauschunterdrückung in Audiosignalen:
- Fourier-Filter: Frequenzbereichsfilterung mit verschiedenen Strategien
- Wavelet-Filter: Multiskalenanalyse mit Schwellwertverfahren
- Wiener-Filter: Statistisches Optimalfilter basierend auf Rauschcharakteristiken
audio-denoising/
├── src/
│ ├── main_denoising.m # Hauptskript
│ ├── fourier_filter.m # Fourier-basierte Filter
│ ├── wavelet_filter.m # Wavelet-basierte Filter
│ ├── wiener_filter.m # Wiener-Filter
│ ├── noise_generator.m # Rauschgenerator
│ └── audio_utils.m # Hilfsfunktionen
├── README.md
└── LICENSE
- Tiefpassfilter: Entfernt hochfrequente Störungen
- Spektrale Subtraktion: Reduziert Rauschen basierend auf Rauschspektrum
- Adaptive Filterung: Anpassung an lokale Signaleigenschaften
- Soft/Hard Thresholding: Verschiedene Schwellwertverfahren
- Multiskalenanalyse: Filterung auf verschiedenen Auflösungsebenen
- Wavelet-Auswahl: Verschiedene Wavelets (Daubechies, Biorthogonal, etc.)
- Klassisches Wiener-Filter: Statistisch optimale Filterung
- Adaptives Wiener-Filter: Anpassung an lokale Statistiken
- Rauschschätzung: Automatische Rauschparameterbestimmung
- MATLAB R2018b oder neuer
- Signal Processing Toolbox
- Wavelet Toolbox (für Wavelet-Filter)
-
Projekt herunterladen:
git clone https://github.com/PaxonicYT/audio-denoising-matlab.git cd audio-denoising-matlab -
MATLAB starten und zum Projektordner navigieren
-
Hauptskript ausführen:
cd src main_denoising
Sprachreinigung:
cd examples
demo_speechMusikreinigung:
cd examples
demo_music% Beispiel: Tiefpassfilter
filtered_signal = fourier_filter(noisy_signal, fs, 'lowpass', 4000);
% Beispiel: Spektrale Subtraktion
filtered_signal = fourier_filter(noisy_signal, fs, 'spectral_subtraction', noise_estimate);% Beispiel: Soft Thresholding mit Daubechies Wavelet
filtered_signal = wavelet_filter(noisy_signal, 'db4', 'soft', 0.1);
% Beispiel: Adaptive Schwellwertbestimmung
filtered_signal = wavelet_filter(noisy_signal, 'db8', 'adaptive');% Beispiel: Klassisches Wiener-Filter
filtered_signal = wiener_filter(noisy_signal, noise_power, signal_power);
% Beispiel: Adaptives Wiener-Filter
filtered_signal = wiener_filter(noisy_signal, 'adaptive', 'frame_length', 1024);fs: Sampling-Frequenzframe_length: Rahmenlänge für blockweise Verarbeitungoverlap: Überlappung zwischen Rahmen
cutoff_freq: Grenzfrequenz für Tiefpassfilteralpha: Subtraktionsfaktor für spektrale Subtraktionbeta: Übersubtraktionsfaktor
wavelet: Wavelet-Typ ('db4', 'db8', 'bior4.4', etc.)threshold_method: 'soft', 'hard', oder 'adaptive'threshold_value: Schwellwert (falls nicht adaptiv)levels: Anzahl der Decomposition-Level
noise_power: Rauschleistung (falls bekannt)signal_power: Signalleistung (falls bekannt)estimation_method: 'manual', 'adaptive', oder 'vad'
Das Projekt berechnet automatisch folgende Qualitätsmetriken:
- SNR (Signal-to-Noise Ratio): Verhältnis von Signal zu Rauschen
- PESQ: Perceptual Evaluation of Speech Quality
- STOI: Short-Time Objective Intelligibility
- Spektrale Distanz: Frequenzbereichs-Ähnlichkeit
=== Audio Denoising Results ===
Original SNR: 5.2 dB
Fourier Filter SNR: 12.8 dB (Improvement: 7.6 dB)
Wavelet Filter SNR: 14.1 dB (Improvement: 8.9 dB)
Wiener Filter SNR: 15.3 dB (Improvement: 10.1 dB)
Processing time: 2.3 seconds
% Verarbeitung mehrerer Dateien
batch_process('input_folder/', 'output_folder/', 'wiener');% Streaming-Verarbeitung
realtime_denoising('input_device', 'output_device', 'wavelet');- Spektrogramm-Vergleiche
- Wavelet-Koeffizienten-Darstellung
- Filter-Frequenzgänge
- SNR-Verlauf über Zeit
- Rauschtyp bestimmen: Verschiedene Filter funktionieren besser für verschiedene Rauschtypen
- Parameter anpassen: Experimentieren Sie mit verschiedenen Parametern für Ihre spezifischen Audiosignale
- Kombinierte Ansätze: Versuchen Sie, verschiedene Filter in Kaskade zu schalten
- Preprocessing: Normalisierung und Vorfilterung können die Ergebnisse verbessern
- Überfilterung: Zu aggressive Parameter können das Signal verzerren
- Artefakte: Blockweise Verarbeitung kann zu Discontinuitäten führen
- Performance: Große Dateien benötigen mehr Speicher und Rechenzeit
- Verwenden Sie Overlap-Add-Methoden für blockweise Verarbeitung
- Experimentieren Sie mit verschiedenen Fensterfunktionen
- Implementieren Sie progressive Verarbeitung für große Dateien
Beiträge sind willkommen! Bitte beachten Sie:
- Code-Dokumentation auf Deutsch oder Englisch
- Einheitliche Codierungsstandards
- Testen Sie neue Features mit verschiedenen Audiotypen
- Aktualisieren Sie die Dokumentation entsprechend
MIT License - siehe LICENSE-Datei für Details.
Bei Fragen oder Problemen erstellen Sie bitte ein Issue auf GitHub.
Hinweis: Dieses Projekt ist für Bildungszwecke und Forschung gedacht. Für kommerzielle Anwendungen beachten Sie bitte die entsprechenden Lizenzbestimmungen der verwendeten Algorithmen.