当前位置: 首页 > news >正文

【音视频】音频基础

一、音频基础

1.1 声音的物理性质 ——振动

声音是一种由物体振动引发的物理现象,如小提琴的弦声等。物体的振动使其四周空气的压强产生变化,这种忽强忽弱变化以波的形式向四周传播,当被人耳所接收时,我们就听见了声音。

在这里插入图片描述

1.2 声音的物理性质 ——波形

声音是由物体振动产生的,这种振动引起了周围空气压强的振荡,我们称这种振荡的函数表现形式为波形。

在这里插入图片描述

1.3 声音的物理性质 ——频率

声音的频率是周期的倒数,它表示的是声音在1秒钟内的周期数,单位是赫兹(Hz)。前赫兹(kHz)即1000Hz,表示每秒振动1000次。声音按照频率可以作如下划分:

  • 次声: 0~20Hz
  • 人耳能听见的声音:20Hz~20kHz
  • 超时 20kHz - 1GHz
  • 特超声 1GHz~10THz

1.4 声音的物理特性 ——振幅

声音有振幅,振幅的主观感觉是声音的大小。声音的振幅大小取决于空气压力波距平均值(也称平衡态的最大偏移量)。
在这里插入图片描述

2.数字音频

计算机并不直接使用连续平滑的波形来表示声音,它是每隔固定的时间对波形的幅值进行采样,用得到的一系列数字量来表示声音。下图是采样后的数音频的波形

在这里插入图片描述

  • PCM脉冲编码调制:PCM(Pulse Code Modulation)脉冲编码调制。人耳听到的是模拟信号,PCM是把声音从模拟信号转化为数字信号的技术。

为了将模拟信号数字化,主要分为三个步骤:采样、量化、编码。

2.2 数字音频 ——采样频率

根据Nyguist采用定律,要从采样中完全恢复初始信号波形,采样率必须至少是信号中最高频率的两倍。

前面提到人耳能听到的频率范围是[20Hz - 20kHz],因此,采样频率一般是44.1kHz,这样就能保证声音到达20kHz也能被数字化,从而使得数字化处理之后,人耳能听到的声音质量也不会被降低。

  • 采样频率:每秒采样的点的个数,常用的采用频率有:22kHz、44.1kHz、48kHz、96kHz、192kHz等等

2.2 数字音频 ——采样量化

采样实在离散的时间点上进行的,而采样值本身在计算机也是离散的。
采样值的精度取决于它用多少位来表示,这就是量化。例如8为量化可以表示256个不同的值,而CD质量的16为量化可以表示65536个值,范围是[-32768,32767]。

下图是一个3位量化的示意图,可以看出3位量化只能表示8个值,还原后的声音非常差。

在这里插入图片描述

2.3 音频常见名词

  • 采样频率:每秒采样的点的个数,常用的采用频率有:22kHz、44.1kHz、48kHz、96kHz、192kHz等等
  • 采样精度(采样深度):每个样本点的大小,常用的大小为8bit、16bit、24bit
  • 通道数:单声道、双声道、四声道、5.1声道
  • 比特率:每秒传输的bit数,单位是bps(bit per second),是间接衡量声音质量的一个标准。没有压缩的音频数据的比特率 = 采样频率 * 采样精度(深度)*通道数。
  • 码率:压缩后的音频数据的比特率。常见的码率有:96kbps、128-160kbps,192kbps,256-320kbps。码率越大,压缩效率越低,音质越好,压缩后的数据越大。码率 = 音频文件大小 / 时长

比如,采样频率44100,采样精度16bit、2通道(声道),采集4分钟的数据为:44100 * 16 * 2 *4*60 = 338688000bit = 40M
字节。比特率:采样频率*采样精度*通道数 = 44100 * 16 * 2 = 1411200bit/s

  • 帧:每次编码的采样单元数,比如MP3通常是1152个采样点作为一个编码单元,AAC通常是1-24采样点作为一个编码单元
  • 帧长:可以指每帧播放持续的时间:每帧持续时间(秒) = 每帧采样点数/采样频率(HZ)。比如,MP3 48k,1152个采样点,每帧则为24毫秒;也可以指压缩后每帧的数据长度,因此需要根据场景来确定所表示的含义。
  • 交错模式:数字信号存储的方式。数据以连续帧的方式存放,即首先记录帧1的左声道样本和右声道样本,再开始帧2的记录…
    在这里插入图片描述
  • 非交错模式:首先记录的是一个周期内所有帧的左声道样本,再记录所有右声道的也样本。
    在这里插入图片描述

2.4 音频编码原理简介

数字音频信号如果不加压缩地直接传输,将会占用极大的带宽。例如,一套双声道数字音频若取采样率为44.1kHz,每样值按照16bit进行量化,那么码率为:244.1kHz16bit = 1.411Mbit/s。如此大的带宽对于传输和处理都带来许多的成本,因此必须采取音频压缩技术对音频进行处理,才能有效地传输音频数据。

