Python语音信号处理

article/2025/10/21 21:35:12

个人博客:http://www.chenjianqu.com/

原文链接:http://www.chenjianqu.com/show-44.html

 语言信息是多种信息的混合载体 ,其中包括内容信息、说话人信息和情感信息。 本文介绍了一些语音的基本知识,和使用Python进行处理。

 

时域特征

    使用wave模块读取wav音频文件,画图时域图像,代码如下。

import numpy as np
import matplotlib.pyplot as plt
import os
import wavepath='D://NLP//dataset//语音情感//test.wav'
f=wave.open(path,'rb')
params=f.getparams()
#通道数、采样字节数、采样率、采样帧数
nchannels,sampwidth,framerate,nframes=params[:4]
voiceStrData=f.readframes(nframes)
waveData = np.fromstring(voiceStrData,dtype=np.short)#将原始字符数据转换为整数
#音频数据归一化
waveData = waveData * 1.0/max(abs(waveData))
#将音频信号规整乘每行一路通道信号的格式,即该矩阵一行为一个通道的采样点,共nchannels行
waveData = np.reshape(waveData,[nframes,nchannels]).T # .T 表示转置
f.close()time=np.arange(0,nframes)*(1.0/framerate)
plt.plot(time,waveData[0,:],c='b')
plt.xlabel('time')
plt.ylabel('am')
plt.show()

代码执行结果:

index.png

 

频域特征

    numpy模块自带了快速傅里叶变换的函数,对上面的音频数据进行傅里叶变换,代码如下:

fftdata=np.fft.fft(waveData[0,:])
fftdata=abs(fftdata)
hz_axis=np.arange(0,len(fftdata))
plt.figure()
plt.plot(hz_axis,fftdata,c='b')
plt.xlabel('hz')
plt.ylabel('am')
plt.show()

程序运行结果:

fft.png

 

语谱图

    使用matplotlib可以直接获得语谱图,代码如下:

#帧长20~30ms
framelength = 0.025 
#每帧点数 N = t*fs,通常情况下值为256或512,要与NFFT相等
#而NFFT最好取2的整数次方,即framesize最好取的整数次方
framesize = framelength*framerate  
#找到与当前framesize最接近的2的正整数次方
nfftdict = {}
lists = [32,64,128,256,512,1024]
for i in lists:nfftdict[i] = abs(framesize - i)
sortlist = sorted(nfftdict.items(), key=lambda x: x[1])#按与当前framesize差值升序排列
framesize = int(sortlist[0][0])#取最接近当前framesize的那个2的正整数次方值为新的framesizeNFFT = framesize #NFFT必须与时域的点数framsize相等,即不补零的FFT
overlapSize = 1.0/3 * framesize #重叠部分采样点数overlapSize约为每帧点数的1/3~1/2
overlapSize = int(round(overlapSize))#取整
spectrum,freqs,ts,fig = plt.specgram(waveData[0],NFFT = NFFT,Fs =framerate,window=np.hanning(M = framesize),noverlap=overlapSize,mode='default',scale_by_freq=True,sides='default',scale='dB',xextent=None)#绘制频谱图         
plt.ylabel('Frequency')
plt.xlabel('Time(s)')
plt.title('Spectrogram')

程序运行结果:

sp.png

 

 

梅尔频率倒谱系数

    提取MFCCs有两种方式,通过librosa模块或者python_speech_features模块,代码如下。

    1.通过python_speech_features提取mfcc

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
from python_speech_features import mfcc, logfbank# 读取输入音频文件
sampling_freq, audio = wavfile.read(path)
# 提取MFCC和滤波器组特征
mfcc_features = mfcc(audio, sampling_freq)
filterbank_features = logfbank(audio, sampling_freq)
print('\nMFCC:\n窗口数 =', mfcc_features.shape[0])
print('每个特征的长度 =', mfcc_features.shape[1])
print('\nFilter bank:\n窗口数 =', filterbank_features.shape[0])
print('每个特征的长度 =', filterbank_features.shape[1])
# 画出特征图,将MFCC可视化。转置矩阵,使得时域是水平的
mfcc_features = mfcc_features.T
plt.matshow(mfcc_features)
plt.title('MFCC')
# 将滤波器组特征可视化。转置矩阵,使得时域是水平的
filterbank_features = filterbank_features.T
plt.matshow(filterbank_features)
plt.title('Filter bank')
plt.show()

