语音信号基本知识和处理技术_信号的调制与解调原理「建议收藏」

语音信号基本知识和处理技术_信号的调制与解调原理「建议收藏」语音信号(音频;声音)是模拟信号,现实生活中表现为连续的、平滑的波形,其横坐标为时间轴,纵坐标表示声音的强弱

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

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

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 np

plt.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,采样数]

 

 

今天的文章语音信号基本知识和处理技术_信号的调制与解调原理「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/77841.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注