我在前面的文章《音频开源代码中重采样算法的评估与选择 》中说过sinc方法是较好的音频重采样方法,缺点是运算量大。https://ccrma.stanford.edu/~jos/resample/ 给出了sinc方法的原理文档和软件实现。以前是使用这个算法,没太关注原理和实现细节。去年(2020年)由于项目的需要和组内同学把这个算法的原理和软件实现细节搞清楚了。本文先讲讲sinc方法的原理,后面文章会讲讲软件实现的细节。

1,sinc函数和信号的采样与重建

在数字信号处理中,sinc函数定义为:

当x = 0时,sinc函数值为1,当x为整数时sinc函数值为0(这些整数点x称为过零点)。可以画出sinc函数的波形图如下:

可以看出sinc函数是连续无限且关于Y轴对称的(即sinc函数是偶函数)。

采样定理说如果模拟信号x(t)包含的最大频率是Fmax且以Fs> 2Fmax的频率被采样,那么x(t)可以用插值函数:

从它的样本重建。这里的插值函数就是sinc函数。重建后的x(t)可表达为:

这里x(n/Fs) = x(nTs) = x(n)是x(t)的采样点值。这里Fs是采样频率,Ts是采样间隔,Fs = 1/Ts。

2,重采样

把数字信号的采样率从一个频率转换为一个另不同频率的过程称为重采样(sampling rate conversion,SRC)。上面采样定理说过如果信号的带宽小于采样率的一半,就可以用插值从样本重建信号。用新的采样率采样这个重建的信号,就可以实现重采样。

假设以Fx=1/Tx采样一个连续信号x(t),生成离散信号x(nTx)。使用插值公式:

可以从样本x(nTx)生成连续信号y(t)。如果x(t)的带宽小于Fx/2且

那么y(t) = x(t)。为了实现重采样,只需要以时间间隔t=mTy对y(t)进行求值即可,Fy=1/Ty是新的采样率。

重新组织g(t)的参数:

mTy/Tx可以分解成整数部分km和分数部分

所以

令k=km-n,所以 n =km – k, 从而

