语音信号(音频;声音)是模拟信号,现实生活中表现为连续的、平滑的波形,其横坐标为时间轴,纵坐标表示声音的强弱。

我们需要将其保存为数字信号再进行处理。

1. 声音三要素

1.1 音调

人耳对声音高低的感觉称为音调。音调主要与声波的频率有关。声波的频率高,则音调也高。

人耳听觉音频范围是20Hz-20000Hz

1.2 音量

人耳对声音强弱的主观感觉称为响度。响度和声波的振幅有关。一般说来,声波振动幅度越大则响度也越大。

1.3 音色

音色是人们区别具有同样响度、同样音调的两个声音之所以不同的特性,或者说是人耳对各种频率、各种强度的声波的综合反应。

音色与声波的振动波形有关,或者说与声音的频谱结构有关。

2.语音信号四个重要参数

2.1 声道数

为了播放声音时能够还原真实的声场,在录制声音时在前后左右几个不同的方位同时获取声音,每个方位的声音就是一个声道。

主要分为单声道、双声道

2.2 采样率(Sample rate)

每秒内对声音信号采样样本的总数目,一般采样率有8kHz、16kHz、32kHz、44.1kHz、48kHz等。 (8kHz=8k/s, 每秒采样8k个点)

采样频率越高,声音的还原就越真实越自然,当然数据量就越大。

2.3 量化位数(Bit depth)

也称为“位深”,每个采样点中信息的比特(bit)数。

2.4 码率

也叫比特率,是指每秒传送的bit数。单位为 bps(Bit Per Second),比特率越高,每秒传送数据就越多,音质就越好。

码率计算公式: 码率 = 采样率 * 采样大小 * 声道数

在对音频进行压缩时,比特率就成为了我们的一个要选的选项了,越高的比特率,其音质也就越好。

3. 冗余信息

冗余信息包括人类听觉范围之外的音频信号和被掩蔽掉的音频信号。

什么是被掩蔽的信号呢?信号的掩蔽分为频域掩蔽和时域掩蔽。

3.1 时域掩蔽效应

在时间上相邻的声音之间有掩蔽现象,称为时域掩蔽。

时域掩蔽又分为超前掩蔽和滞后掩蔽,如下图所示。产生时域掩蔽的主要原因是人的大脑处理信息需要花费一定的时间。

一般来说,超前掩蔽很短,只有大约5~20ms,而滞后掩蔽可以持续50~200ms。

3.2 频域掩蔽效应

人类听觉范围是20-20000Hz,但这并不意味着只要是这个频率范围内的声音都可以听到,能否听到还与声音的分贝大小有关。

1)有个分贝临界值,高于临界值的声音才能听到,低于临界值的声音就听不到,在不同的频率下这个临界值是不一样的。

如下图所示,横坐标为频率,纵坐标为分贝值,图中的黑色曲线就是这个临界值曲线,所以位于曲线下方的声音是听不到的。

2)还有一种情况,比如2个音调(频率)差不多的人同时说话,一个声音很大,一个声音很小,声音小的会受到声音大的影响,导致声音小的无法被听到。

如下图所示,红色柱子是一个很大分贝的声音,它会产生掩蔽效应将与它频率相近的小分贝的声音掩蔽掉,红柱子两边的蓝色曲线就是它的掩蔽范围曲线,紫色柱子在它的掩蔽范围内,所以听不到的;而绿色柱子不在,所以可听到。

4. python读取音频文件的库

4.1 wave

import wave
import matplotlib.pyplot as plt
import numpy as npplt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示符号file='E:/MEAD/database/MEAD-W017/audio/angry/0.wav'# 文件读取
wave_read = wave.open(file,mode="rb")# 返回声音信号的参数(声道数、量化位数、采样频率、采样点数、压缩类型、压缩类型的描述)
params = wave_read.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]# 读取N个音频数据(以取样点为单位),返回字符串格式
str_data = wave_read.readframes(nframes)  #  ‘\x00\x00....’# 关闭文件
wave_read.close()# 将字符串转换为数组,得到一维的short类型的数组
# 如果声音文件是双声道的,则它由左右两个声道的取样交替构成:LR
wave_data = np.fromstring(str_data, dtype=np.short)  # len: 采样点数*2# 赋值的归一化
wave_data = wave_data * 1.0 / (max(abs(wave_data)))# 整合左声道和右声道的数据
wave_data = np.reshape(wave_data, [nframes, nchannels])# 最后通过采样点数和取样频率计算出每个取样的时间
time = np.arange(0, nframes) * (1.0 / framerate)plt.figure()
# 左声道波形
plt.subplot(2, 1, 1)
plt.plot(time, wave_data[:, 0])
plt.xlabel("时间/s",fontsize=14)
plt.ylabel("幅度",fontsize=14)
plt.title("左声道",fontsize=14)
plt.grid()  # 标尺plt.subplot(2, 1, 2)
# 右声道波形
plt.plot(time, wave_data[:, 1], c="g")
plt.xlabel("时间/s",fontsize=14)
plt.ylabel("幅度",fontsize=14)
plt.title("右声道",fontsize=14)plt.tight_layout()  # 紧密布局
plt.show()

4.2 scipy.io.wavfile

import numpy as np
import scipy.io.wavfile
from matplotlib import pyplot as plt# 读取数据,返回采样率和audio数据,如果是多通道signal为多维向量
file='E:/MEAD/database/MEAD-W017/audio/angry/0.wav'
sample_rate, signal = scipy.io.wavfile.read(file) # len: 采样数signal=signal[:,0]
original_signal = signal[0:int(1*sample_rate)]
sample_num = np.arange(len(original_signal))# 绘图
plt.figure(figsize=(11,7), dpi=500)
plt.subplot(212)
plt.plot(sample_num/sample_rate, original_signal, color='blue')
plt.xlabel("Time (sec)")
plt.ylabel("Amplitude")
plt.title("1s signal of Voice ")
plt.savefig('audio.png')

