关于采样率&位深&码率&无损的一些心得

记笔记,记下来自己的一些关于音频基础知识的总结。

采样率

外界的声音都是模拟信号,在数字设备中A/D转化成为了由0、1表示的数字信号后被储存下来。数字信号都是离散的,所以采样率是指一秒钟采样的次数,采样率越高,还原的声音也就越真实。由于人耳听觉范围是20Hz~20kHz,根据香农采样定理(也叫奈奎斯特采样定理),理论上来说采样率大于40kHz的音频格式都可以称之为无损格式。但在40kHz采样率下得到的声音已没有细节可言,所有频率都是只采样了一个波峰一个波谷。现一般的专业设备的采样频率为44.1kHz。44.1kHz是专业音频中的最低采样率,也叫“CD级音质”(22.05kHz采样率为广播级音质)。更细化的还有96kHz,192kHz等等,当然要听到这些更高采样率中的细节取决于耳朵和设备了。

位深度

若要尽可能精确地还原声音,只有高采样率是不够的。描述一个采样点,横轴(时间)代表采样率,纵轴(幅度)代表位深度。16bit表示用16位(2个字节)来表示对该采样点的电平(通俗点来说和音量大小成正比)进行编码时所能达到的精确程度,也就是把纵轴分为16份描述电平大小,如-3dB和-3.1415926dB的精度差别。同理还有20bit和24bit。16bit被认为是专业音频领域里面最低的位深度标准,和44.1kHz的采样率一样,共同作为专业音频和消费产品的标准。位深度也直接关系到信号噪声比的大小,直接影响到所录制信号的整体动态范围。

码率

无损无压缩格式中(如.wav),码率=采样率x位深度x声道数。在有损压缩中(如.mp3)码率便不等于这个公式了,因为原始信息已经被破坏。码率描述了一秒钟的该音频的信息量,因而声音文件总的大小是码率x总时长。码率也叫位速,单位是比特率(bps,bit per second)。通常听歌时候的128kbps、320kbps均为码率,其中320kbps是mp3格式的最高比特率。但和44.1kHz采样率、16bit位深的wav文件比起来(计算一下双声道的码率是44.1x16x2=1411.2kbps),相去甚远。压缩后码率便发生了变化。无损压缩中的码率与音质无关,有损压缩中的码率和音质正相关。

无损压缩

无损压缩指的是在无损格式之间的压缩(转换),无论压缩(转换)成什么格式,音质都是相同的,并且都能还原成最初同样的文件。平时所说的无损均是指无损压缩,没有无损码率的说法。对于各种格式的压缩都是对应着一种算法(或者说编码),播放的时候需要有解码器进行译码,而且不同的解码器也可能会影响解压出来的文件完整性。常见的无损格式有:
wav:微软公司的一种声音文件格式,是无压缩的最接近真实声音的格式(其次是midi),支持多采样率多量化精度。所有的无损格式本质都是wav的压缩,在播放时会转回wav。
flac:Free Lossless Audio Coded,是国际通用格式,特点是压缩比高,编码算法也相当成熟,当flac文件受损时依然能正常播放。另外,该格式也是最先得到广泛硬件支持的无损格式。
ape:使用Monkey‘s Audio软件对CD抓轨而转换成的文件格式,但优势并不突出,解码较慢。
wma-lossless:也是微软公司出品,特点是压缩比高,但未成为主流。
aiff:苹果公司出品,是Apple苹果电脑上面的标准音频格式。
DSD:Sony大法的,不是很了解,欣赏不来辣种文化,但就说单纯的冲,还是要冲的。

有损压缩

有损压缩指的是声音信息在压缩过程中发生了丢失,且所丢失的声音无法用采样率和位数表示出来。但特点就是压缩后的文件变的很小,常在流媒体中使用。常见的有损格式有:
mp3:模拟人耳听觉研究出的一种复杂算法,被称为“心理声学模型”。它通过抽取音频中的一些频段来达到提高压缩比,降低码率,减少所占空间,但同时声音的细节如人声的情感、后期的混响等等都已经发生变形。盲听的话也很难较快地分辨出wav和mp3,需要借助设备。mp3目前是最为普及的声频压缩格式,可以最大程度地保留压缩前的音质。
wma:微软公司力作,特点是在较低比特率下(如64kbps),wma可以在与mp3相同的音质条件下获得更小的体积。并且在超低比特率(如16kbps),wma音质比mp3要好得多。
aac:苹果电脑上的声音文件储存格式。
ogg:完全免费、开放和没有专利限制,但普及性较差。

如有错误,还望各位不吝指正!

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在PCL中,可以使用VoxelGrid滤波器对点云进行降采样操作。VoxelGrid滤波器将点云划分为一个个体素(Voxel),并将每个体素内的点云数据压缩为一个单独的代表点。 以下是在PCL中使用VoxelGrid滤波器进行点云降采样的示例代码: ```cpp #include <pcl/point_cloud.h> #include <pcl/filters/voxel_grid.h> pcl::PointCloud<pcl::PointXYZ>::Ptr downsamplePointCloud(const pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, float leaf_size) { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_downsampled(new pcl::PointCloud<pcl::PointXYZ>); pcl::VoxelGrid<pcl::PointXYZ> voxelgrid; voxelgrid.setInputCloud(cloud); voxelgrid.setLeafSize(leaf_size, leaf_size, leaf_size); voxelgrid.filter(*cloud_downsampled); return cloud_downsampled; } ``` 在上述示例中,我们首先创建了输入点云 `cloud` 和输出点云 `cloud_downsampled`。然后,我们创建了一个 `pcl::VoxelGrid` 对象 `voxelgrid`,并设置了输入点云。 使用 `setLeafSize` 方法,我们设置了体素的大小,即 `leaf_size`。体素的大小决定了降采样后的点云密度,较小的体素大小会产生更多的点云数据,较大的体素大小则会减少点云数据。 最后,通过调用 `filter` 方法,我们对点云进行了降采样操作,并将结果保存到 `cloud_downsampled` 中,并返回该点云。 你可以根据需要调整体素的大小,以获得所需的降采样效果。这样,你就可以使用VoxelGrid滤波器对点云进行降采样了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值