Nhìn vào câu trả lời này: Python Scipy FFT wav filesTại sao tôi nên loại bỏ một nửa số tiền FFT trả về?
Phần kỹ thuật rõ ràng và làm việc, nhưng tôi có hai câu hỏi lý thuyết (mã đề cập ở dưới):
1) Tại sao tôi phải chuẩn hóa (b=...
) khung? Điều gì sẽ xảy ra nếu tôi sử dụng dữ liệu thô?
2) Tại sao tôi chỉ nên sử dụng một nửa kết quả FFT (d=...
)?
3) Tại sao tôi nên abs(c)
kết quả FFT?
Có lẽ tôi thiếu điều gì đó do hiểu biết không đủ về định dạng WAV hoặc FFT, nhưng trong khi mã này hoạt động tốt, tôi rất vui khi hiểu tại sao nó hoạt động và cách sử dụng tốt nhất.
Edit: để đáp ứng với những nhận xét của @Trilarion:
Tôi đang cố gắng để viết một đơn giản, không chính xác 100% nhưng nhiều hơn như một bằng chứng của khái niệm Speaker Diarisation bằng Python. Điều đó có nghĩa là lấy một tập tin wav (ngay bây giờ tôi đang sử dụng this one cho các bài kiểm tra của tôi) và trong mỗi giây (hoặc bất kỳ độ phân giải nào khác) nói nếu người nói là người # 1 hoặc người # 2. Tôi biết trước rằng đây là 2 người và tôi không cố gắng liên kết họ với bất kỳ chữ ký tiếng nói nào, chỉ để tách biệt. Ngay bây giờ mất mỗi giây, FFT nó (và do đó có được một danh sách các tần số), và cluster chúng bằng cách sử dụng KMeans với số cụm giữa 2 và 4 (A, B [, Silence [, A + B]]).
Tôi vẫn còn mới để phân tích tệp wav và âm thanh nói chung.
import matplotlib.pyplot as plt
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 = sfft.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')
plt.show()
Để bắt đầu, bạn có thể đọc [this] (http://mathworks.com/help/matlab/math/fast-fourier-transform-fft.html). – mkrieger1
Đối với (2): Có vẻ như các câu trả lời gốc của các cụm từ tần số âm và chỉ sử dụng các thuật ngữ tần số dương. Đối với tín hiệu âm thanh, những tín hiệu này cần được dự phòng. – dhke
Hãy làm một câu hỏi thực sự của nó. Tại sao bạn nên làm điều gì đó rõ ràng phụ thuộc vào những gì bạn muốn đạt được. Vì câu hỏi này không rõ ràng và do đó không hữu ích ngoại trừ bạn. Các câu trả lời là rất rộng rãi trong việc giải thích kiến thức đằng sau biến đổi fourier nhưng họ không bao giờ có thể trả lời lý do tại sao bạn nên làm điều đó. – Trilarion