4.3 librosa

import librosa#返回audio data 和采样率; 返回结果是经过归一化处理的
#如果sr 缺省,会默认以22050的采样率读取音频
y, sr = librosa.load(file, sr=None)  # len: 采样数 # 可以读取双通道数据
# mono:该值为true时候是单通道、否则为双通道
y, sr = librosa.core.load(file, sr=None,mono=False) # y:[2,采样数]

语音信号基本知识和处理相关推荐

  1. 头歌:实验6(2)语音信号单音干扰滤波实训

    第1关:低通滤波器设计 1.已知语音信号频率范围是:300Hz~3.4kHz,现有一噪声为7kHz,理想低通滤波器的截止频率应该选择多少__B__kHz A.3 B.5 C.8 D.10 第2关:语音 ...

  2. 语音信号之基础知识(一)

    %%感染了一个学年的语音氛围,自己也做了一些这方面的研究,但仿佛空中架楼,很多基础不是很扎实,而且前晚忽然意识到语音的重要,所以打算一点一点把语音基础知识积累起来,而且为了加深理解和便于复习,特此记录 ...

  3. 利用函数wavread对语音信号进行采样_语音信号处理相关知识

    本文的初衷是为后续模型介绍和论文速览提供一个过渡,核心价值在于介绍一些较为基础的概念,以使得后文中如遇到不太理解的概念通过本文查证 一.语音的表示 语音的表示形式本质为波形,从语音到波形的理解可以想象 ...

  4. 【国内首家】第一个基于语音生成实时知识图谱的系统来啦!!!

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要8分钟 Follow小博主,每天更新前沿干货 基于文本生成知识图谱的研究很常见,但是基于语音生成知识图谱,这算是第一家. 在这个信息飞速发展的 ...

  5. 语音信号短时域分析之预处理(三)

    语音信号短时域分析之预处理(三) 标签: 预加重加窗分帧矩形窗汉明窗 2014-07-13 21:09 934人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: 语音信号处理(6) 作者同类文章 ...

  6. 利用函数wavread对语音信号进行采样_AI大语音(一)——语音识别基础(深度解析)...

    1 声音特性​ 声音(sound)是由物体振动产生的声波.是通过介质传播并能被人或动物听觉器官所感知的波动现象.最初发出振动的物体叫声源.声音以波的形式振动传播.声音是声波通过任何介质传播形成的运动. ...

  7. 语音信号的基音参数提取

    文章目录 一.目的及原理 1.短时自相关法 2.倒谱法 二.两种方法实现 1.短时自相关法 1.程序代码 2.运行结果 2.倒谱法 1.程序代码 2.仿真结果 三.分析对比 1.自相关法运行结果 2. ...

  8. matlab如何采集两路语音信号,基于MATLAB的语音信号采集与处理

    内容介绍 原文档由会员 大雨倾盆 发布 基于MATLAB的语音信号采集与处理 2.4万字 114页 原创作品,已通过查重系统 摘要 语音信号处理作为目前发展最为迅速的信息科学研究领域的核心技术,它是一 ...

  9. matlab双线性变换切比雪夫2,语音信号滤波去噪——使用双线性变换法设计切比雪夫II型.doc...

    语音信号滤波去噪--使用双线性变换法设计切比雪夫II型.doc 语音信号滤波去噪--使用双线性变换法设计切比雪夫II型滤波器 学生姓名:李谷越 指导老师:胡双红 摘 要 本课程设计的主要目的石设计一个 ...

最新文章

  1. 第一次软件工程作业(改进版)
  2. 解决hao123胁持chrome等浏览器主页问题
  3. jasmine.spy对象的and.returnValue方法单步调试
  4. SAP UI5 busy dialog - SVG
  5. 成为更优秀的程序员:退后一步看问题
  6. 【~~~】POJ-1006
  7. sqoop从oracle导入hive分区,sqoop从oracle导入hive Hive exited with status 64
  8. node soket.io + express + vue-soket.io 之间实现通信
  9. xxd命令转换二进制十六进制文件
  10. 一次tomcat数据乱码事件
  11. SSM项目实战之十八:基础数据的修改和删除
  12. Simulink 快速入门(二)--创建简单模型
  13. L1-7 机工士姆斯塔迪奥 (20 分),C语言
  14. Borel probability measure space (Borel 概率测度空间)是个啥?
  15. 基于JAVA教学质量测评系统计算机毕业设计源码+系统+lw文档+部署
  16. 排列组合Cnm的求法
  17. 秋天,小溪潺潺,古老的树上黄叶灿灿,阳光像一个魔法师,在树叶间流动,远山,云天,充满秋阳的光线。以此景观做一首诗...
  18. vue-cli创建uni-app项目
  19. NOIP2004P4 火星人 题解
  20. 抖音html啥意思,用了这么久的抖音,你知道抖音到底是啥意思吗?

热门文章

  1. 草图大师(SketchUp)2022安装图文教程
  2. 信息安全国内测评认证标准
  3. 【LabVIEW FPGA图形化】 ngc、edf网表文件的编写:LED流水灯
  4. 升级长江存储最新闪存,忆恒创源发布新一代企业级NVMe SSD
  5. 基于单片机的八路温度采集系统设计(#0446)
  6. 树莓派怎么运行python程序?
  7. 神经网络那些事之在现实生活中的应用
  8. 计算机一级2021excel,2021年计算机一级EXCEL操作题-20210514115911.doc-原创力文档
  9. 计算机科学导论与前沿,计算机科学导论(英中双语版)
  10. 安装会声会影2018时出现Error1935错误的解决方法