Tôi gặp khó khăn khi tìm hiểu làm thế nào để làm theo sơ đồ thuật toán DCT nhanh 8 x 8 được tìm thấy trong hai bài báo sau:
(1) Thuật toán tính toán nhanh cho phép biến đổi Cosine rời rạc của Chen et al.
và
(2) Các thuật toán DCT 1-D nhanh thực tế với 11 phép nhân của Loeffler et al.
Cụ thể, sơ đồ thứ hai hiển thị thuật toán trong (2) trông giống như sau:
Mô tả các hoạt động trong thuật toán này là:
Có một vài câu hỏi tôi có về công thức này và tôi không biết tìm câu trả lời ở đâu:
(2) đề xuất rằng thuật toán này tạo ra một DCT được chia tỷ lệ theo một số giá trị . Nó đề cập rằng này được chọn tùy ý để tránh bất kỳ phép nhân nào trong việc tính toán hệ số DC. Thực sự yêu cầu duy nhất là . Vì vậy, câu hỏi của tôi là: hệ số tỷ lệ của các hệ số đầu ra sử dụng thuật toán này là gì? Có vẻ như chúng khác với định nghĩa ban đầu của DCT, nhưng tôi không biết bao nhiêu (chủ yếu là vì tôi thực sự không thấy bất kỳ mối quan hệ nào giữa sơ đồ này và công thức ban đầu của DCT): trong đó
cho và với .Bài viết nói rằng việc thực hiện IDCT có thể được thực hiện bằng cách sử dụng cùng một thuật toán nhưng chuyển đổi đầu ra thành đầu vào và ngược lại. Đầu tiên, các hệ số DCT có nên được sắp xếp theo thứ tự ngược bit trước khi chạy chúng thông qua IDCT không? Thứ hai, đối với các khối xoay (hình vuông trong sơ đồ), không nên thao tác nghịch đảo là: Lý do của tôi là thế này: Nghịch đảo của một phép quay bởi là một phép quay của . Do đó, chúng ta chỉ cần thay thế góc bằng nghịch đảo của nó và sử dụng danh tính và
. Thứ ba, hệ số tỷ lệ của các giá trị được chuyển đổi sau IDCT là gì? (2) nói , nhưng theo kinh nghiệm, điều này không tạo ra kết quả chính xác.Giả sử sau khi tôi chạy thuật toán, tôi có kết quả của mỗi làn được lưu trong các giá trị
d0 ... d7
. Điều nào sau đây là đúng:đầu ra [0] = d0 hoặc đầu ra [0] = d0 đầu ra [4] = d1 đầu ra [1] = d4 đầu ra [2] = d2 đầu ra [2] = d2 đầu ra [6] = d3 đầu ra [3] = d6 đầu ra [7] = d4 đầu ra [4] = d7 đầu ra [3] = d5 đầu ra [5] = d3 đầu ra [5] = d6 đầu ra [6] = d5 đầu ra [1] = d7 đầu ra [7] = d1
Nếu có bất kỳ cách nào để cải thiện câu hỏi này, hoặc nếu tôi nên hỏi ở nơi khác, xin vui lòng cho tôi biết.