sayman
sayman (üye)
Afyonkarahisar / Amatör

Ses Kayıt Formatları

Arkadaşlar ses ve görüntü kayıt formatları ile ilgili bilen bir arkadaşımız makale yazabilirmi.Gerçekten çok faydalı oluyor bu tür belli konulardaki makaleler.Mesela VGA, MOV, AVİ gibi terimler var.Bunlar hakkında konuyu iyi bilen bir arkadaşımız yazı yazarsa herkes faydalanır sanırım.Selamlar

Tarih: 14 Ocak 2007, 17:26 - İp: 85.***.**1.198
bisquit
bisquit (üye)
Antalya / Meraklı

Ses kalitesi olarak en iyi format FLAC'dir(orjinal cd'yi saymazsak) ve şu anda bildiğim kadarı ile sadece Cowon marka mp3 playerlar bu formatı destekliyor.

Flac nedir derseniz,orjinal cd'ye en yakın ses kalitesiyle riplenmiş format, haliyle 12 şarkıdan oluşan bir albüm flac formatına çevrilince ortalama 250mb oluyor

 

Tarih: 30 Ocak 2007, 00:32 - İp: 88.***.**7.175
blink182
blink182 (üye)
İstanbul / Meraklı

Sırf bu konuya cevap yazmak için üye oldum konu hakkında sunum yaptıgım için araştırmam var eski mesaj olsada paylasayım belki birnin işine yarar


Ses formatları
Kbps (kilobit per sec.) 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 and 320 kbit/s, and the available sampling frequencies are 32, 44.1 and 48 kHz.[21]
burda durum anolog sesi dijitale veriye cevirirkenki mantıkla aynıdır TEKNİKLER dışındaki sıkıştırmanın ne kadarını (bilgisayara)(kodlamaya) bırakıcagımız yani noktaların yakınlık ları uzaklıkları ve burda Bit rate kodlanmış digital ses dosyasında çözümleme halinde de codeclere göre kalite olarak etki yapar


Ses formatları 3 dalda incelenir
Kayıpsız (ham) kompres edilmemşiş ses formatları (uncompressd)
Az kompres edilmiş ses formatları(lossless)
Kayıplı ses formatları ;(lossy) burda bahsettiğimiz kayıp ses kalite farkı ve frekans kayıplarıdır .orjinalin bozulmuşluk derecesidir.

Kayıpsız ham formatlar analog sinyalimizin belirli bit degerinde dijital kodalara cevirilmiş ilk halidir .Windows’ da bu Wave ya da Wav ken(Waveform Audio File Format) mac os’te (wav yada) aiff ‘tir (Audio Interchange File Format) (au ve raw da var ama kullanılmıyor)
Az kayıplı ses formatlarında ise başlıca Flac, monkey’s audio , wavpack,shorten,Tom’s lossless audio kompressor (TAK) gibi pekte kullanmadıgımız ilgimizi cekmeyen cünkü ham halinin 100 de 30 u ile 50 si arasında sıkıştırılmıştır. Yani 40 mb lık dosya ne küçük olarak 3mb yerine kullanilablir ,iş görür ne de 80mb e 90mb halinde orjinali varken tercih edilir.

Kayıplı ses formatları,nın başlıcaları MP3 (MPEG-1 Audio Layer 3), Vorbis, Musepack, AAC, ATRAC and lossy Windows Media Audio (WMA).

Ben Kayıplı ses formatlarının çalışma prensibini Müzikle ilgili bir kişinin yılda en az 100 kere duydugu ya da söyledigi, kısacası her gün yedigi EKMEK kelimesiyle karşılaştığı kadar sık karşılastıgı mp3 kelimesinin derinleme hakettigini düşündüğüm için mp3 üzerinden anlatıcam.

Kayıplı formatları Sıkıstrımada 5 teknik kullanılır

Bunların 2 ‘si algısal diğer 3 ‘ü ise kodlama –(mantıksal) olarak ayrılıyor.

Algısalın başında

1-Minimum duyum eşiği tekniği(minimum treshold)

Insan kulagı her frekansı çizgi gibi eşit duyamadığından bu teknikte

Fletcher – Munson kuralıyla , yarattıkları tablodanda görebilecegimiz gibi 2khz-5khz arasındaki duyum gücümüzle frekans aralıkları arasında ciddi fark vardır bu dengeler tablodanda görülücegi gibi db arttıkca yakınlasmaya baslar yani sesin basınc seviyesi arttıkca her frekansı duyabilmemiz eşitlenir . Referans noktası 1 kHz olarak seçilen bu sistemde, orta frekanslarda bas duyma eğilimi vardır fakat seslerin refeans noktasına göre daha yüksek duyulması için düşük ve yüksek frekanslarda en yüksek 'Ses Basınç Seviyeleri' (SPL : Sound Pressure Level) gerekir.
Düşük dinleme seviyelerinde bas algılama düşer, müzikal enstrüman ve vokal seslersindeki karmaşık dalgaların algılanışı değişir Kaliteli, ton kontrol katları ve ekolayzır (equalizer), müzik dinlerken ses seviyesinini değiştirmeden ton balansını dengeleyerek, tatmin seviyesini artırmaya yardım eder.

Loudness Algılama : (başa dön)
SPL : Sound Peressure Level(Ses Basınç Seviyesi), dB : DeciBel, Hz : Hertz

Kodlama sistemiyle belirli desibele gelmeden duyamadıgımız hzl er cıkarılır.

2-Maskeleme ( masking effect)
Basit olarak güçlü bir ses varken arkdaki güçsüz sesi bastırır tıp uçan kuşu güneşin önüne geldiğinde güneş ışınları yüzünden sadece parlaklık olarak algılayabilecegimiz gibi. Yani tüm sesleri kodlamamız gerekmez bu sıkıştırmanın temel mantığıdır.**ve çalan bir piyano kaydı baslmadan once calan kişinin nefes alısını duyarız ama calarken maskelenen bu nefesi ayrıstırmamımız için psiko akustik modelleme kullanılır. ((((((((((((((((((((((((((mpeg layer-3 ve aac encode için örneklenmiş ses verisini insan kulağının dinamik davranışı ve frekans cevabına göre modelleyen, 1/20 gibi sıkıştırma verimine sahip kompresör algoritması. veri işlem akışı şöyledir. sample alınan audio data biri 32-band 18-point mdct (modified discrete cossine transform) ve diğeri 1024 point fft (fast fourier transform) edilmek üzere iki işlem kanalına yollanır. mdct nin tatbik işine algoritmaya bağlı olarak pqf (polyphase quadrature filter) da denir. pqf de spektral genlik hassasiyeti sesin dinamik davranışına bağlı olarak uygun windowing ile en hassas şekilde hesaplanır. ve anti-alias butterfly tatbik edilir. iki işlem kanalından alından spektral değerler psychoacoustic modelde aşağıdaki kriterlere bağlı olarak değerlendirilir, bir kısım data elemine edilip (sıkıştırma burda oluyor) çıktı elde edilir. ))))))))))))))))))))))))))
)
- insan kulağının işitme bandı 20hz ~ 20khz arasıdır.
- işitmeye en hassas olan aralık 500hz ~ 5khz dir.
- dinamik ranj 96 ~ 120db dir.
- algılanabilir minimum spektral genlik frekansın bir fonksiyonudur. (absolute threshold of hearing)
- aynı anda birden çok frekansta sesi birbirilerinden ayırdedebilmek için belli eşikler vardır. yüksek spektral genlikli ses kendisine yakın bir bandı mask edebilir. mask edebilme ranjı frekans ın bir fonksiyonudur. (freaquency masking)
- yüksek genlikli bir ses işitildikten sonra insan kulağı belli bir süre işitebilme özelliğini yitirir. (temporal masking)

