Đây có phải là một cách giải thích chính xác của bước DCT trong tính toán MFCC?


9

Đây là một sự tiếp tục của các cuộc thảo luận ở đây . Tôi sẽ bình luận ở đó, nhưng tôi không có 50 đại diện nên tôi đang hỏi một câu hỏi mới.

Dưới đây là cách tôi hiểu bước DCT trong quy trình tính toán MFCC: Lý do căn bản đằng sau nó là tách biệt mối tương quan trong cường độ phổ log (từ ngân hàng bộ lọc) do sự chồng chéo của các bộ lọc. Về cơ bản, DCT làm mịn biểu diễn phổ được cho bởi các cường độ phổ log này.

Liệu có đúng không khi nói rằng đường màu xanh lam trong hình ảnh dưới đây đại diện cho quang phổ được biểu thị bằng vectơ của cường độ phổ log, và đường màu đỏ là vectơ đó đã từng là DCT-ified?

Các cường độ log-quang phổ của DCT-ified (tức là MFCC) so với các cường độ phổ log-log ???


Tôi có thể tải xuống mã của bạn để thử nghiệm ở đâu?
auraham

Hình ảnh dưới đây? Không có hình ảnh trong bài.
Eric Platon

Câu trả lời:


16

Hãy để tôi bắt đầu lại từ đầu. Cách tính tiêu chuẩn của cepstrum như sau:

C(x(t))=F1[log(F[x(t)])]

Trong trường hợp trường hợp hệ số MFCC có một chút khác biệt, nhưng vẫn tương tự.

Sau khi nhấn mạnh trước và cửa sổ, bạn tính toán DFT của tín hiệu của bạn và áp dụng ngân hàng bộ lọc của các bộ lọc hình tam giác chồng chéo, được phân tách theo tỷ lệ mel (mặc dù trong một số trường hợp, quy mô tuyến tính tốt hơn mel):

nhập mô tả hình ảnh ở đây

Đối với định nghĩa cepstrum, bây giờ bạn đại diện cho đường bao của phổ (phổ giảm) theo thang tần số mel. Nếu bạn đại diện cho điều đó, thì bạn sẽ thấy rằng nó giống với phổ tín hiệu ban đầu của bạn.

Bước tiếp theo là tính toán logarit của các hệ số thu được ở trên. Điều này là do thực tế là cepstrum được coi là một biến đổi đồng hình phân tách tín hiệu từ phản ứng xung của đường hô hấp, vv Làm thế nào?

Một tín hiệu giọng nói gốc hầu hết được kết hợp với đáp ứng xung của đường hô hấp:s(t)h(t)

s^(t)=s(t)h(t)

Trong tích chập miền tần số là phép nhân phổ:

S^(f)=S(f)H(f)

Điều đó có thể được phân tách thành hai phần, dựa trên thuộc tính sau: .log(ab)=log(a)+log(b)

Chúng tôi cũng hy vọng rằng đáp ứng xung không thay đổi theo thời gian, do đó có thể dễ dàng loại bỏ bằng cách trừ đi giá trị trung bình. Bây giờ bạn thấy lý do tại sao chúng tôi lấy logarit của năng lượng ban nhạc của chúng tôi.

Bước cuối cùng trong định nghĩa cepstrum sẽ là Biến đổi nghịch đảo nghịch đảo . Vấn đề là chúng ta chỉ có năng lượng log, không có thông tin về pha, vì vậy sau khi áp dụng các hệ số có giá trị phức tạp - không thanh lịch cho tất cả nỗ lực này để trở thành một đại diện nhỏ gọn. Mặc dù chúng ta có thể sử dụng Biến đổi Cosine rời rạc, đây là phiên bản 'đơn giản hóa' của FT và nhận được các hệ số có giá trị thực! Quy trình này có thể được hình dung như là các cosinoid phù hợp với các hệ số năng lượng log của chúng ta. Bạn có thể nhớ rằng cepstrum còn được gọi là 'phổ của phổ'? Đó là bước rất quan trọng - chúng tôi đang tìm kiếm bất kỳ tính tuần hoàn nào trong các hệ số đường bao năng lượng log của chúng tôi.F1ifft

nhập mô tả hình ảnh ở đây

