前言

自从接触到数字信号,特别是采样定理之后,我就一直非常好奇一个问题:两个相邻的采样点之间,要以什么样的形式,怎么样连接起来?

因为正弦波才是频率最单一的波形,如果两个采样点直接用直线连接(变成了三角波),那么又能产生更高频率的信号了,显然跟采样定理是相悖的。

所以我就想,是不是有一种插值的方法,在两个采样点之间的插值形成的是一条正线曲线?

直到接触到了sinc函数(又称为抽样函数,Sa函数,辛格函数),才豁然开朗。

小小的一个从采样点还原波形的过程,就蕴含了这么多知识。

AD/DA转换

真实世界中的音频信号被麦克风接收之后,传送到了声卡上的AD芯片上进行了模数转换,将连续的振动离散化为一个一个离散的采样点,以便于交给其他数字设备进一步处理。

将模拟信号转换为数字信号的过程,在信号处理领域叫做采样(Sampling)。我们可以形象地把这个过程理解为使用一连串宽度非常窄的脉冲和输入信号相乘。而得到的结果则是一连串时间上不连续的脉冲。

而当我们需要从数字设备里将音频播放出来,我们就需要进行一个相反的过程。数据被传送到声卡上,经过DA芯片进行数模转换之后,输出可以连接到扬声器上的模拟电信号。这时候,就需要一个办法,来将离散的点变得连续起来了。

从时域到频域

在对信号进行处理的过程中,我们经常使用傅立叶变换。傅立叶变换将信号从时域转到频域,便于分析和处理。

当采样脉冲的宽度越来越窄,采样后的信号具有的频谱宽度会越来越宽。在理论分析时,我们可以假设脉冲的宽度趋于0,也就是δ函数。这时候信号的频谱在频域上无限重复延展。

我们在还原信号的时候,只需要在频谱上做一个低通滤波,把那些延展出来的频率过滤掉,得到的就是原始的信号啦!

而根据傅立叶变换的性质,在频域上乘积,等价于在时域上的卷积。而低通滤波器,可以近似看为一个矩形函数。矩形函数的傅立叶变换(或者逆变换),则是Sinc函数。

所以,低通滤波的操作,又相当于把采样点和Sinc函数进行了卷积。采样点和采样点之间的曲线,也就自然而然地形成了。

直观地感受卷积的过程

写了段代码来展示卷积操作的这个过程。

简直太漂亮了好吗!!!入迷了!!!

由于卷积跟信号的顺序没有关系,互换一下两个函数,虽然看起来不那么直观,但是也是很炫酷的一个过程,嘻嘻

再来看看使用卷积生成其他函数

实际上,DA的的输出电路里,我们会使用一个模拟低通滤波器来完成这项把离散的采样点变成连续的输出波形的工作。

了解更多音频知识:

sinc函数卷积_从采样点到声音:sinc函数和卷积相关推荐

  1. python中list作为函数参数_在python中list作函数形参,防止被实参修改的实现方法

    0.摘要 我们将一个list传入函数后,函数内部对实参修改后,形参也会随之改变.本文将主要介绍这种错误的现象.原因和解决方法. 1.代码示例 def fun(inner_lst): inner_lst ...

  2. Java函数编码_转[收集java的常用函数代码]

    转[收集java的常用函数代码] package net.java2000.tools; /** * Title:        Java Bean 工具 * Description: * Copyr ...

  3. thinkphp5常用函数汇总_(thinkPHP)PHP常用函数大全

    usleep() 函数延迟代码执行若干微秒. unpack() 函数从二进制字符串对数据进行解包. uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID. time_sleep_unti ...

  4. python中reduce函数用法_一文读懂reduce函数

    Python中的reduce函数是经常和map,filter一起被提到的函数,但是reduce的工作原理却不是那么直观,我们这里就来详细讲解一下这个函数. 首先先来看一下reduce函数的用法 imp ...

  5. python高阶函数心得_没有学不会的python--高阶函数

    没有学不会的python 函数式编程 到现在为止,我们的没有学不会python系列文章已经讲了很多知识点了,如果是第一次刷到这篇文章的朋友可以去我主页看一下以前写的文章.前面讲了很多知识点,每个知识点 ...

  6. mysql 常用函数循环_近30个MySQL常用函数,看到就是学到,纯干货收藏!

    概念: 相当于java中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名隐藏了实现细节 提高代码的可重用性 使用: select 函数名(实参列表)[from 表]    []中内容可省略 正文: ...

  7. if函数和and函数嵌套_在Excel中嵌套IF函数

    if函数和and函数嵌套 The IF function lets you test something in Excel, and show one result if the test resul ...

  8. 常用MySQL函数存储过程_解析MySQL存储过程、常用函数代码

    mysql存储过程的概念: 存储在数据库当中可以执行特定工作(查询和更新)的一组SQL代码的程序段. mysql函数的概念: 函数是完成特定功能的SQL语句,函数分为内置函数和自定义函数(user-d ...

  9. matlab调用python函数未定义函数类_从零学习Python—调用函数def用法(下)

    我们先来看看def和字典的用法吧: def ranks(name, number): ranks = {'name': name, 'rank': number}print(ranks)name = ...

最新文章

  1. 项目管理之需求调研感悟
  2. 跟优秀的人一起进步:四月组队学习
  3. leetcode —— 783. 二叉搜索树结点最小距离
  4. 【转】jsp+servlet和SSM分别是如何实现文件上传(示例)
  5. linux oracle11g客户端安装
  6. 为什么css效果在本地测试没问题,上传到服务器后却显示位置乱动,css下拉菜单本地正常,上传后360浏览器中显示错位,火狐、IE8显示正常...
  7. 项目总结【Excel中附件导出和导入】
  8. python学习笔记十——异常处理
  9. 智能陈桥输入法软件测试,智能陈桥拼音输入法
  10. 单片机基础知识学习笔记
  11. dosbox基础使用
  12. Microbiome:根际微生物影响植物开花时间
  13. SQLServer2000数据库导入步骤
  14. 30岁是全新的20岁?---《20岁时光不再来》
  15. 模拟cmos集成电路(9)
  16. linux 启动openfire
  17. origin Pro 9.0画多条三维折线图(此处以两条为例)
  18. ONES 敏捷项目管理迭代流程图文演示
  19. Linux 第九章-系统进程和服务管理
  20. TI CC32XX SDA中SimpleLink Academy教程翻译(RTOS部分的基础介绍非常易懂)

热门文章

  1. php rabbit pie broke,Unit 3 Our animal friends
  2. Fluent 操作入门实例-从建模到计算结果可视化
  3. 华为云服务器不显示盘符,云服务器只有一个盘符可以
  4. sqoop 导出hive数据到MySQL数据库当中
  5. MySQL当中的约束条件
  6. 暖暖CEO姚润昊:“公司80%都是女生,大多是踏实的90后”
  7. linux 进程调度 运行队列 自旋锁,linux内核进程调度(自旋锁)
  8. STM32F4串口通信
  9. 查询结果按照字母顺序排序
  10. 怎么找到当地供应商_微商怎么找一手货源供货商(微商新手必看教程)