psikoakustik model, bu kritelere bağlı olarak; gereksiz datayı filtreler ve devamında spektral değerler quantize edilir. huffman encoding tatbik edilir ve nihayette istenen formata uygun bit stream(veri akışı) elde edilmek üzere uygun header lar (teknik terim oalrak = (üst bilgi) (referans bilgisi ) eklenerek çıkışa gönderilir.




3-The bytes reservoir ( byte havuzları)
Müzikteki bazı kısımlar müzikal kaliteyi degistirmeksizin oranlandırılamaz mp3; yakın frekanstaki bazı pasajlarda kısa byte rezervlerini rol yaparcasına ara bellek gibi kullanarak düşük kalitede kodlar

4-The joint stereo coding (ortak stereo kodlaması)
Normal stereo ses dosyalarında Sol ve Sağ kanallarda farklı sesler kayıtlı olmaktadır.Ancak bu seslerin büyük kısmı aynı olmaktadır.Bizim kulağımız farklı sesleri kanallarda algılayarak stereo algılamamızı sağlar.Joint stereoda ise bu kanallardan ( sol ve sağ ) birisi temel alınarak diğer kanala sadece aradaki farklı seslerin kayıt edilmesi temeli alınmaktadır.Mesela sağ kanal temel alındığında sol kanala sadece sağda kayıtlı olmayan sesler kayıt edilir.Ancak bu durumda da özellikle alçak frekanstaki sesler ( baslar ) özellikle kaybolmaktadır. Kısaca Normal stereo kayıttan kalite olarak düşüktür diyebiliriz.Şöyle basit bir şekil çizerek anltayım.

Normal Stereo:
Sol Kanal :
--- --- --- --- ---
Sağ Kanal :
---.+---.+---.+---

Joint Stereo:
Sol Kanal
--- --- --- --- ---
Sağ Kanal:
+ + + +

Burada kalite kaybı dikkat ederseniz normal stereo sağ kanaldaki . ile gösterdiğim düşük frekanslı seslerin yok olmasıdır.
Joint stereonun tek avantajı gerçek stereo ya göre biraz daha az yer tutmasıdır

5- huffman
#-Kayıpsız Sıkıştırma Teknikleri
En ümit vaadeden sıkıştırma tekniği olarak gösterebiliriz ama bir o kadar da zor ve işlem kapasitesi gerektiren bir tekniktir. Bu yüzden bir tek anahtar kelime ile kayıpsız sıkıştırma algoritmasını ifade edebilecek bir imkan olmadığından gelin bu tekniğin işleyişini görmek için huffman algoritmasına bakalım.
Bu algoritmanın Huffman isimli bir üniversite gencinin bitirme tezi olduğunu belirtmek gerek.
İşlem Adımları;
• Elimizde bulunan veri kümesinde hangi karakter kaç defa kullanılmış sayılır (frekans tablosu) örn. a=33, Ú=75, Ã=12, ■=30 defa gibi..
• En az kullanılandan en çok kullanılana doğru bir sıralama izlenerek huffman ağacı (huffman tree) oluşturulur.
• Ağacın bir tarafına 0 diğer tarafına 1 ifadesi atanır. (rastgele olabilir)
• Karakterler artık yeniden kodlanmalıdırlar. Bunun için en tepedeki düğümden (resimdeki her kutucuk içinde ne yazarsa yazsın, bir düğümdür) en alttakine doğru ağacın dalları izlenerek (tıpkı bir labirentte dolanır gibi) inilir. Bu inme işlemi sırasında uğradığımız tüm dallardaki 1 ve 0 değerleri ulaştığımız karakterin yeni bit dizisidir.
• Sıkışmamış veri kümesinde bulunan karakterler, elde ettiğimiz bit kodlarıyla değiştirilir (replace). Örneğin huffman ağacına göre a harfinin temsili bitleri "010" ise veri kümemizde gördüğümüz her a harfi yerine "010" yazarız.
• Tüm karakterler temsili bitlerle değiştirildikten sonra elimizde "1001001010010011100111101"... şeklinde devam eden bir katar kalır.
• Bu bit katarının en başından 8 adet bit alınır ve normal sistemde denk düştüğü karakter tespit edilerek yine replace edilir. Örneğin "10010010" değerini huffman tablomuzdan elde etmiştik ve içerisinde belki de huffman tablosuna göre 3 karakter dahi olabilirdi. Ama biz bu 3 karakteri tek karakter olarak yeniden kodlayacağız. (Bildiğiniz gibi 1 ve 0'ları hangi kombinasyonda yazarsanız yazın 8 basamaklı olduğu sürece UTF-8'de tanımlanmış bir karaktere denk gelecektir (2^8))
• Sonuç olarak veri kümelerinde en fazla tekrar edilen karakterler en kısa (örn 1bit) en az tekrarlanan karakterlere ise en uzun(örn 7bit) bit değerleri atanmış olur. Eski düzende her karakter, UTF-8 ailesine dahil ise 8 bit ile temsil edilirken, artık çoğu karakter, 1bit ile dahi temsil edilebilme olanağı yakalamıştır.
Anlaşılacağı gibi huffman tekniği, gücünü tekrarı bol olan veriler üzerinde gösteriyor. Yukarıda bahsettiğimiz yakın tondaki pixellerin farklı verilerle temsili yerine aynı veriyle temsil edilmesi tekrarlı verileri çoğaltır ve artık top huffman algoritmasına atılmıştır.
Not: Sıkışan veriyi açabilmek için huffman tree's (huffman ağacının) bir yerlerde saklanması zorunludur. Genellikle sıkıştırılan veriyle birlikte dosya içinde tutulmaktadır.
Fark ettiğiniz gibi huffman ağacının da sıkıştırdığımız dosya içinde barınmasından dolayı fazladan yer harcanmasına katlanmak durumundayız. İşte bu yüzdendir ki kimi zaman sıkıştırılan dosyalar sıkışmamış halinden bile büyük olabiliyorlar. (ancak tekrarlı verilerin az olmasının daha büyük etkisi var). Başka algoritmalarla bu huffman tablosu da sıkıştırılmaktadır. Çeşitli programlarda kayıt esnasında "huffman tablosunu optimize et" seçeneği bu görevi yerine getiriyor.




David Albert Huffman (August 9, 1925 – October 7, 1999) was a pioneer in the computer science field.
Elektronik mühendisi
2.ci dünya savasından sonra çin ve japon sularındaki mayınları temizlemek için olusturulan radar sistemlerinde görev almıştır

Americaklı elktronik müehndisi ve matematikçi ölmeden önce gider ayak Claude Shannon (1916 – February 24, 2001) information theory DANIŞMA TEORİSİ diyebilirz


Müzikle ilgili bir kişinin yılda en az 100 kere duydugu ya da söyledigi, kısacası her gün yedigi EKMEK kelimesiyle karşılaştığı kadar sık karşılastıgı mp3 kelimesinin biraz derinleme hakettigini düşünüyorum ( tamamen benim öngörümdür (fırıncı :D )




Huffman Codes
We discuss here an example in which the binary tree structure is of value. Consider the problem of coding (in binary) a message consisting of a string of characters. This is routinely done in a computer system; the code used almost universally at present is known as ASCII3.5, and allocates 8 bits to store each character. Thus A is represented using decimal 65, or 01000001 in binary etc. A more modern one which allows a much wider range of languages to be represented is Unicode, which allocates 16 bits to each character. This is used for example by the language Java, and is an extension of ASCII in that any ASCII character can be converted to Unicode by prefixing it with the zero byte. Although these codes are simple, there are obvious inefficiencies; clearly Unicode wastes at least half of the available space when storing plain ASCII.
Another source of inefficiency may lie in using the same number of bits to represent a common letter, like ``e'' as to represent ``q'' which occurs much less frequently. What if we permit character codes to have a variable length? An apparent difficulty is the need to have a neutral separator character to indicate the end of one character code, and so delimit it from the next. Say a code has the prefix property if no character code is the prefix, or start of the the code for another character. Clearly a code with the prefix property avoids this need to have additional separators, while permitting variable lengths. An obvious question is:
• do codes with the prefix property exist; and if so
• is there a ``best'' one to use?
In Table 3.1 we give an example of such a prefix code for a small alphabet, and contrast it with a simple fixed length code. It is clear that there are savings in this case which make it worth going further. We will see shortly why the example has the prefix property; in the meantime check that the string ``0000100111'' in Code 2 decodes uniquely as ``acbd''.

Table 3.1: Code 1 has fixed length code; Code 2 has the prefix property.
Symbol Code 1 Code 2
a 001 000
b 001 11
c 010 01
d 011 001
e 100 10


Consider now a binary tree, in which each leaf node is labelled with a symbol. We can assign a binary code to each symbol as follows: associate ``0'' with the path from a node to its left child, and ``1'' with the corresponding path to the right child. The code for a symbol is obtained by following the path from the root to the leaf node containing that symbol. The code necessarily has the prefix property; the tree property means that a leaf node cannot appear on a path to another leaf. Conversely it is clear how to associate a binary tree with a binary code having the prefix property; the code describes the shape of the tree down to the leaf associated with each symbol.
Of course a fixed length code necessarily has the prefix property. We show in Fig. 3.6 the binary trees corresponding to the two codes given in Table 3.1, thus incidentally demonstrating that the variable length code in the example does have the prefix property.


Figure 3.6: Binary trees representing the codes in Table 3.1

We now describe how to build the binary Huffman code for a given message. This code has the prefix property, and in a fairly useful sense turns out to be the best such code. We describe the code by building the corresponding binary tree. We start by analysing the message to find the frequencies of each symbol that occurs in it. Our basic strategy will be to assign short codes to symbols that occur frequently, while still insisting that the code has the prefix property. Our example will be build around the message
A SIMPLE STRING TO BE ENCODED USING A MINIMAL NUMBER OF BITS 3.6
The corresponding frequencies are given in Table 3.2; note that in this case, we choose to include the space symbol `` '', written in the table as .
Table 3.2: Symbol frequencies used to build a Huffman Code.
I A B D M E O C F G S T L R N P U
6 3 3 2 4 5 3 1 1 2 4 3 2 2 5 1 2 11


Now begin with a collection (a forest) of very simple trees, one for each symbol to be coded, with each consisting of a single node, labelled by that symbol, and the frequency with which it occurs in the string. The construction is recursive: at each stage the two trees which account for the least total frequency in their root nodes are selected, and used to produce a new binary tree. This has, as its children the two trees just chosen: the root is then labelled with the total frequency accounted for by both subtrees, and the original subtrees are removed from the forest. The construction continues in this way until only one tree remains; that is then the Huffman encoding tree.3.7


Figure 3.7: The Huffman encoding tree for the string ``A SIMPLE STRING TO BE ENCODED USING A MINIMAL NUMBER OF BITS''.
The resulting Huffman encoding tree for our example string is shown in Fig 3.7. By construction, the symbols only occur at leaf nodes, and so the corresponding code has the prefix property. In the diagram, these leaf nodes still carry the frequencies used in their construction; formally once the tree has been built, the symbols which are shown below the leaves should replace the frequencies at the nodes. The right-most node is the symbol . As already described, the character encoding is the read by traversing from the root to each leaf, recording ``0'' if the left hand branch is traversed, and ``1'' if the right hand one is taken. Thus ``S'' is encoded as ``0100'', while is ``11'' and ``C'' is ``000110''.
Definition 3.6 Let T be a tree with weigths w1,...wn at its leaf nodes. The weighted leaf path length L(T) of T is
L(T) = liwi
(3.2)


where li is the path length; the length of the path from the root to node i.
We are interested in the case when the tree is an encoding tree and the weights are the frequency of occurrence of the symbols associated with the leaf nodes. In that case L(T) is the length of the message after encoding, since at node i, the character occurs a total of wi times, and requires li bits to encode it. We now show that a Huffman encoding tree gives the best encoding. Say that a binary tree T is optimal if L(T) has its minimum value over all possible trees with the same set of leaf nodes.
Theorem 3.7 A Huffman tree is optimal.
Proof. We start with an apparently simple result.
Lemma 3.8 Suppose that nodes with weights wi and wj satisfy wi li, showing that we must have wi = wj. There is thus no loss if we interchange the labels i and j. We can continue to do this until we achieve the required consistent labelling of the corresponding node lengths.
We can now show that a Huffman tree is optimal. This argument was adapted from Gersting (1993, Page 402). We establish the result by induction on the number n of leaf nodes in the tree. The result is clear for n = 1.
Next note that in any optimal binary tree, there are no nodes with single children -- replacing the child by the parent produces a shorter weighted external path length.
Consider now a set of n + 1 weights wi with n + 1 2, which by Lemma 3.9 we suppose to be ordered such that w1 w2 ... wn + 1 in such a way that the corresponding paths lengths satisfy l1 l2 ... ln. Let Tn + 1 be an optimal tree for these weights with weighted leaf path length L(Tn + 1). By our choice of labelling w1 occurs on the longest path, as does its sibling wj; since they are siblings, l1 = lj. Since li l2 lj, we have l1 = l2. Thus the new tree T'n + 1 obtained by interchanging nodes 2 and j have the same weighted external path length.
Next construct a new tree Tn with a new ``leaf'' node w = w1 + w2 by combining w1 and w2 from T'n + 1 to give a tree with n leaf nodes. Let Hn be a Huffman tree on these nodes, and note that, by construction the tree obtained by replacing the single node w in Hn by the nodes w1 and w2, the two smallest weights, is a Huffman tree Hn + 1. By induction, we have L(Tn) L(Hn), since they have the same leaf nodes. We now calculate:

Thus L(Tn + 1) L(Hn + 1). But Tn + 1 was optimal, so this inequality is an equality and Hn + 1 is optimal, as required.
Remark 3.10 The above proof has to be done a little carefully. The (complete) binary tree having nodes with weights 1, 3, 2 and 2 is not a Huffman tree, but is optimal; however interchanging the second and third nodes does not affect the weighted leaf path length and does give a Huffman Tree. In the proof, this interchage is the step of creating T'n + 1 from Tn + 1
A little more can be said, centred round the need to have the coding tree available when decoding. Of course, for ``general purpose'' language, the letter frequencies are well known, and could be assumed. In general, the need to transmit the coding tree as well as the message reduces the effectiveness of the method a little. And it can be impractical to preprocess a message to get the exact frequencies of the symbols before any of the message is transmitted. There is a variant however, called adaptive Huffman coding, in which the frequencies are assumed initially to be all the same, and then adjusted in the light of the message being coded to reflect the actual frequencies. Since the decoder has access to the same information as the encoder, it can be arranged that the decoder changes coding trees at the same point as the encoder does; thus they keep in step. One way to do that is to introduce extra ``control'' symbols to the alphabet, and use these to pass such information.
Modern coding schemes such as zip (or gzip or pkzip) are based on these ideas.




















Ben konumu en başından alakasız başlayıp sonradan anlam kazanan enteresan filmler gibi anlatıcam :D

David Albert Huffman (August 9, 1925 – October 7, 1999) was a pioneer in the computer science field.
Elektronik mühendisi
2.ci dünya savasından sonra çin ve japon sularındaki mayınları temizlemek için olusturulan radar sistemlerinde görev almıştır

Americaklı elktronik müehndisi ve matematikçi ölmeden önce gider ayak Claude Shannon (1916 – February 24, 2001) information theory DANIŞMA TEORİSİ diyebilirz


Müzikle ilgili bir kişinin yılda en az 100 kere duydugu ya da söyledigi, kısacası her gün yedigi EKMEK kelimesiyle karşılaştığı kadar sık karşılastıgı mp3 kelimesinin biraz derinleme hakettigini düşünüyorum ( tamamen benim öngörümdür (fırıncı :D )



Ses dosyasını sıkıştırırken belirli teknikler ve hileler kullanılır bunların başlıkları

Duyma eşiği
Insan kulagı her frekansı çizgi gibi eşit duyamaz.





Her kulağın duyma eşiği aritmetik olarak belirli değildir fakat c



Loudness Algılama : (başa dön)
SPL : Sound Peressure Level(Ses Basınç Seviyesi), dB : DeciBel, Hz : Hertz

Şekil 12
Fletcher - Munson Loudness Eğrileri.

Şekil 12'deki Fletcher - Munson eğrilerinde, insan kulağındaki çeşitli ses basınç seviyelerinde (desiBel ya da dB) Loudness ölçüleri görülmekte.
Referans noktası 1 kHz olarak seçilen bu sistemde, orta frekanslarda bas duyma eğilimi vardır fakat seslerin refeans noktasına göre daha yüksek duyulması için düşük ve yüksek frekanslarda en yüksek 'Ses Basınç Seviyeleri' (SPL : Sound Pressure Level) gerekir.

Grafikte görülen her bir eğri, yüksek frekanslarda eşdeğer olarak algılanan loudness SPL'lerini gösterir.Düşük dinleme seviyelerinde bas algılama düşer, müzikal enstrüman ve vokal seslersindeki karmaşık dalgaların algılanışı değişir.

Kaliteli ton kontrol katları ve ekolayzır (equalizer), müzik dinlerken ses seviyesinini değiştirmeden ton balansını dengeleyerek, tatmin seviyesini artırmaya yardım eder.















Bilindiği üzere günden güne dijital bir çöplüğe dönüşen yaşantımızda dosyalarımızın sıkıştırılmış olması bile bazen yetersiz gelebiliyor. Terabyte kapasitelerine erişmiş hard disc'ler dijital alan ihtiyacımıza bir nebze de olsa ferahlık sağlamış olsa bile dinmek bilmeyen bu alan ihtiyacımız sürekli artış eğilimi göstererek sınırları zorlar hale geliyor. Üstelik bu kötü duruma dosyalarımızı sıkıştırdığımız halde giriyor olmamız da üzerine ayrıca düşünülesi bir durum.
Ama her şeye rağmen sıkıştırılmış bir dosya hiç sıkışmamış bir dosyadan daha hayırlı olsa gerek.

Böylesi devasa boyutlara ulaşmış bilgi kümelerini ufaltma görevi elektrik akımını işleyerek mantıksal işlemleri yerine getirebilen bilgisayarlara düştüğü için biraz da olsa işimiz kolaylaşıyor. Biraz olsun diyoruz çünkü çok güçlü diye nitelendirebileceğimiz bilgisayarlar bile böylesi büyük veri dağları karşısında bir cüce gibi kalabiliyor. Bunun sebebi belki de kullandığımız tekniklerin zayıf kalması (yani insan aklının sınırlarını zorlamakta olması) olabilir. Belki de donanımsal işlem kapasitemiz de yetersiz olabilir. Ama gelin şimdi insan aklına bağımlı yöntemlerin ne derece veri şişkinliğine iyi geldiğine bir bakalım.
Dijital bilgileri çeşitli tekniklerle donanımlara hapsettiğimiz bilinen bir durum. Ama ne çeşitle olursa olsun her veri mutlaka ya "var" diye nitelendirebileceğimiz ya da "yok" diyebileceğimiz bir formda karşımıza çıkar. sadece "var" olmak dijital alemde "bit" olarak nitelendirdiğimiz olguya denk gelmekte. "yok" olması durumu da yine "bit" kapsamına girmektedir. "var" ve "yok" tan kasıt bir elektronik devreden akım geçmesi ve geçmemesi hadiselerine denk gelmektedir. Yani belli bir volt değerinin altında kalan gerilimler bilgisayara ulaştığında bu durum "0" değerini teşkil etmektedir. Yine aynı gerilim değerine eşit ve aşan gerilim değerleri ise "1" değerine eşit sayılır. İşte tüm dijital dünya bu iki değer üzerine inşaa edilmiştir. Bu inşaata verilerimiz de dahildir.
Ancak gündelik işlerimizi yürütebilmemiz için bir çok "1" ve "0" kombinasyonu gereksinimi ortaya çıkmıştır. Yani "akım geçer" veya "geçmez"lerin birleştirilerek daha farklı değerler üretilmesi şart olmuştur. Verilen şişmesi büyümesi ve dağlaşması durumu tam da bu aşamada kendini göstermektedir. Çünkü bit tekrarları artık boy göstermeye başlamıştır.
Sıkıştırma algoritmalarına geldiğimizde iki türe ayrıldıklarını görebiliyoruz. Bu ayrımdan ilki kayıplı sıkıştırma türleridir.
#-Kayıplı Sıkıştırma Teknikleri
Ana mantık insanların algı yeteneğini kullanmakta saklıdır. Bildiğiniz gibi insanoğlunun beyni çok karmaşık ve çok gelişmiş (en azından yer yüzündeki en gelişmiş) yapıdadır. Algılama yeteneklerimiz de çok gelişmiştir ve olayları gördüklerimizi kavrama yeteneğimiz bulunmaktadır ancak bunlara rağmen yine de çeşitli eksikliklerimiz vardır. Bu eksikliğimizden birisi de renk algılama yeteneğimizdir.
İnsan gözü birbirine oldukça yakın renkleri biraz da görüş alanı mesafemiz uzun ise ayırt edemez. Ancak yan yana gelen iki renk birbirinden frekans olarak uzak aralıklarda iseler farklı olduklarını ayırt edebiliriz. İşte bu durum renklerle ilişiği olan dijital konularda bize güzel bir olanak tanımaktadır.
Bir fotoğrafta bulunan renkler bir ön işlemden geçirilir ve renklerin birbirlerine ton olarak yakınlıkları hesaplanır. Ardından sıkıştırma oranı olarak kullanıcıdan alınan yüzdesel katsayı dikkate alınarak bu oranın kapsamına giren renklerin bir orta ton'u hesaplanır ve pixel'ler yeni hesaplanan bu yeni renk değerine sahip olurlar. Yani normalde farklı verilerle kodlanan iki farklı renk şimdi ortak kod'a sahip iki farklı pixel olmuş durumdadırlar. Ancak gözümüz bu iki pixelin aynı tonda mı yoksa birbirine çok yakın ama farklı tonlarda mı olduğu ayrımını yapamayacağı için, resimde bir kayıp olduğu kanısına varamayız. Her iki (veya daha fazla) pixel aynı veri ile ifade edilmeye başlandığı için elimizde bol miktarda birbirinin aynısı veri blokları oluşacaktır. Yukarıda anlattığımız adımlardan geçirilen fotoğraf birazdan aşağıda anlatacağımız huffman tekniğinden de geçirildikten sonra anlayacaksınız ki eskisine oranla daha ufak ama eskisiyle aynı işi gören bir dosya elimizde kalmış olacak. Video görüntülerin de fotoğraf karelerinden oluşturulduğunu düşünürsek bu sıkıştırma olanağından videolarda olumlu yönde nasiplenebilmişlerdir.
Yine ses dosyaları da aynı mantık üzerinden, yani insanın duyma organının eksikliklerinden faydalanarak bazı ses tınılarının silinmesiyle ufaltılabilmektedir. Bu durumun gündelik hayatımızda çok büyük başarıyla uygulanabilmiş örneği olarak mp3 algoritmasını gösterebiliriz.
Tüm bu tekniklerin bir ortak noktası vardır; veri kaybı meydana getirilerek sıkıştırma yapılmaktadır. Yani verilerimizin bir kısmını uygun tekniklerle sileriz ve dosyalarımız da doğal olarak ufaltılmış olurlar. Veri silme oranlarını arttırdıkça kalitede kayıplar oluştuğunun farkına varmaya başlarız. Yani algımız evet zayıftır bazı hallerde ama bir yere kadar. Zayıflık sınırlarımız aşılmaya başlandıkça artık kalite kayıpları görünür olmaya başlayacaktır.
Bir diğer alt başlığımız da kayıpsız sıkıştırma teknikleridir.
#-Kayıpsız Sıkıştırma Teknikleri
En ümit vaadeden sıkıştırma tekniği olarak gösterebiliriz ama bir o kadar da zor ve işlem kapasitesi gerektiren bir tekniktir. Bu yüzden bir tek anahtar kelime ile kayıpsız sıkıştırma algoritmasını ifade edebilecek bir imkan olmadığından gelin bu tekniğin işleyişini görmek için huffman algoritmasına bakalım.
Bu algoritmanın Huffman isimli bir üniversite gencinin bitirme tezi olduğunu belirtmek gerek.
İşlem Adımları;
• Elimizde bulunan veri kümesinde hangi karakter kaç defa kullanılmış sayılır (frekans tablosu) örn. a=33, Ú=75, Ã=12, ■=30 defa gibi..
• En az kullanılandan en çok kullanılana doğru bir sıralama izlenerek huffman ağacı (huffman tree) oluşturulur.
• Ağacın bir tarafına 0 diğer tarafına 1 ifadesi atanır. (rastgele olabilir)
• Karakterler artık yeniden kodlanmalıdırlar. Bunun için en tepedeki düğümden (resimdeki her kutucuk içinde ne yazarsa yazsın, bir düğümdür) en alttakine doğru ağacın dalları izlenerek (tıpkı bir labirentte dolanır gibi) inilir. Bu inme işlemi sırasında uğradığımız tüm dallardaki 1 ve 0 değerleri ulaştığımız karakterin yeni bit dizisidir.
• Sıkışmamış veri kümesinde bulunan karakterler, elde ettiğimiz bit kodlarıyla değiştirilir (replace). Örneğin huffman ağacına göre a harfinin temsili bitleri "010" ise veri kümemizde gördüğümüz her a harfi yerine "010" yazarız.
• Tüm karakterler temsili bitlerle değiştirildikten sonra elimizde "1001001010010011100111101"... şeklinde devam eden bir katar kalır.
• Bu bit katarının en başından 8 adet bit alınır ve normal sistemde denk düştüğü karakter tespit edilerek yine replace edilir. Örneğin "10010010" değerini huffman tablomuzdan elde etmiştik ve içerisinde belki de huffman tablosuna göre 3 karakter dahi olabilirdi. Ama biz bu 3 karakteri tek karakter olarak yeniden kodlayacağız. (Bildiğiniz gibi 1 ve 0'ları hangi kombinasyonda yazarsanız yazın 8 basamaklı olduğu sürece UTF-8'de tanımlanmış bir karaktere denk gelecektir (2^8))
• Sonuç olarak veri kümelerinde en fazla tekrar edilen karakterler en kısa (örn 1bit) en az tekrarlanan karakterlere ise en uzun(örn 7bit) bit değerleri atanmış olur. Eski düzende her karakter, UTF-8 ailesine dahil ise 8 bit ile temsil edilirken, artık çoğu karakter, 1bit ile dahi temsil edilebilme olanağı yakalamıştır.
Anlaşılacağı gibi huffman tekniği, gücünü tekrarı bol olan veriler üzerinde gösteriyor. Yukarıda bahsettiğimiz yakın tondaki pixellerin farklı verilerle temsili yerine aynı veriyle temsil edilmesi tekrarlı verileri çoğaltır ve artık top huffman algoritmasına atılmıştır.
Not: Sıkışan veriyi açabilmek için huffman tree's (huffman ağacının) bir yerlerde saklanması zorunludur. Genellikle sıkıştırılan veriyle birlikte dosya içinde tutulmaktadır.
Fark ettiğiniz gibi huffman ağacının da sıkıştırdığımız dosya içinde barınmasından dolayı fazladan yer harcanmasına katlanmak durumundayız. İşte bu yüzdendir ki kimi zaman sıkıştırılan dosyalar sıkışmamış halinden bile büyük olabiliyorlar. (ancak tekrarlı verilerin az olmasının daha büyük etkisi var). Başka algoritmalarla bu huffman tablosu da sıkıştırılmaktadır. Çeşitli programlarda kayıt esnasında "huffman tablosunu optimize et" seçeneği bu görevi yerine getiriyor.
Herkesin disk alanı bol olsun dilerim. yine görüşmek üzere...

 

Tarih: 13 Ocak 2010, 08:15 - İp: 78.***.**2.209
blink182
blink182 (üye)
İstanbul / Meraklı

Sırf bu konuya cevap yazmak için üye oldum konu hakkında sunum yaptıgım için araştırmam var eski mesaj olsada paylasayım belki birnin işine yarar


Ses formatları
Kbps (kilobit per sec.) 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 and 320 kbit/s, and the available sampling frequencies are 32, 44.1 and 48 kHz.[21]
burda durum anolog sesi dijitale veriye cevirirkenki mantıkla aynıdır TEKNİKLER dışındaki sıkıştırmanın ne kadarını (bilgisayara)(kodlamaya) bırakıcagımız yani noktaların yakınlık ları uzaklıkları ve burda Bit rate kodlanmış digital ses dosyasında çözümleme halinde de codeclere göre kalite olarak etki yapar


Ses formatları 3 dalda incelenir
Kayıpsız (ham) kompres edilmemşiş ses formatları (uncompressd)
Az kompres edilmiş ses formatları(lossless)
Kayıplı ses formatları ;(lossy) burda bahsettiğimiz kayıp ses kalite farkı ve frekans kayıplarıdır .orjinalin bozulmuşluk derecesidir.

Kayıpsız ham formatlar analog sinyalimizin belirli bit degerinde dijital kodalara cevirilmiş ilk halidir .Windows’ da bu Wave ya da Wav ken(Waveform Audio File Format) mac os’te (wav yada) aiff ‘tir (Audio Interchange File Format) (au ve raw da var ama kullanılmıyor)
Az kayıplı ses formatlarında ise başlıca Flac, monkey’s audio , wavpack,shorten,Tom’s lossless audio kompressor (TAK) gibi pekte kullanmadıgımız ilgimizi cekmeyen cünkü ham halinin 100 de 30 u ile 50 si arasında sıkıştırılmıştır. Yani 40 mb lık dosya ne küçük olarak 3mb yerine kullanilablir ,iş görür ne de 80mb e 90mb halinde orjinali varken tercih edilir.

Kayıplı ses formatları,nın başlıcaları MP3 (MPEG-1 Audio Layer 3), Vorbis, Musepack, AAC, ATRAC and lossy Windows Media Audio (WMA).

Ben Kayıplı ses formatlarının çalışma prensibini Müzikle ilgili bir kişinin yılda en az 100 kere duydugu ya da söyledigi, kısacası her gün yedigi EKMEK kelimesiyle karşılaştığı kadar sık karşılastıgı mp3 kelimesinin derinleme hakettigini düşündüğüm için mp3 üzerinden anlatıcam.

Kayıplı formatları Sıkıstrımada 5 teknik kullanılır

Bunların 2 ‘si algısal diğer 3 ‘ü ise kodlama –(mantıksal) olarak ayrılıyor.

Algısalın başında

1-Minimum duyum eşiği tekniği(minimum treshold)

Insan kulagı her frekansı çizgi gibi eşit duyamadığından bu teknikte

Fletcher – Munson kuralıyla , yarattıkları tablodanda görebilecegimiz gibi 2khz-5khz arasındaki duyum gücümüzle frekans aralıkları arasında ciddi fark vardır bu dengeler tablodanda görülücegi gibi db arttıkca yakınlasmaya baslar yani sesin basınc seviyesi arttıkca her frekansı duyabilmemiz eşitlenir . Referans noktası 1 kHz olarak seçilen bu sistemde, orta frekanslarda bas duyma eğilimi vardır fakat seslerin refeans noktasına göre daha yüksek duyulması için düşük ve yüksek frekanslarda en yüksek 'Ses Basınç Seviyeleri' (SPL : Sound Pressure Level) gerekir.
Düşük dinleme seviyelerinde bas algılama düşer, müzikal enstrüman ve vokal seslersindeki karmaşık dalgaların algılanışı değişir Kaliteli, ton kontrol katları ve ekolayzır (equalizer), müzik dinlerken ses seviyesinini değiştirmeden ton balansını dengeleyerek, tatmin seviyesini artırmaya yardım eder.

Loudness Algılama : (başa dön)
SPL : Sound Peressure Level(Ses Basınç Seviyesi), dB : DeciBel, Hz : Hertz

Kodlama sistemiyle belirli desibele gelmeden duyamadıgımız hzl er cıkarılır.

2-Maskeleme ( masking effect)
Basit olarak güçlü bir ses varken arkdaki güçsüz sesi bastırır tıp uçan kuşu güneşin önüne geldiğinde güneş ışınları yüzünden sadece parlaklık olarak algılayabilecegimiz gibi. Yani tüm sesleri kodlamamız gerekmez bu sıkıştırmanın temel mantığıdır.**ve çalan bir piyano kaydı baslmadan once calan kişinin nefes alısını duyarız ama calarken maskelenen bu nefesi ayrıstırmamımız için psiko akustik modelleme kullanılır. ((((((((((((((((((((((((((mpeg layer-3 ve aac encode için örneklenmiş ses verisini insan kulağının dinamik davranışı ve frekans cevabına göre modelleyen, 1/20 gibi sıkıştırma verimine sahip kompresör algoritması. veri işlem akışı şöyledir. sample alınan audio data biri 32-band 18-point mdct (modified discrete cossine transform) ve diğeri 1024 point fft (fast fourier transform) edilmek üzere iki işlem kanalına yollanır. mdct nin tatbik işine algoritmaya bağlı olarak pqf (polyphase quadrature filter) da denir. pqf de spektral genlik hassasiyeti sesin dinamik davranışına bağlı olarak uygun windowing ile en hassas şekilde hesaplanır. ve anti-alias butterfly tatbik edilir. iki işlem kanalından alından spektral değerler psychoacoustic modelde aşağıdaki kriterlere bağlı olarak değerlendirilir, bir kısım data elemine edilip (sıkıştırma burda oluyor) çıktı elde edilir. ))))))))))))))))))))))))))
)
- insan kulağının işitme bandı 20hz ~ 20khz arasıdır.
- işitmeye en hassas olan aralık 500hz ~ 5khz dir.
- dinamik ranj 96 ~ 120db dir.
- algılanabilir minimum spektral genlik frekansın bir fonksiyonudur. (absolute threshold of hearing)
- aynı anda birden çok frekansta sesi birbirilerinden ayırdedebilmek için belli eşikler vardır. yüksek spektral genlikli ses kendisine yakın bir bandı mask edebilir. mask edebilme ranjı frekans ın bir fonksiyonudur. (freaquency masking)
- yüksek genlikli bir ses işitildikten sonra insan kulağı belli bir süre işitebilme özelliğini yitirir. (temporal masking)

psikoakustik model, bu kritelere bağlı olarak; gereksiz datayı filtreler ve devamında spektral değerler quantize edilir. huffman encoding tatbik edilir ve nihayette istenen formata uygun bit stream(veri akışı) elde edilmek üzere uygun header lar (teknik terim oalrak = (üst bilgi) (referans bilgisi ) eklenerek çıkışa gönderilir.




3-The bytes reservoir ( byte havuzları)
Müzikteki bazı kısımlar müzikal kaliteyi degistirmeksizin oranlandırılamaz mp3; yakın frekanstaki bazı pasajlarda kısa byte rezervlerini rol yaparcasına ara bellek gibi kullanarak düşük kalitede kodlar

4-The joint stereo coding (ortak stereo kodlaması)
Normal stereo ses dosyalarında Sol ve Sağ kanallarda farklı sesler kayıtlı olmaktadır.Ancak bu seslerin büyük kısmı aynı olmaktadır.Bizim kulağımız farklı sesleri kanallarda algılayarak stereo algılamamızı sağlar.Joint stereoda ise bu kanallardan ( sol ve sağ ) birisi temel alınarak diğer kanala sadece aradaki farklı seslerin kayıt edilmesi temeli alınmaktadır.Mesela sağ kanal temel alındığında sol kanala sadece sağda kayıtlı olmayan sesler kayıt edilir.Ancak bu durumda da özellikle alçak frekanstaki sesler ( baslar ) özellikle kaybolmaktadır. Kısaca Normal stereo kayıttan kalite olarak düşüktür diyebiliriz.Şöyle basit bir şekil çizerek anltayım.

Normal Stereo:
Sol Kanal :
--- --- --- --- ---
Sağ Kanal :
---.+---.+---.+---

Joint Stereo:
Sol Kanal
--- --- --- --- ---
Sağ Kanal:
+ + + +

Burada kalite kaybı dikkat ederseniz normal stereo sağ kanaldaki . ile gösterdiğim düşük frekanslı seslerin yok olmasıdır.
Joint stereonun tek avantajı gerçek stereo ya göre biraz daha az yer tutmasıdır

5- huffman
#-Kayıpsız Sıkıştırma Teknikleri
En ümit vaadeden sıkıştırma tekniği olarak gösterebiliriz ama bir o kadar da zor ve işlem kapasitesi gerektiren bir tekniktir. Bu yüzden bir tek anahtar kelime ile kayıpsız sıkıştırma algoritmasını ifade edebilecek bir imkan olmadığından gelin bu tekniğin işleyişini görmek için huffman algoritmasına bakalım.
Bu algoritmanın Huffman isimli bir üniversite gencinin bitirme tezi olduğunu belirtmek gerek.
İşlem Adımları;
• Elimizde bulunan veri kümesinde hangi karakter kaç defa kullanılmış sayılır (frekans tablosu) örn. a=33, Ú=75, Ã=12, ■=30 defa gibi..
• En az kullanılandan en çok kullanılana doğru bir sıralama izlenerek huffman ağacı (huffman tree) oluşturulur.
• Ağacın bir tarafına 0 diğer tarafına 1 ifadesi atanır. (rastgele olabilir)
• Karakterler artık yeniden kodlanmalıdırlar. Bunun için en tepedeki düğümden (resimdeki her kutucuk içinde ne yazarsa yazsın, bir düğümdür) en alttakine doğru ağacın dalları izlenerek (tıpkı bir labirentte dolanır gibi) inilir. Bu inme işlemi sırasında uğradığımız tüm dallardaki 1 ve 0 değerleri ulaştığımız karakterin yeni bit dizisidir.
• Sıkışmamış veri kümesinde bulunan karakterler, elde ettiğimiz bit kodlarıyla değiştirilir (replace). Örneğin huffman ağacına göre a harfinin temsili bitleri "010" ise veri kümemizde gördüğümüz her a harfi yerine "010" yazarız.
• Tüm karakterler temsili bitlerle değiştirildikten sonra elimizde "1001001010010011100111101"... şeklinde devam eden bir katar kalır.
• Bu bit katarının en başından 8 adet bit alınır ve normal sistemde denk düştüğü karakter tespit edilerek yine replace edilir. Örneğin "10010010" değerini huffman tablomuzdan elde etmiştik ve içerisinde belki de huffman tablosuna göre 3 karakter dahi olabilirdi. Ama biz bu 3 karakteri tek karakter olarak yeniden kodlayacağız. (Bildiğiniz gibi 1 ve 0'ları hangi kombinasyonda yazarsanız yazın 8 basamaklı olduğu sürece UTF-8'de tanımlanmış bir karaktere denk gelecektir (2^8))
• Sonuç olarak veri kümelerinde en fazla tekrar edilen karakterler en kısa (örn 1bit) en az tekrarlanan karakterlere ise en uzun(örn 7bit) bit değerleri atanmış olur. Eski düzende her karakter, UTF-8 ailesine dahil ise 8 bit ile temsil edilirken, artık çoğu karakter, 1bit ile dahi temsil edilebilme olanağı yakalamıştır.
Anlaşılacağı gibi huffman tekniği, gücünü tekrarı bol olan veriler üzerinde gösteriyor. Yukarıda bahsettiğimiz yakın tondaki pixellerin farklı verilerle temsili yerine aynı veriyle temsil edilmesi tekrarlı verileri çoğaltır ve artık top huffman algoritmasına atılmıştır.
Not: Sıkışan veriyi açabilmek için huffman tree's (huffman ağacının) bir yerlerde saklanması zorunludur. Genellikle sıkıştırılan veriyle birlikte dosya içinde tutulmaktadır.
Fark ettiğiniz gibi huffman ağacının da sıkıştırdığımız dosya içinde barınmasından dolayı fazladan yer harcanmasına katlanmak durumundayız. İşte bu yüzdendir ki kimi zaman sıkıştırılan dosyalar sıkışmamış halinden bile büyük olabiliyorlar. (ancak tekrarlı verilerin az olmasının daha büyük etkisi var). Başka algoritmalarla bu huffman tablosu da sıkıştırılmaktadır. Çeşitli programlarda kayıt esnasında "huffman tablosunu optimize et" seçeneği bu görevi yerine getiriyor.




David Albert Huffman (August 9, 1925 – October 7, 1999) was a pioneer in the computer science field.
Elektronik mühendisi
2.ci dünya savasından sonra çin ve japon sularındaki mayınları temizlemek için olusturulan radar sistemlerinde görev almıştır

Americaklı elktronik müehndisi ve matematikçi ölmeden önce gider ayak Claude Shannon (1916 – February 24, 2001) information theory DANIŞMA TEORİSİ diyebilirz


Müzikle ilgili bir kişinin yılda en az 100 kere duydugu ya da söyledigi, kısacası her gün yedigi EKMEK kelimesiyle karşılaştığı kadar sık karşılastıgı mp3 kelimesinin biraz derinleme hakettigini düşünüyorum ( tamamen benim öngörümdür (fırıncı :D )




Huffman Codes
We discuss here an example in which the binary tree structure is of value. Consider the problem of coding (in binary) a message consisting of a string of characters. This is routinely done in a computer system; the code used almost universally at present is known as ASCII3.5, and allocates 8 bits to store each character. Thus A is represented using decimal 65, or 01000001 in binary etc. A more modern one which allows a much wider range of languages to be represented is Unicode, which allocates 16 bits to each character. This is used for example by the language Java, and is an extension of ASCII in that any ASCII character can be converted to Unicode by prefixing it with the zero byte. Although these codes are simple, there are obvious inefficiencies; clearly Unicode wastes at least half of the available space when storing plain ASCII.
Another source of inefficiency may lie in using the same number of bits to represent a common letter, like ``e'' as to represent ``q'' which occurs much less frequently. What if we permit character codes to have a variable length? An apparent difficulty is the need to have a neutral separator character to indicate the end of one character code, and so delimit it from the next. Say a code has the prefix property if no character code is the prefix, or start of the the code for another character. Clearly a code with the prefix property avoids this need to have additional separators, while permitting variable lengths. An obvious question is:
• do codes with the prefix property exist; and if so
• is there a ``best'' one to use?
In Table 3.1 we give an example of such a prefix code for a small alphabet, and contrast it with a simple fixed length code. It is clear that there are savings in this case which make it worth going further. We will see shortly why the example has the prefix property; in the meantime check that the string ``0000100111'' in Code 2 decodes uniquely as ``acbd''.

Table 3.1: Code 1 has fixed length code; Code 2 has the prefix property.
Symbol Code 1 Code 2
a 001 000
b 001 11
c 010 01
d 011 001
e 100 10


Consider now a binary tree, in which each leaf node is labelled with a symbol. We can assign a binary code to each symbol as follows: associate ``0'' with the path from a node to its left child, and ``1'' with the corresponding path to the right child. The code for a symbol is obtained by following the path from the root to the leaf node containing that symbol. The code necessarily has the prefix property; the tree property means that a leaf node cannot appear on a path to another leaf. Conversely it is clear how to associate a binary tree with a binary code having the prefix property; the code describes the shape of the tree down to the leaf associated with each symbol.
Of course a fixed length code necessarily has the prefix property. We show in Fig. 3.6 the binary trees corresponding to the two codes given in Table 3.1, thus incidentally demonstrating that the variable length code in the example does have the prefix property.


Figure 3.6: Binary trees representing the codes in Table 3.1

We now describe how to build the binary Huffman code for a given message. This code has the prefix property, and in a fairly useful sense turns out to be the best such code. We describe the code by building the corresponding binary tree. We start by analysing the message to find the frequencies of each symbol that occurs in it. Our basic strategy will be to assign short codes to symbols that occur frequently, while still insisting that the code has the prefix property. Our example will be build around the message
A SIMPLE STRING TO BE ENCODED USING A MINIMAL NUMBER OF BITS 3.6
The corresponding frequencies are given in Table 3.2; note that in this case, we choose to include the space symbol `` '', written in the table as .
Table 3.2: Symbol frequencies used to build a Huffman Code.
I A B D M E O C F G S T L R N P U
6 3 3 2 4 5 3 1 1 2 4 3 2 2 5 1 2 11


Now begin with a collection (a forest) of very simple trees, one for each symbol to be coded, with each consisting of a single node, labelled by that symbol, and the frequency with which it occurs in the string. The construction is recursive: at each stage the two trees which account for the least total frequency in their root nodes are selected, and used to produce a new binary tree. This has, as its children the two trees just chosen: the root is then labelled with the total frequency accounted for by both subtrees, and the original subtrees are removed from the forest. The construction continues in this way until only one tree remains; that is then the Huffman encoding tree.3.7


Figure 3.7: The Huffman encoding tree for the string ``A SIMPLE STRING TO BE ENCODED USING A MINIMAL NUMBER OF BITS''.
The resulting Huffman encoding tree for our example string is shown in Fig 3.7. By construction, the symbols only occur at leaf nodes, and so the corresponding code has the prefix property. In the diagram, these leaf nodes still carry the frequencies used in their construction; formally once the tree has been built, the symbols which are shown below the leaves should replace the frequencies at the nodes. The right-most node is the symbol . As already described, the character encoding is the read by traversing from the root to each leaf, recording ``0'' if the left hand branch is traversed, and ``1'' if the right hand one is taken. Thus ``S'' is encoded as ``0100'', while is ``11'' and ``C'' is ``000110''.
Definition 3.6 Let T be a tree with weigths w1,...wn at its leaf nodes. The weighted leaf path length L(T) of T is
L(T) = liwi
(3.2)


where li is the path length; the length of the path from the root to node i.
We are interested in the case when the tree is an encoding tree and the weights are the frequency of occurrence of the symbols associated with the leaf nodes. In that case L(T) is the length of the message after encoding, since at node i, the character occurs a total of wi times, and requires li bits to encode it. We now show that a Huffman encoding tree gives the best encoding. Say that a binary tree T is optimal if L(T) has its minimum value over all possible trees with the same set of leaf nodes.
Theorem 3.7 A Huffman tree is optimal.
Proof. We start with an apparently simple result.
Lemma 3.8 Suppose that nodes with weights wi and wj satisfy wi li, showing that we must have wi = wj. There is thus no loss if we interchange the labels i and j. We can continue to do this until we achieve the required consistent labelling of the corresponding node lengths.
We can now show that a Huffman tree is optimal. This argument was adapted from Gersting (1993, Page 402). We establish the result by induction on the number n of leaf nodes in the tree. The result is clear for n = 1.
Next note that in any optimal binary tree, there are no nodes with single children -- replacing the child by the parent produces a shorter weighted external path length.
Consider now a set of n + 1 weights wi with n + 1 2, which by Lemma 3.9 we suppose to be ordered such that w1 w2 ... wn + 1 in such a way that the corresponding paths lengths satisfy l1 l2 ... ln. Let Tn + 1 be an optimal tree for these weights with weighted leaf path length L(Tn + 1). By our choice of labelling w1 occurs on the longest path, as does its sibling wj; since they are siblings, l1 = lj. Since li l2 lj, we have l1 = l2. Thus the new tree T'n + 1 obtained by interchanging nodes 2 and j have the same weighted external path length.
Next construct a new tree Tn with a new ``leaf'' node w = w1 + w2 by combining w1 and w2 from T'n + 1 to give a tree with n leaf nodes. Let Hn be a Huffman tree on these nodes, and note that, by construction the tree obtained by replacing the single node w in Hn by the nodes w1 and w2, the two smallest weights, is a Huffman tree Hn + 1. By induction, we have L(Tn) L(Hn), since they have the same leaf nodes. We now calculate:

Thus L(Tn + 1) L(Hn + 1). But Tn + 1 was optimal, so this inequality is an equality and Hn + 1 is optimal, as required.
Remark 3.10 The above proof has to be done a little carefully. The (complete) binary tree having nodes with weights 1, 3, 2 and 2 is not a Huffman tree, but is optimal; however interchanging the second and third nodes does not affect the weighted leaf path length and does give a Huffman Tree. In the proof, this interchage is the step of creating T'n + 1 from Tn + 1
A little more can be said, centred round the need to have the coding tree available when decoding. Of course, for ``general purpose'' language, the letter frequencies are well known, and could be assumed. In general, the need to transmit the coding tree as well as the message reduces the effectiveness of the method a little. And it can be impractical to preprocess a message to get the exact frequencies of the symbols before any of the message is transmitted. There is a variant however, called adaptive Huffman coding, in which the frequencies are assumed initially to be all the same, and then adjusted in the light of the message being coded to reflect the actual frequencies. Since the decoder has access to the same information as the encoder, it can be arranged that the decoder changes coding trees at the same point as the encoder does; thus they keep in step. One way to do that is to introduce extra ``control'' symbols to the alphabet, and use these to pass such information.
Modern coding schemes such as zip (or gzip or pkzip) are based on these ideas.




















Ben konumu en başından alakasız başlayıp sonradan anlam kazanan enteresan filmler gibi anlatıcam :D

David Albert Huffman (August 9, 1925 – October 7, 1999) was a pioneer in the computer science field.
Elektronik mühendisi
2.ci dünya savasından sonra çin ve japon sularındaki mayınları temizlemek için olusturulan radar sistemlerinde görev almıştır

Americaklı elktronik müehndisi ve matematikçi ölmeden önce gider ayak Claude Shannon (1916 – February 24, 2001) information theory DANIŞMA TEORİSİ diyebilirz


Müzikle ilgili bir kişinin yılda en az 100 kere duydugu ya da söyledigi, kısacası her gün yedigi EKMEK kelimesiyle karşılaştığı kadar sık karşılastıgı mp3 kelimesinin biraz derinleme hakettigini düşünüyorum ( tamamen benim öngörümdür (fırıncı :D )



Ses dosyasını sıkıştırırken belirli teknikler ve hileler kullanılır bunların başlıkları

Duyma eşiği
Insan kulagı her frekansı çizgi gibi eşit duyamaz.





Her kulağın duyma eşiği aritmetik olarak belirli değildir fakat c



Loudness Algılama : (başa dön)
SPL : Sound Peressure Level(Ses Basınç Seviyesi), dB : DeciBel, Hz : Hertz

Şekil 12
Fletcher - Munson Loudness Eğrileri.

Şekil 12'deki Fletcher - Munson eğrilerinde, insan kulağındaki çeşitli ses basınç seviyelerinde (desiBel ya da dB) Loudness ölçüleri görülmekte.
Referans noktası 1 kHz olarak seçilen bu sistemde, orta frekanslarda bas duyma eğilimi vardır fakat seslerin refeans noktasına göre daha yüksek duyulması için düşük ve yüksek frekanslarda en yüksek 'Ses Basınç Seviyeleri' (SPL : Sound Pressure Level) gerekir.

Grafikte görülen her bir eğri, yüksek frekanslarda eşdeğer olarak algılanan loudness SPL'lerini gösterir.Düşük dinleme seviyelerinde bas algılama düşer, müzikal enstrüman ve vokal seslersindeki karmaşık dalgaların algılanışı değişir.

Kaliteli ton kontrol katları ve ekolayzır (equalizer), müzik dinlerken ses seviyesinini değiştirmeden ton balansını dengeleyerek, tatmin seviyesini artırmaya yardım eder.















Bilindiği üzere günden güne dijital bir çöplüğe dönüşen yaşantımızda dosyalarımızın sıkıştırılmış olması bile bazen yetersiz gelebiliyor. Terabyte kapasitelerine erişmiş hard disc'ler dijital alan ihtiyacımıza bir nebze de olsa ferahlık sağlamış olsa bile dinmek bilmeyen bu alan ihtiyacımız sürekli artış eğilimi göstererek sınırları zorlar hale geliyor. Üstelik bu kötü duruma dosyalarımızı sıkıştırdığımız halde giriyor olmamız da üzerine ayrıca düşünülesi bir durum.
Ama her şeye rağmen sıkıştırılmış bir dosya hiç sıkışmamış bir dosyadan daha hayırlı olsa gerek.

Böylesi devasa boyutlara ulaşmış bilgi kümelerini ufaltma görevi elektrik akımını işleyerek mantıksal işlemleri yerine getirebilen bilgisayarlara düştüğü için biraz da olsa işimiz kolaylaşıyor. Biraz olsun diyoruz çünkü çok güçlü diye nitelendirebileceğimiz bilgisayarlar bile böylesi büyük veri dağları karşısında bir cüce gibi kalabiliyor. Bunun sebebi belki de kullandığımız tekniklerin zayıf kalması (yani insan aklının sınırlarını zorlamakta olması) olabilir. Belki de donanımsal işlem kapasitemiz de yetersiz olabilir. Ama gelin şimdi insan aklına bağımlı yöntemlerin ne derece veri şişkinliğine iyi geldiğine bir bakalım.
Dijital bilgileri çeşitli tekniklerle donanımlara hapsettiğimiz bilinen bir durum. Ama ne çeşitle olursa olsun her veri mutlaka ya "var" diye nitelendirebileceğimiz ya da "yok" diyebileceğimiz bir formda karşımıza çıkar. sadece "var" olmak dijital alemde "bit" olarak nitelendirdiğimiz olguya denk gelmekte. "yok" olması durumu da yine "bit" kapsamına girmektedir. "var" ve "yok" tan kasıt bir elektronik devreden akım geçmesi ve geçmemesi hadiselerine denk gelmektedir. Yani belli bir volt değerinin altında kalan gerilimler bilgisayara ulaştığında bu durum "0" değerini teşkil etmektedir. Yine aynı gerilim değerine eşit ve aşan gerilim değerleri ise "1" değerine eşit sayılır. İşte tüm dijital dünya bu iki değer üzerine inşaa edilmiştir. Bu inşaata verilerimiz de dahildir.
Ancak gündelik işlerimizi yürütebilmemiz için bir çok "1" ve "0" kombinasyonu gereksinimi ortaya çıkmıştır. Yani "akım geçer" veya "geçmez"lerin birleştirilerek daha farklı değerler üretilmesi şart olmuştur. Verilen şişmesi büyümesi ve dağlaşması durumu tam da bu aşamada kendini göstermektedir. Çünkü bit tekrarları artık boy göstermeye başlamıştır.
Sıkıştırma algoritmalarına geldiğimizde iki türe ayrıldıklarını görebiliyoruz. Bu ayrımdan ilki kayıplı sıkıştırma türleridir.
#-Kayıplı Sıkıştırma Teknikleri
Ana mantık insanların algı yeteneğini kullanmakta saklıdır. Bildiğiniz gibi insanoğlunun beyni çok karmaşık ve çok gelişmiş (en azından yer yüzündeki en gelişmiş) yapıdadır. Algılama yeteneklerimiz de çok gelişmiştir ve olayları gördüklerimizi kavrama yeteneğimiz bulunmaktadır ancak bunlara rağmen yine de çeşitli eksikliklerimiz vardır. Bu eksikliğimizden birisi de renk algılama yeteneğimizdir.
İnsan gözü birbirine oldukça yakın renkleri biraz da görüş alanı mesafemiz uzun ise ayırt edemez. Ancak yan yana gelen iki renk birbirinden frekans olarak uzak aralıklarda iseler farklı olduklarını ayırt edebiliriz. İşte bu durum renklerle ilişiği olan dijital konularda bize güzel bir olanak tanımaktadır.
Bir fotoğrafta bulunan renkler bir ön işlemden geçirilir ve renklerin birbirlerine ton olarak yakınlıkları hesaplanır. Ardından sıkıştırma oranı olarak kullanıcıdan alınan yüzdesel katsayı dikkate alınarak bu oranın kapsamına giren renklerin bir orta ton'u hesaplanır ve pixel'ler yeni hesaplanan bu yeni renk değerine sahip olurlar. Yani normalde farklı verilerle kodlanan iki farklı renk şimdi ortak kod'a sahip iki farklı pixel olmuş durumdadırlar. Ancak gözümüz bu iki pixelin aynı tonda mı yoksa birbirine çok yakın ama farklı tonlarda mı olduğu ayrımını yapamayacağı için, resimde bir kayıp olduğu kanısına varamayız. Her iki (veya daha fazla) pixel aynı veri ile ifade edilmeye başlandığı için elimizde bol miktarda birbirinin aynısı veri blokları oluşacaktır. Yukarıda anlattığımız adımlardan geçirilen fotoğraf birazdan aşağıda anlatacağımız huffman tekniğinden de geçirildikten sonra anlayacaksınız ki eskisine oranla daha ufak ama eskisiyle aynı işi gören bir dosya elimizde kalmış olacak. Video görüntülerin de fotoğraf karelerinden oluşturulduğunu düşünürsek bu sıkıştırma olanağından videolarda olumlu yönde nasiplenebilmişlerdir.
Yine ses dosyaları da aynı mantık üzerinden, yani insanın duyma organının eksikliklerinden faydalanarak bazı ses tınılarının silinmesiyle ufaltılabilmektedir. Bu durumun gündelik hayatımızda çok büyük başarıyla uygulanabilmiş örneği olarak mp3 algoritmasını gösterebiliriz.
Tüm bu tekniklerin bir ortak noktası vardır; veri kaybı meydana getirilerek sıkıştırma yapılmaktadır. Yani verilerimizin bir kısmını uygun tekniklerle sileriz ve dosyalarımız da doğal olarak ufaltılmış olurlar. Veri silme oranlarını arttırdıkça kalitede kayıplar oluştuğunun farkına varmaya başlarız. Yani algımız evet zayıftır bazı hallerde ama bir yere kadar. Zayıflık sınırlarımız aşılmaya başlandıkça artık kalite kayıpları görünür olmaya başlayacaktır.
Bir diğer alt başlığımız da kayıpsız sıkıştırma teknikleridir.
#-Kayıpsız Sıkıştırma Teknikleri
En ümit vaadeden sıkıştırma tekniği olarak gösterebiliriz ama bir o kadar da zor ve işlem kapasitesi gerektiren bir tekniktir. Bu yüzden bir tek anahtar kelime ile kayıpsız sıkıştırma algoritmasını ifade edebilecek bir imkan olmadığından gelin bu tekniğin işleyişini görmek için huffman algoritmasına bakalım.
Bu algoritmanın Huffman isimli bir üniversite gencinin bitirme tezi olduğunu belirtmek gerek.
İşlem Adımları;
• Elimizde bulunan veri kümesinde hangi karakter kaç defa kullanılmış sayılır (frekans tablosu) örn. a=33, Ú=75, Ã=12, ■=30 defa gibi..
• En az kullanılandan en çok kullanılana doğru bir sıralama izlenerek huffman ağacı (huffman tree) oluşturulur.
• Ağacın bir tarafına 0 diğer tarafına 1 ifadesi atanır. (rastgele olabilir)
• Karakterler artık yeniden kodlanmalıdırlar. Bunun için en tepedeki düğümden (resimdeki her kutucuk içinde ne yazarsa yazsın, bir düğümdür) en alttakine doğru ağacın dalları izlenerek (tıpkı bir labirentte dolanır gibi) inilir. Bu inme işlemi sırasında uğradığımız tüm dallardaki 1 ve 0 değerleri ulaştığımız karakterin yeni bit dizisidir.
• Sıkışmamış veri kümesinde bulunan karakterler, elde ettiğimiz bit kodlarıyla değiştirilir (replace). Örneğin huffman ağacına göre a harfinin temsili bitleri "010" ise veri kümemizde gördüğümüz her a harfi yerine "010" yazarız.
• Tüm karakterler temsili bitlerle değiştirildikten sonra elimizde "1001001010010011100111101"... şeklinde devam eden bir katar kalır.
• Bu bit katarının en başından 8 adet bit alınır ve normal sistemde denk düştüğü karakter tespit edilerek yine replace edilir. Örneğin "10010010" değerini huffman tablomuzdan elde etmiştik ve içerisinde belki de huffman tablosuna göre 3 karakter dahi olabilirdi. Ama biz bu 3 karakteri tek karakter olarak yeniden kodlayacağız. (Bildiğiniz gibi 1 ve 0'ları hangi kombinasyonda yazarsanız yazın 8 basamaklı olduğu sürece UTF-8'de tanımlanmış bir karaktere denk gelecektir (2^8))
• Sonuç olarak veri kümelerinde en fazla tekrar edilen karakterler en kısa (örn 1bit) en az tekrarlanan karakterlere ise en uzun(örn 7bit) bit değerleri atanmış olur. Eski düzende her karakter, UTF-8 ailesine dahil ise 8 bit ile temsil edilirken, artık çoğu karakter, 1bit ile dahi temsil edilebilme olanağı yakalamıştır.
Anlaşılacağı gibi huffman tekniği, gücünü tekrarı bol olan veriler üzerinde gösteriyor. Yukarıda bahsettiğimiz yakın tondaki pixellerin farklı verilerle temsili yerine aynı veriyle temsil edilmesi tekrarlı verileri çoğaltır ve artık top huffman algoritmasına atılmıştır.
Not: Sıkışan veriyi açabilmek için huffman tree's (huffman ağacının) bir yerlerde saklanması zorunludur. Genellikle sıkıştırılan veriyle birlikte dosya içinde tutulmaktadır.
Fark ettiğiniz gibi huffman ağacının da sıkıştırdığımız dosya içinde barınmasından dolayı fazladan yer harcanmasına katlanmak durumundayız. İşte bu yüzdendir ki kimi zaman sıkıştırılan dosyalar sıkışmamış halinden bile büyük olabiliyorlar. (ancak tekrarlı verilerin az olmasının daha büyük etkisi var). Başka algoritmalarla bu huffman tablosu da sıkıştırılmaktadır. Çeşitli programlarda kayıt esnasında "huffman tablosunu optimize et" seçeneği bu görevi yerine getiriyor.
Herkesin disk alanı bol olsun dilerim. yine görüşmek üzere...

 

Tarih: 13 Ocak 2010, 08:15 - İp: 78.***.**2.209
blink182
blink182 (üye)
İstanbul / Meraklı

Sırf bu konuya cevap yazmak için üye oldum konu hakkında sunum yaptıgım için araştırmam var eski mesaj olsada paylasayım belki birnin işine yarar


Ses formatları
Kbps (kilobit per sec.) 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 and 320 kbit/s, and the available sampling frequencies are 32, 44.1 and 48 kHz.[21]
burda durum anolog sesi dijitale veriye cevirirkenki mantıkla aynıdır TEKNİKLER dışındaki sıkıştırmanın ne kadarını (bilgisayara)(kodlamaya) bırakıcagımız yani noktaların yakınlık ları uzaklıkları ve burda Bit rate kodlanmış digital ses dosyasında çözümleme halinde de codeclere göre kalite olarak etki yapar


Ses formatları 3 dalda incelenir
Kayıpsız (ham) kompres edilmemşiş ses formatları (uncompressd)
Az kompres edilmiş ses formatları(lossless)
Kayıplı ses formatları ;(lossy) burda bahsettiğimiz kayıp ses kalite farkı ve frekans kayıplarıdır .orjinalin bozulmuşluk derecesidir.

Kayıpsız ham formatlar analog sinyalimizin belirli bit degerinde dijital kodalara cevirilmiş ilk halidir .Windows’ da bu Wave ya da Wav ken(Waveform Audio File Format) mac os’te (wav yada) aiff ‘tir (Audio Interchange File Format) (au ve raw da var ama kullanılmıyor)
Az kayıplı ses formatlarında ise başlıca Flac, monkey’s audio , wavpack,shorten,Tom’s lossless audio kompressor (TAK) gibi pekte kullanmadıgımız ilgimizi cekmeyen cünkü ham halinin 100 de 30 u ile 50 si arasında sıkıştırılmıştır. Yani 40 mb lık dosya ne küçük olarak 3mb yerine kullanilablir ,iş görür ne de 80mb e 90mb halinde orjinali varken tercih edilir.

Kayıplı ses formatları,nın başlıcaları MP3 (MPEG-1 Audio Layer 3), Vorbis, Musepack, AAC, ATRAC and lossy Windows Media Audio (WMA).

Ben Kayıplı ses formatlarının çalışma prensibini Müzikle ilgili bir kişinin yılda en az 100 kere duydugu ya da söyledigi, kısacası her gün yedigi EKMEK kelimesiyle karşılaştığı kadar sık karşılastıgı mp3 kelimesinin derinleme hakettigini düşündüğüm için mp3 üzerinden anlatıcam.

Kayıplı formatları Sıkıstrımada 5 teknik kullanılır

Bunların 2 ‘si algısal diğer 3 ‘ü ise kodlama –(mantıksal) olarak ayrılıyor.

Algısalın başında

1-Minimum duyum eşiği tekniği(minimum treshold)

Insan kulagı her frekansı çizgi gibi eşit duyamadığından bu teknikte

Fletcher – Munson kuralıyla , yarattıkları tablodanda görebilecegimiz gibi 2khz-5khz arasındaki duyum gücümüzle frekans aralıkları arasında ciddi fark vardır bu dengeler tablodanda görülücegi gibi db arttıkca yakınlasmaya baslar yani sesin basınc seviyesi arttıkca her frekansı duyabilmemiz eşitlenir . Referans noktası 1 kHz olarak seçilen bu sistemde, orta frekanslarda bas duyma eğilimi vardır fakat seslerin refeans noktasına göre daha yüksek duyulması için düşük ve yüksek frekanslarda en yüksek 'Ses Basınç Seviyeleri' (SPL : Sound Pressure Level) gerekir.
Düşük dinleme seviyelerinde bas algılama düşer, müzikal enstrüman ve vokal seslersindeki karmaşık dalgaların algılanışı değişir Kaliteli, ton kontrol katları ve ekolayzır (equalizer), müzik dinlerken ses seviyesinini değiştirmeden ton balansını dengeleyerek, tatmin seviyesini artırmaya yardım eder.

Loudness Algılama : (başa dön)
SPL : Sound Peressure Level(Ses Basınç Seviyesi), dB : DeciBel, Hz : Hertz

Kodlama sistemiyle belirli desibele gelmeden duyamadıgımız hzl er cıkarılır.

2-Maskeleme ( masking effect)
Basit olarak güçlü bir ses varken arkdaki güçsüz sesi bastırır tıp uçan kuşu güneşin önüne geldiğinde güneş ışınları yüzünden sadece parlaklık olarak algılayabilecegimiz gibi. Yani tüm sesleri kodlamamız gerekmez bu sıkıştırmanın temel mantığıdır.**ve çalan bir piyano kaydı baslmadan once calan kişinin nefes alısını duyarız ama calarken maskelenen bu nefesi ayrıstırmamımız için psiko akustik modelleme kullanılır. ((((((((((((((((((((((((((mpeg layer-3 ve aac encode için örneklenmiş ses verisini insan kulağının dinamik davranışı ve frekans cevabına göre modelleyen, 1/20 gibi sıkıştırma verimine sahip kompresör algoritması. veri işlem akışı şöyledir. sample alınan audio data biri 32-band 18-point mdct (modified discrete cossine transform) ve diğeri 1024 point fft (fast fourier transform) edilmek üzere iki işlem kanalına yollanır. mdct nin tatbik işine algoritmaya bağlı olarak pqf (polyphase quadrature filter) da denir. pqf de spektral genlik hassasiyeti sesin dinamik davranışına bağlı olarak uygun windowing ile en hassas şekilde hesaplanır. ve anti-alias butterfly tatbik edilir. iki işlem kanalından alından spektral değerler psychoacoustic modelde aşağıdaki kriterlere bağlı olarak değerlendirilir, bir kısım data elemine edilip (sıkıştırma burda oluyor) çıktı elde edilir. ))))))))))))))))))))))))))
)
- insan kulağının işitme bandı 20hz ~ 20khz arasıdır.
- işitmeye en hassas olan aralık 500hz ~ 5khz dir.
- dinamik ranj 96 ~ 120db dir.
- algılanabilir minimum spektral genlik frekansın bir fonksiyonudur. (absolute threshold of hearing)
- aynı anda birden çok frekansta sesi birbirilerinden ayırdedebilmek için belli eşikler vardır. yüksek spektral genlikli ses kendisine yakın bir bandı mask edebilir. mask edebilme ranjı frekans ın bir fonksiyonudur. (freaquency masking)
- yüksek genlikli bir ses işitildikten sonra insan kulağı belli bir süre işitebilme özelliğini yitirir. (temporal masking)

psikoakustik model, bu kritelere bağlı olarak; gereksiz datayı filtreler ve devamında spektral değerler quantize edilir. huffman encoding tatbik edilir ve nihayette istenen formata uygun bit stream(veri akışı) elde edilmek üzere uygun header lar (teknik terim oalrak = (üst bilgi) (referans bilgisi ) eklenerek çıkışa gönderilir.




3-The bytes reservoir ( byte havuzları)
Müzikteki bazı kısımlar müzikal kaliteyi degistirmeksizin oranlandırılamaz mp3; yakın frekanstaki bazı pasajlarda kısa byte rezervlerini rol yaparcasına ara bellek gibi kullanarak düşük kalitede kodlar

4-The joint stereo coding (ortak stereo kodlaması)
Normal stereo ses dosyalarında Sol ve Sağ kanallarda farklı sesler kayıtlı olmaktadır.Ancak bu seslerin büyük kısmı aynı olmaktadır.Bizim kulağımız farklı sesleri kanallarda algılayarak stereo algılamamızı sağlar.Joint stereoda ise bu kanallardan ( sol ve sağ ) birisi temel alınarak diğer kanala sadece aradaki farklı seslerin kayıt edilmesi temeli alınmaktadır.Mesela sağ kanal temel alındığında sol kanala sadece sağda kayıtlı olmayan sesler kayıt edilir.Ancak bu durumda da özellikle alçak frekanstaki sesler ( baslar ) özellikle kaybolmaktadır. Kısaca Normal stereo kayıttan kalite olarak düşüktür diyebiliriz.Şöyle basit bir şekil çizerek anltayım.

Normal Stereo:
Sol Kanal :
--- --- --- --- ---
Sağ Kanal :
---.+---.+---.+---

Joint Stereo:
Sol Kanal
--- --- --- --- ---
Sağ Kanal:
+ + + +

Burada kalite kaybı dikkat ederseniz normal stereo sağ kanaldaki . ile gösterdiğim düşük frekanslı seslerin yok olmasıdır.
Joint stereonun tek avantajı gerçek stereo ya göre biraz daha az yer tutmasıdır

5- huffman
#-Kayıpsız Sıkıştırma Teknikleri
En ümit vaadeden sıkıştırma tekniği olarak gösterebiliriz ama bir o kadar da zor ve işlem kapasitesi gerektiren bir tekniktir. Bu yüzden bir tek anahtar kelime ile kayıpsız sıkıştırma algoritmasını ifade edebilecek bir imkan olmadığından gelin bu tekniğin işleyişini görmek için huffman algoritmasına bakalım.
Bu algoritmanın Huffman isimli bir üniversite gencinin bitirme tezi olduğunu belirtmek gerek.
İşlem Adımları;
• Elimizde bulunan veri kümesinde hangi karakter kaç defa kullanılmış sayılır (frekans tablosu) örn. a=33, Ú=75, Ã=12, ■=30 defa gibi..
• En az kullanılandan en çok kullanılana doğru bir sıralama izlenerek huffman ağacı (huffman tree) oluşturulur.
• Ağacın bir tarafına 0 diğer tarafına 1 ifadesi atanır. (rastgele olabilir)
• Karakterler artık yeniden kodlanmalıdırlar. Bunun için en tepedeki düğümden (resimdeki her kutucuk içinde ne yazarsa yazsın, bir düğümdür) en alttakine doğru ağacın dalları izlenerek (tıpkı bir labirentte dolanır gibi) inilir. Bu inme işlemi sırasında uğradığımız tüm dallardaki 1 ve 0 değerleri ulaştığımız karakterin yeni bit dizisidir.
• Sıkışmamış veri kümesinde bulunan karakterler, elde ettiğimiz bit kodlarıyla değiştirilir (replace). Örneğin huffman ağacına göre a harfinin temsili bitleri "010" ise veri kümemizde gördüğümüz her a harfi yerine "010" yazarız.
• Tüm karakterler temsili bitlerle değiştirildikten sonra elimizde "1001001010010011100111101"... şeklinde devam eden bir katar kalır.
• Bu bit katarının en başından 8 adet bit alınır ve normal sistemde denk düştüğü karakter tespit edilerek yine replace edilir. Örneğin "10010010" değerini huffman tablomuzdan elde etmiştik ve içerisinde belki de huffman tablosuna göre 3 karakter dahi olabilirdi. Ama biz bu 3 karakteri tek karakter olarak yeniden kodlayacağız. (Bildiğiniz gibi 1 ve 0'ları hangi kombinasyonda yazarsanız yazın 8 basamaklı olduğu sürece UTF-8'de tanımlanmış bir karaktere denk gelecektir (2^8))
• Sonuç olarak veri kümelerinde en fazla tekrar edilen karakterler en kısa (örn 1bit) en az tekrarlanan karakterlere ise en uzun(örn 7bit) bit değerleri atanmış olur. Eski düzende her karakter, UTF-8 ailesine dahil ise 8 bit ile temsil edilirken, artık çoğu karakter, 1bit ile dahi temsil edilebilme olanağı yakalamıştır.
Anlaşılacağı gibi huffman tekniği, gücünü tekrarı bol olan veriler üzerinde gösteriyor. Yukarıda bahsettiğimiz yakın tondaki pixellerin farklı verilerle temsili yerine aynı veriyle temsil edilmesi tekrarlı verileri çoğaltır ve artık top huffman algoritmasına atılmıştır.
Not: Sıkışan veriyi açabilmek için huffman tree's (huffman ağacının) bir yerlerde saklanması zorunludur. Genellikle sıkıştırılan veriyle birlikte dosya içinde tutulmaktadır.
Fark ettiğiniz gibi huffman ağacının da sıkıştırdığımız dosya içinde barınmasından dolayı fazladan yer harcanmasına katlanmak durumundayız. İşte bu yüzdendir ki kimi zaman sıkıştırılan dosyalar sıkışmamış halinden bile büyük olabiliyorlar. (ancak tekrarlı verilerin az olmasının daha büyük etkisi var). Başka algoritmalarla bu huffman tablosu da sıkıştırılmaktadır. Çeşitli programlarda kayıt esnasında "huffman tablosunu optimize et" seçeneği bu görevi yerine getiriyor.




David Albert Huffman (August 9, 1925 – October 7, 1999) was a pioneer in the computer science field.
Elektronik mühendisi
2.ci dünya savasından sonra çin ve japon sularındaki mayınları temizlemek için olusturulan radar sistemlerinde görev almıştır

Americaklı elktronik müehndisi ve matematikçi ölmeden önce gider ayak Claude Shannon (1916 – February 24, 2001) information theory DANIŞMA TEORİSİ diyebilirz


Müzikle ilgili bir kişinin yılda en az 100 kere duydugu ya da söyledigi, kısacası her gün yedigi EKMEK kelimesiyle karşılaştığı kadar sık karşılastıgı mp3 kelimesinin biraz derinleme hakettigini düşünüyorum ( tamamen benim öngörümdür (fırıncı :D )




Huffman Codes
We discuss here an example in which the binary tree structure is of value. Consider the problem of coding (in binary) a message consisting of a string of characters. This is routinely done in a computer system; the code used almost universally at present is known as ASCII3.5, and allocates 8 bits to store each character. Thus A is represented using decimal 65, or 01000001 in binary etc. A more modern one which allows a much wider range of languages to be represented is Unicode, which allocates 16 bits to each character. This is used for example by the language Java, and is an extension of ASCII in that any ASCII character can be converted to Unicode by prefixing it with the zero byte. Although these codes are simple, there are obvious inefficiencies; clearly Unicode wastes at least half of the available space when storing plain ASCII.
Another source of inefficiency may lie in using the same number of bits to represent a common letter, like ``e'' as to represent ``q'' which occurs much less frequently. What if we permit character codes to have a variable length? An apparent difficulty is the need to have a neutral separator character to indicate the end of one character code, and so delimit it from the next. Say a code has the prefix property if no character code is the prefix, or start of the the code for another character. Clearly a code with the prefix property avoids this need to have additional separators, while permitting variable lengths. An obvious question is:
• do codes with the prefix property exist; and if so
• is there a ``best'' one to use?
In Table 3.1 we give an example of such a prefix code for a small alphabet, and contrast it with a simple fixed length code. It is clear that there are savings in this case which make it worth going further. We will see shortly why the example has the prefix property; in the meantime check that the string ``0000100111'' in Code 2 decodes uniquely as ``acbd''.

Table 3.1: Code 1 has fixed length code; Code 2 has the prefix property.
Symbol Code 1 Code 2
a 001 000
b 001 11
c 010 01
d 011 001
e 100 10


Consider now a binary tree, in which each leaf node is labelled with a symbol. We can assign a binary code to each symbol as follows: associate ``0'' with the path from a node to its left child, and ``1'' with the corresponding path to the right child. The code for a symbol is obtained by following the path from the root to the leaf node containing that symbol. The code necessarily has the prefix property; the tree property means that a leaf node cannot appear on a path to another leaf. Conversely it is clear how to associate a binary tree with a binary code having the prefix property; the code describes the shape of the tree down to the leaf associated with each symbol.
Of course a fixed length code necessarily has the prefix property. We show in Fig. 3.6 the binary trees corresponding to the two codes given in Table 3.1, thus incidentally demonstrating that the variable length code in the example does have the prefix property.


Figure 3.6: Binary trees representing the codes in Table 3.1

We now describe how to build the binary Huffman code for a given message. This code has the prefix property, and in a fairly useful sense turns out to be the best such code. We describe the code by building the corresponding binary tree. We start by analysing the message to find the frequencies of each symbol that occurs in it. Our basic strategy will be to assign short codes to symbols that occur frequently, while still insisting that the code has the prefix property. Our example will be build around the message
A SIMPLE STRING TO BE ENCODED USING A MINIMAL NUMBER OF BITS 3.6
The corresponding frequencies are given in Table 3.2; note that in this case, we choose to include the space symbol `` '', written in the table as .
Table 3.2: Symbol frequencies used to build a Huffman Code.
I A B D M E O C F G S T L R N P U
6 3 3 2 4 5 3 1 1 2 4 3 2 2 5 1 2 11


Now begin with a collection (a forest) of very simple trees, one for each symbol to be coded, with each consisting of a single node, labelled by that symbol, and the frequency with which it occurs in the string. The construction is recursive: at each stage the two trees which account for the least total frequency in their root nodes are selected, and used to produce a new binary tree. This has, as its children the two trees just chosen: the root is then labelled with the total frequency accounted for by both subtrees, and the original subtrees are removed from the forest. The construction continues in this way until only one tree remains; that is then the Huffman encoding tree.3.7


Figure 3.7: The Huffman encoding tree for the string ``A SIMPLE STRING TO BE ENCODED USING A MINIMAL NUMBER OF BITS''.
The resulting Huffman encoding tree for our example string is shown in Fig 3.7. By construction, the symbols only occur at leaf nodes, and so the corresponding code has the prefix property. In the diagram, these leaf nodes still carry the frequencies used in their construction; formally once the tree has been built, the symbols which are shown below the leaves should replace the frequencies at the nodes. The right-most node is the symbol . As already described, the character encoding is the read by traversing from the root to each leaf, recording ``0'' if the left hand branch is traversed, and ``1'' if the right hand one is taken. Thus ``S'' is encoded as ``0100'', while is ``11'' and ``C'' is ``000110''.
Definition 3.6 Let T be a tree with weigths w1,...wn at its leaf nodes. The weighted leaf path length L(T) of T is
L(T) = liwi
(3.2)


where li is the path length; the length of the path from the root to node i.
We are interested in the case when the tree is an encoding tree and the weights are the frequency of occurrence of the symbols associated with the leaf nodes. In that case L(T) is the length of the message after encoding, since at node i, the character occurs a total of wi times, and requires li bits to encode it. We now show that a Huffman encoding tree gives the best encoding. Say that a binary tree T is optimal if L(T) has its minimum value over all possible trees with the same set of leaf nodes.
Theorem 3.7 A Huffman tree is optimal.
Proof. We start with an apparently simple result.
Lemma 3.8 Suppose that nodes with weights wi and wj satisfy wi li, showing that we must have wi = wj. There is thus no loss if we interchange the labels i and j. We can continue to do this until we achieve the required consistent labelling of the corresponding node lengths.
We can now show that a Huffman tree is optimal. This argument was adapted from Gersting (1993, Page 402). We establish the result by induction on the number n of leaf nodes in the tree. The result is clear for n = 1.
Next note that in any optimal binary tree, there are no nodes with single children -- replacing the child by the parent produces a shorter weighted external path length.
Consider now a set of n + 1 weights wi with n + 1 2, which by Lemma 3.9 we suppose to be ordered such that w1 w2 ... wn + 1 in such a way that the corresponding paths lengths satisfy l1 l2 ... ln. Let Tn + 1 be an optimal tree for these weights with weighted leaf path length L(Tn + 1). By our choice of labelling w1 occurs on the longest path, as does its sibling wj; since they are siblings, l1 = lj. Since li l2 lj, we have l1 = l2. Thus the new tree T'n + 1 obtained by interchanging nodes 2 and j have the same weighted external path length.
Next construct a new tree Tn with a new ``leaf'' node w = w1 + w2 by combining w1 and w2 from T'n + 1 to give a tree with n leaf nodes. Let Hn be a Huffman tree on these nodes, and note that, by construction the tree obtained by replacing the single node w in Hn by the nodes w1 and w2, the two smallest weights, is a Huffman tree Hn + 1. By induction, we have L(Tn) L(Hn), since they have the same leaf nodes. We now calculate:

Thus L(Tn + 1) L(Hn + 1). But Tn + 1 was optimal, so this inequality is an equality and Hn + 1 is optimal, as required.
Remark 3.10 The above proof has to be done a little carefully. The (complete) binary tree having nodes with weights 1, 3, 2 and 2 is not a Huffman tree, but is optimal; however interchanging the second and third nodes does not affect the weighted leaf path length and does give a Huffman Tree. In the proof, this interchage is the step of creating T'n + 1 from Tn + 1
A little more can be said, centred round the need to have the coding tree available when decoding. Of course, for ``general purpose'' language, the letter frequencies are well known, and could be assumed. In general, the need to transmit the coding tree as well as the message reduces the effectiveness of the method a little. And it can be impractical to preprocess a message to get the exact frequencies of the symbols before any of the message is transmitted. There is a variant however, called adaptive Huffman coding, in which the frequencies are assumed initially to be all the same, and then adjusted in the light of the message being coded to reflect the actual frequencies. Since the decoder has access to the same information as the encoder, it can be arranged that the decoder changes coding trees at the same point as the encoder does; thus they keep in step. One way to do that is to introduce extra ``control'' symbols to the alphabet, and use these to pass such information.
Modern coding schemes such as zip (or gzip or pkzip) are based on these ideas.




















Ben konumu en başından alakasız başlayıp sonradan anlam kazanan enteresan filmler gibi anlatıcam :D

David Albert Huffman (August 9, 1925 – October 7, 1999) was a pioneer in the computer science field.
Elektronik mühendisi
2.ci dünya savasından sonra çin ve japon sularındaki mayınları temizlemek için olusturulan radar sistemlerinde görev almıştır

Americaklı elktronik müehndisi ve matematikçi ölmeden önce gider ayak Claude Shannon (1916 – February 24, 2001) information theory DANIŞMA TEORİSİ diyebilirz


Müzikle ilgili bir kişinin yılda en az 100 kere duydugu ya da söyledigi, kısacası her gün yedigi EKMEK kelimesiyle karşılaştığı kadar sık karşılastıgı mp3 kelimesinin biraz derinleme hakettigini düşünüyorum ( tamamen benim öngörümdür (fırıncı :D )



Ses dosyasını sıkıştırırken belirli teknikler ve hileler kullanılır bunların başlıkları

Duyma eşiği
Insan kulagı her frekansı çizgi gibi eşit duyamaz.





Her kulağın duyma eşiği aritmetik olarak belirli değildir fakat c



Loudness Algılama : (başa dön)
SPL : Sound Peressure Level(Ses Basınç Seviyesi), dB : DeciBel, Hz : Hertz

Şekil 12
Fletcher - Munson Loudness Eğrileri.

Şekil 12'deki Fletcher - Munson eğrilerinde, insan kulağındaki çeşitli ses basınç seviyelerinde (desiBel ya da dB) Loudness ölçüleri görülmekte.
Referans noktası 1 kHz olarak seçilen bu sistemde, orta frekanslarda bas duyma eğilimi vardır fakat seslerin refeans noktasına göre daha yüksek duyulması için düşük ve yüksek frekanslarda en yüksek 'Ses Basınç Seviyeleri' (SPL : Sound Pressure Level) gerekir.

Grafikte görülen her bir eğri, yüksek frekanslarda eşdeğer olarak algılanan loudness SPL'lerini gösterir.Düşük dinleme seviyelerinde bas algılama düşer, müzikal enstrüman ve vokal seslersindeki karmaşık dalgaların algılanışı değişir.

Kaliteli ton kontrol katları ve ekolayzır (equalizer), müzik dinlerken ses seviyesinini değiştirmeden ton balansını dengeleyerek, tatmin seviyesini artırmaya yardım eder.















Bilindiği üzere günden güne dijital bir çöplüğe dönüşen yaşantımızda dosyalarımızın sıkıştırılmış olması bile bazen yetersiz gelebiliyor. Terabyte kapasitelerine erişmiş hard disc'ler dijital alan ihtiyacımıza bir nebze de olsa ferahlık sağlamış olsa bile dinmek bilmeyen bu alan ihtiyacımız sürekli artış eğilimi göstererek sınırları zorlar hale geliyor. Üstelik bu kötü duruma dosyalarımızı sıkıştırdığımız halde giriyor olmamız da üzerine ayrıca düşünülesi bir durum.
Ama her şeye rağmen sıkıştırılmış bir dosya hiç sıkışmamış bir dosyadan daha hayırlı olsa gerek.

Böylesi devasa boyutlara ulaşmış bilgi kümelerini ufaltma görevi elektrik akımını işleyerek mantıksal işlemleri yerine getirebilen bilgisayarlara düştüğü için biraz da olsa işimiz kolaylaşıyor. Biraz olsun diyoruz çünkü çok güçlü diye nitelendirebileceğimiz bilgisayarlar bile böylesi büyük veri dağları karşısında bir cüce gibi kalabiliyor. Bunun sebebi belki de kullandığımız tekniklerin zayıf kalması (yani insan aklının sınırlarını zorlamakta olması) olabilir. Belki de donanımsal işlem kapasitemiz de yetersiz olabilir. Ama gelin şimdi insan aklına bağımlı yöntemlerin ne derece veri şişkinliğine iyi geldiğine bir bakalım.
Dijital bilgileri çeşitli tekniklerle donanımlara hapsettiğimiz bilinen bir durum. Ama ne çeşitle olursa olsun her veri mutlaka ya "var" diye nitelendirebileceğimiz ya da "yok" diyebileceğimiz bir formda karşımıza çıkar. sadece "var" olmak dijital alemde "bit" olarak nitelendirdiğimiz olguya denk gelmekte. "yok" olması durumu da yine "bit" kapsamına girmektedir. "var" ve "yok" tan kasıt bir elektronik devreden akım geçmesi ve geçmemesi hadiselerine denk gelmektedir. Yani belli bir volt değerinin altında kalan gerilimler bilgisayara ulaştığında bu durum "0" değerini teşkil etmektedir. Yine aynı gerilim değerine eşit ve aşan gerilim değerleri ise "1" değerine eşit sayılır. İşte tüm dijital dünya bu iki değer üzerine inşaa edilmiştir. Bu inşaata verilerimiz de dahildir.
Ancak gündelik işlerimizi yürütebilmemiz için bir çok "1" ve "0" kombinasyonu gereksinimi ortaya çıkmıştır. Yani "akım geçer" veya "geçmez"lerin birleştirilerek daha farklı değerler üretilmesi şart olmuştur. Verilen şişmesi büyümesi ve dağlaşması durumu tam da bu aşamada kendini göstermektedir. Çünkü bit tekrarları artık boy göstermeye başlamıştır.
Sıkıştırma algoritmalarına geldiğimizde iki türe ayrıldıklarını görebiliyoruz. Bu ayrımdan ilki kayıplı sıkıştırma türleridir.
#-Kayıplı Sıkıştırma Teknikleri
Ana mantık insanların algı yeteneğini kullanmakta saklıdır. Bildiğiniz gibi insanoğlunun beyni çok karmaşık ve çok gelişmiş (en azından yer yüzündeki en gelişmiş) yapıdadır. Algılama yeteneklerimiz de çok gelişmiştir ve olayları gördüklerimizi kavrama yeteneğimiz bulunmaktadır ancak bunlara rağmen yine de çeşitli eksikliklerimiz vardır. Bu eksikliğimizden birisi de renk algılama yeteneğimizdir.
İnsan gözü birbirine oldukça yakın renkleri biraz da görüş alanı mesafemiz uzun ise ayırt edemez. Ancak yan yana gelen iki renk birbirinden frekans olarak uzak aralıklarda iseler farklı olduklarını ayırt edebiliriz. İşte bu durum renklerle ilişiği olan dijital konularda bize güzel bir olanak tanımaktadır.
Bir fotoğrafta bulunan renkler bir ön işlemden geçirilir ve renklerin birbirlerine ton olarak yakınlıkları hesaplanır. Ardından sıkıştırma oranı olarak kullanıcıdan alınan yüzdesel katsayı dikkate alınarak bu oranın kapsamına giren renklerin bir orta ton'u hesaplanır ve pixel'ler yeni hesaplanan bu yeni renk değerine sahip olurlar. Yani normalde farklı verilerle kodlanan iki farklı renk şimdi ortak kod'a sahip iki farklı pixel olmuş durumdadırlar. Ancak gözümüz bu iki pixelin aynı tonda mı yoksa birbirine çok yakın ama farklı tonlarda mı olduğu ayrımını yapamayacağı için, resimde bir kayıp olduğu kanısına varamayız. Her iki (veya daha fazla) pixel aynı veri ile ifade edilmeye başlandığı için elimizde bol miktarda birbirinin aynısı veri blokları oluşacaktır. Yukarıda anlattığımız adımlardan geçirilen fotoğraf birazdan aşağıda anlatacağımız huffman tekniğinden de geçirildikten sonra anlayacaksınız ki eskisine oranla daha ufak ama eskisiyle aynı işi gören bir dosya elimizde kalmış olacak. Video görüntülerin de fotoğraf karelerinden oluşturulduğunu düşünürsek bu sıkıştırma olanağından videolarda olumlu yönde nasiplenebilmişlerdir.
Yine ses dosyaları da aynı mantık üzerinden, yani insanın duyma organının eksikliklerinden faydalanarak bazı ses tınılarının silinmesiyle ufaltılabilmektedir. Bu durumun gündelik hayatımızda çok büyük başarıyla uygulanabilmiş örneği olarak mp3 algoritmasını gösterebiliriz.
Tüm bu tekniklerin bir ortak noktası vardır; veri kaybı meydana getirilerek sıkıştırma yapılmaktadır. Yani verilerimizin bir kısmını uygun tekniklerle sileriz ve dosyalarımız da doğal olarak ufaltılmış olurlar. Veri silme oranlarını arttırdıkça kalitede kayıplar oluştuğunun farkına varmaya başlarız. Yani algımız evet zayıftır bazı hallerde ama bir yere kadar. Zayıflık sınırlarımız aşılmaya başlandıkça artık kalite kayıpları görünür olmaya başlayacaktır.
Bir diğer alt başlığımız da kayıpsız sıkıştırma teknikleridir.
#-Kayıpsız Sıkıştırma Teknikleri
En ümit vaadeden sıkıştırma tekniği olarak gösterebiliriz ama bir o kadar da zor ve işlem kapasitesi gerektiren bir tekniktir. Bu yüzden bir tek anahtar kelime ile kayıpsız sıkıştırma algoritmasını ifade edebilecek bir imkan olmadığından gelin bu tekniğin işleyişini görmek için huffman algoritmasına bakalım.
Bu algoritmanın Huffman isimli bir üniversite gencinin bitirme tezi olduğunu belirtmek gerek.
İşlem Adımları;
• Elimizde bulunan veri kümesinde hangi karakter kaç defa kullanılmış sayılır (frekans tablosu) örn. a=33, Ú=75, Ã=12, ■=30 defa gibi..
• En az kullanılandan en çok kullanılana doğru bir sıralama izlenerek huffman ağacı (huffman tree) oluşturulur.
• Ağacın bir tarafına 0 diğer tarafına 1 ifadesi atanır. (rastgele olabilir)
• Karakterler artık yeniden kodlanmalıdırlar. Bunun için en tepedeki düğümden (resimdeki her kutucuk içinde ne yazarsa yazsın, bir düğümdür) en alttakine doğru ağacın dalları izlenerek (tıpkı bir labirentte dolanır gibi) inilir. Bu inme işlemi sırasında uğradığımız tüm dallardaki 1 ve 0 değerleri ulaştığımız karakterin yeni bit dizisidir.
• Sıkışmamış veri kümesinde bulunan karakterler, elde ettiğimiz bit kodlarıyla değiştirilir (replace). Örneğin huffman ağacına göre a harfinin temsili bitleri "010" ise veri kümemizde gördüğümüz her a harfi yerine "010" yazarız.
• Tüm karakterler temsili bitlerle değiştirildikten sonra elimizde "1001001010010011100111101"... şeklinde devam eden bir katar kalır.
• Bu bit katarının en başından 8 adet bit alınır ve normal sistemde denk düştüğü karakter tespit edilerek yine replace edilir. Örneğin "10010010" değerini huffman tablomuzdan elde etmiştik ve içerisinde belki de huffman tablosuna göre 3 karakter dahi olabilirdi. Ama biz bu 3 karakteri tek karakter olarak yeniden kodlayacağız. (Bildiğiniz gibi 1 ve 0'ları hangi kombinasyonda yazarsanız yazın 8 basamaklı olduğu sürece UTF-8'de tanımlanmış bir karaktere denk gelecektir (2^8))
• Sonuç olarak veri kümelerinde en fazla tekrar edilen karakterler en kısa (örn 1bit) en az tekrarlanan karakterlere ise en uzun(örn 7bit) bit değerleri atanmış olur. Eski düzende her karakter, UTF-8 ailesine dahil ise 8 bit ile temsil edilirken, artık çoğu karakter, 1bit ile dahi temsil edilebilme olanağı yakalamıştır.
Anlaşılacağı gibi huffman tekniği, gücünü tekrarı bol olan veriler üzerinde gösteriyor. Yukarıda bahsettiğimiz yakın tondaki pixellerin farklı verilerle temsili yerine aynı veriyle temsil edilmesi tekrarlı verileri çoğaltır ve artık top huffman algoritmasına atılmıştır.
Not: Sıkışan veriyi açabilmek için huffman tree's (huffman ağacının) bir yerlerde saklanması zorunludur. Genellikle sıkıştırılan veriyle birlikte dosya içinde tutulmaktadır.
Fark ettiğiniz gibi huffman ağacının da sıkıştırdığımız dosya içinde barınmasından dolayı fazladan yer harcanmasına katlanmak durumundayız. İşte bu yüzdendir ki kimi zaman sıkıştırılan dosyalar sıkışmamış halinden bile büyük olabiliyorlar. (ancak tekrarlı verilerin az olmasının daha büyük etkisi var). Başka algoritmalarla bu huffman tablosu da sıkıştırılmaktadır. Çeşitli programlarda kayıt esnasında "huffman tablosunu optimize et" seçeneği bu görevi yerine getiriyor.
Herkesin disk alanı bol olsun dilerim. yine görüşmek üzere...

 

Tarih: 13 Ocak 2010, 08:16 - İp: 78.***.**2.209
  • 1