数字音频压缩编码在保证信号在听觉方面不产生失真的前提下,对音频数据信号尽可能大的压缩,降低数据量。数字音频压缩编码采取去除声音中的冗余成分的方法进行实现。所谓冗余成分指的是音频中不能被人耳感知到的信号,他们对确定声音的音色、音调等信息没有任何的帮助。

冗余信号包含人耳听觉范围外的音频信号以及被掩蔽掉的音频信号等。例如,人耳所能察觉的声音信号的频率范围为20Hz~20kHz,除此之外的其他频率人耳无法察觉,都可视为冗余信号。

此外,根据人耳听觉的生理和心理学现象,当一个强音信号与一个弱音信号同时存在时,弱音信号会被强音信号所掩蔽而听不见,这样弱音信号就可以被视为冗余信号而不用传送。这就是人耳听觉的掩蔽效应,主要表现在频谱掩蔽效应时域掩蔽效应

2.4.1 频谱掩蔽效应

一个频率的声音能量小于某个阈值之后,人耳就会听不到,当有另外能量较大的声音出现的时候,该声音频率附近的阈值会提高很多,即所谓的掩蔽效应,如下图所示
在这里插入图片描述

因此,当有强音存在的时候,在强音附近低于一定频率的弱音就可以被视为冗余信号不必传输

2.4.2 时域掩蔽效应

当强音信号和弱音信号同时出现时,还存在时域掩蔽效应。即两者发生时间很接近的时候,也会发生掩蔽效应。时域掩蔽过程曲线如下图所示,分为前掩蔽,同时掩蔽和后掩蔽三种:
在这里插入图片描述

  • 前掩蔽:指的是人耳仔听到强信号之前的短暂时间内,已经存在的若信号会被掩蔽而听不到。
  • 同时掩蔽:指的是当强信号与弱信号同时存在的时候,弱信号会被强信号所掩蔽而听不到。
  • 后掩蔽:指的是当强信号消失后,需要经过较长的一段时间才能重新听到弱信号,称为后掩蔽。

这些被掩蔽的弱信号被称为冗余信号

2.5 压缩编码方法

当前数字音频编码领域存在不同的编码方案和实现方式。但基本的编码思路大同小异,如下图所示:
在这里插入图片描述

对每一个音频声道中的音频采样信号:

  1. 将它们映射到频域中,这种时域到频域的映射可通过子带滤波器实现。每个声道中的音频采样块首先要根据心理学模型来计算掩蔽门限值
  2. 由计算出的掩蔽门限决定从公共比特池中分配给该声道的不同频率域中多少比特数,接着进行量化已经编码工作。
  3. 将控制参数及辅助数据加入数据之中,产生编码后的数据流。

3.1 常见的音频编解码器选型

  • OPUS、MP3、AAC、AC3和EAC3杜比公司的方案

相关文章:

【音视频】音频基础

一、音频基础 1.1 声音的物理性质 ——振动 声音是一种由物体振动引发的物理现象,如小提琴的弦声等。物体的振动使其四周空气的压强产生变化,这种忽强忽弱变化以波的形式向四周传播,当被人耳所接收时,我们就听见了声音。 1.2 声…...

策略模式的C++实现示例

核心思想 策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装在独立的类中,使得它们可以互相替换。策略模式让算法的变化独立于使用它的客户端,从而使得客户端可以根据需要动态切换算法,而不需要修改…...

本地部署pangolin获取谱系,从而达到预测新冠的流行趋势

步骤 1:安装Docker 注:此步骤忽略,可通过Docker官网对于文档进行安装,地址如下 Docker: Accelerated Container Application Developmenthttps://www.docker.com/ 步骤 2:拉取Pangolin镜像 docker pull staphb/pangolin:latest 步…...

【我的 PWN 学习手札】House of Emma

House of Emma 参考文献 第七届“湖湘杯” House _OF _Emma | 设计思路与解析-安全KER - 安全资讯平台 文章 - house of emma 心得体会 - 先知社区 前一篇博客【我的 PWN 学习手札】House of Kiwi-CSDN博客的利用手法有两个关键点,其一是利用__malloc_assert进入…...

4 Redis4 List命令类型讲解