考虑到有上下采样,文档(https://ccrma.stanford.edu/~jos/resample/)给出插值函数为:

其中Fx为原采样率,Fy为新采样率。

令  A= min(1, Fy / Fx), B = min(Fx, Fy), ρ = Fy / Fx = Tx / Ty, 则g(t)可表示为

所以                                         

在上式中,x和y信号离散化后,在x信号和y信号中的Tx,Ty可以去掉了。式子就变成了如下:

上式中BTx在Fx,Fy已知的情况下是个常数。

令D=BTx,上式就变成了:

当上采样时B=Fx,则D=FxTx=1,A=1,所以式子重写为:

当下采样时B=Fy, 则D= FyTx = ρ    A= ρ,所以式子重写为:

从上面的式子可以看出,新的采样率下的值是原采样率下的值和相对应的sinc函数的值的乘累加。由于sinc函数是连续且无限的,真正实现时是无法做到的,所以这儿通过截断sinc函数并离散化,来获得近似信号。在文档(https://ccrma.stanford.edu/~jos/resample/)中,使用Kaiser window加窗截断,通过线性插值采样后的样本来模拟脉冲响应的连续性,获得很好的效果。

至此基于sinc方法的重采样原理就讲完了,新的采样率下的值是原采样率下的值和相对应的sinc函数的乘累加。如果此时去看相关的代码实现,很大可能是一头雾水,下篇将讲怎么基于数学表达式去做软件实现以及实现中的一些细节。
————————————————
版权声明:本文为CSDN博主「david_tym」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/david_tym/article/details/114767825

[zz] 基于sinc的音频重采样(一):原理相关推荐

  1. 基于sinc的音频重采样(二):实现

    上篇(基于sinc的音频重采样(一):原理)讲了基于sinc方法的重采样原理,并给出了数学表达式,如下:                  (1) 本文讲如何基于这个数学表达式来做软件实现.软件实现的 ...

  2. 基于sinc的音频重采样(一):原理

    我在前面的文章<音频开源代码中重采样算法的评估与选择 >中说过sinc方法是较好的音频重采样方法,缺点是运算量大.https://ccrma.stanford.edu/~jos/resam ...

  3. 基于傅里叶变换的音频重采样算法 (附完整c代码)

    前面有提到音频采样算法: WebRTC 音频采样算法 附完整C++示例代码 简洁明了的插值音频重采样算法例子 (附完整C代码) 近段时间有不少朋友给我写过邮件,说了一些他们使用的情况和问题. 坦白讲, ...

  4. 音频重采样原理及技术实现

    转载请注明出处! 音频重采样作为一个独立模块蕴含了数字信号处理理论的多方面内容,综合起来其物理原理及滤波器的实现优化可以作为一个独立的项目做较深入的研究,可谓是一门学问.推荐大家研读国外作者的理论研究 ...

  5. 音频变速播放原理分析及实现方案

    [时间:2019-05] [状态:Open] [关键词:音频,audio,倍速,变速,变调,soundtouch,sonic] 音频变调变速原理分析 先来一段语音处理的理论: 变速变调可分为:变速不变 ...

  6. 音频变速变调原理及 soundtouch 代码分析

    音频变速变调原理及 soundtouch 代码分析 作者:floer rivor 2021 年 4 月 30 日 本文字数:5066 字 阅读完需:约 17 分钟 概述 音频变速变调在不同的场景可以分 ...

  7. 基于 CoreAudio 的音频编解码(一):音频解码

    系列文章目录 基于 CoreAudio 的音频编解码(一):音频解码 基于 CoreAudio 的音频编解码(二):音频编码 前言 Core Audio 是iOS和MAC系统中的关于数字音频处理的基础 ...

  8. 基于 FFMPEG 的音频编解码(二):音频解码

    音频解码 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译 基于 FFMPEG 的音频编解码(二):音频解码 基于 FFMPEG 的音频编解码(三):音频编码 在 Hell ...

  9. python音频实时频谱分析_基于python的音频设计及频谱分析

    74 Internet Technology 互联网 + 技术 一.引言 WAV 是 Microsoft 开发的一种声音文件格式,虽然它支持多种压缩格式,但是它通常被用来保存未压缩的声音数据(PCM ...

最新文章

  1. 数据中心推动的10大企业存储新趋势
  2. python多元线性回归模型_python – 使用Tensorflow的多元线性回归模型
  3. linux的内核设计,Linux内核设计艺术(经典).pdf
  4. 鸿蒙系统今日发布 中国人自己的操作系统,鸿蒙系统今日发布,中国人自己的操作系统...
  5. Boost:基于Boost的聊天的应用程序
  6. 牛客题霸 [判断二叉树是否对称] C++题解/答案
  7. python不能安装怎么办_python3安装不上怎么办
  8. SpringBoot—Entity父子类表@Inheritance和@MappedSuperclass
  9. 研究机构:特斯拉Model 3是2月份最畅销电动汽车
  10. 来!把 5000 微信好友头像拼成一张图!
  11. Deepin安装Eclipse
  12. 去哪找计算机相关论文,计算机行业论文在哪发表有影响力
  13. 利用随机数生成器生成固定概率生成器
  14. 如何用 Kaldi 训练一个 DNN 声学模型
  15. 数据仓库建模指南视频教程|数据仓库视频教程
  16. #定位系统性能瓶颈# sysdig
  17. Java-设计模式之调停者模式
  18. 新手坐高铁怎么找车厢_坐高铁时如何快速找到自己车票上的车厢和座位! 说出来你都不敢相信...
  19. 植物纳米探测器简介 | 综述(Nanobiotechnology approaches for engineering smart plant sensors)
  20. 三维地图开发平台-支持离线地图开发

热门文章

  1. 渔港股份创业板IPO上会被否:审核被终止,曾计划募资3.3亿元
  2. bootstrap4笔记
  3. 如何阻止华为杀应用_如何解决华为手机“杀后台”严重的情况呢?小技巧就能轻松搞定...
  4. 关于智能水表背后的“节水效应”
  5. 华为云照片的爬虫程序更新(python3.6)
  6. 小猿圈python金角大王_小猿圈python学习-基本数据类型
  7. Docker 配置阿里云加速
  8. 2021年塔式起重机司机复审考试及塔式起重机司机考试试题
  9. MyBatis级联一对一与一对多
  10. “棱镜”入侵手机App, 爱加密有效防窃听