在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

壓縮算法的類型和應用

FPGA開源工作室 ? 來源:FPGA開源工作室 ? 2024-10-21 13:50 ? 次閱讀

1 概述

壓縮算法是一種通過減少數據量來節省存儲空間或傳輸數據的技術。壓縮算法可以分為兩種類型:有損壓縮和無損壓縮。
有損壓縮算法會犧牲一定的數據精度或質量,在壓縮數據的同時丟失一些信息。這種算法適用于音頻視頻等多媒體數據,例如JPEG和MP3等格式。
無損壓縮算法則能夠完全還原原始數據,不會造成數據丟失。這種算法適用于需要準確還原數據的場景,如文檔、代碼等,例如ZIP和GZIP等格式。
常見的壓縮算法包括哈夫曼編碼、Lempel-Ziv算法、Run-Length Encoding(RLE)等。這些算法通過不同的方式對數據進行編碼和解碼,以實現數據壓縮和解壓縮的目的。

2 壓縮算法的應用

壓縮算法在各種領域廣泛應用,包括但不限于以下幾個方面:
文件傳輸和存儲:壓縮算法可以減少文件的大小,使文件傳輸更加高效快速。在網絡傳輸、電子郵件附件、云存儲等場景下,壓縮算法可以節省帶寬和存儲空間。
多媒體數據:音頻、視頻等多媒體數據通常是體積較大的,使用壓縮算法可以減少文件大小,提高數據的傳輸速度和播放效果。常見的視頻壓縮算法包括H.264、HEVC等;音頻壓縮算法包括MP3、AAC等。
數據庫壓縮:在數據庫管理系統中,數據通常存儲在磁盤上,通過壓縮算法可以減少數據占用的存儲空間,并提高數據庫的性能和響應速度。
圖像處理:在數字圖像處理中,壓縮算法可以減小圖像文件的大小,在圖像傳輸和存儲中起到重要作用。常見的圖像壓縮算法包括JPEG、PNG等。
網頁內容壓縮:為了減少網頁加載時間和用戶訪問流量,網站通常會使用壓縮算法對HTML、CSS、JavaScript等網頁內容進行壓縮,提高用戶體驗和網站性能。
總的來說,壓縮算法在信息技術領域的各個方面都有廣泛的應用,可以有效地節省存儲空間、提高數據傳輸效率和優化性能。

3適合ARM跑的壓縮算法

