Sự khác biệt giữa biến đổi Fourier và biến đổi cosin là gì?


75

Trong nhận dạng giọng nói, mặt trước thường xử lý tín hiệu để cho phép trích xuất tính năng từ luồng âm thanh. Một biến đổi Fourier rời rạc (DFT) được áp dụng hai lần trong quy trình này. Lần đầu tiên là sau khi cửa sổ; sau khi Mel binning này được áp dụng và sau đó biến đổi Fourier khác.

Tuy nhiên, tôi đã nhận thấy rằng thông thường trong các trình nhận dạng giọng nói ( ví dụ: giao diện người dùng mặc định trong CMU Sphinx chẳng hạn) sử dụng một biến đổi cosine rời rạc (DCT) thay vì DFT cho hoạt động thứ hai. Sự khác biệt giữa hai hoạt động này là gì? Tại sao bạn lại làm DFT lần đầu tiên và sau đó là DCT lần thứ hai?


Vì vậy, một số đã giải thích sự khác biệt giữa hai quá trình. Có ai biết tại sao dft và dct được sử dụng tại các thời điểm khác nhau trong nhận dạng giọng nói không? Là đầu ra của dft đầu tiên được coi là đối xứng? Hoặc việc nén dct phù hợp để đóng gói thêm thông tin trong 13 điểm đầu tiên (xử lý lời nói thường chỉ sử dụng những điểm đó)?
Nate Glenn

Câu hỏi của bạn có liên quan đến cepstrum Mel-tần , được hỏi trong một câu hỏi khác không?
rwong

Câu hỏi của tôi là 2 phần: sự khác biệt giữa DCT và DFT và tại sao DCT thường được sử dụng để xử lý tín hiệu sau khi DFT và Mel Binning được áp dụng, thay vì DFT khác.
Nate Glenn

Tại sao trong xử lý ảnh, chúng ta không sử dụng biến đổi sin rời rạc thay vì biến đổi cosine rời rạc?

Xin chào rimondo, đây là một câu hỏi hay nhưng bạn đã đăng nó dưới dạng câu trả lời. Bạn nên tạo một câu hỏi mới để hỏi nó.
Nate Glenn

Câu trả lời:


48

Biến đổi Fourier rời rạc (DFT) và Biến đổi Cosine rời rạc (DCT) thực hiện các chức năng tương tự nhau: cả hai đều phân tách một vectơ thời gian rời rạc có độ dài hữu hạn thành một tổng số các hàm cơ bản được điều chỉnh theo tỷ lệ. Sự khác biệt giữa hai là loại hàm cơ sở được sử dụng bởi mỗi biến đổi; DFT sử dụng một tập hợp các hàm số mũ phức tạp liên quan đến hài hòa, trong khi DCT chỉ sử dụng các hàm cosine (có giá trị thực).

DFT được sử dụng rộng rãi cho các ứng dụng phân tích quang phổ chung tìm đường vào một loạt các lĩnh vực. Nó cũng được sử dụng như một khối xây dựng cho các kỹ thuật tận dụng các thuộc tính của biểu diễn miền tần số của tín hiệu, chẳng hạn như các thuật toán tích chập nhanh chồng chéo và thêm chồng chéo.

DCT thường được sử dụng trong các ứng dụng nén dữ liệu bị mất, chẳng hạn như định dạng hình ảnh JPEG. Đặc tính của DCT làm cho nó khá phù hợp để nén là mức độ "nén phổ" cao; ở mức định tính, biểu diễn DCT của tín hiệu có xu hướng tập trung nhiều năng lượng hơn vào một số lượng nhỏ hệ số khi so sánh với các biến đổi khác như DFT. Đây là mong muốn cho một thuật toán nén; nếu bạn có thể biểu thị xấp xỉ tín hiệu gốc (thời gian hoặc miền không gian) bằng cách sử dụng một hệ số DCT tương đối nhỏ, thì bạn có thể giảm yêu cầu lưu trữ dữ liệu của mình bằng cách chỉ lưu trữ các đầu ra DCT có chứa năng lượng đáng kể.


