网上很多观点说,根据采样定理,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. Mock Server 之 moco-runner 使用指南一

    文章出处http://ju.outofmemory.cn/entry/96866 用以下命令可以启动moco-runner 服务 java -jar moco-runner-<version&g ...

  2. ruby lib文件夹作用

    require 'lib/test_module' #lib/test_module.rb module TestModule end

  3. idea新建的项目,文件夹右键不能新建class

    一般情况下,新建的mave项目,通常没有XXX\src\main\java这个目录,如果手动创建,则又不能右键build与java相关的,强行建立的话,也不会被idea所识别,更不会被虚拟机编译执行. ...

  4. win下安装wget以及使用wget

    1. 安装wget网址:http://gnuwin32.sourceforge.net/packages/wget.htm下载http://downloads.sourceforge.net/gnuw ...

  5. TOSCA自动化测试工具--Convert to Template

    转换成用例模板

  6. ABP官方文档翻译 1.3 模块系统

    ABP模块系统 介绍 模块定义 生命周期方法 PreInitialize Initialize PostInitialize Shutdown 模块依赖 插件系统 ASP.NET Core ASP.N ...

  7. mongodb研究(mongodb 内存数据库)

    本日志大部分都不是原创的转载复制的会带链接保持版权 工作中使用mongodb已经好久了,讽刺的是到了最后快离职的时候才有时间好好研究下源码.   印象:mongodb是一个内存数据库,数据都是放到内存 ...

  8. opencv图像处理之在手机上实现背景虚化

    http://m.blog.csdn.net/blogercn/article/details/75004162 1.高端数码相机都具有背景虚化功能.背景虚化就是使景深变浅,使焦点聚集在主题上.一般的 ...

  9. 【HTML5校企公益课】第一天

    1.搭建基本的开发环境.学校电脑用的是浏览器是Chrome,编辑器是HBuilder. 2.初步介绍HTML5的Web项目基本结构. css:样式表 img:存放图片 js:存放脚本文件 .html: ...

  10. 前端学习之JavaScript中的 NaN 与 isNaN

    NaN NaN 即 Not a Number ,不是一个数字. 在 JavaScript 中,整数和浮点数都统称为 Number 类型 .除此之外,Number 类型还有一个很特殊的值,即 NaN . ...