网上很多观点说,根据采样定理,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. 使用Webdriver执行JS

    首先,我们使用如下方式初始化driver: WebDriver driver = new FirefoxDriver(); JavascriptExecutor jse = (JavascriptEx ...

  2. CCF 字符串匹配(find()函数的使用)

    问题描述 试题编号: 201409-3 试题名称: 字符串匹配 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你 ...

  3. 斐讯面试记录—三线程交替打印ABC

    package cn.shenzhen.feixun; public class PrintABC extends Thread{ private String name; private Objec ...

  4. iOS 关于BTC 一些知识点

    1.BTC 用这个网 可以校验 自己的库生成的助记词 地址 是否是合法正常的 https://iancoleman.io/bip39/ 2.知晓 BTC 钱包是否有钱 和交易记录 https://te ...

  5. tomcat 连接器优化

    在$CATALINA_HOME/conf/server.xml配置文件中的Connetctor节点,和连接数相关的参数配置和优化. maxThreads Tomcat使用线程来处理接收的每个请求.这个 ...

  6. 编译项目报错 lc.exe已退出,代码为-1

    错误截图: 原因: Devexpress注册文件不一致造成,如果更改了不同Dev插件版本,会有这个问题 解决办法 删除项目中的licenses.licx文件 在解决方案资源管理器试图中,检索licx, ...

  7. C++通过HTTP请求Get或Post方式请求Json数据(转)

    原文网址:https://www.cnblogs.com/shike8080/articles/6549339.html #pragma once#include <iostream>#i ...

  8. SQL Server 对XML数据类型的SQL语句总结

    --创建XMLTable , ) primary key, XMLCol xml); go ------------------------------------------------------ ...

  9. 20145312 《Java程序设计》第十周学习总结

    20145312 <Java程序设计>第十周学习总结 学习笔记 Chapter 17反射与类加载器 17.1 运用反射 .class文档反应了类基本信息,因而从Class等API取得类信息 ...

  10. 先记录一下吧 开始的程序 hello!java!

    起床后就跟着老师的教学,也稍微学了一些,刚开始用java. 一堆大小写字母注意不过来,很尴尬. 虽然只是成功了一个"hello java "的简单的不能再简单的小程序,不过还是有点 ...