4
@JasonR "ở mức định tính, đại diện DCT của tín hiệu có xu hướng tập trung nhiều năng lượng hơn vào một số lượng nhỏ các hệ số khi so sánh với các biến đổi khác như DFT." Hmmmm ... Tôi không chắc chắn tôi hoàn toàn đồng ý với bạn về điều này - nếu chỉ vì DFT đã bao gồm một cosin mà tín hiệu sẽ được chiếu lên - làm thế nào một DFT có thể không thể hiện nhiều sức mạnh của phép chiếu đó và một DCT có thể? Cảm ơn.
Spacey

3
Đây là một tính năng rất nổi tiếng của DCT, giải thích việc sử dụng nó trong rất nhiều thuật toán nén. Tôi tin rằng nó phải liên quan đến các điều kiện biên được giả định bởi DCT ở các cạnh của tín hiệu, khác với các DFT.
Jason R

23

Tôi thấy rằng một số chi tiết trong wiki DCT (cũng được chia sẻ bởi Pearsonartphoto) chỉ ra rằng DCT rất phù hợp cho các ứng dụng nén. Phần cuối của phần tổng quan không chính thức là hữu ích (bashing là của tôi).

Đặc biệt, mọi người đều biết rằng bất kỳ sự không liên tục nào trong hàm đều làm giảm tốc độ hội tụ của chuỗi Fourier ... chức năng này càng mượt mà, càng ít thuật ngữ trong DFT hoặc DCT của nó được yêu cầu để thể hiện chính xác và càng nhiều có thể được nén ... Tuy nhiên, tính tuần hoàn ngầm của DFT có nghĩa là sự không liên tục thường xảy ra ở các ranh giới ... Ngược lại, một DCT nơi cả hai ranh giới thậm chí luôn mang lại sự mở rộng liên tục tại các ranh giới. Đây là lý do tại sao DCT ... thường hoạt động tốt hơn để nén tín hiệu so với DFT và DST. Trong thực tế, DCT loại II thường được ưa thích cho các ứng dụng như vậy, một phần vì lý do thuận tiện cho việc tính toán.

Ngoài ra, bạn có thể thấy rằng câu trả lời này cũng hữu ích (từ math.stackexchange.com). Nó nói:

Các phép biến đổi cosine không gì khác hơn là các phím tắt để tính toán biến đổi Fourier của một chuỗi có tính đối xứng đặc biệt (ví dụ: nếu chuỗi đại diện cho các mẫu từ một hàm chẵn).


19

Lý do tại sao bạn thấy chuyển đổi Fourier được áp dụng hai lần trong quy trình trích xuất tính năng là các tính năng được dựa trên một khái niệm gọi là cepstrum. Cepstrum là một trò chơi trên phổ từ - về cơ bản, ý tưởng là biến đổi tín hiệu thành miền tần số bằng biến đổi Fourier, và sau đó thực hiện một biến đổi khác như thể phổ tần số là tín hiệu.

Trong khi phổ tần số mô tả biên độ và pha của từng dải tần số, cepstrum đặc trưng cho các biến thể giữa các dải tần số. Các tính năng có nguồn gốc từ cepstrum được tìm thấy để mô tả tốt hơn lời nói so với các tính năng được lấy trực tiếp từ phổ tần số.

Có một vài định nghĩa hơi khác nhau. Biến đổi cepstrum ban đầu được định nghĩa là biến đổi Fourier -> logarit phức tạp -> biến đổi Fourier [1]. Một định nghĩa khác là biến đổi Fourier -> logarit phức tạp -> biến đổi Fourier ngược [2]. Động lực cho định nghĩa sau là ở khả năng phân tách các tín hiệu được tích hợp (lời nói của con người thường được mô hình hóa như sự kết hợp của một kích thích và một giọng hát).

Một lựa chọn phổ biến đã được tìm thấy để hoạt động tốt trong các hệ thống nhận dạng giọng nói là áp dụng ngân hàng bộ lọc phi tuyến tính trong miền tần số (phương pháp tạo khối bạn đang đề cập đến) [3]. Thuật toán cụ thể được định nghĩa là biến đổi Fourier -> bình phương độ lớn -> ngân hàng lọc mel -> logarit thực -> biến đổi cosine rời rạc.

