Tôi đang nén luồng nhị phân được tạo thành từ góiTìm kiếm một kỹ thuật nén tốt hơn
Một gói gồm 256 số nguyên 32 bit (mẫu). Vấn đề là hầu hết các số nguyên chỉ thay đổi một vài bit từ số nguyên trước đó (thường là 0 - 4 bit thay đổi nhiều nhất so với mẫu trước đó trong luồng).
Dưới đây là một ví dụ:
3322 2222 2222 1111 1111 1110 0000 0000 BIT POSITIONS
9817 6543 2109 8765 4321
--------------------------------------------------------
1100 1001 1110 0010 0001 0101 0110 1101 Sample 1
* *
1100 1001 1110 1010 0001 0101 0110 0101 Sample 2 changes: bit 19, 4
1100 1001 1110 1010 0001 0101 0110 0101 Sample 3 changes: none
* * *
1100 0001 1110 1011 0001 0101 0010 0101 Sample 4 changes: bit 27, 17, 7
...
My hiện tại, chương trình lossles nén được dựa trên Nibbles. Về cơ bản tôi đang sử dụng một byte điều khiển nơi tôi đang mã hóa-sử dụng các bit đơn - mà nibbles đã thay đổi từ mẫu trước đó; Nếu có thay đổi, tôi sẽ bao gồm các nibbles đã sửa đổi trên luồng nén, nếu không chúng sẽ được tạo lại từ mẫu trước khi giải nén.
Sau đây là cách dòng ví dụ tôi cung cấp sẽ được nén:
Control Byte: 11111111 // all nibbles change, since this is first sample
Data: 1100 1001 1110 0010 0001 0101 0110 1101 // data for all nibbles
Control Byte: 00010001 // only nibbles 3 and 7 have changes
Data: 1010 0101 // data for nibbles 3 and 7
Control Byte: 00000000 // no nibbles are changing
Data: // no data is required
Control Byte: 01010010 // nibbles 1, 3 and 6 have changes
Data: 0001 1011 0010 // nibbles 1, 3 and 6
...
Sử dụng chương trình này, chúng tôi có một chi phí cố định là 256 byte (kiểm soát byte), với mức trung bình, chiều dài biến nén dữ liệu 260 byte (các nibbles đang thay đổi từ mẫu thành mẫu). Xem xét các gói không nén là 1024 byte, điều này thực tế cho chúng ta một tỷ lệ nén trung bình 50%.
Điều này không tệ, nhưng cảm giác ruột của tôi là cách tiếp cận tốt hơn nhiều là có thể. Có ai biết về một chiến lược nén tốt hơn mà khai thác một thực tế là rất ít bit thay đổi từ mẫu để lấy mẫu? Nén mất dữ liệu là một thay thế miễn là tỷ lệ lỗi bit sau khi giải nén nhỏ (dưới 3%) - đối với luồng dữ liệu cụ thể này, trọng số bằng số của các vị trí bit không liên quan, do đó, lỗi trong các bit cao hơn là không có mối quan tâm nào cả.
Cảm ơn mọi người trước!
Thứ tự các mẫu trong gói có quan trọng không? Nếu không, bạn có thể sắp xếp trong mỗi gói để giảm thiểu số byte điều khiển. – cmh
@cmh, đề xuất tốt - không may thứ tự hoặc các mẫu có liên quan: ( –