网上很多观点说,根据采样定理,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. Objective-C中的引用计数

    导言 Objective-C语言使用引用计数来管理内存,也就是说,每个对象都有个可以递增或递减的计数器.如果想使某个对象继续存活,那就递增其引用计数:用完了之后,就递减其计数.计数为0,就表示没人关注 ...

  2. linux安装以及相关配置

    计算机操作系统简介 操作系统是什么 操作系统的内核是什么 两种操作系统用户界面 安装Linux操作系统的准备工作 LINUX发行版(CENTOS.RHEL.FEDORA.UBUNTU.SUSE) RH ...

  3. 基于wtforms源码实现自定义form组件

    from flask import Flask,Markup,render_template,request,redirect from wtforms.form import Form from w ...

  4. 以About Us为范例在Zen cart中增加页面

    1.在includes\languages\english\html_includes目录中新建文件define_about_us.php 2.在includes\templates\Your_tem ...

  5. Error: UserWarning: Ignoring URL... 已解决

    数据data里存有url,用pandas的to_excel() 报错:UserWarning: Ignoring URL... 解决方案: 将 data.to_excel("data.xls ...

  6. 优化css,增加性能

    转载自:https://www.cnblogs.com/xiaoloulan/p/5801663.html 前端性能优化一直是一个比较热门的话题,我们总是在尽我们最大的努力去,提高我们的页面性能,比如 ...

  7. javaScript动画1 offsetWidth、offsetLeft

    offsetWidth和offsetHeight <!DOCTYPE html> <html lang="en"> <head> <met ...

  8. Extjs 正则表达式 常用的

    extjs正则表达式验证 2011年10月10日 10:36:05 阅读数:7305   在EXT中使用正则表达式验证的方法:fieldLabel : '员工号',name : 'employee.e ...

  9. Python开篇——Python的哲学

    今天奉上Python设计哲学,宣告着自己正式开始系统的学习Python The Zen of Python, by Tim Peters Beautiful is better than ugly.E ...

  10. 设置小窗口Activity

    http://blog.csdn.net/xieyihua1994/article/details/52586270 我们知道Activity本身是没有界面的.所以activity类创建了一个窗口,开 ...