Ở đây DCT có thể được chọn làm biến đổi thứ hai, bởi vì đối với đầu vào có giá trị thực, phần thực của DFT là một loại DCT. Lý do tại sao DCT được ưa thích là đầu ra xấp xỉ. Các tính năng giải mã có thể được mô hình hóa một cách hiệu quả dưới dạng phân phối Gaussian với ma trận hiệp phương sai chéo.

[1] Bogert, B., Healy, M. và Tukey, J. (1963). Quefrency Alanysis của Time Series cho Echoes: Cepstrum, Pseudo-Autocovariance, Cross-Cepstrum và Saphe Cracking. Trong Kỷ yếu của Hội nghị chuyên đề về phân tích chuỗi thời gian, tr. 209-243.

[2] Oppenheim, A. và Schafer, R. (1968). Phân tích đồng âm của lời nói. Trong Giao dịch của IEEE về Âm thanh và Âm điện 16, tr. 221-226.

[3] Davis, S. và Mermelstein, P. (1980). So sánh các đại diện tham số cho nhận dạng từ đơn âm tiết trong các câu nói liên tục. Trong Giao dịch của IEEE về Âm học, Xử lý lời nói và Tín hiệu 28, tr. 357-366.


Re. PCA trong trích xuất tính năng: một PCA thực sự sẽ là vô nghĩa ở đây vì nó phụ thuộc vào dữ liệu! Nếu bạn tính PCA của các hệ số nhật ký tần số mel từ một tập dữ liệu, rồi từ một tập dữ liệu khác, bạn sẽ tìm thấy một cơ sở khác - điều đó có nghĩa là nếu PCA được sử dụng trong quá trình trích xuất tính năng, các tính năng được trích xuất trên một tín hiệu sẽ không 't "có nghĩa tương tự" như các tính năng được trích xuất trên tín hiệu khác. Bây giờ hãy làm thí nghiệm này: tính PCA trên một bộ nhật ký Mel coef. trích xuất từ ​​10 giờ của âm thanh đa dạng nhất. Cơ sở bạn sẽ tìm thấy tương tự như cơ sở DCT.
pichenettes

3
Nói cách khác: để hữu ích trong ứng dụng nhận dạng, biến đổi giải mã ở cuối quá trình trích xuất tính năng phải là một loại thỏa hiệp phù hợp với "âm thanh" nói chung, thay vì dữ liệu cụ thể. Hóa ra cơ sở DCT rất gần với những gì bạn nhận được khi chạy PCA trên một bộ âm thanh lớn!
pichenettes

Gần đây tôi đã thấy PCA được sử dụng vào cuối quá trình trích xuất tính năng trong một hệ thống lời nói thử nghiệm. Hệ thống đó đã tính toán phép chiếu PCA từ dữ liệu huấn luyện và được sử dụng cùng một cơ sở sau đó.
Seppo Enarvi

8

Sự khác biệt giữa Biến đổi Fourier rời rạc và biến đổi Cosine rời rạc là DCT chỉ sử dụng các số thực, trong khi biến đổi Fourier có thể sử dụng các số phức. Việc sử dụng phổ biến nhất của DCT là nén. Nó tương đương với một FFT có chiều dài gấp đôi.


1
Tuy nhiên, có thể hình dung DCT / DST của một chuỗi phức, trong đó người ta lấy riêng DCT / DST của phần thực và phần ảo.

vì vậy chúng ta có thể nói rằng nếu tôi tính toán DFT tôi nhận được DCT miễn phí, tất cả những gì tôi cần làm là loại bỏ các phần ảo của vectơ. Hãy sửa lại cho tôi nếu tôi sai.
Marek

1
Nó phức tạp hơn thế một chút, nhưng có thể chuyển đổi giữa FFT và DCT khá dễ dàng.
PearsonArtPhoto
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.