Redis 列表(List)命令详解 1. Redis 列表(List)简介 Redis 列表(List)是一个简单的字符串列表,按照插入顺序排序。它可以用作 栈(Stack) 和 队列(Queue&…...

CentOS 7 安装 Redis6.2.6

获取资源、下载安装 Redis6.2.6 安装Redis6.2.6 上传到服务器或直接下载(wget http://download.redis.io/releases/redis-6.2.6.tar.gz)、再解压安装 tar -zxvf redis-6.2.6.tar.gz 进入redis解压目录 cd redis-6.2.6先编译 make再执行安装 make PREFI…...

数据库原理4

1.数据库中的数据通常可分为用户数据和系统数据两部分。用户数据是用户使用的数据;系统数据称为数据字典。 2.SQL语言的功能:数据查询;数据操纵;数据定义;数据操作;数据控制 3.对未提交更新的依赖&#x…...

doris: MySQL

Doris JDBC Catalog 支持通过标准 JDBC 接口连接 MySQL 数据库。本文档介绍如何配置 MySQL 数据库连接。 使用须知​ 要连接到 MySQL 数据库,您需要 MySQL 5.7, 8.0 或更高版本 MySQL 数据库的 JDBC 驱动程序,您可以从 Maven 仓库下载最新或指定版本的…...

Django模型数据删除:详解两种方式

Django模型数据删除:详解两种方式 在Django框架中,数据模型(Model)不仅定义了应用的数据结构,还提供了与数据库交互的接口,包括数据的删除操作。本文将详细介绍两种在Django中删除数据的方式:通…...

C++并发以及多线程的秘密

1.基础概念 并发(Concurrency) 并发是指在同一时间段内,多个任务看起来像是同时执行的。并发并不一定意味着真正的同时执行,它可以是通过时间片轮转等方式在多个任务之间快速切换,让用户感觉多个任务在同时进行。并发…...

自学微信小程序的第十二天

DAY12 1、腾讯地图SDK是一套为开发者提供多种地理位置服务的工具,可以使开发者在自己的应用中加入地图相关功能,轻松访问腾讯地图服务和数据,更好地实现微信小程序的地图功能。 表49:search()方法的常用选项 选项 类型 说明 keyword string POI搜索关键词,默认周边搜索 l…...

⭐算法OJ⭐跳跃游戏【贪心算法】(C++实现)Jump Game 系列 I,II

既股票买卖系列之后的第二组贪心算法题目:跳跃游戏系列。这一篇介绍的两个问题,其输入均为一个数组,每个元素表示在该位置可以跳跃的最大长度。 55. Jump Game You are given an integer array nums. You are initially positioned at the …...

带你从入门到精通——自然语言处理(五. Transformer中的自注意力机制和输入部分)

建议先阅读我之前的博客,掌握一定的自然语言处理前置知识后再阅读本文,链接如下: 带你从入门到精通——自然语言处理(一. 文本的基本预处理方法和张量表示)-CSDN博客 带你从入门到精通——自然语言处理(二…...

ubuntu挂载固态硬盘

Ubuntu 中挂载位于 /dev/sdc1 的固态硬盘,可以按照以下步骤操作: 步骤 1:确认分区信息 首先,确保设备 /dev/sdc1 存在且已正确分区: sudo fdisk -l /dev/sdc # 查看分区表 lsblk # 确认分区路…...

WPF+WebView 基础

1、基于.NET8&#xff0c;通过NuGet添加Microsoft.Web.WebView2。 2、MainWindow.xaml代码如下。 <Window x:Class"Demo.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/win…...

国内光子AI智能引擎:OptoChat AI在南京江北新区亮相

3月3日&#xff0c;从南京市投资促进局传来振奋人心的消息&#xff0c;南京江北新区的一家高科技企业——南京南智先进光电集成技术研究院有限公司&#xff08;简称“南智光电”&#xff09;&#xff0c;携手南京知满科技等合作伙伴&#xff0c;成功研发出国内首个光子AI智能引…...

vscode离线配置远程服务器

目录 一、前提 二、方法 2.1 查看vscode的commit_id 2.2 下载linux服务器安装包 2.3 安装包上传到远程服务器&#xff0c;并进行文件解压缩 三、常见错误 Failed to set up socket for dynamic port forward to remote port&#xff08;vscode报错解决方法&#xff09;-C…...

【安装】SQL Server 2005 安装及安装包

安装包 SQLEXPR.EXE&#xff1a;SQL Server 服务SQLServer2005_SSMSEE.msi&#xff1a;数据库管理工具&#xff0c;可以创建数据库&#xff0c;执行脚本等。SQLServer2005_SSMSEE_x64.msi&#xff1a;同上。这个是 64 位操作系统。 下载地址 https://www.microsoft.com/zh-c…...

使用Maven搭建Spring Boot框架

文章目录 前言1.环境准备2.创建SpringBoot项目3.配置Maven3.1 pom.xml文件3.2 添加其他依赖 4. 编写代码4.1 启动类4.2 控制器4.3 配置文件 5.运行项目6.打包与部署6.1 打包6.2 运行JAR文件 7.总结 前言 Spring Boot 是一个用于快速构建 Spring 应用程序的框架&#xff0c;它简…...

将docker容器打包为.tar包

1. 创建打包脚本 #!/bin/bash # 设置 -e 使得脚本在遇到错误时停止执行 set -e# 必要的参数 exported_container_name"needed_export_container_name_or_id" # 需要被导出的容器的名称或id image_save_name"my_custom_image_name:v25.03.03" # 镜像需…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

Python学习(8) ----- Python的类与对象

Python 中的类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心。我们可以通过“类是模板&#xff0c;对象是实例”来理解它们的关系。 &#x1f9f1; 一句话理解&#xff1a; 类就像“图纸”&#xff0c;对…...