网上很多观点说,根据采样定理,48K的音频采样率即可无损的表示音频模拟信号(人耳最多可以听到20K的音频),为何还需要96K, 192K等更高的采样率呢?最先我也有这样的疑问,毕竟采样定理是经过数学家证明过的,48K的采样率确实可以无损的表示20K的音频信号,注意是无损,而不是近似!

近日重读《数字音频技术》这本书,豁然开朗了。大家说的没错,采样定理是数学上证明过了的。但是具体到物理的、各种电子设备来实现这个录音过程时,器件本身的各种局限性,决定了48K不能达到理论的音质。

例如,根据采样定理,如果用48K的采样率,那么音频信号就不能超过20K(理论是24K,但为了契合人耳的20K上限,后面统一说20K)。而麦克风或者各种拾音器收集到的模拟信号却包含了很多超出20K的信号。麦克风不是人耳,人耳只能听到最高20K的声音,但是,麦克风的震膜却可以采集到超出20K很多的高频信号。这些超出20K的高频信号必须被过滤掉,否则经过48K的采样率进行采样时,会产生“混叠效应”,因为根据采样定理,48K的采样率最高只能处理20K的信号。

混叠效应,打个比方,当你看高速旋转的风扇、或者车轮时,你会有一种错觉:他们好像在倒着转,这就是混叠效应。在音频系统中,它们会造成非常严重的失真,因为信号采集错了!

因此,电子系统中,必须使用一种滤波器,把麦克风采集到的原始信号中20K以上的高频信号完美的过滤掉,只有这样才能保证符合采样定理。但是这样完美的滤波器只存在数学公式中,现实中要制造这样的滤波器太难了,基本做不到。现实中的滤波器,一方面对于20K以内的信号,并不是完整不变的PASS过去的,而是一条近似水平的波浪线,不同频率点的信号会有不同程度的衰减;另一方面,20K以外的音频信号,并不是说立马就给全部过滤了,它存在一个渐变区域,可能21K, 22K, 23K ... 逐渐给你过滤到0。这样的物理器件,其输出信号,实际上是不完全满足采样定理数学上的严格要求的,因此必然会产生各种各样的噪声。

那么,为了进一步提升音频系统的品质,只有提升采样率了,96K, 192K,也就有他们存在的意义了。

---------------------------------------------------------------------------------------------------------------------------
华丽的分割线

即使提升了采样率,还不够,因为要满足采样定理而制造的滤波器,还是太困难了,因此工程师们想了很多办法。超高采样率就是这样,它使用64倍或者128倍20K的采样率进行采样,这样即使原始模拟信号中存在高频信号,也在采样定理的保证下,被无损的采样,而不会发生混叠效应。这就大大降低了对于滤波器的要求了,而且即使滤波器的截止点存在渐变地带,那也是在很高的频率了,引入的混叠效应也发生在很高的频率点,所引入的噪声远远超出人耳的听觉范围。可以这么理解:过采样系统中仍然有噪声,但是它降低了器件的复杂度,而且它把噪声赶到人耳听觉能力以外了。

超高采样率采集到的数据,包含很多高频信号,但是可以使用数字滤波器进行滤波,数字滤波器可以使用各种算法进行计算优化,傅里叶变换等等,把高频信号过滤掉以后,只保留20K以内的音频信号。根据采样定理,再数字重采样到48K的采样率,输出给后续系统进行处理。

超高采样时,就没有必要使用16位或者24位做AD转换了,只是用6位、或1位即可,这个叫做delta-segma转换。

思路至此, DSD格式的音乐就横空出世了,DSD相对于传统的PCM,就是另外一片天地了。

