Giúp tính toán / hiểu các MFCC: Hệ số cepstrum tần số Mel


17

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.

  1. 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 Nx[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 độ.n0,1,,N1N

  2. 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 .x[n]

  3. 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 ]x[n]F(x[n])F(x1[n])F(x2[n])F(xN[n])xi[n]X[k]

  4. Á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 k của X[k] ("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 X[k] ? 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 X[k] bởi vì sau đó nếu X[k]=A[k]B[k] 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 (?).

  5. 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.X[k]

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ố?


1
Đây là một câu hỏi tuyệt vời, nhưng có rất nhiều ở đây để trả lời. Tôi khuyên bạn nên chia câu hỏi này thành 2-3 câu hỏi khác nhau (bạn có thể tham khảo câu hỏi này nếu bạn muốn giữ liên tục) để có thể trả lời dễ dàng hơn.
jonsca

Vì trước đây bạn đã hỏi cùng một câu hỏi về math.SE (và được khuyên rằng dsp.SE là một ngôi nhà tốt hơn cho nó), có lẽ bạn nên xóa câu hỏi trên math.SE.
Dilip Sarwate

Tôi đã xóa phiên bản trên math.SE
YoungMoney

Hướng dẫn rất hay và hấp dẫn

1
Hey u đã nói trong câu hỏi của bạn rằng "Ánh xạ tới thang đo Mel và ghi nhật ký. Tôi biết cách chuyển đổi các số tần số thông thường sang thang đo Mel." bạn có thể giúp tôi tính toán phần này Vì tôi có đầu ra FFt của mình là x [k] = 1 * 184 nhưng bộ lọc thông dải băng hình tam giác của tôi là của bộ 20 * 3. sau đó làm thế nào tôi có thể nhân cả hai. Vui lòng ASAp
Ayush Agrawal

Câu trả lời:


25

Từng bước một...

1. & 2 . Chính xác. Lưu ý rằng các khung thường chồng chéo, ví dụ, khung 0 là các mẫu từ 0 đến 440; khung 1 là mẫu 220 đến 660; khung 2 là các mẫu 440 đến 880 và cứ thế ... Lưu ý rằng chức năng cửa sổ được áp dụng cho các mẫu trong khung.

3 . Biến đổi Fourier được thực hiện cho từng khung. Động lực đằng sau điều này rất đơn giản: tín hiệu lời nói thay đổi theo thời gian, nhưng đứng yên trên các đoạn ngắn. Bạn muốn phân tích từng phân đoạn ngắn riêng lẻ - bởi vì trên phân đoạn này, tín hiệu đủ đơn giản để được mô tả hiệu quả theo một vài hệ số. Hãy nghĩ về ai đó nói "xin chào". Bạn không muốn thấy tất cả các âm vị được thu gọn thành một phổ duy nhất (FFT thu gọn thông tin tạm thời) bằng cách phân tích tất cả âm thanh cùng một lúc. Bạn muốn xem "hhhhheeeeeeeeeeelloooooooooo" để nhận ra giai đoạn từ theo từng giai đoạn, vì vậy nó phải được chia thành các phân đoạn ngắn.

NN= =40 ) cách đều nhau theo thang mel, giữa 20 Hz (dưới cùng của dải nghe) và tần số Nyquist. Ví dụ thực tế: Tín hiệu được lấy mẫu ở tần số 8kHz và chúng tôi muốn 40 thùng. Vì 4kHz (Nyquist) là 2250 mel, tần số trung tâm của bộ lọc sẽ là: 0 mel, 2250/39 mel, 2 x 2250/39 mel .. 2250 mel.

Khi các tần số này đã được xác định, chúng tôi tính toán tổng trọng số của cường độ FFT (hoặc năng lượng) xung quanh mỗi tần số này.

Nhìn vào hình ảnh sau đây, đại diện cho một ngân hàng bộ lọc với 12 thùng:

Bộ lọc tần số Mel với 12 kênh

Thùng thứ 8 có tần số trung tâm khoảng 2kHz. Năng lượng trong thùng thứ 8 có được bằng cách tính tổng năng lượng FFT có trọng số trong khoảng 1600 đến 2800 Hz - với trọng lượng đạt cực đại khoảng 2kHz.

Lưu ý thực hiện: Nhóm các khoản tiền có trọng số này có thể được thực hiện trong một thao tác duy nhất - phép nhân ma trận của "ma trận bộ lọc" bởi vectơ năng lượng FFT.

Vì vậy, ở giai đoạn này, chúng tôi đã "tóm tắt" phổ FFT thành một tập hợp các giá trị năng lượng 40 (12 trong hình minh họa), mỗi giá trị tương ứng với một dải tần số khác nhau. Chúng tôi lấy nhật ký của các giá trị này.

KK= =13


Chỉ cần một câu hỏi nhanh về ngân hàng lọc Mel - chiều cao / biên độ dao động từ 1,8 - 2 là điều này quan trọng hay chúng có thể là đơn vị (1) chiều cao?
YoungMoney

1
Điều này không quan trọng. Hiệu quả của việc sử dụng tối đa. biên độ tại 1.0 so với 2.0 sẽ chỉ thay đổi năng lượng log bằng một hằng số ở bước 4. và do đó sẽ chỉ tác động đến hệ số đầu tiên ở bước 5 (dù sao thường bị loại bỏ). Lưu ý rằng một số triển khai đang sử dụng chuẩn hóa năng lượng để bộ lọc càng rộng thì biên độ cực đại của nó càng thấp ( i.imgur.com/IOaLa.gif ). Điều này có thể gây ra thay đổi hiệu suất nhỏ trong các ứng dụng nhận dạng. Nếu bạn xem các triển khai MFCC đang sử dụng, thực tế có nhiều biến thể nhỏ ở mỗi bước - bit.ly/ULatdL
pichenettes

Đây là một chủ đề cũ ở đây nhưng có điều gì đó tôi cần hỏi về biểu đồ. Nếu Nyquist là 4kHz thì tại sao các bộ lọc giới hạn băng tần đó vượt quá 4kHz. MFCC có ổn không Thông thường, bạn không muốn bộ lọc vượt qua Nyquist? Tôi có đúng không
Celdor

2
Bạn có tham khảo về lý do tại sao N = 40 mel tần số bộ lọc (hoặc 26, một giá trị phổ biến khác mà tôi thấy) được sử dụng không?
James Owers

1
nơi nào 39 melđến từ là bước 4?
Gert Kommer
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.