Veri sıkıştırma algoritmaları

Başlatan SpeedyX, 01 Kasım 2012, 14:44:50

SpeedyX

Merhaba,

7 yada 8 bitlik veri katarını sıkıştırmak için kullanılabilecek sıkıştırma algoritmaları tavsiyeleri arıyorum.

1kbyte ile 4Mbyte uzunluğunda veriyi %50+ sıkıştırabilmek için hangi algoritmaları incelemeliyiz?

berat23


Klein

Veri nedir?
Eğer kayıpsız sıkıştırma ve çözme yapacaksanız, hufmann algoritması olarak bilinen bir algoritma var.

http://www.csharpnedir.com/articles/read/?filter=&author=&cat=cs&id=189&title=Huffman%20Veri%20S%C4%B1k%C4%B1%C5%9Ft%C4%B1rma%20Algoritmas%C4%B1%20ve%20Uygulamas%C4%B1

Eğer video veya ses gibi, elde ettiğimiz verideki kayıpların önemli lmadığı yerlerde kullanılacaksa daha basit algoritmalar var.

SpeedyX

Pardon, kayıpsız veri sıkıştırma olduğunu yazmayı unutmuşum.

Veri; belli ascii karakterlerden oluşuyor. A..Z a..z 0..9 /*-+!'^+%&/()=? gibi

Klein

Ascii veride  hufmann  algoritması oldukça yüksek başarı sağlıyor.  Yukarıda verdiğim linkte oldukça güzel anlatılmış.

SpeedyX

Hocam aslında huffman okulda da okuduğum ve önceden kullandığım bir yöntem.

Daha iyisini bulmazsam yine aynısını kullanacağım.

Erdem

Huffman'ın dışında LZW de kullanılıyor sanırım.

Sedgewick'in Algorithms kitabına bakabilirsiniz. Bölüm 5.5

http://algs4.cs.princeton.edu/55compression/

Hatta daha iyisi kaydolup kendisinden de dinlenebilir  :)

https://www.coursera.org/course/algs4partI

t2

Alıntı yapılan: Klein - 01 Kasım 2012, 15:01:13
Eğer video veya ses gibi, elde ettiğimiz verideki kayıpların önemli lmadığı yerlerde kullanılacaksa daha basit algoritmalar var.
Bana böyle algoritma lazım. Basit bir ses sinyalini sıkıştırmak istiyorum. Bu sinyal çok dar bir band içeriyor. yani konuşma bandının bile altında. kalite pek önemli değil.  basit ve hızlı kodlama lazım? ulaw mu law, adpcm  bunları  inceledim. bunlar bile lüks kaldı. daha da basit kodlama gerek. saygılar .

Klein

Delta modülasyonu var. Çok hızlı değişen sinyaller için pek önerilmiyor ama kalite çok önemli değilse denenebilir.
Peşpeşe alınan iki örnek arasındaki büyüklük küçüklük durumuna göre kodlanıyor. Eğer sinyal bir öncekinden büyükse, 1 küçükse 0 olarak kodlanıyor.

t2

#9
onu da yapmaya çalıştım. öncekine eşitse alıp başını gidiyor. sonra tavana vurup yere düşüyor yeniden yükseliyor. haydaaa.. sinyal dağıldı gitti. neyse 2 bit yapsam 3 durum içinyeterli. bir durumda sinyal yok durumu olabilir. toplam 4 durum olur. büyük, küçük, veya eşit. + yok.  yeniden uğraşayım. 

önceki sinyalden değil de kodlanan sinyalden tekar geribesleme yapmak laızm. yani önceki değil de önceki diye kodladığın sinyal ile olan farkına bakılacak..

Her sabah uyanıyorum bu gün yeni bir kodek icat edilecek, tarihi bir gün diyorum :)

Klein

Adaptif delta modülasyon, sabit basamaklı delta modülasyonu gibi birkaç basit  kodlama yötemi daha var, ama muhtemelen bunların hepsini incelediniz.

t2

benim nacizane anladığım, sinyali güzel sıkıştırmak istiyorsak  geniş bir pencereden bakmak lazım. her örneği diğerlerinden bağımsız veya sadace önceki ve sonrakine bakarak sıkıştırmak çok performans vermiyor. Çerçeve süresi uzun olmalı.  iyi codec öyle oluyor.  en az 5-10ms gibi örnekler depolanacak, işlenecek..

Klein

Sıkıştırma oranı ve kalite arttıkça, algoritmanın zorluğu da artıyor. aLaw algoritmasından daha basit ama DM den kaliteli olsun isteyince, yeni bir codec icat edilmesini beklemeten başka bir şey kalmıyor geriye :)

SpeedyX

Sanırım başka öneri gelmeyecek. LZMA, LZW dolayısıyla huffman konusunda matlab ve C ortamında tecrübeliyim. Yine aynı yoldan devam etmek en doğrusu olacak. Cevaplar için teşekkürler.