Niniejsze repozytorium zawiera aplikację napisaną w Pythonie do analizy częstotliwościowej sygnałów dźwiękowych w formacie .wav. Aplikacja stanowi rozszerzenie AudioProcessingAndAnalysisProject1, wzbogacając go o zaawansowane narzędzia do analizy w dziedzinie częstotliwości.
Projekt rozszerza poprzednią aplikację o następujące funkcjonalności:
- Implementacja analizy widmowej - analiza sygnału w dziedzinie częstotliwości za pomocą Szybkiej Transformaty Fouriera (FFT)
- Zastosowanie różnych funkcji okienkowych - okna prostokątne, trójkątne, Hamminga, Hanna i Blackmana oraz wizualizacja ich wpływu na widmo
- Implementacja spektrogramu - wizualizacja zmian częstotliwości w czasie z konfigurowalnymi parametrami
- Analiza cepstralna - wyznaczanie częstotliwości podstawowej (F0) przy użyciu cepstrum
- Parametryzacja w dziedzinie częstotliwości - obliczanie parametrów takich jak centroid częstotliwościowy, szerokość pasma, płaskość widma i inne
- Wizualizacja parametrów na poziomie ramki - obserwacja zmian parametrów częstotliwościowych w czasie
AudioProcessingAndAnalysisProject2/
├── audio_files/
│ └── ... (opcjonalne pliki .wav używane w projekcie)
├── files/
│ ├── main.py # Główny punkt startowy aplikacji
│ ├── audio_app.py # Moduł z klasą AudioApp (GUI, odtwarzanie, wykres przebiegu)
│ ├── audio_processing.py # Klasy do przetwarzania audio (detekcja ciszy/dźwięczności)
│ ├── design.py # Klasy i funkcje definiujące styl, kolory w GUI
│ ├── features.py # Funkcje obliczające cechy sygnału (RMS, ZCR, STE, F0, itp.)
│ ├── features_window.py # Moduł z klasą FeaturesWindow do wyświetlania wykresów cech
│ ├── frequency_analysis.py # Moduł analizy częstotliwościowej z klasami FrequencyAnalysisWindow i CepstrumAnalysisWindow
│ ├── frequency_features.py # Implementacja parametrów w dziedzinie częstotliwości
│ ├── frequency_features_window.py # Moduł wizualizacji parametrów częstotliwościowych
│ ├── windowing.py # Implementacja funkcji okienkowych
│ └── cepstrum_analysis.py # Funkcje do analizy cepstralnej
├── documentation/
│ ├── AiPD_dokumentacja_2_Jakub_Poltorak.pdf # Dokumentacja projektu
├── .gitignore
├── README.md # Niniejszy plik
└── requirements.txt # Lista zależności (pip)
Moduł zawiera dwie główne klasy:
FrequencyAnalysisWindow- okno GUI do analizy częstotliwościowej sygnału, umożliwiające wizualizację w dziedzinie czasu, analizę FFT oraz generowanie spektrogramuCepstrumAnalysisWindow- okno GUI do analizy cepstralnej, pozwalające na estymację i śledzenie częstotliwości podstawowej (F0) w sygnałach mowy
FrequencyFeaturesWindow- klasa implementująca interaktywne okno do wizualizacji parametrów częstotliwościowych sygnału w funkcji czasu (głośność, centroid częstotliwościowy, szerokość pasma, ERSB, płaskość widma, współczynnik szczytu)
- Implementacja wszystkich parametrów w dziedzinie częstotliwości
- Implementacja funkcji okienkowych (prostokątne, trójkątne, Hamminga, Hanna, Blackmana)
- Funkcje do aplikowania okien na ramki sygnału
- Funkcje do obliczania cepstrum i estymacji częstotliwości podstawowej
Aplikacja wykorzystuje Szybką Transformatę Fouriera (FFT) do analizy spektralnej sygnału. Dla sygnałów dyskretnych stosowana jest Dyskretna Transformata Fouriera (DFT)
Zaimplementowano następujące funkcje okienkowe:
- Okno prostokątne - najlepsza rozdzielczość częstotliwościowa, ale największy przeciek widma
- Okno trójkątne (Bartletta) - kompromis między rozdzielczością a przeciekiem widma
- Okno Hamminga - dobry balans między rozdzielczością a tłumieniem listków bocznych
- Okno Hanna - podobne do Hamminga, ale z lepszym tłumieniem dalszych listków bocznych
- Okno Blackmana - najlepsza redukcja przecieku widma, kosztem rozdzielczości częstotliwościowej
Spektrogram to dwuwymiarowa reprezentacja sygnału w dziedzinie czas-częstotliwość. Parametry konfiguracyjne:
- Długość ramki - wpływa na rozdzielczość częstotliwościową
- Przesunięcie między ramkami (hop) - wpływa na rozdzielczość czasową
- Nakładanie się ramek (overlap)
- Funkcja okienkowa - wpływa na redukcję przecieku widma
Aplikacja implementuje następujące kroki:
- Podział sygnału na ramki i zastosowanie funkcji okienkowej
- Obliczenie FFT dla każdej ramki
- Obliczenie logarytmu wartości bezwzględnej FFT (logarytmiczne widmo amplitudowe)
- Obliczenie odwrotnej FFT logarytmicznego widma amplitudowego (cepstrum)
- Znalezienie piku w cepstrum w zakresie odpowiadającym oczekiwanej częstotliwości podstawowej
- Konwersja znalezionej kwefrencji na częstotliwość podstawową
Aplikacja umożliwia obliczanie i wizualizację następujących parametrów:
- Głośność (Volume) - miara całkowitej energii spektralnej sygnału
- Centroid częstotliwościowy (FC) - "środek ciężkości" widma, związany z postrzeganą "jasnością" dźwięku
- Szerokość pasma (BW) - miara rozrzutu energii widma wokół centroidu częstotliwościowego
- Energia w pasmach (BE) i stosunek energii w pasmach (ERSB) - miary energii w określonych zakresach częstotliwości:
- ERSB1: 0-630 Hz
- ERSB2: 630-1720 Hz
- ERSB3: 1720-4400 Hz
- ERSB4: 4400-Nyquist Hz
- Płaskość widma (SFM) - miara regularności rozkładu energii w widmie
- Współczynnik szczytu widma (SCF) - stosunek maksymalnej wartości widma do jego wartości średniej
git clone https://github.com/JakubPoltorak147/AudioProcessingAndAnalysisProject2.git
cd AudioProcessingAndAnalysisProject2python -m venv .venv
# Linux / macOS
source .venv/bin/activate
# Windows
.venv\Scripts\activatepip install -r requirements.txtcd files
python main.pyPo uruchomieniu aplikacji użytkownik może:
- Wczytać plik WAV - wybór dowolnego pliku dźwiękowego w formacie WAV
- Odtwarzać dźwięk - z opcjami odtwarzania, pauzy i zatrzymania
- Wizualizować przebieg czasowy - z opcjonalnym zaznaczeniem fragmentów ciszy, dźwięcznych i bezdźwięcznych
- Analizować cechy sygnału - dostęp do wykresów cech z poprzedniej wersji aplikacji
- Przeprowadzać analizę częstotliwościową - nowe okno z FFT, spektrogramem i konfigurowalnymi parametrami
- Przeprowadzać analizę cepstralną - okno do analizy częstotliwości podstawowej
- Wizualizować parametry częstotliwościowe - okno do analizy parametrów w dziedzinie częstotliwości
Dokumentacja projektu zawiera wyniki eksperymentów przeprowadzonych przy użyciu aplikacji, w tym:
- Analiza parametrów częstotliwościowych dla różnych głosów i głosek
- Analiza tonu podstawowego w głosach męskich i żeńskich
- Analiza formantów w samogłoskach
- Porównanie różnych funkcji okienkowych i ich wpływu na widmo
- Badanie różnic między samogłoskami a spółgłoskami w analizie widmowej
Szczegółowe wyniki i wnioski z tych eksperymentów dostępne są w pliku dokumentacji.
Projekt opracowany przez Jakuba Półtoraka @JakubPoltorak147.
Szczegółowa dokumentacja teoretyczna i techniczna znajduje się w pliku documentation/AiPD_dokumentacja_2_Jakub_Poltorak.pdf.