ARM架構是一種廣泛應用于移動設備、嵌入式系統物聯網設備中的處理器架構。在運行在ARM處理器上的設備或系統上選擇合適的壓縮算法,需要考慮算法的性能、資源消耗和適應性。
以下是一些適合與ARM跑的壓縮算法:
Zstandard(Zstd):Zstandard是一種快速的壓縮算法,性能優秀,并且可以在ARM處理器上高效運行。它具有適應性強,可以在不同的場景下應用,如數據傳輸、數據庫壓縮等。
LZ4:LZ4是一種高速壓縮算法,適合于需要快速壓縮和解壓的場景。它具有低延遲和高吞吐量的特點,適合在ARM處理器上運行。LZ4是一種LZ系列壓縮算法,著重于壓縮和解壓的速度,壓縮率相對較低。LZ4壓縮率較低,算法復雜度和內存消耗中等,但是壓縮和解壓速度,尤其是解壓速度遠超其他算法。因為其綜合性能優秀,在LinuxAndroid中的內存壓縮技術一般使用LZ4壓縮算法。LZ4 HC,有著更好的壓縮率,但是算法復雜度大幅提升,且壓縮速度也大幅減慢,但是依然有著很好的解
Brotli:Brotli是由Google開發的一種通用壓縮算法,特點是高壓縮率和較好的性能。它在文件傳輸、網絡傳輸等場景下表現優異,也可以在ARM處理器上高效運行。
Snappy:Snappy是Google開發的一種快速壓縮算法,適合于需要高速壓縮和解壓的場景。它在ARM處理器上表現優秀,適用于數據傳輸、日志壓縮等應用。
Deflate(如zlib):Deflate是一種常見的無損壓縮算法,廣泛應用于各種領域。zlib是實現Deflate算法的一個流行庫,也可以在ARM處理器上使用,并具有較好的性能。
這些壓縮算法在ARM處理器上都有良好的性能表現,可以根據具體的應用場景和需求選擇合適的算法。值得注意的是,優化算法的實現、調整參數和選擇合適的壓縮級別,也可以進一步提高在ARM處理器上的性能表現。
Huffman霍夫曼(Huffman)編碼使用變長編碼表對源符號進行編碼,其中變長編碼表是通過一種評估來源符號出現機率的方法得到的,出現機率高的字母使用較短的編碼,反之出現機率低的則使用較長的編碼,這便使編碼之后的字符串的平均長度、期望值降低,從而達到無損壓縮數據的目的。霍夫曼編碼使用的編碼表,使用霍夫曼樹來進行存儲,讓出現概率最高的編碼最容易查找,以提升解碼速度。霍夫曼編碼算法的壓縮率分布在20%-90%,因為要掃描整個數據來構建霍夫曼樹,所以其壓縮速度較慢,且需要一定的內存來存儲編碼表,但是解壓速度較快。霍夫曼的算法復雜度較簡單。
RLE(Run Length Encoding),也稱為行程編碼,壓縮算法是一種無損壓縮算法。算法特點:簡單、易實現。使用RLE壓縮方法可以將 RRRRRGGBBBBBBABCD 壓縮為 5R2G6B1A1B1C1D。基于RLE算法升級,可以將RRRRRGGBBBBBBABCD可以壓縮為b’x85Rx82Gx86Bx03ABCD’,0x85表示后面有5個相同的字符,0x03表示后面有3個不連續的字符。RLE的實現非常簡單,針對一些圖片顏色少或重復字符多的文件有非常好的壓縮率,RLE的適用場景比較少,通用壓縮率較差。
LZ77是一種基于字典的算法,它將長字符串(也稱為短語)編碼成短小的標記,用小標記代替字典中的短語,從而達到壓縮的目的。LZ77算法的壓縮率、速度、內存消費都是中等,但是代碼復雜度較低,適用于MCU的使用。
LZO壓縮算法采用(重復長度L,指回距離D)代替當前已經在歷史字符串中出現過的字符串。LZO致力于解壓速度,不同的參數下的LZO壓縮率不同。LZO內存消耗中等,解壓速度較快,壓縮速度較快,但是代碼復雜度較低,適用于Bootloader等追求壓縮率和解壓速度的場景。

4性能排序

在實際應用中,不同的壓縮算法因為適用場景、數據類型、硬件平臺等因素的不同,其性能表現也會有所差異。以下是一些常見的壓縮算法按照一般趨勢的性能排序:
壓縮率(從高到低):
有損壓縮:JPEG2000 > WebP > H.265 (HEVC) > H.264 (AVC) > JPEG
無損壓縮:FLIF > Brotli > Zstandard > LZMA (7-Zip) > DEFLATE (zlib)
壓縮速度(從快到慢):
Snappy > LZ4 > Zstandard > Deflate (zlib) > Brotli
這里的快慢僅作為一般參考,具體情況因數據大小、數據類型、硬件性能等因素可能有所不同。
解壓速度(從快到慢):
Snappy > LZ4 > Zstandard > Deflate (zlib) > Brotli
同樣,解壓速度也會受到實際場景的影響,不同算法適用于不同的應用需求。
內存消耗(從少到多):
Snappy > LZ4 > Zstandard > Deflate (zlib) > Brotli
內存消耗較低的壓縮算法可以在受限制的環境下更好地工作,如嵌入式設備等。

5 壓縮算法代碼示例

以下是一個簡單的使用zlib庫進行數據壓縮和解壓縮的C語言示例代碼:

```c

```c
#include 
#include 
#include 
#include 

#define CHUNK 16384

int compress_data(unsigned char* data, int data_len, unsigned char* compressed_data, int* compressed_len) {
    z_stream strm;
    strm.zalloc = Z_NULL;
    strm.zfree = Z_NULL;
    strm.opaque = Z_NULL;

    if(deflateInit(&strm, Z_BEST_COMPRESSION) != Z_OK) {
        return -1;
    }

    strm.avail_in = data_len;
    strm.next_in = data;
    strm.avail_out = *compressed_len;
    strm.next_out = compressed_data;

    int ret = deflate(&strm, Z_FINISH);
    *compressed_len = strm.total_out;

    deflateEnd(&strm);

    return ret == Z_STREAM_END ? 0 : -1;
}

