• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Analiza Fouriera (FFT) pliku MP3 przy użyciu Pythona

Object Storage Arubacloud
0 głosów
817 wizyt
pytanie zadane 20 października 2020 w Python przez polskiPiter Początkujący (370 p.)

Dzień dobry. Napisałem skrypt w języku python, który ładuje plik MP3 muzyki i oblicza transformatę Fouriera w celu uzyskania widma częstotliwości dzięki czemu mogę wyłuskać pojedyncze sygnały. Idea kodu jest taka, że:

1. Ładuje plik dźwięku muzyki MP3 i dekompresuje do WAV

2. Wyciągam z pliku WAV dane o częstotliwości próbkowania i dane o fali dźwiękowej (muzyka jest stereo, posiada dwa kanały identyczne co do zawartości, więc bierzemy jeden)

3. Używamy FFT, wyliczamy częstotliwość do skali i rysuje wykres.

Teraz tak, testowałem dla dźwięku o częstotliwości 100Hz i 1KHz i na wykresie pokazuje, że zgadza się, na tej częstotliwości jest czysty sygnał. Ale chciałbym, żeby ktoś sprawdził czy to dobrze liczy i dobrze rysuje wykres. Skrypt będę potem wykorzystywać do wizualizacji muzyki.

Czy to co napisałem jest prawidłowe, czy coś muszę poprawić ?

Kod:

#Moduły pydub, scipy i matplotlib
import pydub
from scipy.io import wavfile
from scipy.fftpack import fft
from scipy.fftpack import fftfreq
import matplotlib.pyplot as plt 

#Ścieżki do pliku MP3 i do zapisu pliku WAV
FilepathMP3 = '/home/piter/Dokumenty/studia/[S7]_Praca_inżynierska/Testowanie FFT/Test3.mp3'
FilepathWAV = '/home/piter/Dokumenty/studia/[S7]_Praca_inżynierska/Testowanie FFT/Test3.wav'

#Załadowanie pliku MP3
FileMP3 = pydub.AudioSegment.from_mp3(FilepathMP3)

#Dekompresja pliku MP3 do pliku WAV
FileMP3.export(FilepathWAV,format="wav")

#Odczytanie danych: Częstotliwość próbkowania, dane o fali dźwiękowej
Rate,AudData = wavfile.read(FilepathWAV)

#Stereo: Dwa kanały (Lewy i Prawy). Bierzemy dane tylko z jednego, bo są identyczne
channel1 = AudData[:,0]

#Wyliczenie dyskretnej Transformaty Fouriera
FFT = abs(fft(channel1))

#Przygotowanie skali częstotliwości
freqs = fftfreq(len(FFT),(1.0/Rate))
print(freqs)

#Narysowanie wykresu
plt.plot(freqs[range(len(FFT)//2)],FFT[range(len(FFT)//2)])
plt.xlabel("Frequency (Hz)")
plt.ylabel("Amplitude")
plt.savefig('Wykres_testowy.png')
plt.show()

 

komentarz 20 października 2020 przez reaktywny Nałogowiec (40,990 p.)
Tak szczerze, to myślę, że na Stack Overflow uzyskasz szybciej i lepszą odpowiedź niż tu. Myślę, że rzadko kto zna te biblioteki pythona, to jest tematyka dość niszowa.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 341 wizyt
pytanie zadane 29 października 2020 w Systemy operacyjne, programy przez Agnieszka Schröder Nowicjusz (120 p.)
+1 głos
1 odpowiedź 521 wizyt
pytanie zadane 18 kwietnia 2021 w C# przez Avernis Nałogowiec (27,400 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...