Tôi muốn nhận tần suất với công suất tối đa cho mọi thời điểm trong tệp wav. Vì vậy, tôi đã viết STFT bằng Python sử dụng fft từ scipy. Tôi đã sử dụng chức năng cửa sổ kaiser từ scipy. Mọi thứ trông tuyệt vời, nhưng đầu ra của tôi trông rất lạ. Nó có một số số rất nhỏ và một số rất cao.Thời gian ngắn Biến đổi Fourier trong python
đây là đầu ra cho một file wav: http://pastebin.com/5Ryd2uXj và đây là mã trong python:
import scipy, pylab
import wave
import struct
import sys
def stft(data, cp, do, hop):
dos = int(do*cp)
w = scipy.kaiser(dos,12) //12 is very high for kaiser window
temp=[]
wyn=[]
for i in range(0, len(data)-dos, hop):
temp=scipy.fft(w*data[i:i+dos])
max=-1
for j in range(0, len(temp),1):
licz=temp[j].real**2+temp[j].imag**2
if(licz>max):
max = licz
maxj = j
wyn.append(maxj)
#wyn = scipy.array([scipy.fft(w*data[i:i+dos])
#for i in range(0, len(data)-dos, 1)])
return wyn
file = wave.open(sys.argv[1])
bity = file.readframes(file.getnframes())
data=struct.unpack('{n}h'.format(n=file.getnframes()), bity)
file.close()
cp=44100 #sampling frequency
do=0.05 #window size
hop = 5
wyn=stft(data,cp,do,hop)
print len(wyn)
for i in range(0, len(wyn), 1):
print wyn[i]
Bạn đã thử kiểm tra nó với một dạng sóng đã biết như sóng sin để xem bạn có nhận được kết quả mong đợi không? – steve8918
Tôi chỉ tìm thấy điều này: http://stackoverflow.com/questions/2459295/stft-and-istft-in-python Có vẻ tương tự và tôi thấy rằng trên cốt truyện của xoang là 2 dòng, không phải 1. Tôi có cùng trong đầu ra của tôi cho xoang. Tôi không biết tại sao ... – user1226419