Compresión de datos
| Compresión de datos | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||
| |||||||||||
| |||||||||||
| Wikidata C:Commons | |||||||||||
A compresión de datos é o proceso de representar unha información mediante unha cantidade menor de datos ca na súa representación orixinal. Un sistema de compresión consta dun codificador, que transforma os datos de entrada nunha representación comprimida, e dun descodificador, que reconstrúe a información a partir dela. A compresión emprégase para reducir o espazo de almacenamento e a taxa de transmisión, mais introduce custos de cálculo, memoria e latencia que dependen do método utilizado.[1]
Distínguense dous réximes principais. Na compresión sen perda, a descodificación recupera exactamente os datos iniciais; é necesaria para texto, programas, bases de datos e calquera información na que un cambio dun só símbolo poida alterar o significado. Na compresión con perda, o resultado é unha aproximación controlada do orixinal, o que permite reducións maiores en imaxes, son ou vídeo cando se acepta certa distorsión.[2]
Os límites fundamentais da compresión proceden da teoría da información. A entropía dunha fonte mide a taxa media mínima á que pode representarse sen perda baixo un modelo probabilístico, mentres que a teoría taxa-distorsión caracteriza o compromiso óptimo entre o número de bits e o erro permitido na reconstrución.[3][4]
Historia
[editar | editar a fonte]
En 1948, Claude Shannon formulou a entropía e os teoremas de codificación de fonte que estableceron límites matemáticos para a representación eficiente da información.[3] En 1952, David Huffman publicou un método para construír códigos de prefixo de redundancia mínima.[5]
Jacob Ziv e Abraham Lempel presentaron en 1977 e 1978 algoritmos universais baseados en coincidencias e dicionarios incrementais, que deron lugar a numerosas variantes e formatos de uso xeral.[6][7] A codificación aritmética proporcionou outra vía para aproximarse á entropía sen asignar necesariamente un número enteiro de bits a cada símbolo.[8]
Desde finais do século XX, a normalización de formatos de imaxe, son e vídeo combinou estas ideas con predición, transformacións, cuantización e modelos perceptivos. Os estándares especifican a interoperabilidade do fluxo, mais a selección de parámetros e as decisións do codificador continuaron evolucionando de maneira independente.[9][10]
Modelo básico
[editar | editar a fonte]Codificador e descodificador
[editar | editar a fonte]Sexa o conxunto de mensaxes posibles e o conxunto das cadeas binarias finitas. Un codificador pode modelarse mediante unha aplicación
e o descodificador mediante
Nun código sen perda esíxese para toda mensaxe admisible . En consecuencia, debe ser inxectivo. Nun código con perda, pode diferir de , e a calidade mídese mediante unha función de distorsión .[4]
Non é posible que un compresor sen perda reduza todas as cadeas binarias de lonxitude . Hai cadeas desa lonxitude, pero só cadeas de lonxitude menor ca . Polo principio do pombal, se algunhas entradas se representan con menos bits, outras deben manter o tamaño ou medrar. A utilidade práctica da compresión depende, pois, de que os datos reais presenten regularidades ou de que o seu modelo asigne maior probabilidade a unhas mensaxes ca a outras.[4]
Redundancia e irrelevancia
[editar | editar a fonte]Os métodos sen perda eliminan redundancia: repeticións, predicibilidade estatística, correlación entre mostras ou estruturas que poden reconstruírse. Por exemplo, unha secuencia longa do mesmo símbolo pode substituírse polo símbolo e o número de repeticións, e unha mostra de son pode predicirse aproximadamente a partir das anteriores codificando só o residuo da predición.[1][2]
Os métodos con perda tamén eliminan información considerada irrelevante para unha finalidade ou un modelo perceptivo. Un codificador de imaxe pode descartar precisión en coeficientes de alta frecuencia e un codificador de son pode asignar menos bits a compoñentes pouco perceptibles. Esta irrelevancia non é absoluta: depende da tarefa, do dispositivo, da distancia de observación e do observador, polo que unha configuración axeitada para consumo audiovisual pode non selo para análise científica, diagnóstico ou conservación documental.[1]
Medidas de rendemento
[editar | editar a fonte]
Se é o tamaño orixinal e o tamaño comprimido, a razón de compresión pode definirse como
Un valor indica que a representación orixinal ocupa catro veces máis. A fracción de espazo aforrada é
Tamén se empregan a taxa de bits, expresada en bits por segundo, e taxas normalizadas como bits por símbolo, bits por mostra ou bits por píxel. Cómpre indicar sempre se o tamaño inclúe cabeceiras, metadatos, dicionarios e índices, pois eses elementos poden dominar o resultado en ficheiros pequenos.[1]
Na compresión con perda cómpre medir tamén a distorsión. Para datos numéricos, unha medida frecuente é o erro cadrático medio
En imaxes úsase a miúdo a relación sinal-ruído de pico (PSNR),
onde é o maior valor posible dunha mostra. Nin o erro cadrático medio nin a PSNR reproducen por completo a calidade percibida; dúas reconstrucións coa mesma medida poden presentar artefactos moi diferentes.[1]
Outros criterios de enxeñaría son o tempo de codificación e descodificación, o consumo de memoria e enerxía, a latencia, a posibilidade de acceso aleatorio, a capacidade de procesamento en fluxo e a tolerancia a erros. Non existe, polo tanto, un único algoritmo óptimo para todos os tipos de datos e condicións de uso.[1]
Fundamentos da teoría da información
[editar | editar a fonte]Entropía e límite sen perda
[editar | editar a fonte]Para unha variable aleatoria discreta con resultados e probabilidades , a entropía de Shannon é
Un resultado de probabilidade cero non contribúe á suma. A entropía exprésase en bits por símbolo e aumenta cando a fonte é menos predicible. Para códigos binarios de prefixo, a desigualdade de Kraft relaciona as lonxitudes das palabras código coa existencia dun código descodificable de maneira instantánea. Se as probabilidades son coñecidas, a lonxitude media dun código de Huffman satisfai
O teorema de codificación de fonte de Shannon mostra que, ao codificar bloques longos dunha fonte estacionaria, a taxa media pode achegarse á entropía, pero non baixar dela mantendo unha probabilidade de erro arbitrariamente pequena.[3][4]
Para unha fonte binaria con probabilidade dun dos símbolos,
Esta función vale cero para e , e alcanza un bit en . Así, a mera presenza de dous símbolos non determina o límite de compresión: importa a súa distribución e, en fontes con memoria, tamén a dependencia entre símbolos sucesivos.[4]
Compromiso taxa-distorsión
[editar | editar a fonte]Na compresión con perda, a función taxa-distorsión é a menor taxa media coa que unha fonte pode representarse mantendo unha distorsión esperada non superior a . Formalmente,
onde é a información mutua entre a fonte e a reconstrución. A función é non crecente e convexa: admitir máis distorsión non require unha taxa maior. Trátase dun límite teórico; un códec concreto pode quedar por riba debido ás restricións do algoritmo, á lonxitude finita dos bloques e ao custo da información auxiliar.[4]
Compresión sen perda
[editar | editar a fonte]Codificación por repeticións
[editar | editar a fonte]A codificación por lonxitude de series (RLE) substitúe cada serie de símbolos iguais por un par formado polo símbolo e a súa lonxitude. É eficaz en datos con series longas, como máscaras binarias ou determinadas imaxes sintéticas, pero pode aumentar o tamaño cando os símbolos cambian con frecuencia. Por iso adoita combinarse con transformacións que agrupan valores semellantes ou reservarse para rexións nas que resulta vantaxosa.[1]
Códigos de entropía
[editar | editar a fonte]A codificación de Huffman constrúe un código de prefixo combinando repetidamente os dous símbolos ou nodos de menor probabilidade. Os símbolos frecuentes reciben palabras curtas e os infrecuentes, palabras máis longas. O algoritmo produce un código de prefixo de lonxitude media mínima entre os que asignan a cada símbolo un número enteiro de bits.[5]

