Tôi quan tâm đến việc triển khai biến đổi Haar và nghịch đảo của nó, sao cho khi sáng tác luôn dẫn đến hoạt động nhận dạng. Đầu vào của tôi là các thứ tự rời rạc trong một phạm vi nhất định - và tôi cần đầu ra của biến đổi Haar là các số thứ tự (hoặc điểm cố định) rời rạc tương tự.
Tôi đã làm việc trên cơ sở rằng nếu tín hiệu đầu vào của tôi bao gồm các mẫu được phân phối đồng đều trên phạm vi và, về nguyên tắc, tín hiệu biến đổi của tôi cũng vậy, về nguyên tắc, tín hiệu ban đầu của tôi phải được tái tạo hoàn hảo bởi haar nghịch đảo.
Tôi đã thực hiện việc triển khai (Matlab) này bằng GNU Octave:
http://people.sc.fsu.edu/~jburkardt/m_src/haar/haar.html
Việc sử dụng các giá trị chính xác kép ... buộc tôi phải sử dụng round () để thiết lập một biểu diễn riêng biệt của dữ liệu được chuyển đổi để phù hợp với biểu diễn được chuyển đổi vào cùng một không gian trạng thái như ban đầu. Không có gì đáng ngạc nhiên, tôi thấy tôi cần sử dụng lại round () cho đầu ra từ biến đổi nghịch đảo.
Có lẽ sẽ không có gì ngạc nhiên khi vòng (haar_2d_inverse (vòng (haar_2d (tín hiệu)))) không hoàn toàn là chức năng nhận dạng cho hầu hết các giá trị của tín hiệu ... Thông thường, thường có một vài lỗi ngoài luồng tín hiệu được tái tạo - có vẻ gần như đối xứng (+1 hoặc -1 trên một số lượng nhỏ các mẫu được tái tạo) và điều này dường như gần như độc lập với sự lựa chọn của n.
Những gì tôi muốn biết là nếu có các triển khai 'tốt hơn' của haar_2d và haar_2d_inverse hoạt động trên các mẫu thứ tự? Là sự bất thường là hậu quả của việc thực hiện Haar hay cách tôi đã áp dụng vòng () ở giai đoạn trung gian? Nếu sau này, tôi có thể khắc phục điều này bằng cách chia tỷ lệ trước khi làm tròn không?