2009-08-13 43 views
15

Tôi muốn lấy dữ liệu PCM âm thanh và tìm các đỉnh trong đó. Cụ thể, tôi muốn trả về tần suất và thời gian mà tại đó một đỉnh xảy ra. Sự hiểu biết của tôi về điều này là tôi phải lấy dữ liệu PCM và đưa nó vào một mảng, thiết lập nó như là giá trị thực với các bộ phận phức tạp được thiết lập là 0. Tôi lấy FFT, và tôi lấy lại một mảng . Nếu mỗi số trong mảng là một giá trị độ lớn, làm thế nào để tôi có được tần suất liên kết với mỗi số? Ngoài ra, tôi có lấy độ lớn của phần phức hợp & thực hay chỉ loại bỏ các giá trị phức tạp?Giải thích FFT cho tôi

Cuối cùng, nếu tôi muốn tìm các đỉnh trong một bài hát, tôi chỉ cần đặt một cửa sổ nhỏ thành FFT và trượt nó trên tất cả âm thanh? Bất kỳ đề xuất nào về cửa sổ lớn như thế nào?

+1

Tìm các đỉnh trong dữ liệu PCM âm thanh không giống với việc tìm các đỉnh trong FFT. Chính xác những gì bạn đang cố gắng để làm? – endolith

Trả lời

3

Bạn thực sự có thể đang tìm kiếm spectrogram, về cơ bản là FFT của dữ liệu trong một cửa sổ nhỏ trượt dọc theo trục thời gian. Nếu bạn có phần mềm thực hiện điều này, nó có thể giúp bạn tiết kiệm một số công sức. Đó là những gì thường được sử dụng để phân tích thời gian tín hiệu âm thanh khác nhau, và là một cách rất hữu ích để nhìn vào âm thanh. Ngoài ra, có một số thủ thuật, ví dụ, với dữ liệu cửa sổ cho FFTs, rằng quang phổ có lẽ sẽ đúng, nhưng sẽ khó hơn (mặc dù không phải là rất khó) để bạn làm đúng.

15

Nếu lấy mẫu dữ liệu PCM của bạn là F, thì thành phần tần số cao nhất trong FFT là F/2. Giả sử dữ liệu PCM của bạn được lấy mẫu tại 44100Hz, thì giá trị FFT của bạn sẽ chạy từ 0Hz (DC) đến 22050Hz. Nếu bạn bắt đầu với N mẫu, (N là lũy thừa 2), thì FFT có thể trả về giá trị N/2 đại diện cho tất cả các tần số dương từ 0 đến F/2, hoặc nó có thể trả về giá trị N cũng bao gồm các tần số âm từ - F/2 đến 0. Bạn nên kiểm tra các đặc điểm kỹ thuật của thuật toán FFT của bạn để tìm ra tần số mà mỗi mục mảng được ánh xạ.

Để tìm các đỉnh, bạn cần xem xét độ lớn của các giá trị FFT. Vì vậy, bạn cần phải thêm các phần bình phương thực và tưởng tượng của mỗi giá trị phức tạp.

Giả sử mẫu FFT của N PCM của bạn trả về N/2 giá trị phức tạp biểu diễn tần số dương. Sau đó khoảng cách giữa 2 mẫu phức là F/2N Hz. Với F = 44100Hz và N = 1024 mẫu, điều này sẽ là 21.5Hz. Đây là độ phân giải tần số của bạn. Nếu bạn cần tìm nhịp đập tần số thấp hơn, cửa sổ FFT sẽ cần phải được mở rộng.

4

well, Một mảng nguyên có kích thước 512 số phức thể hiện sóng đầu vào, khi được xử lý bằng FFT, chúng tôi sẽ thay thế các phần ảo bằng 0 (theo mục đích sử dụng), để lại các phần thực, sau đó truyền mảng FFT với tốc độ Lấy mẫu: 8192 Hz.

Bây giờ chúng tôi có một mảng 512 giá trị thực FFTed, mỗi giá trị là một số vô tỉ, mọi số vô lý thể hiện một số giá trị hữu ích.

Để nhận tần suất cơ bản, chúng tôi phải chia tỷ lệ mẫu theo kích thước bộ đệm:

8192/512 = 32;

32 là độ phân giải của các giá trị FFT có nghĩa là chúng ta đang nhận biết tần số biên độ cao gần các số là bội số của 32.

Giống như nếu chúng ta có một làn sóng

tần số: 3 48 23 128 Amplitude: 10 5 12 8 dB (ref = 1)

sau FFT chúng tôi nhận được:

tần số: 0 32 64 128 Biên độ: 9 8 2 8

FFT là miền tần số có nghĩa là sắp xếp theo tần số Miền thời gian ở phía bên kia có nghĩa là sắp xếp theo thời gian chúng tôi nghe nhạc từ seco nd zero để N. thứ hai

FFT chỉ có thể lắng nghe khi nó sắp xếp bởi tần số từ tần số từ 0 đến N. tần

Vì vậy, nó sắp xếp tần số theo thứ tự tăng dần, vì nó đã không mất tất cả các mẫu thực tế từ âm thanh (mà đang tiếp cận vô hạn) giống như lấy mỗi nano giây & ít hơn đến FFT, may mắn thay điều này không xảy ra FFT lấy mẫu từ âm thanh, lấy mẫu mỗi (1/tỷ lệ mẫu) thứ hai. mẫu này được đệm (trong trường hợp của chúng tôi: 512), mỗi 512 mẫu được đệm vào FFT, đầu ra là 512 giá trị FFT.

Vì FFT sắp xếp tần số, nó lộn xộn với các mẫu thời gian, các mẫu được sắp xếp theo tần số của chúng.

Các tần số hiển thị trên cơ sở thường xuyên mà là tần số cơ bản là tỷ lệ mẫu chia cho kích thước bộ đệm, đó là trong trường hợp của chúng tôi 8192/512 = 32.

Vì vậy, tần suất hiển thị mỗi 32 tần số, sức mạnh của tần số gần nhất được hiển thị theo tần số nguồn gần với chỉ mục.

Độ phân giải cao có thể đạt được bằng cách sử dụng tốc độ lấy mẫu cao hơn.

Để hiển thị tần suất, chúng tôi in chỉ mục theo chiều tăng dần tương ứng với Biên độ.

Amplitude = 20log10 (sản lượng/ref)

biên độ in bên cạnh mỗi Index cho thấy sức mạnh của tần số & có được chính xác hơn theo độ chính xác của nghị quyết.

Kết luận, FFT tạo chỉ mục biên độ, mỗi biên độ biểu thị sức mạnh của chỉ số tương ứng (tần số).