2010-06-17 28 views
14

Tôi muốn tạo một chương trình ghi dữ liệu âm thanh bằng PortAudio (tôi đã hoàn thành phần này) và sau đó hiển thị thông tin tần số của âm thanh đã ghi đó (hiện tại, Tôi muốn hiển thị tần số trung bình của mỗi nhóm mẫu khi họ đến).Cách trích xuất thông tin tần số từ các mẫu từ PortAudio sử dụng FFTW trong C

Từ một số nghiên cứu tôi đã thực hiện, tôi biết rằng tôi cần phải thực hiện FFT. Vì vậy, tôi googled cho một thư viện để làm điều đó, trong C, và tìm thấy FFTW.

Tuy nhiên, bây giờ tôi đã mất một chút. Chính xác thì tôi phải làm gì với các mẫu tôi đã ghi để trích xuất một số thông tin tần số từ chúng? Tôi nên sử dụng loại FFT nào (tôi cho rằng tôi cần một dữ liệu thực 1D?)?

Và khi tôi thực hiện FFT, làm cách nào để nhận thông tin tần suất từ ​​dữ liệu mà nó cung cấp cho tôi?

EDIT: Bây giờ tôi cũng tìm thấy thuật toán tự tương quan. Nó có tốt hơn không? Đơn giản hơn?

Cảm ơn rất nhiều trước, và xin lỗi, tôi hoàn toàn không có kinh nghiệm nếu điều này. Tôi hy vọng nó làm cho ít nhất một chút ý nghĩa.

Trả lời

15

Để chuyển đổi mẫu âm thanh của bạn đến một quang phổ điện:

  • nếu dữ liệu âm thanh của bạn là dữ liệu số nguyên sau đó chuyển nó sang điểm
  • nổi chọn một kích thước FFT (ví dụ N = 1024)
  • áp dụng một window function đến N mẫu dữ liệu của bạn (ví dụ Hanning)
  • sử dụng một FFT thực-to-phức tạp có kích thước N để tạo dữ liệu tần số miền
  • tính toán độ lớn của fr phức tạp của bạn dữ liệu miền equency (magnitude = sqrt(re^2 + im^2))
  • tùy chọn chuyển đổi độ lớn đến một quy mô log (dB) (magnitude_dB = 20*log10(magnitude))
+1

portaudio cho phép ghi dữ liệu ở định dạng phao (32 bit dấu chấm động). Vì vậy, tôi khuyến khích sử dụng đề xuất này. – INS

+0

@Iulian: có, đó có thể là điều hợp lý để làm, giả sử bạn không có tiền xử lý khác mà bạn muốn làm trong miền số nguyên trước khi bạn tạo ra phổ công suất. –

+0

Cảm ơn, chỉ một câu hỏi có lẽ là ngu ngốc. Tôi đã tính tất cả mọi thứ, nhưng bây giờ hãy nói rằng tôi muốn kiểm tra nếu có một tần số 440Hz (giữa A) hiện diện trong tín hiệu. Làm thế nào để làm điều đó? – houbysoft

Các vấn đề liên quan