Vì vậy, bây giờ bạn thấy rằng bây giờ thật khó để hiểu quang phổ ban đầu trông như thế nào. Ngoài ra, chúng tôi thường chỉ sử dụng 12 MFCC đầu tiên, vì những người cao hơn đang mô tả những thay đổi nhanh chóng trong năng lượng log, điều này thường làm cho tỷ lệ nhận dạng kém hơn. Vì vậy, lý do để làm DCT là như sau:

  • Ban đầu, bạn phải thực hiện IFFT, nhưng dễ dàng hơn để có được các hệ số có giá trị thực từ DCT. Ngoài ra, chúng tôi không còn có phổ đầy đủ (tất cả các thùng tần số), nhưng hệ số năng lượng trong các ngân hàng lọc mel, do đó việc sử dụng IFFT là một chút quá mức cần thiết.

  • Bạn thấy trên hình đầu tiên rằng các ngân hàng bộ lọc đang chồng chéo, do đó năng lượng từ các ngân hàng nằm cạnh nhau đang được lan truyền giữa hai - DCT cho phép giải mã chúng. Hãy nhớ rằng đây là một đặc tính tốt, ví dụ trong trường hợp Mô hình hỗn hợp Gaussian, trong đó bạn có thể sử dụng ma trận hiệp phương sai chéo (không có tương quan giữa các hệ số khác), thay vì đầy đủ (tất cả các hệ số đều tương quan) - điều này đơn giản hóa mọi thứ rất nhiều.

  • Một cách khác để giải mã các hệ số tần số mel sẽ là PCA (Phân tích thành phần chính), kỹ thuật chỉ được sử dụng cho mục đích này. Đối với sự may mắn của chúng tôi, người ta đã chứng minh rằng DCT là một xấp xỉ rất tốt của PCA khi nói đến các tín hiệu giải mã, do đó một lợi thế khác của việc sử dụng Biến đổi Cosine rời rạc.


Một số tài liệu:

Hyoung-Gook Kim, Nicolas Moreau, Thomas Sikora - MPEG-7 Audio and Beyond: Lập chỉ mục và truy xuất nội dung âm thanh


1
Tại sao chúng ta không thể lấy giá trị tuyệt đối của các số phức từ IFFT? Nếu các số phức khó xử lý hơn nhiều, tại sao chúng ta lại lấy IFFT khi tính toán một cepstrum và không chỉ luôn luôn làm DCT? Cảm ơn đã giải thích. Con số đó đặc biệt hữu ích.
acannon828

1
@ acannon828: Vui lòng xem 3 điểm cuối của câu trả lời được chỉnh sửa của tôi. Tôi hy vọng rằng bây giờ nó giải thích mọi thứ.
jojek

Phản ứng tuyệt vời .. Bất kỳ tài liệu bạn có thể đính kèm với điều này.
Bob Burt

1
@BobBurt: Có bạn đi!
jojek

Cảm ơn về cuốn sách. Hầu hết những điều dường như được giải thích trong đó. Có phải cuốn sách cũng đề cập đến lý thuyết về đường hô hấp - tôi dường như không thể tìm thấy bất cứ điều gì liên quan đến điều đó.
Bob Burt

3

Nhiều hơn việc làm mịn DCT làm giảm số lượng kích thước cần thiết để thể hiện phổ. DCT tốt cho việc giảm kích thước vì nó có xu hướng nén hầu hết năng lượng của phổ trong một vài hệ số đầu tiên.


Cảm ơn. Điều này giúp tôi hiểu ý nghĩa của @pichenettes khi giảm kích thước.
acannon828

3

Lý do đằng sau nó là để phân tách mối tương quan trong cường độ phổ log (từ bộ lọc) do sự chồng chéo của các bộ lọc. Về cơ bản, DCT làm mịn biểu diễn phổ được cho bởi các cường độ phổ log này.

Điều này là không chính xác. Có mối tương quan giữa các cường độ phổ log không chỉ vì chúng trùng nhau, mà còn bởi vì không có bất kỳ dãy số nào đại diện cho một chuỗi "có ý nghĩa" (như trong, xảy ra trong lời nói tự nhiên và âm thanh) của cường độ phổ log. Các cường độ phổ log "có ý nghĩa" có xu hướng khá trơn tru, với sự giảm năng lượng tổng thể ở các tần số cao hơn, v.v. Người ta sẽ nói rằng kích thước của không gian của tất cả các vectơ cường độ log "có ý nghĩa" nhỏ hơn 40 hoặc bất kỳ số lượng ban nhạc bạn sử dụng; và DCT có thể được xem là giảm kích thước để ánh xạ dữ liệu 40 kênh lên không gian nhỏ hơn này.

Về cơ bản, DCT làm mịn biểu diễn phổ được cho bởi các cường độ phổ log này.

DCT không làm bất kỳ sự làm mịn nào. Bạn thấy làm mịn khi tái cấu trúc từ dữ liệu DCT - việc làm mịn do mất thông tin bởi DCT và việc cắt giảm hệ số theo sau.

Nhưng các hệ số MFCC không lưu trữ phổ được làm mịn - nó lưu trữ một chuỗi các hệ số DCT không tương thích.

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.