运行结果:

mfcc1.png

 

    2.通过librosa提取mfcc

    需要说明的是,librosa.load()函数是会改变声音的采样频率的。如果 sr 缺省,librosa.load()会默认以22050的采样率读取音频文件,高于该采样率的音频文件会被下采样,低于该采样率的文件会被上采样。因此,如果希望以原始采样率读取音频文件,sr 应当设为 None。该函数返回的参数y是经过归一化的声音数据

import librosa y,sr = librosa.load(path,sr=None)
mfcc_data = librosa.feature.mfcc( y,sr,n_mfcc=13)plt.matshow(mfcc_data)
plt.title('MFCC')

运行结果:

mfcc2.png

    从上面的代码可以看到,这两个库提取出的mfcc是不一样的。


http://chatgpt.dhexx.cn/article/5St6Jurv.shtml

相关文章

语音信号处理1 ----- 基础知识

语音信号处理1 ----- 基础知识 1. 语音信号处理的目的:2. 语音发音和感知系统2.1 语音发音系统2.2 语音感知系统(听觉系统)2.2.1 听觉系统2.2.2 听觉特性 2.3 语音信号生成的数学模型 3. 语音基本概念及参数4. 语音信号数字化处理参考 1. 语音…

语音信号处理入门入籍和课程推荐

欢迎关注我的公众号,微信搜一搜【音频信号处理那些事儿】获取更多信息。 由于看网上关于语音信号处理的入门书籍和课程推荐的比较少,同时相关的领域人员也比较少,所以建了这个公众号,欢迎各位同仁指正交流,谢谢。 本…

前端语音信号处理

1、语音活动检测 语音活动检测(Voice Activity Detection, VAD)用于检测出语音信号的起始位置,分离出语音段和非语音(静音或噪声)段。VAD算法大致分为三类:基于阈值的VAD、基于分类器的VAD和基于…

语音信号处理及特征提取

1.信号处理基础 模拟信号->数字信号转化 步骤:采样和量化 奈奎斯特定律 :采样频率大于信号中最大频率的二倍 即在原始信号的一个周期中,至少要采样两个点,才能有效杜绝频率混叠问题。 信号进行离散傅里叶变换的条件&#x…

MATLAB语音信号处理系统GUI

基于MATLAB的语音信号处理 【摘 要】 Matlab语音信号处理是指利用matlab软件对音频信号进行读取,并对音频信号进行采样分析及离散傅里叶变换,以方便对其在频域上进行调制滤波等相关的操作。本次实验在提取音频信号后会对该信号使用在MATLAB软件中设计的…

《语音信号处理》 语音识别章节 读书笔记

两本书,《语音信号处理》赵力编和《语音信号处理》韩纪庆编。强烈推荐韩纪庆版本,知识点很全面,可以作为语音识别的入门中文书籍,章节很也短,很快就入门了。 P34 HMM是一个双内嵌式随机过程,由两个随机过程…

基于MATLAB的语音信号处理系统的设计

目 录 摘 要 I Abstract II 1 绪论 1 2 语音信号处理系统设计方案 2 2.1MATLAB的说明 2 2.2系统框架及实现流程图 2 2.2.1系统框架: 2 2.2.2系统流程图: 3 2.3语音信号处理相关原理知识 3 2.3.1语音信号的录入与打开 3 2.3.2采样位数和采样频率 3 2.3.3…

语音信号处理的一些基础知识

