У меня есть несколько файлов wav. Я хотел бы использовать SciPy FFT для построения частотного спектра этих wav-файлов. Как мне это сделать?Python Scipy FFT wav files
ответ
Python
предлагает несколько апи, чтобы сделать это довольно быстро. Я загружаю wav-файл с овчинами с this link. Вы можете сохранить его на рабочем столе и cd
там в терминале. Эти строки в python
строке должно быть достаточно: (опустить >>>
)
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()
Вот сюжет для входного сигнала:
Вот спектр
Для правильного вывода, вам нужно будет преобразовать xlabel
в частоту для графика спектра.
k = arange(len(data))
T = len(data)/fs # where fs is the sampling frequency
frqLabel = k/T
Если вы имеете дело с кучей файлов, вы можете реализовать это как функцию: поместить эти строки в 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, я test.wav
и test2.wav
в текущий рабочий каталог, достаточно выполнить следующую команду в интерфейсе python
: import test2 map (test2.f, ['test.wav', 'test2.wav'])
Если у вас есть 100 таких файлов, и вы не хотите, чтобы в индивидуальном порядке ввести их имена, вам нужно glob
пакет:
import glob
import test2
files = glob.glob('./*.wav')
for ele in files:
f(ele)
quit()
Вам нужно будет добавить getparams
в test2.f, если ваши .wav файлы а не одного и того же бита.
Хороший ответ! Вы можете удалить '>>>', чтобы OP и другие могли копировать и вставлять. Также я нашел, что это помогает ответить, если вы включаете изображение, если ваш код создает сюжет. – Hooked
Спасибо. У меня есть обновление потока с удаленным приглашением и новыми изображениями. – Shenghui
Как бы вы объединили несколько wav-файлов? У меня много маленьких wav-файлов. – user1802143
- 1. FFT y-scale confusion - Python scipy
- 2. Python Ripping CD Files to WAV
- 3. Прочитать wav-файл в python
- 4. Javafx и wav files
- 5. PyFFTW медленнее, чем SciPy FFT?
- 6. Немного разные результаты FFT от Matlab fft и Scipy fft
- 7. Scipy/Numpy FFT Frequency Analysis
- 8. Gstreamer multifilesink wav files splitting
- 9. Split и rejoin wav files
- 10. Построение fft из wav-файла с использованием python
- 11. FFT для спектрограмм в Python
- 12. Запись файла WAV в Python с wavfile.write из SciPy
- 13. Расчет FFT на wav-файле в matlab
- 14. Audioread в matlab wav-файла и FFT
- 15. C++ применение FFT к данным wav-файла
- 16. Как выполнить FFT по данным WAV-файла?
- 17. Scipy FFT Frequency Анализ очень шумного сигнала
- 18. scipy/numpy FFT по данным из файла
- 19. python fft plot "type error"
- 20. Построение диаграммы FFT в Python
- 21. FFT в Python с пояснениями
- 22. Расчет fft с использованием python
- 23. Python SciPy convolve vs fftconvolve
- 24. Python Преобразование массива в Wav
- 25. Python: Wave.readframe to numpy areay for fft
- 26. Python NumPy Конвертировать FFT в файл
- 27. Python/SciPy - Создание исполняемого файла
- 28. Python: параллельные вычисления FFT
- 29. FFT Multiplication Python 3.4.3
- 30. Странный выход FFT python
Попробуйте выполнить поиск по каждому шагу (чтение в wav-файле с использованием FFT по данным). Это не должно быть тяжело, вернитесь сюда, если вы застрянете. – MattG