Mam kilka plików WAV. Chciałbym użyć SciPy FFT do wykreślenia spektrum częstotliwości tych plików WAV. Jak miałbym to zrobić?Python Scipy FFT wav files
Odpowiedz
Python
zawiera kilka api do robienia tego dość szybko. Pobieram plik wav o bleszczach z this link. Możesz zapisać go na pulpicie i tam w terminalu. Te linie na wiersz python
powinna być na tyle (pominąć >>>
)
import matplotlib.pyplot as plt
from scipy.fftpack import fft
from scipy.io import wavfile # get the api
fs, data = wavfile.read('test.wav') # load the data
a = data.T[0] # this is a two channel soundtrack, I get the first track
b=[(ele/2**8.)*2-1 for ele in a] # this is 8-bit track, b is now normalized on [-1,1)
c = fft(b) # calculate fourier transform (complex numbers list)
d = len(c)/2 # you only need half of the fft list (real signal symmetry)
plt.plot(abs(c[:(d-1)]),'r')
plt.show()
tutaj wykres dla sygnału wejściowego:
Oto widmo
Dla prawidłowego wyjście, będziesz musiał przekonwertować xlabel
na częstotliwość dla wykresu spektrum.
k = arange(len(data))
T = len(data)/fs # where fs is the sampling frequency
frqLabel = k/T
Jeśli mamy do czynienia z wieloma plikami, można zaimplementować to jako funkcję: umieścić te linie w test2.py
:
import matplotlib.pyplot as plt
from scipy.io import wavfile # get the api
from scipy.fftpack import fft
from pylab import *
def f(filename):
fs, data = wavfile.read(filename) # load the data
a = data.T[0] # this is a two channel soundtrack, I get the first track
b=[(ele/2**8.)*2-1 for ele in a] # this is 8-bit track, b is now normalized on [-1,1)
c = fft(b) # create a list of complex number
d = len(c)/2 # you only need half of the fft list
plt.plot(abs(c[:(d-1)]),'r')
savefig(filename+'.png',bbox_inches='tight')
Say mam test.wav
i test2.wav
w bieżący działający katalog, wystarczy następujące polecenie w interfejsie zachęty python
: test importu2 mapa (test2.f, ['test.wav', 'test2.wav'])
Zakładając masz 100 takich plików i nie chcesz ich nazwiska wpisywać indywidualnie, trzeba pakiet glob
:
import glob
import test2
files = glob.glob('./*.wav')
for ele in files:
f(ele)
quit()
Trzeba będzie dodać getparams
w test2.f jeśli pliki .wav są nie tego samego.
Dobra odpowiedź! Możesz usunąć '>>>', aby OP i inni mogli kopiować i wklejać. Również znalazłem, że pomaga odpowiedź, jeśli umieścisz zdjęcie, jeśli twój kod tworzy fabułę. – Hooked
Dzięki. Mam aktualizację wątku z monitem usunięty i nowe zdjęcia. – Shenghui
Jak można połączyć wiele plików WAV? Mam dużo małych plików WAV. – user1802143
- 1. Scipy/Numpy FFT Analiza częstotliwości
- 2. Python SciPy convolve vs fftconvolve
- 3. FFT w Matlab i numpy/scipy dają różne wyniki
- 4. Jak wykreślić widmo pliku WAV przy użyciu FFT?
- 5. Znajdź wystąpienie próbki WAV w innym WAV?
- 6. Zapisywanie pliku wav w Pythonie z wavfile.write od scipy
- 7. Python konwertuje mp3 na wav z Pydubem
- 8. python numpy/scipy curve fitting
- 9. scipy/Python zainstalować na Ubuntu
- 10. Python ekstrakt wav z pliku wideo
- 11. jak odtwarzać plik wav w python?
- 12. Jak wykreślić plik WAV
- 13. fft zrozumienie
- 14. Python scipy - określ niestandardową dystrybucję dyskretną
- 15. Python (NumPy, SciPy), znajdowanie pustej przestrzeni macierzy
- 16. Python/Scipy - implementacja sigma optimize.curve_fit do optimize.leastsq
- 17. Niedokładność FFT dla C#
- 18. Scipy i CX_freeze - Błąd importowania scipy: nie można importować scipy będąc w katalogu źródłowym scipy
- 19. złączyć dwa pliki wav w NAudio przed końcem pierwszej wav
- 20. Pytanie instalatora: "Program Files" lub "Program Files (x86)"?
- 21. array komórką struct-Files
- 22. Django javascript files
- 23. google-files-api
- 24. Scipy Derivative
- 25. C++ Biblioteka detekcji FFT?
- 26. JTransforms FFT na obrazku
- 27. Przesuwne FFT w R
- 28. FFT - Kiedy do okna?
- 29. Bezpiecznie i szybko FFT
- 30. FFT w JavaScript
Spróbuj przejść do każdego kroku (odczyt w pliku WAV, używając FFT na danych). To nie powinno być wcale trudne, wróć tutaj, jeśli utkniesz. – MattG