A codificación aritmética representa unha secuencia completa mediante un subintervalo do intervalo . Cada símbolo subdivide o intervalo actual segundo o modelo probabilístico. A lonxitude do número necesario para identificar o intervalo pode achegarse á información da secuencia sen a restrición dun número enteiro de bits por símbolo, aínda que unha implementación real debe controlar a precisión finita, o reescalado e o modelo de probabilidades.[8]
Os códigos de entropía non crean por si sós un bo modelo. Se as probabilidades estimadas non se corresponden cos datos, as palabras ou intervalos asignados poden ser ineficientes. Os compresores adaptativos actualizan o modelo durante a codificación para non ter que transmitir unha táboa completa, pero codificador e descodificador deben realizar exactamente as mesmas actualizacións.[1]
Métodos de dicionario
[editar | editar a fonte]Os algoritmos de Lempel e Ziv substitúen fragmentos repetidos por referencias. LZ77 mantén unha xanela sobre os datos xa procesados e describe unha coincidencia mediante a distancia ata unha aparición anterior e a súa lonxitude. LZ78 crea un dicionario incremental de frases e emite referencias ás entradas xa coñecidas.[6][7]
Estes métodos son universais en sentidos matemáticos precisos: poden aproximar a taxa alcanzable para clases amplas de fontes sen coñecer previamente a súa distribución. Iso non significa que compriman por igual calquera ficheiro nin que unha implementación concreta alcance o límite en bloques pequenos.[6][4]
O formato DEFLATE combina unha procura de coincidencias baseada en LZ77 con códigos de Huffman. Divide o fluxo en bloques que poden estar sen comprimir ou usar táboas de Huffman fixas ou transmitidas no propio bloque. A especificación permite procesar fluxos arbitrariamente longos cunha cantidade acoutada de memoria intermedia.[11]
Transformacións e modelos de contexto
[editar | editar a fonte]Algunhas técnicas reorganizan os datos antes da codificación. A transformada de Burrows–Wheeler permuta reversiblemente un bloque para agrupar símbolos con contextos semellantes; adoita combinarse cunha transformación move-to-front, RLE e un código de entropía. A transformación non reduce por si soa o número de bits.[12]
Os modelos de contexto estiman a probabilidade dun símbolo a partir dos símbolos anteriores ou doutra información lateral. Un contexto máis longo pode capturar máis estrutura, pero require máis memoria e pode producir estimacións pouco fiables cando hai poucos datos. Os sistemas prácticos combinan contextos, suavizado e adaptación para equilibrar precisión e complexidade.[1]
Compresión con perda
[editar | editar a fonte]Cuantización
[editar | editar a fonte]
A cuantización substitúe un conxunto amplo ou continuo de valores por un número finito de niveis. Nun cuantizador escalar, cada mostra procésase individualmente; nun cuantizador vectorial, codifícanse conxuntamente bloques de mostras. O paso de cuantización controla de maneira directa o compromiso entre precisión e taxa: niveis máis separados requiren menos información, pero aumentan o erro de reconstrución.[1]
Predición e codificación por transformadas
[editar | editar a fonte]Na codificación preditiva calcúlase unha estimación dunha mostra a partir doutras xa coñecidas e codifícase o residuo. Se a predición é boa, o residuo presenta menor varianza e unha distribución máis concentrada. A predición pode empregarse sen perda, cando o residuo se conserva exactamente, ou con perda, cando se cuantiza.[1][2]
Na codificación por transformadas, un bloque de mostras exprésase nunha base na que a enerxía ou a información relevante se concentra en poucos coeficientes. Transformadas como a transformada discreta do coseno e as transformadas de ondículas permiten cuantizar con distinta precisión as compoñentes. A transformada é reversible salvo polos arredondamentos; a perda principal prodúcese na cuantización dos coeficientes.[1]
O estándar JPEG para imaxe continua inclúe procesos baseados na transformada discreta do coseno, cuantización e codificación de entropía, ademais dun modo sen perda distinto. A conformidade co estándar determina o fluxo codificado e a descodificación, pero non garante que todos os codificadores produzan a mesma calidade nin a mesma razón de compresión.[9]
Modelos perceptivos
[editar | editar a fonte]Os codificadores de imaxe, son e vídeo poden explotar propiedades da percepción humana, como a distinta sensibilidade ás frecuencias, ao contraste ou aos erros enmascarados por outros estímulos. Estes modelos permiten concentrar bits onde a distorsión resulta máis visible. Porén, unha métrica perceptiva representa unha aproximación e pode non predicir a calidade para todos os contidos, persoas ou usos.[1]
En vídeo, ademais da redundancia espacial de cada fotograma, aprovéitase a redundancia temporal mediante predición entre fotogramas e compensación de movemento. Os estándares híbridos combinan predición, transformación, cuantización, filtros e codificación de entropía. A Recomendación H.264/AVC define a sintaxe e os procesos de descodificación, mentres deixa marxe para que os codificadores escollan modos e parámetros.[10]
Formatos e estándares
[editar | editar a fonte]Un algoritmo describe un procedemento de compresión; un formato define como se organizan os bits, metadatos e parámetros; e un contedor pode reunir fluxos codificados, índices e información adicional. Un mesmo formato pode permitir varios métodos e un contedor pode transportar diferentes códecs. Confundir estes niveis leva, por exemplo, a atribuír ao contedor unha propiedade que depende realmente do códec seleccionado.[1]
| Formato ou estándar | Tipo habitual | Datos | Técnicas principais |
|---|---|---|---|
| DEFLATE | Sen perda | Uso xeral | Coincidencias LZ77 e códigos de Huffman[11] |
| PNG | Sen perda | Imaxe rasterizada | Filtros por liña e DEFLATE[13] |
| JPEG | Xeralmente con perda; admite un proceso sen perda | Imaxe continua | Predición ou transformada, cuantización e codificación de entropía[9] |
| FLAC | Sen perda | Son PCM | Descorrelación entre canles, predición e codificación do residuo[2] |
| H.264/AVC | Habitualmente con perda | Vídeo | Predición espacial e temporal, transformación, cuantización e codificación de
entropía[10] |
As extensións de ficheiro non abondan para determinar o método nin os seus parámetros. Ademais, a mesma familia pode conter perfís, niveis e opcións con requisitos distintos. Para interoperabilidade e conservación cómpre identificar a versión da especificación e conservar os metadatos necesarios para a descodificación.[9][13]
Deseño e elección dun compresor
[editar | editar a fonte]O rendemento depende do tipo de datos e do obxectivo. Un compresor xeral baseado en dicionario pode funcionar ben en texto e programas, mentres que un códec especializado aproveita modelos de sinal, como a correlación entre mostras de son ou entre fotogramas. Comprimir de novo datos xa comprimidos adoita ofrecer pouca mellora e pode aumentar o tamaño pola información de control. Se a segunda etapa é con perda, tamén pode acumular artefactos.[1]
Os bloques grandes permiten captar dependencias afastadas e amortizar cabeceiras, pero requiren máis memoria, aumentan a latencia e dificultan o acceso aleatorio. Os bloques independentes, puntos de reinicio e índices melloran a busca e a recuperación tras un erro a cambio dunha taxa maior. En sistemas en tempo real, a velocidade e a latencia de descodificación poden importar máis ca un pequeno incremento da razón de compresión.[1][2]
Unha comparación reproducible debe especificar o corpus, as versións dos programas, os parámetros, o equipamento, o número de execucións e as métricas. Escoller só ficheiros favorables ou comparar configuracións con calidades distintas produce conclusións enganosas. Para métodos con perda débese presentar conxuntamente a taxa e a calidade, non unha delas illada.[1]
Robustez e seguridade
[editar | editar a fonte]A compresión elimina redundancia que tamén podería axudar a tolerar erros. Unha corrupción pequena nun fluxo comprimido pode impedir interpretar moitos datos posteriores, especialmente cando altera unha táboa, unha referencia ou a sincronización. Por iso os formatos poden incorporar sumas de comprobación, marcadores de reinicio ou bloques independentes. DEFLATE recomenda que os sistemas proporcionen un mecanismo para validar a integridade dos datos comprimidos.[11]
Unha bomba de descompresión é unha entrada pequena deseñada para expandirse ata consumir unha cantidade desproporcionada de memoria, almacenamento ou tempo. Os descodificadores que procesan datos non fiables deben limitar o tamaño de saída, a profundidade de aniñamento, a memoria e o tempo de execución, e validar as dimensións e lonxitudes antes de reservar recursos.[14]
O tamaño comprimido tamén pode actuar como canle lateral. Se un atacante pode introducir texto que se comprime no mesmo contexto ca un segredo e observar a lonxitude resultante, as coincidencias poden revelar información sobre ese segredo. Na compresión de cabeceiras HTTP/2, a especificación HPACK contempla este risco e permite marcar campos sensibles para que nunca se indexen.[15]
Notas
[editar | editar a fonte]- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Sayood, Khalid (2017). Introduction to Data Compression (en inglés) (5ª ed.). Morgan Kaufmann. ISBN 978-0-12-809474-7.
- 1 2 3 4 5 M. Q. C. van Beurden; A. Weaver (decembro de 2024). IETF, ed. "Free Lossless Audio Codec (FLAC)" (en inglés). doi:10.17487/RFC9639. RFC 9639.
- 1 2 3 Shannon, Claude E. (1948). "A Mathematical Theory of Communication". Bell System Technical Journal (en inglés) 27 (3–4): 379–423, 623–656. doi:10.1002/j.1538-7305.1948.tb01338.x.
- 1 2 3 4 5 6 7 Cover, Thomas M.; Thomas, Joy A. (2006). Elements of Information Theory (en inglés) (2ª ed.). Wiley-Interscience. ISBN 978-0-471-24195-9. doi:10.1002/047174882X.
- 1 2 Huffman, David A. (1952). "A Method for the Construction of Minimum-Redundancy Codes". Proceedings of the IRE (en inglés) 40 (9): 1098–1101. doi:10.1109/JRPROC.1952.273898.
- 1 2 3 Ziv, Jacob; Lempel, Abraham (1977). "A Universal Algorithm for Sequential Data Compression". IEEE Transactions on Information Theory (en inglés) 23 (3): 337–343. doi:10.1109/TIT.1977.1055714.
- 1 2 Ziv, Jacob; Lempel, Abraham (1978). "Compression of Individual Sequences via Variable-Rate Coding". IEEE Transactions on Information Theory (en inglés) 24 (5): 530–536. doi:10.1109/TIT.1978.1055934.
- 1 2 Witten, Ian H.; Neal, Radford M.; Cleary, John G. (1987). "Arithmetic Coding for Data Compression". Communications of the ACM (en inglés) 30 (6): 520–540. doi:10.1145/214762.214771.
- 1 2 3 4 ITU-T; ISO/IEC (1992). "Information technology – Digital compression and coding of continuous-tone still images – Requirements and guidelines" (en inglés). Recomendación ITU-T T.81; ISO/IEC 10918-1.
- 1 2 3 ITU-T (2024). "Advanced video coding for generic audiovisual services" (en inglés). Recomendación ITU-T H.264 (08/2024); ISO/IEC 14496-10.
- 1 2 3 L. Peter Deutsch (maio de 1996). IETF, ed. "DEFLATE Compressed Data Format Specification version 1.3" (en inglés). doi:10.17487/RFC1951. RFC 1951.
- ↑ Burrows, Michael; Wheeler, David J. (1994). "A Block-sorting Lossless Data Compression Algorithm" (PDF). Digital Systems Research Center Technical Report 124 (en inglés).
- 1 2 PNG Working Group (24 de xuño de 2025). W3C, ed. "Portable Network Graphics (PNG) Specification (Third Edition)" (en inglés).
- ↑ MITRE. "CWE-409: Improper Handling of Highly Compressed Data (Data Amplification)" (en inglés). Consultado o 16 de xullo de 2026.
- ↑ R. Peon; H. Ruellan (maio de 2015). IETF, ed. "HPACK: Header Compression for HTTP/2" (en inglés). doi:10.17487/RFC7541. RFC 7541.
Véxase tamén
[editar | editar a fonte]Bibliografía
[editar | editar a fonte]- Cover, Thomas M.; Thomas, Joy A. (2006). Elements of Information Theory (en inglés) (2ª ed.). Wiley-Interscience. ISBN 978-0-47124195-9. doi:10.1002/047174882X.
- Sayood, Khalid (2017). Introduction to Data Compression (en inglés) (5ª ed.). Morgan Kaufmann. ISBN 978-0-12-809474-7.
Outros artigos
[editar | editar a fonte]Ligazóns externas
[editar | editar a fonte]- Especificación de DEFLATE no RFC Editor.
- Especificación de PNG, terceira edición no W3C.
- Recomendación T.81 da ITU-T.