Phát hiện sân người thời gian thực


11

Tôi đang cố gắng thực hiện một trò chơi ca hát sẽ phân tích đầu vào mic thô và cho người chơi biết anh ấy hát hay như thế nào. Điều đó cần phải được thực hiện trong thời gian thực.

Tôi đã bắt gặp rất nhiều chủ đề hỏi cùng một câu hỏi nhưng tôi vẫn chưa hoàn thành nó, có lẽ là do tôi không có kinh nghiệm trong lĩnh vực này và nền tảng toán học nông cạn. Tôi đã triển khai một thuật toán dựa trên bài viết về độ dịch chuyển của trang web DSPDimension: http://www.dspdimension.com/admin/pitch-shifting-USE-the-ft/

Tôi trích xuất tần số và cường độ thực như bài báo giải thích, nhưng tôi không biết tìm tần số cơ bản với điều này. Tôi đã cố gắng để có được thùng với cường độ lớn nhất nhưng điều đó chỉ mang lại cho tôi kết quả đúng cho tín hiệu cao hơn, không quan trọng tôi sử dụng yếu tố quá khổ nào mà tôi vẫn nhận được dữ liệu xấu cho tín hiệu freq thấp. Cách tiếp cận này là hoàn toàn sai hay tôi đang đi đúng hướng nhưng chỉ thiếu một cái gì đó?

Cảm ơn trước,

EDIT: Tôi đã quên đề cập rằng tôi chỉ quan tâm đến lớp pitch, vì vậy sẽ ổn nếu thiếu phần cơ bản nhưng tôi có một âm bội mạnh mẽ trong mẫu.

EDIT2: Cảm ơn mọi người, tôi vừa hoàn thành một phiên bản thuật toán hoạt động như một bùa mê. Vấn đề ước tính cao độ thấp là do thử nghiệm đầu vào của tôi. Khi tôi hát nốt nhạc nó khớp chính xác. Ngoài ra, tôi đang xem xét tất cả các sóng hài bây giờ, không chỉ là đỉnh cao nhất.


Wikipedia có một số thông tin.
Emre

Câu trả lời:


9

Tôi đã cố gắng để có được thùng với cường độ lớn nhất nhưng điều đó chỉ mang lại cho tôi kết quả đúng cho tín hiệu cao hơn, không quan trọng tôi sử dụng yếu tố quá khổ nào mà tôi vẫn nhận được dữ liệu xấu cho tín hiệu freq thấp.

Đó là bởi vì những giai điệu lớn hơn so với nền tảng. Vẽ phổ của bạn và bạn sẽ thấy. Một phương pháp tốt hơn để tìm ra cơ bản thực sự là autocorrelation. Sau đó, bạn đang "trượt" dạng sóng qua chính nó và tìm thấy độ trễ mà hình dạng sóng thẳng hàng với chính nó.

http://www.phon.ucl.ac.uk/cifts/spsci/matlab/lect10.html

Bạn có thực sự muốn họ hát nốt chính xác không, hoặc có ổn không nếu họ hát một quãng tám ở trên hoặc dưới tùy thuộc vào thanh ghi giọng của họ?


Bạn nói đúng, tôi quên đề cập rằng tôi chỉ quan tâm đến lớp sân. Tôi đang sử dụng trang web này để kiểm tra công cụ của mình: Seventhopes.com/tuningfork/tuningfork.html . Đối với đầu vào của A (220Hz), nó trả về E (660Hz) là lớp cao độ được tìm thấy. Tôi đã xem xét các spectum và 220Hz thực sự là có, nhưng với cường độ nhỏ hơn 660Hz. Sau khi lọc ra các giá trị dưới cường độ tối thiểu và tần số giới hạn trong phạm vi mong muốn của tôi, hình ảnh tôi nhận được từ đây có 4 đỉnh. [đỉnh, mag] = [220, 0,0203], [618, 0,0142], [660, 0,0668], [703, 0,0497].
Felipe Lira

Tôi chỉ nghĩ rằng có lẽ tôi nên tính toán bù pha trong khi tính toán cường độ, giống như tôi đang làm để có được tần số thực. Điều đó có ý nghĩa? Ý tôi là, nếu tôi có độ lệch pha khoảng 90 độ cho một thùng, thì "cực đại" sẽ ở 0 độ phải không?
Felipe Lira

@elipedrl: Vì vậy, về cơ bản bạn đang viết một bộ chỉnh guitar. :) Theo tôi hiểu, họ lọc thấp để làm sạch hình dạng sóng và sau đó đếm các đỉnh để có được cường độ. electronicdesign.com/article/articles/... aboutmicrocontroller.blogspot.com/2008/04/... Có nhiều cách tốt hơn, tuy nhiên, nếu bạn đang đi cho chính xác hơn là làm giảm thanh danh gist.github.com/255291
endolith

@elipedrl: Độ lệch pha cho thùng phải không liên quan đến cao độ. Mỗi thùng là một số phức và bạn quan tâm đến giá trị tuyệt đối hoặc độ lớn của số đó. vi.wikipedia.org/wiki/Absolute_value#Complex_numbers
endolith

1
và nếu bạn tình cờ có 2 FFT ngắn hơn vì một số lý do (độ trễ, lượng tử thời gian, v.v.), tính toán bộ phát âm pha ít tính toán hơn so với thực hiện FFT khác dài hơn và nội suy điều đó.
hotpaw2

6

Có, sử dụng một công cụ ước tính tần số cao nhất cho cao độ là sai. Cao độ là một hiện tượng tâm lý âm thanh, vì vậy phát hiện hoặc ước lượng cao độ khác với ước tính tần số. Đã có rất nhiều phương pháp ước tính cao độ được đưa ra trong các câu trả lời trước cho các câu hỏi tương tự ở đây. Có nhiều hơn 1 để lựa chọn.

Đây là một: /programming/4227420/matlab-missing-funduel-from-an-fft/4231322#4231322 và một cách khác: Mẹo để cải thiện phát hiện sân

THÊM # 1: Các câu hỏi tương tự như vậy được hỏi thường xuyên đến nỗi tôi đã viết một bài đăng blog dài hơn về chủ đề này: http://www.mUSEpaw.com/2012/04/musical-pitch-is-not-just-fft- tần số.html


Tôi đã cập nhật câu hỏi với thông tin mà tôi chỉ quan tâm đến lớp sân. Tôi thực sự hy vọng rằng FFT với việc xử lý bài đăng là đủ cho việc này, tôi chậm tiến độ và thay đổi cách tiếp cận sẽ là điều tồi tệ đối với tôi.
Felipe Lira

@elipedrl: FFT sẽ hoạt động sau đó. Lấy một vài đỉnh và sau đó chọn một trong số chúng một cách thông minh là đủ tốt. Hãy nhớ rằng các đỉnh hợp lệ sẽ gần với (nhưng không chính xác) bội số nguyên của cơ bản, trong khi các đỉnh giả sẽ không. Bạn phải tránh chọn các đỉnh giả và tránh chọn sóng hài bậc 3, v.v. không phải là quãng tám cách xa nốt nhạc bạn đang tìm kiếm.
endolith

Có thể, mặc dù có lẽ là không thể, vì không có đỉnh tần số ở tần số cao độ âm nhạc. Một số nguyên âm nam có thể gần với điều này, chỉ còn lại những âm bội cao sau khi lọc bởi công thức nguyên âm.
hotpaw2

Phương pháp phổ sản phẩm hài có thể phù hợp để tìm ước lượng mẫu số chung thấp nhất LCD của một nhóm các đỉnh phổ, bằng cách xử lý sau kết quả FFT ban đầu.
hotpaw2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.