人耳的听觉掩蔽效应 一般人可以感觉到20Hz-20kHz,强度为5dB-130dB。 人耳的掩蔽效应:在一个强信号附近,弱信号将变得不可闻,被掩蔽掉了。被掩蔽的不可闻信号的最大声压级称为掩蔽门限或者掩蔽阈值。 语音信号生成的模型 理想的模…

语音信号处理概念

语音交互 你知道苹果手机有几个麦克风吗? 语音交互(VUI)是指人与人/设备通过自然语音进行信息传递的过程。 语音交互的优势: 输入效率高。语音输入的速度是传统键盘输入方式的3倍以上。例如:语音电视选台、远场语音交…

python做语音信号处理

作者:凌逆战 时间:2019年11月1日 博客园地址:python做语音信号处理 - 凌逆战 - 博客园 音频信号的读写、播放及录音 python已经支持WAV格式的书写,而实时的声音输入输出需要安装pyAudio(PyAudio: PortAudio v19 Python Bindings…

语音信号处理知识点

语音信号处理过程的总体结构: 语音输入-->预处理-->数字化-->特征提取 预处理:对信号适当放大和增益控制,并进行反混叠滤波来消除工频信号干扰 数字化:进行A/D转换 特征提取:用反映语音信号特点的若干参数…

第一章 语音信号处理概述

一、语音交互 语音交互(VUI: Voice User Interface)是指人与人或者人与设备通过自然语音进行信息传递的过程。 1. 语音交互的优势 (1)输入效率高:相对于键盘输入,语音输入的速度是传统输入方式的3倍以上(有权威统计分析得到的数…

语音信号处理-python

语音信号处理 1.语音信号的产生与特性 我们要对语音进行分析,首先要提取能够表示该语音的特征参数,有了特征参数才可能利用这些参数进行有效的处理,在对语音信号处理的过程中,语音信号的质量不仅取决于处理方法,同时…

python实验六 语音信号处理

目录 实验目的: 实验原理: 实验准备: 实验步骤与内容: 参考代码: 实验目的: 依托语音信号处理领域的声学特征提取任务,学习常用的语音信号处理工具,实现对语音数据的预处理和常…

matlab的语音信号处理

人类交换信息最方便的、最快捷的一种方式是语言,在高度发达的信息社会中,用数字化的方法进行语音的识别、合成、增强、传送和储存等是整个数字化通信网中最重要、最基本的组成部分之一。数字电话通信、高音质的窄带语音通信系统、智能机器人、声控打字机…

语音信号处理 —— 笔记(一)音频信号处理

声音的产生 :能量通过声带使其振动产生一股基声音,这个基声音通过声道 ,与声道发生相互作用产生共振声音,基声音与共振声音一起传播出去。 一、音频信号简介 1.声音波形图 传感器以某种频率探测声音的振幅强度以及振动方向&…

语音信号处理的过程及其应用

一、语音信号处理的过程 在信号处理领域,信息加工和处理的一般流程下图所示。 在语音信号的具体情况下,信息源就是说话的人,通过观察和测量得到的就是语音的波形。信号处理包括以下几个内容,首先根据一个给定的模型得到这一信号的…

语音信号处理基础知识-常用特征及预处理

目录 一、语音信号的特点二、常用语音特征参数三、语音信号预处理四、参考链接 一、语音信号的特点 其主要特点如下所示:     a) 语音信号的带宽约为 5 K h z 5Khz 5Khz , 主要能量集中在低频段。     b) 语音信号总体为非平稳时变信号,一般认为…

语音信号基本知识和处理

语音信号(音频;声音)是模拟信号,现实生活中表现为连续的、平滑的波形,其横坐标为时间轴,纵坐标表示声音的强弱。 我们需要将其保存为数字信号再进行处理。 1. 声音三要素 1.1 音调 人耳对声音高低的感觉…

语音信号处理

文章目录 语音信号处理第一章 绪论第二章 语音信号处理基础知识语音和语言 **浊音的声带振动基本频率(fundamental frequency)称为基音频率。浊音的基音频率(pitch):**???&#xff1…