为什么需要超出48K的音频采样率,以及PCM到DSD的演进的更多相关文章

  1. 基于FFmpeg的音频编码(PCM数据编码成AAC android)

    概述 在Android上实现录音,并利用 FFmpeg将PCM数据编码成AAC. 详细 代码下载:http://www.demodashi.com/demo/10512.html 之前做的一个demo ...

  2. 使用SampleRateConverter对音频采样率进行转换

    java sound resource SampleRateconverter.java(接近于官方源码) 输入目标采样率,输入文件,输出文件.食用方便;p 比如 SampleRateConverte ...

  3. 纯java代码对音频采样率进行转换

    转换成16KHz采样率(含文件头) void reSamplingAndSave(byte[] data) throws IOException, UnsupportedAudioFileExcept ...

  4. FFMPEG学习----分离视音频里的PCM数据

    /** * 参考于:http://blog.csdn.net/leixiaohua1020/article/details/46890259 */ #include <stdio.h> # ...

  5. 最简单的基于FFMPEG的音频编码器(PCM编码为AAC)

    http://blog.csdn.net/leixiaohua1020/article/details/25430449 本文介绍一个最简单的基于FFMPEG的音频编码器.该编码器实现了PCM音频采样 ...

  6. 11.3、Libgdx的音频之播放PCM音频

    (官网:www.libgdx.cn) audio模块可以提供对音频硬件的直接访问. 音频硬件是通过AudioDevice接口进行的抽象. 以下创建一个新的AudioDevice实例: AudioDev ...

  7. 11.4、Libgdx的音频之录制PCM音效

    (官网:www.libgdx.cn) 可以通过AudioRecorder接口访问PCM数据.通过如下方式创建一个接口实例: AudioRecorder recorder = Gdx.audio.new ...

  8. WebRTC 音频采样算法 附完整C++示例代码

    之前有大概介绍了音频采样相关的思路,详情见<简洁明了的插值音频重采样算法例子 (附完整C代码)>. 音频方面的开源项目很多很多. 最知名的莫过于谷歌开源的WebRTC, 其中的音频模块就包 ...

  9. 【改】利用ALSA库进行音频重采样

    转自:http://www.voidcn.com/article/p-snamarwr-p.html 一.ALSA介绍: 1.简介: 高级Linux声音体系(英语:Advanced LinuxSoun ...

随机推荐

  1. 在MFC中实现对象之间数据的传递。

    方法一: 第一步:在VS2010里面新建一个单文档MFC程序. 第二步:在App类里面的头文件里面 定义性声明一个变量 ,见下面程序 public: CString ii; 第三步:在App类的实现文 ...

  2. 2016-2017 National Taiwan University World Final Team Selection Contest C - Crazy Dreamoon

    题目:Statements Dreamoon likes algorithm competitions very much. But when he feels crazy because he ca ...

  3. docker for spark

    项目需求,有一个spark-streaming的程序,读kafka的数据,需要构建一个不使用hadoop的spark 以下建立的镜像参考网络,可以稍加修改就可以使用不同的版本. 可单独启动master ...

  4. ansible一些基本操作

    一.介绍 特性 (1).no agents:不需要在被管控主机上安装任何客户端: (2).no server:无服务器端,使用时直接运行命令即可: (3).modules in any languag ...

  5. 为什么gitHub提交记录显示作者名称是unknow?

    unknow,为什么? gitHub上提交记录显示作者名称是unknow,刚开始没怎么管,后面遇到问题看提交记录时发现有两个unknow(一定有一个人遇到和我一样的问题了,哈哈..),于是解决一下吧. ...

  6. ubuntu文字界面与图形界面切换

    redhat: (据说是) 图形界面->文字界面:crtl+alt+F1~6 文字界面->图形界面:crtl+alt+F7 -------------------------------- ...

  7. 编解码技术:I帧与IDR帧的区别总结

    编解码技术:I帧与IDR帧的区别总结 DR(Instantaneous Decoding Refresh)--即时解码刷新. I帧与IDR帧的相同点在于: 1.I和IDR帧都是使用帧内预测的: 2.都 ...

  8. Caffe学习笔记(二):Caffe前传与反传、损失函数、调优

    Caffe学习笔记(二):Caffe前传与反传.损失函数.调优 在caffe框架中,前传/反传(forward and backward)是一个网络中最重要的计算过程:损失函数(loss)是学习的驱动 ...

  9. JSON and XML Serialization in ASP.NET Web API

    https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/json-and-xml-seri ...

  10. mybatis缓存有关的设置和属性

    知识点:mybatis缓存相关的设置和属性 重点:每次执行增删改操作后,一二级缓存被清空,是因为标签设置默认属性为 flushCache="true" (1) <!-- 全局 ...