int decompress_data(unsigned char* compressed_data, int compressed_len, unsigned char* decompressed_data, int* decompressed_len) {
    z_stream strm;
    strm.zalloc = Z_NULL;
    strm.zfree = Z_NULL;
    strm.opaque = Z_NULL;

    if(inflateInit(&strm) != Z_OK) {
        return -1;
    }

    strm.avail_in = compressed_len;
    strm.next_in = compressed_data;
    strm.avail_out = *decompressed_len;
    strm.next_out = decompressed_data;

    int ret = inflate(&strm, Z_NO_FLUSH);
    *decompressed_len = strm.total_out;

    inflateEnd(&strm);

    return ret == Z_STREAM_END ? 0 : -1;
}

int main() {
    unsigned char data[] = "Hello, this is a test message!";
    int data_len = strlen(data);

    int compressed_size = compressBound(data_len);
    unsigned char compressed_data[compressed_size];
    int compressed_len = compressed_size;

    if(compress_data(data, data_len, compressed_data, &compressed_len) == 0) {
        printf("Data compressed successfully!
");
        printf("Compressed data size: %d
", compressed_len);

        unsigned char decompressed_data[data_len];
        int decompressed_len = data_len;
        
        if(decompress_data(compressed_data, compressed_len, decompressed_data, &decompressed_len) == 0) {
            printf("Data decompressed successfully!
");
            printf("Decompressed data: %s
", decompressed_data);
        } else {
            printf("Error decompressing data!
");
        }
    } else {
        printf("Error compressing data!
");
    }

    return 0;
}

在這個示例代碼中,我們使用了zlib庫提供的函數進行數據壓縮和解壓縮操作。壓縮函數 compress_data 將輸入數據進行壓縮,并將壓縮后的數據存儲在 compressed_data 中,返回壓縮后的數據長度;解壓縮函數 decompress_data 對壓縮后的數據進行解壓縮,并將解壓縮后的數據存儲在 decompressed_data 中,返回解壓縮后的數據長度。在主函數中,我們對一個簡單的字符串進行壓縮和解壓縮操作,并輸出結果。

請注意,這段示例代碼使用了zlib庫,因此在編譯時需要鏈接zlib庫。在Linux系統下,可以使用 -lz 選項進行鏈接。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9097

    瀏覽量

    367555
  • 函數
    +關注

    關注

    3

    文章

    4331

    瀏覽量

    62618
  • 代碼
    +關注

    關注

    30

    文章

    4788

    瀏覽量

    68612
  • 壓縮算法
    +關注

    關注

    1

    文章

    21

    瀏覽量

    10501

原文標題:壓縮算法簡介

文章出處:【微信號:leezym0317,微信公眾號:FPGA開源工作室】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    一文解析網絡壓縮算法的原理實現及結果

    引言 網絡壓縮在AI加速中可以說起到四兩撥千斤的作用,網絡參數的減小不僅僅降低了存儲和帶寬,而且使計算邏輯簡單,降低了LUT資源。從本篇開始,我們就一起挖掘一下網絡壓縮算法類型,原理
    的頭像 發表于 11-14 10:51 ?2801次閱讀
    一文解析網絡<b class='flag-5'>壓縮</b><b class='flag-5'>算法</b>的原理實現及結果

    FPGA實現滑動平均濾波算法和LZW壓縮算法

    采集數據中的量化噪聲,在進行數據壓縮前采用濾波的預處理技術。介紹LZW算法和滑動濾波算法的基本理論,詳細闡述用單片FPGA實現兩種算法的方法。最終測試結果表明,該設計方案能夠有效濾除數
    發表于 04-24 09:05

    關于語音芯片音頻壓縮算法研究

    大家好,我是做語音芯片的。最近想研究一種壓縮率高,音質好,并且解碼簡單。最好能用8位機跑5M可以解碼的算法。編碼可以復雜一些。最也參考了很多國外關于語音壓縮算法,但是感覺好點的
    發表于 09-18 17:33

    語音壓縮算法研究

    希望廣大DSP大俠們幫我出出主意,怎么才能寫一個好的音頻壓縮算法,最好是在時域的壓縮。頻域的壓縮發現都相對比較復雜。大家好,我是做語音芯片的。最近想研究一種
    發表于 09-18 17:38

    【案例分享】經典的壓縮算法Huffman算法

    前兩天發布那個rsync算法后,想看看數據壓縮算法,知道一個經典的壓縮算法Huffman算法
    發表于 07-17 04:30

    什么是壓縮算法呢?壓縮算法又是怎么定義的呢?

    認識壓縮算法想必都有過壓縮和解壓縮文件的經歷,當文件太大時,我們會使用文件壓縮來降低文件的占用空間。比如微信上傳文件的限制是100MB,有個
    發表于 07-28 07:22

    認識壓縮算法

    壓縮算法認識壓縮算法我們想必都有過壓縮和 解壓縮文件的經歷,當文件太大時,我們會使用文件
    發表于 07-28 08:12

    什么是壓縮算法

    什么是壓縮算法呢?壓縮算法又是怎么定義的呢?
    發表于 10-19 07:25

    壓縮算法是怎么定義的呢

    什么是壓縮算法呢?壓縮算法又是怎么定義的呢?文件是如何存儲的?
    發表于 10-19 07:01

    啃論文俱樂部 | 壓縮算法團隊:我們是如何開展對壓縮算法的學習

    關于OpenHarmony 啃論文俱樂部壓縮算法團隊大家好!我是上海工程技術大學交通運輸專業的一名大二學生,同時在 OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)啃
    發表于 06-21 11:05

    基于小波變換的干涉圖壓縮算法?

    基于小波變換的干涉圖壓縮算法? 摘要:在研究小波變換和分層樹集合分割排序算法的基礎上,將小波圖像壓縮技術應用于干涉圖的壓縮.根據小波分解系
    發表于 05-12 09:13 ?30次下載

    基于ADPCM的語音壓縮算法研究

    摘 要 ADPCM算法目前已成為很受用的語音壓縮算法之一。給出PCM概念。討論DPCM,DM,ADM與ADPCM的 壓縮算法原理以及
    發表于 04-08 11:20 ?84次下載

    Linux 5.7將支持Zstd壓縮算法

    Linux 5.6 引入了可選的 F2FS 透明數據壓縮支持,并通過 LZO 和 LZ4 壓縮算法實現。現在,Linux 5.7 內核正在支持 Zstd 壓縮
    的頭像 發表于 03-26 15:15 ?2837次閱讀

    數據壓縮算法的介紹

    在RPC通信數據的傳輸場景下,當通信報文數據傳輸較大時,會對數據包進行壓縮傳輸,根據不同傳輸場景,常用的壓縮算法有Zlib、Gzip、Bzip2、Deflater、Lz4、Lzo、Snappy
    的頭像 發表于 02-28 14:25 ?1337次閱讀
    數據<b class='flag-5'>壓縮</b><b class='flag-5'>算法</b>的介紹

    壓縮機的類型和區別

    壓縮機的類型和區別? 壓縮機是一種用于提高氣體壓縮和輸送能力的機械設備。根據不同的工作原理和應用需求,壓縮機可分為多種
    的頭像 發表于 02-01 14:36 ?3328次閱讀
    主站蜘蛛池模板: 午夜国产片| www色午夜| 人人澡人人射| 欧洲综合色| 萌白酱一线天粉嫩喷水在线观看| 男人的天堂一区二区视频在线观看 | 狼狼色丁香久久女婷婷综合| 久久性色| 爱爱视频天天看| 99久久免费中文字幕精品| 精品女同同性视频很黄很色| 看视频免费网址| sss华人在线play| 美女露出扒开尿口让男人桶| 亚洲最大的黄色网址| 唯美久草| 欧美日韩国产成人高清视频| 国模爱爱| 五月天婷婷社区| 丁香色综合| 黄色刺激网站| 操久久久| 最新版天堂资源中文官网| 亚洲va中文字幕| 女人张开腿 让男人桶视频| 国产女人和拘做受视频免费| 快播久久| mide-776中文字幕在线| 欧美天天| 成人午夜啪啪免费网站| 亚洲伊人tv综合网色| 欧美在线小视频| 成年人网站免费观看| 免费午夜不卡毛片| 夜色成人网| 午夜理伦片免费| 免费美剧在线观看| 国产亚洲人成网站观看| 天天摸天天看天天做天天爽| 天天插天天射| 久久久久女人精品毛片九一|