Tôi đã đọc các mẩu và mẩu trực tuyến nhưng tôi không thể ghép tất cả lại với nhau. Tôi có một số kiến thức nền tảng về tín hiệu / công cụ DSP cần có đủ điều kiện tiên quyết cho việc này. Tôi quan tâm đến việc cuối cùng mã hóa thuật toán này trong Java nhưng tôi chưa hiểu đầy đủ về nó, đó là lý do tại sao tôi ở đây (nó được tính là toán học, phải không?).
Đây là cách tôi nghĩ rằng nó hoạt động cùng với những lỗ hổng trong kiến thức của tôi.
Bắt đầu với mẫu lời nói âm thanh của bạn, giả sử tệp .wav, mà bạn có thể đọc thành một mảng. Gọi mảng nàyn 0 , 1 , ... , N - 1 N , trong đó nằm trong khoảng từ (vì vậy mẫu). Các giá trị tương ứng với cường độ âm thanh tôi đoán - biên độ.
Chia tín hiệu âm thanh thành các "khung" riêng biệt trong 10ms hoặc lâu hơn, trong đó bạn cho rằng tín hiệu giọng nói là "đứng yên". Đây là một hình thức lượng tử hóa. Vì vậy, nếu tốc độ mẫu của bạn là 44,1KHz, 10ms bằng 441 mẫu hoặc giá trị của .
Thực hiện chuyển đổi Fourier (FFT vì mục đích tính toán). Bây giờ điều này được thực hiện trên toàn bộ tín hiệu hoặc trên từng khung riêng biệt của ? Tôi nghĩ rằng có một sự khác biệt bởi vì nói chung, biến đổi Fourier xem xét tất cả các yếu tố của tín hiệu, vì vậy nối với \ mathcal F (x_2 [n] ) đã tham gia với \ ldots \ mathcal F (x_N [n]) trong đó x_i [n] là các khung nhỏ hơn. Dù sao, giả sử chúng tôi thực hiện một số FFT và kết thúc với X [k] cho phần còn lại của điều này.F ( x [ n ] ) ≠ F ( x 1 [ n ] ) F ( x 2 [ n ] ) ... F ( x N [ n ] ) x i [ n ] X [ k ]
Ánh xạ tới thang đo Mel và ghi nhật ký. Tôi biết cách chuyển đổi số tần số thông thường sang thang đo Mel. Với mỗi của ("trục x" nếu bạn cho phép tôi), bạn có thể thực hiện công thức tại đây: http://en.wikipedia.org/wiki/Mel_scale . Nhưng làm thế nào về "giá trị y" hoặc biên độ của ? Có phải chúng chỉ giữ nguyên các giá trị nhưng được chuyển sang các điểm thích hợp trên trục Mel (x-) mới? Tôi đã thấy trong một số bài báo có một cái gì đó về việc ghi lại các giá trị thực của bởi vì sau đó nếu trong đó một trong những tín hiệu đó được coi là nhiễu bạn không muốn , hoạt động nhật ký trên phương trình này biến nhiễu nhân thành nhiễu cộng, hy vọng có thể được lọc (?).
Bây giờ bước cuối cùng là lấy một DCT của đã sửa đổi của bạn từ phía trên (tuy nhiên cuối cùng nó đã được sửa đổi). Sau đó, bạn lấy biên độ của kết quả cuối cùng này và đó là MFCC của bạn. Tôi đọc một cái gì đó về việc vứt bỏ các giá trị tần số cao.
Vì vậy, tôi đang cố gắng thực sự tìm ra cách tính toán những người này từng bước một, và rõ ràng một số điều đang lảng tránh tôi từ trên cao.
Ngoài ra, tôi đã nghe nói về việc sử dụng "ngân hàng bộ lọc" (về cơ bản là một bộ lọc thông dải) và không biết điều này có liên quan đến việc tạo khung từ tín hiệu ban đầu hay có thể bạn tạo khung sau FFT?
Cuối cùng, có điều gì tôi thấy về MFCC có 13 hệ số?