精华内容
下载资源
问答
  • 算术编码是一种更现代的编码,在实际中比Huffman编码更有效。...下面是我写程序。 #include <iostream> #include <fstream> #include <string> #include <queue> #...

          算术编码是一种更现代的编码,在实际中比Huffman编码更有效。算术编码把整个消息看做一个单元。具体的实现也很方便。根据书上的伪代码,很快就能把程序写出来。下面是我写的程序。

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <queue>
    #include <math.h>
    
    
    using namespace std;
    
    typedef struct{
         char symbol;
         float range,low,high;
    }Team; 
    Team in[100];
    
    float Expo(int k)
    {
        int i;
        float sum=1.0;
        for(i=0; i<k; i++)
        {
             sum=sum*2e-1;
        }
        return sum;
    }
    
    int main()
    {
          int i=0,j=0,k=1;
          float low=0.0,high=1.0,range=1.0,code=0.0;
          string str;  //存储小数点后面的数字  即总共需要的位数
          freopen("in.txt","r",stdin);
          while( (scanf("%c%f",&in[i].symbol,&in[i].range))!=EOF )
          {
                in[i].low=low; in[i].high=low+in[i].range;
                low=in[i].high;
                i++;
            getchar();
          }
    
          freopen("in2.txt","r",stdin);
          char c;
          queue<char> q;
          while( scanf("%c",&c)!=EOF)
          {
             q.push(c);
          }
          low=0.0;
          //编码
          while(!q.empty())
          {
              c=q.front();
              q.pop();
              for(j=0; j<i; j++)
              {
                  if(in[j].symbol==c)
                      break;
              }
              high=low+range*in[j].high;
              low=low+range*in[j].low;
              range=high-low;
              j++;
          }
    
          //产生码字
          float e;
          while(code<low)
          {
              e=pow(2,-k);
              code+=e;
              if(code<=high)
                  str.append("1");
              else
              {
                  code-=e;
                  str.append("0");
              }
              k++;
          }
          cout<<str<<endl;
        return 0;
    }

     

    转载于:https://www.cnblogs.com/Jason-Damon/archive/2012/04/09/2439799.html

    展开全文
  • pytorch自动编码器实现有损图像压缩

    千次阅读 2019-08-16 23:32:39
    自动编码器作为一种数据压缩的方法,其原理:输入数据经过编码器变成一个编码(code),然后将这个编码作为解码器输入,观察解码器输出是否能还原原始数据,因此将解码器输出和原始数据误差作为最优化...

    自动编码器(AutoEncoder)由编码器(Encoder)和解码器(Decoder)两部分组成。编码器和解码器可以是任意模型,通常神经网络模型作为编码器和解码器。

    自动编码器作为一种数据压缩的方法,其原理是:输入数据经过编码器变成一个编码(code),然后将这个编码作为解码器的输入,观察解码器的输出是否能还原原始数据,因此将解码器的输出和原始数据的误差作为最优化的目标。

    下面以MNIST数据集为例,使用pytorch1.0构建一个卷积神经网络做自动编码器。


    1.添加引用的库文件

    import os
    import torch
    import torch.nn as nn
    import torch.optim as optim
    from torch.utils.data import DataLoader
    from torchvision import datasets, transforms
    from torchvision.utils import save_image

    2.定义超参数,是否使用GPU加速

    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    batch_size = 512
    

    3.加载MNIST数据集,并将图片的大小变为-1~1之间,这样可以使输入变得更对称,训练更加容易收敛。

    # 标准化
    data_tf = transforms.Compose(
        [transforms.ToTensor(),
         transforms.Normalize([0.5], [0.5])]
    )
    
    
    train_dataset = datasets.MNIST(root='./data', train=True, transform=data_tf, download=True)
    train_data = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
    

    4.定义卷积神经网络的自动编码器

    class AutoEncoder(nn.Module):
        def __init__(self):
            super(AutoEncoder, self).__init__()
            self.encoder = nn.Sequential(
                nn.Conv2d(1, 16, 3, stride=3, padding=1),  # b,16,10,10
                nn.ReLU(True),
                nn.MaxPool2d(2, stride=2),  # b,16,5,5
                nn.Conv2d(16, 8, 3, stride=2, padding=1),  # b,8,3,3
                nn.ReLU(True),
                nn.MaxPool2d(2, stride=1)  # b,8,2,2
            )
            self.decoder = nn.Sequential(
                nn.ConvTranspose2d(8, 16, 3, stride=2),   # b,16,5,5
                nn.ReLU(True),
                nn.ConvTranspose2d(16, 8, 5, stride=3, padding=1),  # b,8,15,15
                nn.ReLU(True),
                nn.ConvTranspose2d(8, 1, 2, stride=2, padding=1),   # b,1,28,28
                nn.Tanh()
            )
    
        def forward(self, x):
            encode = self.encoder(x)
            decode = self.decoder(encode)
            return encode, decode
    
    

    torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0,groups=1, bias=True, dilation=1)

    • in_channels(int):输入数据的通道数;
    • out_channels(int):输出数据的通道数;
    • kernel_size(int or tuple):滤波器或卷积核的大小;
    • stride(int or tuple,optional) :步长;
    • padding(int or tuple, optional):四周是否进行0填充;
    • groups(int, optional) – 从输入通道到输出通道的阻塞连接数
    • bias(bool, optional) - 如果bias=True,添加偏置
    • dilation(int or tuple, optional) – 卷积核元素之间的间距

    对于每一条边输入,输出的尺寸的公式如下:

    output=(input-kernel\_size+2*padding)/stride+1

     

    解码器使用nn.ConvTranspose2d(),可以看作卷积的反操作。具体参数如下:

    torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0,output_padding=0, groups=1, bias=True, dilation=1)

    • in_channels(int) – 输入信号的通道数
    • out_channels(int) – 卷积产生的通道数
    • kerner_size(int or tuple) - 卷积核的大小
    • stride(int or tuple,optional) - 卷积步长,即要将输入扩大的倍数。
    • padding(int or tuple, optional) - 输入的每一条边补充0的层数,高宽都增加2*padding
    • output_padding(int or tuple, optional) - 输出边补充0的层数,高宽都增加padding
    • groups(int, optional) – 从输入通道到输出通道的阻塞连接数
    • bias(bool, optional) - 如果bias=True,添加偏置
    • dilation(int or tuple, optional) – 卷积核元素之间的间距

    对于每一条边输入,输出的尺寸的公式如下:

    output=(input-1)*stride+outputpadding-2*padding+kernel\_size

    5.实例化模型,定义loss函数和优化函数

    model = AutoEncoder().to(device)
    
    # 定义loss函数和优化方法
    loss_fn = nn.MSELoss()
    optimizer = optim.Adam(model.parameters(), lr=1e-3, weight_decay=1e-5)

    6.训练并保存解码器生成的图片

    for t in range(40):
        for data in train_data:
            img, label = data
            img = img.to(device)
            label = label.to(device)
            _, output = model(img)
            loss = loss_fn(output, img) / img.shape[0]  # 平均损失
    
            # 反向传播
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()
    
        if (t + 1) % 5 == 0:  # 每 5 次,保存一下解码的图片和原图片
            print('epoch: {}, Loss: {:.4f}'.format(t + 1, loss.item()))
            pic = to_img(output.cpu().data)
            if not os.path.exists('./conv_autoencoder'):
                os.mkdir('./conv_autoencoder')
            save_image(pic, './conv_autoencoder/decode_image_{}.png'.format(t + 1))
            save_image(img, './conv_autoencoder/raw_image_{}.png'.format(t + 1))

    结果对比(左边生成图片,右边原始图片):

    附上完整代码:

    import os
    import torch
    import torch.nn as nn
    import torch.optim as optim
    from torch.utils.data import DataLoader
    from torchvision import datasets, transforms
    from torchvision.utils import save_image
    
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    batch_size = 512
    
    # 标准化
    data_tf = transforms.Compose(
        [transforms.ToTensor(),
         transforms.Normalize([0.5], [0.5])]
    )
    
    
    train_dataset = datasets.MNIST(root='./data', train=True, transform=data_tf, download=True)
    train_data = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
    
    def to_img(x):
        x = 0.5 * (x + 1.)  # 将-1~1转成0-1
        x = x.clamp(0, 1)
        x = x.view(x.shape[0], 1, 28, 28)
        return x
    
    
    class AutoEncoder(nn.Module):
        def __init__(self):
            super(AutoEncoder, self).__init__()
            self.encoder = nn.Sequential(
                nn.Conv2d(1, 16, 3, stride=3, padding=1),  # b,16,10,10
                nn.ReLU(True),
                nn.MaxPool2d(2, stride=2),  # b,16,5,5
                nn.Conv2d(16, 8, 3, stride=2, padding=1),  # b,8,3,3
                nn.ReLU(True),
                nn.MaxPool2d(2, stride=1)  # b,8,2,2
            )
            self.decoder = nn.Sequential(
                # nn.ConvTranspose2d(8, 8, 3, stride=2, padding=1),  # b,8,3,3
                # nn.ReLU(True),
                # nn.ConvTranspose2d(8, 16, 4, stride=4, padding=1),  # b,16,10,10
                # nn.ReLU(True),
                # nn.ConvTranspose2d(16, 1, 3, stride=3, padding=1),  # b,1,28,28
                # nn.Tanh()
                nn.ConvTranspose2d(8, 16, 3, stride=2),   # b,16,5,5
                nn.ReLU(True),
                nn.ConvTranspose2d(16, 8, 5, stride=3, padding=1),  # b,8,15,15
                nn.ReLU(True),
                nn.ConvTranspose2d(8, 1, 2, stride=2, padding=1),   # b,1,28,28
                nn.Tanh()
            )
    
        def forward(self, x):
            encode = self.encoder(x)
            decode = self.decoder(encode)
            return encode, decode
    
    
    model = AutoEncoder().to(device)
    
    # 定义loss函数和优化方法
    loss_fn = nn.MSELoss()
    optimizer = optim.Adam(model.parameters(), lr=1e-3, weight_decay=1e-5)
    
    for t in range(40):
        for data in train_data:
            img, label = data
            img = img.to(device)
            label = label.to(device)
            _, output = model(img)
            loss = loss_fn(output, img) / img.shape[0]  # 平均损失
    
            # 反向传播
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()
    
        if (t + 1) % 5 == 0:  # 每 5 次,保存一下解码的图片和原图片
            print('epoch: {}, Loss: {:.4f}'.format(t + 1, loss.item()))
            pic = to_img(output.cpu().data)
            if not os.path.exists('./conv_autoencoder'):
                os.mkdir('./conv_autoencoder')
            save_image(pic, './conv_autoencoder/decode_image_{}.png'.format(t + 1))
            save_image(img, './conv_autoencoder/raw_image_{}.png'.format(t + 1))
    

     

     

    展开全文
  • 数字音源,也就是数字音频格式,最早指的是CD,CD经过压缩之后,又衍生出多种适于在随身听上播放的格式,这些压缩过的格式,我们可以分为两大类:有损压缩的和无损压缩的。这里所说的压缩,是指把PCM编码的或者是WA

    19种音频格式介绍及音质比的比较

    1.前言

    在日常生活中,我们会听各种音乐,而这些音乐大多数都是以数码的形式传播的,无论是在电脑上试听或下载还是在MP3或CD机上试听。当然也会经常看到各式各类的诸如MP3、WMV、APE等格式,但你是否明白这些格式的意思呢?下面小编就为你整理了一些这方面的内容,希望能有帮助。

    1.1数码音乐简介

    数字音源,也就是数字音频格式,最早指的是CD,CD经过压缩之后,又衍生出多种适于在随身听上播放的格式,这些压缩过的格式,我们可以分为两大类:有损压缩的和无损压缩的。这里所说的压缩,是指把PCM编码的或者是WAV格式的音频流经过特殊的压缩处理,转换成其他格式,从而达到减小文件体积的效果。有损/无损,是指经过压缩过后,新文件所保留的声音信号相对于原来的PCM/WAV格式的信号是否有所削减。

    PCM编码是PulseCode Modulation的缩写,又叫脉冲编码调制,它是数字通信的编码方式之一,其编码主要过程是将话音、图像等模拟信号每隔一定时间进行取样,使其离散化,同时将抽样值按分层单位四舍五入取整量化,同时将抽样值按一组二进制码来表示抽样脉冲的幅值。 

    数码音频信号的最终形式仍然是“0/1”构成的。它们可能是任何排列和组合,比如“0001110101”或者“11100001010”。当然,组合不同,其效果当然就不一样。看到这里,应该有朋友注意到了。如果声音是用“00101010”这样的形式来记录,那最终形态岂不就是一个“点”,也就是一个简单的“开关”过程而已。声音是连续不断的,怎么能用“点”来记录呢?这样我们听到的声音不就应该是一段一段的吗?道理不难理解。回家打开日光灯,你能发现日光灯在闪吗?不能?其实日光灯的确是在不停闪烁的。看过动画片吧,那些都是用一格一格的静止的图画连接成的。一格一格的图画我们也可以简单的理解为一个一个的“点”。人对自然界的感觉是有极限的,视觉和听觉都是如此。动画片能产生连贯的动作是因为这些“点”在人的视觉未能及时做出反映的情况下让人产生的一种错觉,除了机器,人是无法把这些“点”区分开的。声音也是如此。如果声音闪动的频率很快,人也是无法分辨的。另外,由于声音在进行“数字转换模拟信号”(D/A转换)的时候,解码芯片已经将这些“点”用连贯的串在一起了,所以我们听到的是非常连贯的声音了。 

    1.2速率。 

    什么是速率?当然我不能直接给你解释说“速率就是比特率”。大家在用一些软件播放声音文件的时候应该注意到了一个小小的信息。比如“128Kbps”、“1411Kbps”…也有朋友知道了,通常情况下,”Kbps”前面的数字越大,声音效果越好,比如CD就是“1411Kbps"。那么,到底这些数字代表什么呢?简单的说来就是在每秒钟时间内,有多少数据被转换成声音。之所以CD的音质比MP3好,是因为CD在每一秒内的信息比MP3多。比如,128Kbps的MP3文件相比1411Kbps的CD文件,其每秒被转换的数据量,MP3比CD少了近12倍。同样的一首歌曲,CD听来就要细腻得多(当然人群中有这么一群号称“木耳”的人可能觉得效果是一样的)MP3用较少的数据表达相同的内容,其详细程度当然就不如CD了。

    ​​​​​​​1.3采样率。

    采样率也是很常见的一个词语。具体表现形式为“XXHz”,其中“XX”是一个具体数字。比如“44100Hz(44.1KHz)”,“32000Hz(32KHz)”等。之前已经说过了,数码音频文件是由很多个“点”来组成的,那么采样率其实就是采集这些“点”的一个“数量”标准。很显然“44100Hz”比“32000Hz”的采样率要高,所以单位时间内(1秒)搜集到的点就更多。单位时间的点越多声音的信息也就越完善,当然也就更接近于真实。所以,如果在保证速率相同的条件下,“44100Hz”的文件要好于“32000Hz”(当然,这也不是绝对的)。

    ​​​​​​​2.有损压缩

     有损压缩的音源,其实我们都比较熟悉,目前流行的有损格式主要有MP3、WMA、OGG、MP3pro、AAC、VQF、ASF等。​​​​​​​2.1WMV格式

    WMA的全称是WindowsMedia Audio,是微软力推的一种音频格式。WMA格式是以减少数据流量但保持音质的方法来达到更高的压缩率目的,其压缩率一般可以达到1:18,生成的文件大小只有相应MP3文件的一半。​​​​​​​

    2.2MP3格式

    MP3的全称是MovingPicture Experts Group Audio Layer Ⅲ。简单的说,MP3就是一种音频压缩技术,由于这种压缩方式的全称叫MPEGAudio Layer 3,所以人们把它简称为MP3。它诞生于1993年,其“父母”是德国夫朗和费研究院(FaunhofeIIS)和法国汤姆生(Thomson)公司。

    MP3是利用MPEGAudio Layer 3的技术,将音乐以1:10甚至1:12的压缩率,压缩成容量较小的文件,换句话说,能够在音质丢失很小的情况下把文件压缩到更小的程度。而且还非常好的保持了原来的音质。正是因为MP3体积小,音质高的特点使得MP3格式几乎成为网上音乐的代名词。每分钟音乐的MP3格式只有1MB左右大小,这样每首歌的大小只有3-4兆字节。使用MP3播放器对MP3文件进行实时的解压缩(解码),这样,高品质的MP3音乐就播放出来了。

    MP3编码质量分为:固定码率(CBR),平均码率(ABR)和动态码率(VBR)。早期的MP3编码技术并不完善,很长的一段时间以来,大多数人都使用128Kbps的CBR(固定编码率)格式来对MP3文件编码,直到最近,VBR(可变编码率) 和ABR(平均编码率)的压缩方式出现,编码的比特率最高可达320Kbps,MP3文件在音质上才开始有所进步,而LAME的出现,则为这一进步带来了质的飞跃。

    补充:最高比特率320K,高频部分一刀切是它的缺点。音质不高!

    ​​​​​​​2.3 WMA格式

     WMA的全称是WindowsMedia Audio,是微软力推的一种音频格式。WMA格式是以减少数据流量但保持音质的方法来达到更高的压缩率目的,其压缩率一般可以达到1:18,生成的文件大小只有相应MP3文件的一半。 

    WMA与MP3音质和体积上的对比特点,可以总结为:低比特率(<128Kbps)时,WMA体积比MP3小,音质比MP3好;而在高比特率(>128K)时,MP3的音质则比WMA好。 

    WMA相对于MP3的最大特点就是有极强的可保护性,可以说,WMA的推出,就是针对MP3没有版权保护的缺点来的。WMA可以通过DRM(Digital Rights Management)方案加入防止拷贝,或者加入限制播放时间和播放次数,甚至是播放机器的限制,可有力地防止盗版。 

    补充:128kbps为wma最优压缩比,128kbpswma=192kbps mp3

    ​​​​​​​2.4 Mp3Pro格式

     在WMA刚开始流行的时候,还没有高品质的MP3,所以当时MP3的地位真的有点动摇了,于是Thomson公司在2001年6月,携手FaunhofeIIS,发布了一种新的格式MP3pro,这是对MP3格式的改良,编码算法比MP3要复杂得多,简单的说,就是分两层编码,在MP3的基础上,再与另外一种技术(SB频段复制技术)混合编码。 

    Mp3Pro是Mp3编码格式的升级版本。MP3Pro是由瑞典Coding科技公司开发的,在保持相同的音质下同样可以把声音文件的文件量压缩到原有MP3格式的一半大小。而且可以在基本不改变文件大小的情况下改善原先的MP3音乐音质。它能够在用较低的比特率压缩音频文件的情况下,最大程度地保持压缩前的音质。这种格式在低位率的时候,压缩效率非常高,所以在一般音质情况下,同位率的MP3pro的体积要比MP3甚至WMA都小得多,而音质却是三者中最好的。

    MP3pro可以实现完全的兼容性。经过mp3Pro压缩的文件,扩展名仍旧是。mp3。可以在老的mp3播放器上播放。老的mp3文件可以在新的mp3pro播放器上进行播放。实现了该公司所谓的“向前向后兼容”。 

    从技术上讲,MP3pro是一种非常优秀的编码方式,但是它高昂的专利费,使它没有真正流行起来。

    ​​​​​​​2.5 MOD格式

     MOD是一种类似波表的音乐格式,但它的结构却类似MIDI,使用真实采样,体积很小,音质好,在以前的DOS年代,MOD经常被作为游戏的背景音乐。现在的MOD可以包含很多音轨,而且格式众多,如S3M、NST、669、MTM、XM、IT、XT和RT等。

    ​​​​​​​2.6 RA系列

    RA、RAM和RM都是Real公司成熟的网络音频格式,采用了“音频流”技术,所以非常适合网络广播。在制作时可以加入版权、演唱者、制作者、Mail 和歌曲的Title等信息。

     RA可以称为互联网上多媒体传播的霸主,适合于网络上进行实时播放,是目前在线收听网络音乐最好的一种格式。

    ​​​​​​​2.7 MD格式

     MD(即MiniDisc)是SONY 公司于1992年推出的一种完整的便携音乐格式,它所采用的压缩算法就是ATRAC技术(压缩比是1∶5)。MD又分为可录型MD(Recordable,有磁头和激光头两个头)和单放型MD(Pre-recorded,只有激光头)。 

    强大的编辑功能是MD的强项,可以快速选曲、曲目移动、合并、分割、删除和曲名编辑等多项功能,比CD更具个性化,随时可以拥有一张属于自己的MD专辑。MD的产品包括MD随身听、MD床头音响、MD汽车音响、MD录音卡座、MD摄像枪和MD驱动器等。 ​​​​​​​

    2.8 ASF格式

    ASF的全称是AdvancedStreaming Format,是微软所制订的一种媒体播放格式,适合在网络上播放。而WindowsMedia On-Demand Producer则是制作ASF档案的免费软件,让即使是初学者也能很轻易的利用现成的WAV或AVI档案制作ASF文件。

    补充:少见的格式

    ​​​​​​​2.9 AAC格式

     AAC实际上是高级音频编码的缩写。AAC是由Fraunhofer IIS-A、杜比和AT&T共同开发的一种音频格式,它是MPEG-2规范的一部分。AAC所采用的运算法则与MP3的运算法则有所不同,AAC通过结合其他的功能来提高编码效率。AAC的音频算法在压缩能力上远远超过了以前的一些压缩算法(比如MP3等)。它还同时支持多达48个音轨、15个低频音轨、更多种采样率和比特率、多种语言的兼容能力、更高的解码效率。总之,AAC可以在比MP3文件缩小30%的前提下提供更好的音质。 

    补充:目前最好的有损格式之一。有多种编码,faac,nero为常见,比特率最高448kbps。硬件支持方面,高级mp3和现在手机普遍支持。 

    ​​​​​​​2.10 VQF格式

     VQF格式是由YAMAHA和NTT共同开发的一种音频压缩技术,它的核心是减少数据流量但保持音质的方法来达到更高的压缩比,它的压缩率能够达到1:18,因此相同情况下压缩后VQF的文件体积比MP3小30%~50%,更便利于网上传播,同时音质极佳,接近CD音质(16位44.1kHz立体声)。可以说VQF技术上也是很先进的,但VQF未公开技术标准,由于宣传不力,这种格式难有用武之地,至今未能流行开来。

    补充:少见

    ​​​​​​​2.11 MID格式

     MID是midi的简称,是它的扩展名。MIDI是英语MusicInstrument Digital Interface 的缩写,翻译过来就是“数字化乐器接口”,也就是说它的真正涵义是一个供不同设备进行信号传输的接口的名称。我们如今的MIDI音乐制作全都要靠这个接口,在这个接口之间传送的信息也就叫MIDI信息。MIDI最早是应用在电子合成器一种用键盘演奏的电子乐器上,由于早期的电子合成器的技术规范不统一,不同的合成器的链接很困难,在1983年8月,YAMAHA、ROLAND、KAWAI等著名的电子乐器制造厂商联合指定了统一的数字化乐器接口规范,这就是MIDI1.0技术规范。此后,各种电子合成器已经电子琴等电子乐器都采用了这个统一的规范,这样,各种电子乐器就可以互相链接起来,传达MIDI信息,形成一个真正的合成音乐演奏系统。 

    由于多媒体计算机技术的迅速发展,计算机对数字信号的强大的处理能力,使得计算机处理MIDI信息成为顺理成章的事情了,所以,现在不少人把MIDI音乐称之为电脑音乐。事实上,利用多媒体计算机不但可以播放、创作和实时地演奏MIDI音乐。甚至可以把MIDI音乐转变成看的见的乐谱(五线谱或简谱)打印出来,反之,也可以把乐谱变成美妙的音乐。利用MIDI的这个性质,可以用于音乐教学(尤其是识谱),让学生利用计算机学习音乐知识和创作音乐。

    ​​​​​​​2.12 OGG格式

     Ogg全称应该是OGGVobis(oggVorbis)是一种新的音频压缩格式,类似于MP3等现有的音乐格式。但有一点不同的是,它是完全免费、开放和没有专利限制的。OGGVobis有一个很出众的特点,就是支持多声道,随着它的流行,以后用随身听来听DTS编码的多声道作品将不会是梦想。

    Vorbis 是这种音频压缩机制的名字,而Ogg则是一个计划的名字,该计划意图设计一个完全开放性的多媒体系统。目前该计划只实现了OggVorbis这一部分。 

    Ogg Vorbis文件的扩展名是。OGG。这种文件的设计格式是非常先进的。现在创建的OGG文件可以在未来的任何播放器上播放,因此,这种文件格式可以不断地进行大小和音质的改良,而不影响旧有的编码器或播放器。

    补充:目前最好的有损格式之一,MP3部分支持,智能手机装软件部分可以支持,最高比特率500kbps。

    ​​​​​​​2.13 M4A格式

     M4A是MPEG4音频标准的文件的扩展名。在MPEG4标准中提到,普通的MPEG4文件扩展名是。mp4。自从Apple开始在它的iTunes以及iPod中使用。m4a以区别MPEG4的视频和音频文件以来,m4a这个扩展名变得流行了。目前,几乎所有支持MPEG4音频的软件都支持m4a。最常用的m4a文件是使用AAC格式的(文件),不过其他的格式,比如AppleLossless甚至mp3也可以被放在。m4a容器里(TC注:这个container的概念类似于。mkv文件)。可以安全的把只包含音频的。mp4 文件的扩展名改成。m4a,以便让它能在你喜欢的播放器里播放,反之亦然。

    ​​​​​​​2.14 AAC+格式

    AAC+也称之为HE-AAC。 

    HE意思是"highefficiency"(高效性)。HE-AAC混合了AAC与SBR技术。SBR代表的是SpectralBand Replication(频段复制)。SBR的关键是在低码流下提供全带宽的编码而不会产生多余的信号。传统认为音频编码在低码流下意味着减少带宽和降低采样率(见MP3FAQ #7)或产生令人不快的噪音信号。SBR解决问题的方法是让核心编码去编码低频信号,而SBR解码器通过分析低频信号产生高频信号和一些保留在比特流中的指导信号(通常码流极低,~2kbps)。这就是采用无SBR解码器的原因,这样你的带宽(frequencyresponse)(频率响应)会被严重浪费。这也是为什么被叫做SpectralBand Replication的原因,它只是增加音频的带宽,而非重建。 

    2.15 AIFF与AU格式

     这里顺便提一下由苹果公司开发的AIFF(Audio Interchange FileFormat)格式和为UNIX系统开发的AU格式,它们都和WAV非常相像,在大多数的音频编辑软件中也都支持它们这几种常见的音乐格式。

    ​​​​​​​3. 无损压缩

     对于我们最常说的“无损音频”来说,一般都是指传统CD格式中的16bit/44.1kHz采样率的文件格式,而知所以称为无损压缩,也是因为其包含了20Hz-22.05kHz这个完全覆盖人耳可闻范围的频响频率而得名。

    音频的无损压缩,大家可能还比较陌生,但这并不意味着无损压缩技术发展得不好,相反,在无损压缩领域,早就有许多很出色的作品,比如APE、FLAC、WavPack、LPAC、WMALossless、AppleLossless、La、OptimFOG、Shoten等。

    ​​​​​​​3.1 CD格式

     即CD唱片,一张CD可以播放74分钟左右的声音文件,Windows系统中自带了一个CD播放机,另外多数声卡所附带的软件都提供了CD播放功能,甚至有一些光驱脱离电脑,只要接通电源就可以作为一个独立的CD播放机使用。 

    标准CD格式为44.1K的采样,速率88K/秒,16位量化位数,因为CD 可以说是近似无损的,因此它的声音基本上是忠于原声的,因此如果你如果是一个音响发烧友的话,CD是你的首选。它会让你感受到天籁之音。CD光盘可以在CD唱机中播放,也能用电脑里的各种播放软件来重放。但注意:不能直接的复制CD格式的文件到电脑硬盘上播放,需要使用像EAC这样的抓音轨软件把CD格式的文件转换成WAV,这个转换过程基本上是无损的。推荐大家使用这种方法。

    ​​​​​​​3.2 WAV格式

     WAV格式是微软公司开发的一种声音文件格式,也叫波形声音文件,是最早的数字音频格式,被Windows平台及其应用程序广泛支持。WAV格式是以RIFF格式为标准的。RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是“RIFF”。WAVE文件由文件头和数据体两大部分组成。 

    WAV格式支持许多压缩算法,支持多种音频位数、采样频率和声道,采用44.1kHz的采样频率,16位量化位数,因此WAV的音质与CD相差无几,但WAV格式对存储空间需求太大不便于交流和传播。

    补充:WAV属于无损音乐格式,缺点:体积十分大!

    ​​​​​​​3.3 FLAC格式

     FLAC即是Free Lossless Audio Codec的缩写,全称应该叫OGGFLAC,中文可解为无损音频压缩编码。它是OGG计划的一部分,当然也就是开源、免费的了,这也难怪它这么快就得到了多家MP3厂商的支持。

    FLAC是一套著名的自由音频压缩编码,其特点是无损压缩。FLAC压缩比可以达到2:1,对于无损压缩来说,这已经是相当高的比例了;而且它解码速度快,只需进行整数运算即可完成整个解码过程,对CPU的运算能力要求很低,所以普通的随身听,都可以轻松实现实时解码。 

    不同于其他有损压缩编码如MP3 及AAC,它不会破坏任何原有的音频资讯,所以可以还原音乐光盘音质。现在它已被很多软件及硬件音频产品所支持。简而言之,FLAC与MP3相仿,但是是无损压缩的,也就是说音频以FLAC方式压缩不会丢失任何信息。这种压缩与Zip的方式类似,但是FLAC将给你更大的压缩比率,因为FLAC是专门针对音频的特点设计的压缩方式,并且你可以使用播放器播放FLAC压缩的文件,就象通常播放你的MP3文件一样。 

    补充:为无损格式,较ape而言,他体积大点,但是兼容性好,编码速度快,播放器支持更广

    ​​​​​​​3.4 APE格式

     APE是目前流行的、由Monkey'sAudio出品的一种数字音乐文件格式,它出现得比FLAC早,而且名气也比FLAC大。与MP3、OGG这类有损压缩方式不同,APE是目前世界上惟一得到公认的音频无损压缩格式,也就是说当您将从音频CD上读取的音频数据文件压缩成APE格式后,您还可以再将APE格式的文件还原,而还原后的音乐文件与压缩前一模一样,没有任何损失。而现在越来越多的人将它在网络传播,因为被压缩后的APE文件容量要比WAV源文件小一半多,可以节约传输所用的时间,也更方便传播!由于APE的采样率高达800kbps~1400kbps,接近于音乐CD的1411.2kbps,远远高于MP3的128kbps,因此它在压缩后的音质和源文件音质几乎毫无差异,其音质之佳已经过了严格的盲听测试,得到了全世界发烧友的公认。APE的这些特点,都是其他无损压缩格式所争相效仿的。 

    在APE出现之前,音乐迷们都认为以CD或者WAV来保存自己喜欢的音乐素材是最好的方法了,但APE的出现,足以使他们改变这种看法,因为APE既可以保持音乐信号的无损,又可以以比WAV高得多的压缩率(接近2:1)压缩WAV文件,而且可以无须解压而直接播放。由于压缩后的APE文件只有原文件一半左右大小,APE格式受到了许多音乐爱好者的喜爱,特别是对于希望通过网络传输音频CD的朋友来说,APE可以帮助他们节约大量的资源。APE如此流行,在网上也比较容易能下载到APE格式的文件。补充:为无损压缩格式,较flac而言,他体积较小。编码速度偏慢。

    ​​​​​​​4. 压缩比比较:

     aac>ogg>mp3(wma)>ape>flac>wav(同一音源条件下)

    mp3和wma以192kbps为分界线,192kbps以上mp3好,192kbps以下wma好。

    ​​​​​​​5. 音质比较:

     wav=flac=ape>aac>ogg>mp3>wma

    ​​​​​​​6. 硬件支持比较:

     MP3播放器:mp3>wma>wav>flac>apeaac ogg

     手机:mp3>wma>aacwav>flac ogg>ape 

    7. 综合性能(就是综合音质体积编码率):

    aac>ogg>flacape>mp3>wav、wma

    展开全文
  • 【数据压缩】JPEG标准与原理解析

    万次阅读 2015-12-24 19:26:49
    为了满足不同应用需求,JPEG标准包括两种基本... 下面是编码器和解码器流程图,压缩过程:原图分成8×8子块,分别进行正向离散余弦变换(FDCT),对每个8×8子块系数采用量化表进行量化,最后使用熵编码,输出

        转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/50392230

    CSDN-勿在浮沙筑高台

      为了满足不同应用的需求,JPEG标准包括两种基本的压缩方法:1.基于DCT的有损压缩算法;2.基于预测方法的无损压缩算法。基于DCT的基线系统有损压缩技术是到目前为止应用最为广泛的一种压缩方法,本文将详细解析此算法。

    1.基于DCT有损压缩原理

       下面是编码器和解码器的流程图,压缩过程:原图分成8×8的子块,分别进行正向离散余弦变换(FDCT),对每个8×8子块的系数采用量化表进行量化,Zig-Zag扫描,最后使用熵编码,输出比特流。解码器是完整的逆过程,本文章不再赘述!

      

      1.1离散余弦变换(DCT)

      首先把原始图像分割成8×8的子块(如果宽或高不是8的整数倍,可以用黑色边框填充),每个子块进行独立编码处理。在进行FDCT变换之前,把64个无符号整型灰度值[0,255]平移到[-128,+127]范围中。通过DCT变换,8×8个灰度值被转换为8×8个频率谱值,分别对应不同频率。DCT变换系数值均为实数。低频谱值位于左上部分,高频谱值位于右下部分。通过下述公式可知,左上角F(0,0)对应频率为0,被称为DC系数,其他63个系数称为AC系数。

    至于为什么子块大小选择8×8,由于当时制定JPEG标准时,8×8是集成电路所能支持的最大尺寸,同时8×8的大小效果很好!

    下述定义的b[x,y]为DCT的基函数,下面画出了6个基函数在8×8的子块上的幅值b[x,y]。其中,x,y为空间域的坐标,u,v对应频率域的坐标。


        

      1.2 量化

       注意:图像信息损失是在量化阶段而不是DCT阶段。经过上述FDCT,生成了64个频率系数,通过抑制高频成分,来达到压缩的目的。一个主要原因是由于人眼对高频成分不敏感,故可以移除部分高频成分,而对图像感官质量影响很小;另一个原因是大多数图像中的灰度值是个渐变的过程,而频率高的部分携带的信息很少。通过使用量化矩阵Q(u,v)对F(u,v)进行量化,大部分高频系数会被量化成0。JPEG标准没有指定量化矩阵的数值,可以根据需要自己定义,下面是JPEG标准提供的两种量化矩阵作为参考,一种为低压缩,另一个为高压缩。



      1.3 熵编码

       ☆ Zig-Zag扫描

      通过上述量化矩阵,大部分高频系数被量化为0,为了方便进行熵编码,把8×8的系数矩阵转化为1×64的一维数据,而且采用的方式为Zig-Zag扫描法,采用Z字型的好处是可以把低频系数和高频系数分别集中在一起,而随着频率的增加,高频系数基本上都是0,方便采用0行程编码从而压缩数据。


       ☆Huffman编码----->Huffman详细原理

        1.DC系数-DPCM

          由于DC系数是整个8×8块的均值,所以相邻块的DC系数有很大的相关性,同时DC系数通常比AC系数要大得多,JPEG标准对DC系数采用相邻DC差分(DPCM),通常Diff具有很小的数值,然后进行Huffman编码。如下图所示(第一个块的DC定义为0)。


        2.AC系数-行程编码

        采用Zig-Zag扫描后,高频成分被量化为0,而且基本集中在一起,可以对AC系数采用0行程编码,即记录此数值前的连续数值0的个数。下面是个对AC系数压缩的例子。



    2. An example--JPEG压缩&解压缩

    下面是一个压缩算法过程,对彩色图像,采用分层处理,即对不同通道分别压缩,解压缩是一个逆向的过程:


    ---------------------------------------------------------------------------------------------------------------------------------------------------

    -------------------------------------------------------------------------------------------------------------------------------------------------------

    参考:

          The JPEG Still Picture Compression Standard,IEEE Transactions on Consumer Electronics,1991.

          Basic Image Compression Algorithm and Introduction to JPEG Standard,Pao-Yen Lin.

    展开全文
  • 搭建一个自动编码器需要完成下面三项工作:搭建编码器,搭建解码器,设定一个损失函数,用以衡量由于压缩而损失掉信息。本实验会通过搭建一个简单编码器观测数据信息,并再搭建一个卷积自编码器作为对比,并...
  • 史上超高压缩软件2009

    2009-09-04 14:46:16
    最大特点使用了以最新ContextModelMixing为基础算术编码压缩技术和固实 压缩技术,因此压缩率极高,几乎可以排到世界第一位,尤其多文件压缩!唯一缺点 是压缩速度比其他格式较慢.后面给出各个常用的压缩...
  • 酷狗音乐flac转换成mp3格式

    千次阅读 2019-07-12 11:49:20
    不同于其他有损压缩编码如MP3 及 AAC,它不会破坏任何原有音频资讯,所以可以还原音乐光盘音质。FLAC与MP3相仿,都音频压缩编码,但FLAC无损压缩,也就是说音频以 FLAC编码压缩后不会丢失任何信息,将FLAC文件...
  • 5.1、无损格式图像采集(YUV格式)如果你不想损失拍摄图像细节(由于jpeg是有损压缩),那么你可以通过PNG来接收拍摄图像(PNG为无损压缩格式),然而某些应用需要YUV(YUV是被欧洲电视系统所采用一种颜色编码...
  • PCA——主成分分析

    2020-05-25 23:22:00
    PCA(Principal Components Analysis)一个简单机器学习算法,用于对矩阵的有损压缩。即缩小矩阵列向量维度,并尽量减少精度损失,以减小存储空间。当然,现在硬盘已经足够大,根本不需要这样的有损压缩来...
  • 与JPEG相同,WebP也一种有损压缩,但在画质相同情况下,WebP格式比JPEG图像小40%。Wiki百度百科它一个开源项目,我们可以在此获取其中源码,以及相关工具。浏览器支持显然,Google浏览器Chrome首先引入,此外...
  • 不同于其他有损压缩编码如mp3及wma,它不会破坏任何原有音频信息,所以可以还原音乐光盘音质。但很多音乐播放器不支持播放flac格式音乐文件。如果想播放flac格式音乐,只能将其转换成通用mp3格式,那怎么将flac...
  • 比较完美的是alac编码,苹果自家的东东嘛,苹果设备支持很好。 ALAC开源了,参见:http://alac.macosforge.org/ 网上多是ape、flac的格式,怎么把他们转成alac格式的?下面说说: 1. 打开itunes,在偏...
  • 生成mp3lame.so详解

    2021-02-24 10:33:22
    前情:近期PCM转MP3出现了线上crash,定位到找不到so库里...它舍弃脉冲编码调制(PCM)音频数据中,对人类听觉不重要数据(类似于JPEG,一个有损图像的压缩格式),从而达到了压缩成小得多文件大小。 正文: 下
  • WMA格式:正在逐步流行一种音频压缩格式(可以是有损,也可以是无损,取决于你选择的编码器),与同等比特率mp3文件相比更小,质量也更好。 MP3格式:目前最流行有损音频压缩格式,几乎被所有播放器支持,...
  • WMA格式:正在逐步流行一种音频压缩格式(可以是有损,也可以是无损,取决于你选择的编码器),与同等比特率mp3文件相比更小,质量也更好。MP3格式:目前最流行有损音频压缩格式,几乎被所有播放器支持,压缩...
  • 马赛克问题

    千次阅读 2005-03-10 12:14:00
    原创(作者: winne )视频的编码与传输方面,会遇到马赛克,怎么去解决这个问题,吸引了大家关注目光,下面是笔者做简单分析,希望大家共同讨论。出现马赛克情况:1. CPU占用高,马赛克在编码时就已经损失了...
  • 它使用pngquant和zopflipng PNG优化工具将选择位深度,颜色类型和调色板缩减与zopfli DEFLATE压缩算法编码结合在一起。 与无损方法相比,此方法导致文件大小显着增加,但代价图像质量相对适度降低(请参见下面...
  • 这里的IDE设备包括了IDE硬盘和IDE光驱,第一、第二组设备是指主板上的第一、第二根IDE数据线,一般来说靠近芯片的是第一组IDE设备,而主设备、从设备是指在一条IDE数据线上接的两个设备,大家知道每根数据线上可以接...

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

下面是有损压缩编码的是