精华内容
下载资源
问答
  • 语音特征提取

    千次阅读 2020-02-29 11:15:18
    一直以来梅尔频率倒谱系数( Mel-Frequency Cepstral Coefficients ,简称MFCCs)在语音特征处理中很流行,最近则filter banks越来越流行了。在这边博客中讨论filter banks 和MFCCs,以及为什么filter bank会越来越...

    原英文博客地址:https://haythamfayek.com/2016/04/21/speech-processing-for-machine-learning.html

    目录

     

     Setup

    预加重(Pre-Emphasis)

    分帧(Framing)

    加窗(Window)

    傅里叶变换和功率谱(Fourier-Transform and Power Spectrum)

    Filter Banks

    梅尔倒谱系数 Mel-frequency Cepstral Coefficients (MFCCs)

    均值归一化 Mean Normalization

    Filter Banks vs MFCCs

    Conclusion


     语音处理在自动语音识别(Automatic Speech Recognition ,简称ASR)或者说话人识别(speaker recognition)等系统中扮演了重要的角色。一直以来梅尔频率倒谱系数( Mel-Frequency Cepstral Coefficients ,简称MFCCs)在语音特征处理中很流行,最近则filter banks越来越流行了。在这边博客中讨论filter banks 和MFCCs,以及为什么filter bank会越来越受欢迎。

    Filter banks和MFCCs的计算包含了一些相同的步骤,filter banks计算完成后,MFCCs只需在filter banks的基础上再操作几个步骤就可以得到。简而言之,语音信号先经过预加重(pre-emphasis),分帧,为每一帧加窗;然后为每一帧做傅里叶变化,计算功率谱;然后计算 filter banks。在 filter banks上做离散余弦变换(Discrete Cosine Transform ,DCT)保留部分获得系数。最后一步是做均值归一化(mean normalization)。

     Setup

    本文使用的wav语音文件“OSR_us_000_0010_8k.wav”,可以从地址下载。wav文件的采样率是8000Hz,是一个干净的语音信号,由一个单独的声音发出一些句子,中间有一些停顿。为了简化,使用这个wav文件的头3.5秒的信号,大致约是这个wav文件的第一句话的长度。

    代码使用python2.7.x, Numpy 和Scipy,完整的代码在这地址

    import numpy
    import scipy.io.wavfile
    from scipy.fftpack import dct
    
    sample_rate, signal = scipy.io.wavfile.read('OSR_us_000_0010_8k.wav')  # File assumed to be in the same directory
    signal = signal[0:int(3.5 * sample_rate)]  # Keep the first 3.5 seconds

    原始的语音信号在时域上形式,如下图:

                                                                                             Signal in the Time Domain

    预加重(Pre-Emphasis)

    第一步是在信号上应用一个预加重滤波器来放大高频。预加重有几种用途:

    1. 为了平衡频谱,因为高频比低频有更小。(high frequencies usually have smaller magnitudes compared to lower frequencies)
    2. 避免傅里叶变换运算中的数值问题。
    3. 可以提高信噪比(Signal-to-Noise Ratio ,SNR))

    预加重公式: 

    使用以下代码执行预加重,系数 (α) 一般为 0.95 或者 0.97, 在此设置为pre_emphasis = 0.97:

    emphasized_signal = numpy.append(signal[0], signal[1:] - pre_emphasis * signal[:-1])

    在现在的系统中预加重的作用不是很大,主要是因为预加重作用大部分可以通过均值归一化来实现(后面会介绍),而避免傅里叶变换运算中的数值问题,在现在FFT实现中也已经不再是个问题了。

    预加重之后信号在时域上的形式,如下图:

                                                                             Signal in the Time Domain after Pre-Emphasis

    分帧(Framing)

    预加重之后,需要将信号切割为较短固定长度的时间片段。原因是信号中的频率是随着时间而改变,因此在大多数情况下对整个信号进行傅里叶变换是没有意义的,就会失去频率曲线。为了避免这个问题,我们可以假定在短的时间内频率是固定的。因此在短时帧上做傅里叶变换,可以通过连接相邻帧获得近似的频率曲线 。

    语音帧的范围是20毫秒~40毫秒,且相邻的帧直接有50%(+/-10%)的重叠。一般设置帧大小为25毫秒(frame_size = 0.025),步长是10毫秒( frame_stride = 0.01.),有25毫秒的重叠。

    frame_length, frame_step = frame_size * sample_rate, frame_stride * sample_rate  # Convert from seconds to samples
    signal_length = len(emphasized_signal)
    frame_length = int(round(frame_length))
    frame_step = int(round(frame_step))
    num_frames = int(numpy.ceil(float(numpy.abs(signal_length - frame_length)) / frame_step))  # Make sure that we have at least 1 frame
    
    pad_signal_length = num_frames * frame_step + frame_length
    z = numpy.zeros((pad_signal_length - signal_length))
    pad_signal = numpy.append(emphasized_signal, z) # Pad Signal to make sure that all frames have equal number of samples without truncating any samples from the original signal
    
    indices = numpy.tile(numpy.arange(0, frame_length), (num_frames, 1)) + numpy.tile(numpy.arange(0, num_frames * frame_step, frame_step), (frame_length, 1)).T
    frames = pad_signal[indices.astype(numpy.int32, copy=False)]

    加窗(Window)

    信号切割为帧后,然后为每一帧应用加窗函数,例如 汉明窗,汉明窗公式:

     0≤n≤N−1, N是窗长。汉明窗图,如下:

    应用加窗的主要原因是为了抵消FFT的假设(即数据是无限的),并减少频谱泄漏。

    frames *= numpy.hamming(frame_length)
    # frames *= 0.54 - 0.46 * numpy.cos((2 * numpy.pi * n) / (frame_length - 1))  # Explicit Implementation **

    傅里叶变换和功率谱(Fourier-Transform and Power Spectrum)

    在每帧上做FFT计算频谱,称为短时傅里叶变换(Short-Time Fourier-Transform ,STFT),N一般设置为256或者512(NFFT = 512);然后用下面的公式计算功率谱:

    是信号的第i帧 ,公式的代码如下:

    mag_frames = numpy.absolute(numpy.fft.rfft(frames, NFFT))  # Magnitude of the FFT
    pow_frames = ((1.0 / NFFT) * ((mag_frames) ** 2))  # Power Spectrum

    Filter Banks

    最后一步计算filter banks,使用用三角滤波器在功率谱的Mel尺度上提取频带 (一般滤波器是40 nfilt = 40 ). Mel尺度旨在模拟人耳对声音的非线性感知,在较低的频率下更具辨别力,在较高的频率下则更辨别力较低。Hz和Mel尺度的转换使用如下公式: 

    滤波器组中的每个滤波器都是三角形的,在中心频率处的对应1并向0线性减小,直到达到两个相邻滤波器的中心频率对应为0,如图所示:

                                                                                          Filter bank on a Mel-Scale

    可以用下面的方程来模拟:

    low_freq_mel = 0
    high_freq_mel = (2595 * numpy.log10(1 + (sample_rate / 2) / 700))  # Convert Hz to Mel
    mel_points = numpy.linspace(low_freq_mel, high_freq_mel, nfilt + 2)  # Equally spaced in Mel scale
    hz_points = (700 * (10**(mel_points / 2595) - 1))  # Convert Mel to Hz
    bin = numpy.floor((NFFT + 1) * hz_points / sample_rate)
    
    fbank = numpy.zeros((nfilt, int(numpy.floor(NFFT / 2 + 1))))
    for m in range(1, nfilt + 1):
        f_m_minus = int(bin[m - 1])   # left
        f_m = int(bin[m])             # center
        f_m_plus = int(bin[m + 1])    # right
    
        for k in range(f_m_minus, f_m):
            fbank[m - 1, k] = (k - bin[m - 1]) / (bin[m] - bin[m - 1])
        for k in range(f_m, f_m_plus):
            fbank[m - 1, k] = (bin[m + 1] - k) / (bin[m + 1] - bin[m])
    filter_banks = numpy.dot(pow_frames, fbank.T)
    filter_banks = numpy.where(filter_banks == 0, numpy.finfo(float).eps, filter_banks)  # Numerical Stability
    filter_banks = 20 * numpy.log10(filter_banks)  # dB

    对功率谱应用滤波器组后,得到如下的谱图:

    如果想得到的特征是filter banks,那么可以跳到均值归一化(mean normalization)。

    梅尔倒谱系数 Mel-frequency Cepstral Coefficients (MFCCs)

    前面计算得到的filter bank系数是高度相关的,在一些机器学习的算法中这会引起一些问题。因此,应用离散余弦变换(Discrete Cosine Transform ,DCT)去掉系统的filter bank相关性,生成一个filter banks的压缩表示(compressed representation)。通常,对于自动语音识别(Automatic Speech Recognition,ASR)会保留倒谱系数2-13,其余的被丢弃num_ceps = 12。丢弃一些表示的原因是,这些表示反应的是filter bank系数的快速变化,而且这些细节对于自动语音识别(ASR)没有贡献。

    mfcc = dct(filter_banks, type=2, axis=1, norm='ortho')[:, 1 : (num_ceps + 1)] # Keep 2-13

    可以将正弦提升器应用于mfcc,以消除高mfcc的影响,后者被认为可以提高语音识别在噪音信号下。

    (nframes, ncoeff) = mfcc.shape
    n = numpy.arange(ncoeff)
    lift = 1 + (cep_lifter / 2) * numpy.sin(numpy.pi * n / cep_lifter)
    mfcc *= lift  #*

    结果就是MFCCs,如下:

                                                                                                    MFCCs

    均值归一化 Mean Normalization

    如之前所说,为了平衡频谱和提高信噪比(SNR), 为所有帧减去每个系数的均值。

    filter_banks -= (numpy.mean(filter_banks, axis=0) + 1e-8)

    均值归一化后的 filter banks:

                                                                                            Normalized Filter Banks

    MFCCs也做同样的操作:

    mfcc -= (numpy.mean(mfcc, axis=0) + 1e-8)

    均值归一化后的MFCCs,如下:

    Filter Banks vs MFCCs

    Filter banks和MFCCs都需要计算filter banks是由于语音信号的性质和人类对这些信号的感知。相反的,计算mfcc所需的额外步骤是由一些机器学习算法的局限性所导致的。离散余弦变换(DCT)是用来去掉 filter bank 系数的相关性,也被称为美白的过程。尤其是在使用Gaussian Mixture Models - Hidden Markov Models (GMMs-HMMs)模型的时候MFCCs非常受欢迎,MFCCs和GMMs-HMMs共同发展成为自动语音识别(ASR)的标准方法。随着深度学习在语音系统中的应用,由于深度神经网络对高相关性输入数据的敏感性较低,那么MFCCs是否仍然是正确的选择?因此,离散余弦变换(DCT)不再是必要的了。值得注意的是,离散余弦变换(DCT)是一种线性变换,改变换丢弃了语音信号中一些高度非线性的信息,因此,DCT不再受欢迎。

    那么傅里叶变换是否是必要的操作?傅里叶变换本身也是一个线性运算,不使用傅里叶变换而试图直接从时域信号中学习也会有益。事实上,最近的一些工作已经尝试了这一点,并有了积极的结果。然而,傅里叶变换操作是一个很难学习的操作,从时域直接学习,可能会增加实现相同性能所需的数据量和模型复杂性。此外,在进行短时傅里叶变换(STFT)时,我们假设信号在这一短时间内是平稳的,因此,傅里叶变换的线性不会构成一个关键问题。   

    总结 Conclusion

    本文,探讨了计算Mel尺度filter banks 和Mel频率倒谱系数(MFCCs)的过程,讨论了每个步骤的动机和实现。我们还讨论了与MFCC相比,filter banks越来越受欢迎的原因。

    如果机器学习算法不易受高度相关输入的影响,则使用filter banks。

    如果机器学习算法易受相关输入的影响,则使用MFCCs。

    (完)

    展开全文
  • openSMILE语音特征提取工具的使用

    千次阅读 2019-12-21 20:51:47
    索引openSMILE语音特征提取工具的使用一、openSMILE简介二、openSMILE工作机制三、openSMILE Windows安装四、 特征提取实现五、 使用python编程批量提取语音特征 openSMILE语音特征提取工具的使用 一、openSMILE简介...

    openSMILE语音特征提取工具的使用

    参考文献
    https://zhuanlan.zhihu.com/p/69170521

    一、openSMILE简介

    openSMILE是一个语音特征提取的工具,在语音识别(特征提取前端、关键字识别等.),情感计算(情感识别、敏感虚拟代理等),音乐信息检索(和弦标注、节拍跟踪、起跳检测等)等领域有着较为广泛的应用。
    官网 https://www.audeering.com/
    该工具官网称该工具可以计算多达6000个音频特征,并可以识别情感的细微差别,以匹配他们与具体的情感。
    openSMILE可以处理的视频文件格式包括:

    •RIFF-WAVE (PCM) (MP3, MP4, OGG等需要使用转换器)
    •逗号分隔值(CSV)
    •HTK参数les
    •WEKA的ARFF格式
    •通过openCV的视频流

    openSMILE可以提取一下音频特征

    • Frame Energy
    • Frame Intensity / Loudness (approximation)
    • Critical Band spectra (Mel/Bark/Octave, triangular masking lters)
    • Mel-/Bark-Frequency-Cepstral Coecients (MFCC)
    • Auditory Spectra
    • Loudness approximated from auditory spectra.
    • Perceptual Linear Predictive (PLP) Coecients
    • Perceptual Linear Predictive Cepstral Coecients (PLP-CC)
    • Linear Predictive Coecients (LPC)
    • Line Spectral Pairs (LSP, aka. LSF)
    • Fundamental Frequency (via ACF/Cepstrum method and via Subharmonic-Summation (SHS))
    • Probability of Voicing from ACF and SHS spectrum peak
    • Voice-Quality: Jitter and Shimmer
    • Formant frequencies and bandwidths
    • Zero- and Mean-Crossing rate
    • Spectral features (arbitrary band energies, roll-o points, centroid, entropy, maxpos, minpos, variance (=spread), skewness, kurtosis, slope)
    • Psychoacoustic sharpness, spectral harmonicity
    • CHROMA (octave warped semitone spectra) and CENS features (energy normalised and smoothed CHROMA)
    • CHROMA-derived Features for Chord and Key recognition
    • F0 Harmonics ratios

    基于openCV的库,openSMILE可以提取以下视频特征

    • HSV colour histograms
    • Local binary patterns (LBP)
    • LBP histograms
    • Optical fow and optical fow histograms
    • Face detection: all these features can be extracted from an automatically detected facial region, or from the full image.

    二、openSMILE工作机制

    openSMILE工具自带多种语音特征提取的配置文件,通过调用配置文件,可以按配置文件的预设提取响应的语音特征。openSMILE中包含以下的配置文件供使用者选择。

    • Chroma features for key and chord recognition
    • MFCC for speech recognition
    • PLP for speech recognition
    • Prosody (Pitch and loudness)
    • The INTERSPEECH 2009 Emotion Challenge feature set
    • The INTERSPEECH 2010 Paralinguistic Challenge feature set
    • The INTERSPEECH 2011 Speaker State Challenge feature set
    • The INTERSPEECH 2012 Speaker Trait Challenge feature set
    • The INTERSPEECH 2013 ComParE feature set
    • The MediaEval 2012 TUM feature set for violent scenes detection.
    • Three reference sets of features for emotion recognition (older sets, obsoleted by the new INTERSPEECH challenge sets)
    • Audio-visual features based on INTERSPEECH 2010 Paralinguistic Challenge audio features.

    三、openSMILE Windows安装

    可以从 https://www.audeering.com/opensmile/ 下载到openSMILE的压缩包文件,Linux的安装文件也可以在该网址下get到,不过笔者没有实践过如何安装。Windows下解压压缩包即可使用,比较不人性化的一点是,该工具需要调用命令行来完成相应的功能。没有配置人机交互界面。

    四、 特征提取实现

    openSMILE语音特征提取的命令如下

    SMILExtract_Release -C 配置文件路径 -I “要处理的音频路径” -O “要保存特征向量的路径及文件名”

    首先需要调出cmd命令行界面,接着再切换到处理文件SMILExtract.exe所在的目录下 ,执行特征提取命令即可在指定位置生成提取的特征文件,这里以2009年情感挑战赛特征集的配置文件为例举例实现。
    在这里插入图片描述
    生成的处理文件如下所示
    特征文件前半部分
    生成的特征文件包括两部分,第一部分是关于各个维度特征的说明,如上图缩水。
    特征文件特征部分
    第二部分是生成的特征向量,如上图所示。
    使用命令行提取特征文件比较不方便的一点是,每次只能处理一段音频,生成一个处理文件。

    五、 使用python编程批量提取语音特征

    参考文献
    https://blog.csdn.net/cg896406166/article/details/81066791

    1. 读取指定文件中所有的语音文件,依次处理,将生成的特征文件保存到另一个指定文件中,代码如下
    import os
    audio_path = 'C:/Users/Administrator/Desktop/download/wav'  # 音频文件所在目录
    output_path='C:/Users/Administrator/Desktop/download/rebuild'   # 特征文件输出目录
    audio_list=os.listdir(audio_path)   # 生成所有音频文件文件名的列表
    features_list=[]
    for audio in audio_list:    # 遍历指定文件夹下的所有文件
        if audio[-4:]=='.wav':
            this_path_input=os.path.join(audio_path, audio)  # 打开一个具体的文件,audio_path+audio
            this_path_output=os.path.join(output_path,audio[:-4]+'.txt')
            # &&连续执行;C: 进入C盘内;进入opensmile中要执行的文件的目录下;执行文件 -C 配置文件 -I 语音文件 -O 输出到指定文件
            cmd = 'C: && cd C:/Program/opensmile-2.3.0/bin/Win32 && SMILExtract_Release -C C:/Program/opensmile-2.3.0/config/IS09_emotion.conf -I ' + this_path_input + ' -O ' + this_path_output
        os.system(cmd)
    print('over~')
    
    1. 批量处理生成特征的文本文件,提取组合出可以用来学习处理的矩阵文件。代码如下
    import os
    import pandas as pd
    
    txt_path = 'C:/Users/Administrator/Desktop/download/rebuild'    # 特征文本文件所在目录
    txt_list = os.listdir(txt_path)
    features_list = []
    for file in txt_list:    # 遍历指定文件夹下的所有文件
        if file[-4:] == '.txt':
            file_path = os.path.join(txt_path, file)
            # 打开输出文件
            f = open(file_path)
            # 最后一行是特征向量,取最后一行
            last_line = f.readlines()[-1]
            f.close()
            features = last_line.split(',')
            # 最后一行特征行的第一个元素为‘unknown’,最后一个为‘?’,都不是对应的特征,要去掉
            features = features[1:-1]
            features_list.append(features)
    data_m = pd.DataFrame(features_list)
    data_m.to_csv(os.path.join('C:/Users/Administrator/Desktop/download', 'test_data.csv'), sep = ',', header=False, index=False)
    print('over')
    

    这样特征文件就生成完成了,生成的特征文件如下图所示
    在这里插入图片描述

    展开全文
  • 语音信号处理 语音特征提取 机器学习的语音处理

    本文首先是将Speech Processing for Machine Learning: Filter banks, Mel-Frequency Cepstral Coefficients (MFCCs) and What's In-Between这篇2016年4月21号的文章翻译了一下,然后讲出一点自己的理解和注释。

    机器学习的语音处理:滤波器组,梅尔频率倒谱系数(MFCC)以及两者之间的区别

    语音处理在任何语音系统中都扮演着重要的角色,无论它是自动语音识别(ASR)还是说话者识别等等。 长期以来,梅尔频率倒谱系数(MFCC)是非常受欢迎的功能。 但是最近,滤波器组正变得越来越流行。 在这篇文章中,我将讨论滤波器组和MFCC,以及为什么滤波器组变得越来越流行。

    计算滤波器组和MFCC涉及相同的过程,在这两种情况下,都将计算滤波器组,并通过一些额外的步骤可以获得MFCC。 简而言之,信号会通过预加重滤波器。 然后将其切成(重叠的)帧,并将窗口函数应用于每个帧; 之后,我们在每个帧上进行傅立叶变换(或更具体地说是短时傅立叶变换),并计算功率谱; 然后计算滤波器组。 为了获得MFCC,可将离散余弦变换(DCT)应用于滤波器组,以保留多个所得系数,而其余系数则被丢弃。 两种情况的最后一步是平均归一化。

     

    建立


           在本文中,我从此处使用了一个16位PCM wav文件,称为“ OSR_us_000_0010_8k.wav”,其采样频率为8000 Hz。 wav文件是干净的语音信号,包括单个语音,在其中说出一些句子,中间有一些停顿。 为简单起见,我使用了信号的前3.5秒,大致相当于wav文件中的第一句话。
           我将使用Python 2.7.x,NumPy和SciPy。 这篇文章中使用的一些代码基于该存储库中可用的代码。

    import numpy
    import scipy.io.wavfile
    from scipy.fftpack import dct
    
    sample_rate, signal = scipy.io.wavfile.read('OSR_us_000_0010_8k.wav') # File assumed to be in the same directory
    signal = signal[0:int(3.5 * sample_rate)] #Keep the first 3.5 seconds
    
    '''
    显示这个图片
    plt.figure(figsize=(20,5)) # 修改坐标显示
    plt.xlabel("Time(s)")
    plt.ylabel("Amplitude")
    plt.plot(x , signal)
    plt.show()
    '''

    原始信号在时域中具有以下形式:

    时域信号

    强化前

    第一步是对信号应用预加重滤波器,以放大高频。 预加重滤波器在几种方面很有用:(1)平衡频谱,因为与低频相比,高频通常具有较小的幅度;(2)避免在傅立叶变换操作期间出现数值问题;(3)还可改善信号 噪声比(SNR)。

    可以使用以下等式中的一阶滤波器将预加重滤波器应用于信号xx:

    y(t)= x(t)-αx(t-1)

    可以使用以下代码轻松实现,其中滤波器系数(αα)的典型值为0.95或0.97,pre_emphasis = 0.97:

    emphasized_signal = numpy.append(signal[0], signal[1:] - pre_emphasis * signal[:-1])

    预加重在现代系统中的影响不大,主要是因为除避免了不应该成为问题的傅立叶变换数值问题外,大多数预加重滤波器的动机都可以使用均值归一化(在本文后面讨论)来实现。 在现代FFT实现中。
    预加重后的信号在时域中具有以下形式:

    预加重后的时域信号

     

    构图


           经过预加重后,我们需要将信号分成短时帧。 此步骤的基本原理是信号中的频率会随时间变化,因此在大多数情况下,对整个信号进行傅立叶变换是没有意义的,因为我们会随时间丢失信号的频率轮廓。 为避免这种情况,我们可以安全地假设信号中的频率在很短的时间内是固定的。 因此,通过在此短时帧上进行傅立叶变换,我们可以通过串联相邻帧来获得信号频率轮廓的良好近似值。
           语音处理中的典型帧大小为20毫秒至40毫秒,连续帧之间有50%(+/- 10%)重叠。 流行的设置是帧大小为25毫秒,frame_size = 0.025和10毫秒跨度(重叠15毫秒),frame_stride = 0.01。

    frame_length, frame_step = frame_size * sample_rate, frame_stride * sample_rate # Convert from seconds to samples
    signal_length = len(emphasized_signal)
    frame_length = int(round(frame_length))
    frame_step = int(round(frame_step))
    num_frames = int(numpy.ceil(float(numpy.abs(signal_length - frame_length)) / frame_step)) # Make sure that we have at least 1 frame
    
    pad_signal_length = num_frames * frame_step + frame_length
    z = numpy.zeros((pad_signal_length - signal_length))
    pad_signal = numpy.append(emphasized_signal, z) # Pad Signal to make sure that all frames have equal number of samples without truncating any samples from the original signal
    
    indices = numpy.tile(numpy.arange(0, frame_length), (num_frames, 1)) + numpy.tile(numpy.arange(0, num_frames * frame_step, frame_step), (frame_length, 1)).T
    frames = pad_signal[indices.astype(numpy.int32, copy=False)]

     

    窗口

    将信号切成帧后,我们对每个帧应用诸如汉明窗之类的窗口函数。 Hamming窗口具有以下形式:

    w [n] = 0.54-0.46cos(2πnN-1)w [n] = 0.54-0.46cos(2πnN-1)

    其中,0≤n≤N-10≤n≤N-1,NN为窗口长度。 绘制先前的方程式将得出以下曲线:

    Hamming Window

    我们有几个原因需要将窗函数应用于这些帧,特别是要抵消FFT所做的数据无限的假设并减少频谱泄漏。

    frames *= numpy.hamming(frame_length)
    # frames *= 0.54 - 0.46 * numpy.cos((2 * numpy.pi * n) / (frame_length - 1)) # Explicit Implementation **

    傅立叶变换和功率谱

    现在,我们可以在每个帧上执行NN点FFT来计算频谱,这也称为短时傅立叶变换(STFT),其中NN通常为256或512,NFFT = 512; 然后使用以下公式计算功率谱(周期图):

    P = | FFT(xi)| 2NP = | FFT(xi)| 2N

    其中,xixi是信号xx的第i个帧。 这可以用以下几行实现:

    mag_frames = numpy.absolute(numpy.fft.rfft(frames, NFFT)) # Magnitude of the FFT
    pow_frames = ((1.0 / NFFT) * ((mag_frames) ** 2)) # Power Spectrum

    滤波器

    计算滤波器组的最后一步是将三角滤波器(通常为40个滤波器,在Mel等级上为nfilt = 40)应用于功率谱以提取频带。 梅尔音阶的目的是模仿低频的人耳对声音的感知,方法是在较低频率下更具判别力,而在较高频率下则具有较少判别力。 我们可以使用以下公式在赫兹(ff)和梅尔(mm)之间转换:

    m = 2595log10(1 + f700)m =2595log10⁡(1 + f700)


    f = 700(10m / 2595-1)f = 700(10m / 2595-1)

    滤波器组中的每个滤波器都是三角形的,在中心频率处的响应为1,并朝着0线性减小,直到它到达两个相邻滤波器的中心频率处,响应为0,如下图所示:

    梅尔秤上的滤波器组

    可以通过以下方程式建模(从此处获取):

    Hm(k)=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪0k-f( m-1)f(m)-f(m-1)1f(m + 1)-kf(m + 1)-f(m)0k <f(m-1)f(m-1)≤k< f(m)k = f(m)f(m)<k≤f(m + 1)k> f(m + 1)Hm(k)= {0k <f(m-1)k-f(m -1)f(m)-f(m-1)f(m-1)≤k<f(m)1k = f(m)f(m + 1)-kf(m + 1)-f(m )f(m)<k≤f(m + 1)0k> f(m + 1)

    low_freq_mel = 0
    high_freq_mel = (2595 * numpy.log10(1 + (sample_rate / 2) / 700)) # Convert Hz to Mel
    mel_points = numpy.linspace(low_freq_mel, high_freq_mel, nfilt + 2) # Equally spaced in Mel scale
    hz_points = (700 * (10**(mel_points / 2595) - 1)) # Convert Mel to Hz
    bin = numpy.floor((NFFT + 1) * hz_points / sample_rate)
    
    fbank = numpy.zeros((nfilt, int(numpy.floor(NFFT / 2 + 1))))
    for m in range(1, nfilt + 1):
    f_m_minus = int(bin[m - 1]) # left
    f_m = int(bin[m]) # center
    f_m_plus = int(bin[m + 1]) # right
    
    for k in range(f_m_minus, f_m):
    fbank[m - 1, k] = (k - bin[m - 1]) / (bin[m] - bin[m - 1])
    for k in range(f_m, f_m_plus):
    fbank[m - 1, k] = (bin[m + 1] - k) / (bin[m + 1] - bin[m])
    filter_banks = numpy.dot(pow_frames, fbank.T)
    filter_banks = numpy.where(filter_banks == 0, numpy.finfo(float).eps, filter_banks) # Numerical Stability
    filter_banks = 20 * numpy.log10(filter_banks) # dB

    将滤波器组应用于信号的功率谱(周期图)后,我们得到以下频谱图:

    信号的频谱图

    如果梅尔级滤波器组是所需的功能,那么我们可以跳过以归一化。

    梅尔频率倒谱系数(MFCC)

           事实证明,在上一步中计算出的滤波器组系数是高度相关的,这在某些机器学习算法中可能会出现问题。 因此,我们可以应用离散余弦变换(DCT)去相关滤波器组系数,并生成滤波器组的压缩表示。 通常,对于自动语音识别(ASR),结果倒谱系数2-13将保留,其余的将被丢弃; num_ceps =12。丢弃其他系数的原因是,它们代表滤波器组系数的快速变化,而这些细微的细节对自动语音识别(ASR)毫无帮助。

    mfcc = dct(filter_banks, type=2, axis=1, norm='ortho')[:, 1 : (num_ceps + 1)] # Keep 2-13

          可以将正弦提升器1应用于MFCC,以降低对较高MFCC的强调,这被认为可以改善噪声信号中的语音识别。

    (nframes, ncoeff) = mfcc.shape
    n = numpy.arange(ncoeff)
    lift = 1 + (cep_lifter / 2) * numpy.sin(numpy.pi * n / cep_lifter)
    mfcc *= lift #*

    生成的MFCC:

    MFCCs

    平均归一化

    如前所述,为了平衡频谱并改善信噪比(SNR),我们可以简单地从所有帧中减去每个系数的平均值。

    filter_banks -= (numpy.mean(filter_banks, axis=0) + 1e-8)

    均值归一化滤波器组:

    归一化滤波器组

    对于MFCC同样如此:

    mfcc -= (numpy.mean(mfcc, axis=0) + 1e-8)

    均值归一化MFCC:

    标准化MFCC

    滤波器组与MFCC


    到目前为止,已根据其动机和实现方式讨论了计算滤波器组和MFCC的步骤。有趣的是,计算滤波器组所需的所有步骤都是由语音信号的性质和人类对此类信号的感知所激发的。相反,某些机器学习算法的局限性促使了计算MFCC所需的额外步骤。需要离散余弦变换(DCT)来使滤波器组系数去相关,该过程也称为白化。特别是,当高斯混合模型-隐马尔可夫模型(GMMs-HMM)非常流行并且MFCC和GMMs-HMM一起发展成为自动语音识别(ASR)2的标准方式时,MFCC便很受欢迎。随着语音系统中深度学习的出现,人们可能会质疑MFCC是否仍然是正确的选择,因为深度神经网络不太容易受到高度相关的输入的影响,因此离散余弦变换(DCT)不再是必要的步骤。值得注意的是,离散余弦变换(DCT)是线性变换,因此是不希望的,因为它会丢弃语音信号中的某些信息,这些信息是高度非线性的。
    怀疑是否需要进行傅立叶变换是明智的。鉴于傅立叶变换本身也是线性运算,因此忽略它并尝试在时域中直接从信号中学习可能会有所帮助。确实,最近的一些工作已经尝试了这一点,并报告了积极的结果。但是,傅立叶变换操作是一个很难学习的操作,并且可以说会增加获得相同性能所需的数据量和模型复杂性。此外,在进行短时傅立叶变换(STFT)时,我们假设信号在此短时间内保持稳定,因此傅立叶变换的线性不会造成严重问题。

    结论

    在本文中,我们探讨了计算梅尔级滤波器组和梅尔频率倒谱系数(MFCC)的过程。 讨论了该过程中每个步骤的动机和实现。 我们也提出了与MFCC相比,滤波器组越来越受欢迎的原因。
    tl; dr:如果机器学习算法不易受到高度相关的输入的影响,请使用梅尔级滤波器组。 如果机器学习算法易受相关输入的影响,请使用MFCC。

    1.提升在倒频谱域中进行过滤。 请注意,频谱和倒谱中的符号分别使用了滤波和提升。 ↩
    2.本文对此主题进行了精彩的讨论。 ↩

    重要名词理解:

    滤波器组:

    人耳对声音频谱的响应是非线性的,经验表明:如果我们能够设计一种前端处理算法,以类似于人耳的方式对音频进行处理,可以提高语音识别的性能。FilterBank就是这样的一种算法。FBank特征提取要在预处理之后进行,这时语音已经分帧,我们需要逐帧提取FBank特征。

    傅里叶变换:

    人类听觉系统其实就像是在做傅里叶变换,通过耳蜗(可以视为一组滤波器)将时域声压转换为独立的不同频率的分量,但是,准确地说,更接近于短时傅里叶变换(STFT)。

    傅里叶变换处理非平稳信号(频率随时间变化的信号)有天生缺陷。它只能获取一段信号总体上包含哪些频率的成分,但是对各成分出现的时刻并无所知。因此时域相差很大的两个信号,可能频谱图一样。
    对于这样的非平稳信号,只知道包含哪些频率成分是不够的,我们还想知道各个成分出现的时间。知道信号频率随时间变化的情况,各个时刻的瞬时频率及其幅值——这也就是时频分析。
    一个简单可行的方法就是——加窗。我又要套用方沁园同学的描述了,“把整个时域过程分解成无数个等长的小过程,每个小过程近似平稳,再傅里叶变换,就知道在哪个时间点上出现了什么频率了。”这就是短时傅里叶变换。

     梅尔频率倒谱系数(MFCC):

    参考:https://zhuanlan.zhihu.com/p/27416870

    均值归一化:

    参考:https://www.jianshu.com/p/ef3534ddda15

    第一部分构图用的完整代码:

    import numpy
    import scipy.io.wavfile
    from scipy.fftpack import dct
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    
    sample_rate, signal = scipy.io.wavfile.read('OSR_us_000_0010_8k.wav') # File assumed to be in the same directory
    signal = signal[0:int(3.5 * sample_rate)] #Keep the first 3.5 seconds
    
    
    plt.figure(figsize=(20,5)) # 修改坐标显示
    plt.xlabel("Time(s)")
    plt.ylabel("Amplitude")
    plt.plot(signal)
    plt.show()
    
    

    参考文章:https://www.jianshu.com/p/b416d5617b0c

    展开全文
  • python语音特征提取In this post, I will show you how to extract speeches from a video recording file. After recognizing the speeches we will convert them into a text document. This will be a simple ...

    python语音特征提取

    In this post, I will show you how to extract speeches from a video recording file. After recognizing the speeches we will convert them into a text document. This will be a simple machine learning project, that will help you to understand some basics of the Google Speech Recognition library. Speech Recognition is a popular topic under machine learning concepts. Speech Recognition is getting used more in many fields. For example, the subtitles that we see on Netflix shows or YouTube videos are created mostly by machines using Artificial Intelligence. Other great examples of speech recognizers are personal voice assistants such as Google’s Home Mini, Amazon Alexa, Apple’s Siri.

    在本文中,我将向您展示如何从视频录制文件中提取语音。 识别语音后,我们会将其转换为文本文档。 这将是一个简单的机器学习项目,它将帮助您了解Google语音识别库的一些基础知识。 语音识别是机器学习概念下的热门话题。 语音识别在许多领域得到越来越多的使用。 例如,我们在Netflix节目或YouTube视频上看到的字幕主要是由使用人工智能的机器创建的。 语音识别器的其他出色示例还包括个人语音助手,例如Google的Home Mini,亚马逊的Alexa,苹果的Siri。

    目录: (Table of Contents:)

    • Getting Started

      入门

    • Step 1: Import Libraries

      步骤1:导入库

    • Step 2: Video to Audio Conversion

      第2步:视频到音频的转换

    • Step 3: Speech Recognition

      步骤3:语音识别

    • Final Step: Exporting Result

      最后一步:导出结果

    入门 (Getting Started)

    As you can understand from the title, we will need a video recording for this project. It can even be a recording of yourself speaking to the camera. Using a library called MoviePy, we will extract the audio from the video recording. And in the next step, we will convert that audio file into text using Google’s speech recognition library. If you are ready, let’s get started by installing the libraries!

    正如您从标题中所了解的那样,我们将需要此项目的视频记录。 它甚至可以记录您自己对着摄像机讲话。 使用名为MoviePy的库我们将从录像中提取音频。 下一步,我们将使用Google的语音识别库将该音频文件转换为文本。 如果您准备好了,就让我们开始安装这些库!

    图书馆 (Libraries)

    We are going to use two libraries for this project:

    我们将为该项目使用两个库:

    • Speech Recognition

      语音识别
    • MoviePy

      MoviePy

    Before importing them to our project file, we have to install them. Installing a module library is very easy in python. You can even install a couple of libraries in one line of code. Write the following line in your terminal window:

    在将它们导入我们的项目文件之前,我们必须先安装它们。 在python中安装模块库非常容易。 您甚至可以在一行代码中安装几个库。 在您的终端窗口中写以下行:

    pip install SpeechRecognition moviepy

    Yes, that was it. SpeechRecognition module supports multiple recognition APIs, and Google Speech API is one of them. You can learn more about the module from here.

    是的,就是这样。 SpeechRecognition模块支持多种识别API,而Google Speech API就是其中之一。 您可以从此处了解有关该模块的更多信息。

    MoviePy is a library that can read and write all the most common audio and video formats, including GIF. If you are having issues when installing moviepy library, try by installing ffmpeg. Ffmpeg is a leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created.

    MoviePy是一个库,可以读取和写入所有最常见的音频和视频格式,包括GIF。 如果在安装moviepy库时遇到问题,请尝试安装ffmpeg。 Ffmpeg是领先的多媒体框架,能够解码,编码,转码,mux,demux,流,过滤和播放人类和机器创建的几乎所有内容。

    Now, we should get to writing code in our code editor. We will start by importing the libraries.

    现在,我们应该在代码编辑器中编写代码。 我们将从导入库开始。

    第1步-导入库 (Step 1 — Import Libraries)

    import speech_recognition as sr import moviepy.editor as mp

    Yes, that’s all we need to get the task done. Without losing any time let’s move to the next step.

    是的,这就是我们完成任务所需要的。 在不浪费时间的情况下,让我们继续下一步。

    步骤2 —视频到音频转换 (Step 2 — Video to Audio Conversion)

    In this step, we will something really cool, which is converting our video recording into an audio file. There are many video formats, some of them can be listed as:

    在这一步中,我们将做一些非常酷的事情,即将视频记录转换为音频文件。 视频格式很多,其中一些可以列出为:

    • MP4 (mp4, m4a, m4v, f4v, f4a, m4b, m4r, f4b, mov)

      MP4(mp4,m4a,m4v,f4v,f4a,m4b,m4r,f4b,mov)
    • 3GP (3gp, 3gp2, 3g2, 3gpp, 3gpp2)

      3GP(3gp,3gp2、3g2、3gpp,3gpp2)
    • OGG (ogg, oga, ogv, ogx)

      OGG(ogg,oga,ogv,ogx)
    • WMV (wmv, wma, asf*)

      WMV(WMV,WMA,ASF *)

    We should know our video’s format to do the conversion without any problem. Besides the video format, it’s also a good practice to know some audio formats. Here are some of them:

    我们应该知道我们视频的格式可以毫无问题地进行转换。 除了视频格式,了解某些音频格式也是一种好习惯。 这里是其中的一些:

    • MP3

      MP3
    • AAC

      AAC
    • WMA

      WMA
    • AC3 (Dolby Digital)

      AC3(杜比数字)

    Now, we have some idea about both formats. It’s time to do the conversion using MoviePy library. You will not believe how easy it is.

    现在,我们对两种格式都有一些了解。 现在该使用MoviePy库进行转换了。 您不会相信这有多么容易。

    clip = mp.VideoFileClip(r”video_recording.mov”) 

    clip.audio.write_audiofile(r”converted.wav”)

    I recommend converting it to wav format. It works great with the speech recognition library, which will be covered in the next step.

    我建议将其转换为WAV格式。 它与语音识别库配合使用非常好,下一步将对此进行介绍。

    第3步-语音识别 (Step 3 — Speech Recognition)

    First, let’s define the recognizer.

    首先,让我们定义识别器。

    r = sr.Recognizer()

    Now let’s import the audio file that was created in the previous step (Step 2).

    现在,让我们导入在上一步(步骤2)中创建的音频文件。

    audio = sr.AudioFile("converted.wav")

    Perfect! Here comes the best part, which is recognizing the speech in an audio file. The recognizer will try to understand the speech and convert it to a text format.

    完善! 这是最好的部分,它是识别音频文件中的语音。 识别器将尝试理解语音并将其转换为文本格式。

    with audio as source:
    audio_file = r.record(source)result = r.recognize_google(audio_file)

    最后一步-导出结果 (Final Step — Exporting the Result)

    Well done! The hard work is completed. In this step, we will just export the recognized speech into a text document. This will help you to store your work. I’ve also added a print(“ready!”) at the end of the code. So that we know when the file is ready and the work is completed.

    做得好! 艰苦的工作已经完成。 在此步骤中,我们将仅将识别出的语音导出到文本文档中。 这将帮助您存储您的工作。 我还在代码的末尾添加了打印(“ ready!”) 。 这样我们就知道文件何时准备就绪并且工作完成了。

    # exporting the result 
    with open('recognized.txt',mode ='w') as file:
    file.write("Recognized Speech:")
    file.write("\n")
    file.write(result)
    print("ready!")

    视频示范 (Video Demonstration)

    Just started my journey on YouTube, I will be demonstrating Machine Learning, Data Science, Artificial Intelligence and more projects for you. Enjoy!

    刚开始我在YouTube上的旅程,我将为您演示机器学习,数据科学,人工智能和更多项目。 请享用!

    Congrats! You have created a program that converts a video into an audio file and then extracts the speech from that audio. And lastly, exporting the recognized speech into a text document. Hoping that you enjoyed reading this post and working on the project. I am glad if you learned something new today. Working on hands-on programming projects like this one is the best way to sharpen your coding skills.

    恭喜! 您已经创建了一个程序,可以将视频转换为音频文件,然后从该音频中提取语音。 最后,将识别的语音导出到文本文档中。 希望您喜欢阅读这篇文章并从事该项目。 如果您今天学到新知识,我感到很高兴。 从事这样的动手编程项目是提高您的编码技能的最佳方法。

    Feel free to contact me if you have any questions while implementing the code.

    实施代码时如有任何疑问,请随时与我联系

    Follow my blog and Towards Data Science to stay inspired.

    关注我的博客迈向数据科学 ,保持灵感。

    相关内容: (Related Content:)

    翻译自: https://towardsdatascience.com/extracting-speech-from-video-using-python-f0ec7e312d38

    python语音特征提取

    展开全文
  • 语音特征提取工具——opensmile1. opensmile概览1.1 opensmile特点1.2 opensmile 功能一览1.2.1 数据输入1.2.2 信号处理1.2.3 数据处理1.2.4 低维语音特征1.2.5 低维视频特征1.2.6 相关函数1.2.7 分类器1.2.8 输出...
  • openSMILE语音特征提取

    千次阅读 2017-11-08 22:00:38
    D:\opensmile\opensmile-2.3.0\bin\Win32>SMILExtract_Release -C D:\opensmile\opens mile-2.3.0\config\IS09_emotion.conf -I F:\music\Mont_01_014_00.wav -O E: \BaiduYunDownload\a.txt
  • 语音特征提取: MFCC的理解

    千次阅读 2019-04-12 11:43:18
    一般wav提取特征的方式:2. 什么是MFCC:3. 什么求倒谱:4. 什么是频谱的包络:5.如何获取频谱的包络: 1. 一般wav提取特征的方式: 2. 什么是MFCC: 在mel-spectrum上取对数,再做傅里叶变换得到的特征,就是...
  • 一些常用的语音特征提取算法

    千次阅读 2019-10-23 11:37:00
    前言 ...特征提取是通过将语音波形以相对最小的数据速率转换为参数表示形式进行后续处理和分析来实现的。因此,可接受的分类是从优良和优质的特征中衍生出来的。Mel频率倒谱系数(MFCC)、线性预...
  • 语音特征提取方法 (二)MFCC

    万次阅读 多人点赞 2017-03-25 21:21:04
    在任意一个Automatic speech recognition 系统中,第一步就是提取特征。换句话说,我们需要把音频信号中具有辨识性的成分提取出来,然后把其他的乱七八糟的信息扔掉,例如背景噪声啊,情绪啊等等。 搞清语音是...
  • 摘要: 机器学习PAI通过声音数据分辨男女(含语音特征提取相关数据和代码) 背景 随着人工智能的算法发展,对于非结构化数据的处理能力越来越受到重视,这里面的关键一环就是语音数据的处理。目前,许多关于...
  • 任何模式识别系统的第一个问题都是选择什么样的特征作为系统的输入,与语音识别也不例外,为了准确...本文又加入了w2l,目前最流行的开源人工智能网络ASR工具集,横向比较中,了解和学习一下语音提取技术的特点和发展。
  • 其中特征提取环节用到的库函数: spectrogram spectrogram 该函数的功能是将时域的语音信号变为短时频域信号; 主要包括:预加重,分帧,加窗,FFT求能量值 designAuditoryFilterBank designAuditoryFilterBank ...
  • 语音特征提取方法-MFCC

    千次阅读 2018-07-15 21:45:58
     在任何一个语音识别系统中,第一步就是提取特征,将一段声音转化为计算机可以识别的数字序列或向量。我们需要把音频信号中,具有辨识度的成分提取出来,去除其他不需要的信息,比如背景噪音、情绪等等。  MFCC...
  • 3.3听觉特性
  • 本文讲解的是如何将kaldi中的特征数据读取出来,将ark二进制文件转化成.txt格式的文件1:首先进入root下;2:cd /home/zhangwei/kaldi/src/featbin/ ;3:./copy-feats --binary=false ark:(二进制文件位置) ark,t:...
  • 背景随着人工智能的算法发展,对于非结构化数据的处理能力越来越受到重视,这里面的关键一环就是语音数据的处理。目前,许多关于语音识别的应用案例已经影响着我们的生活,例如一些智能音箱中利用语音发送指令,一些...
  • 目前,许多关于语音识别的应用案例已经影响着我们的生活,例如一些智能音箱中利用语音发送指令,一些搜索工具利用语音输出文本代替键盘录入。 本文我们将针对语音识别中最简单的案例“男女声音”识别,结合本地的...
  • 语音的关键声学特征语音情感特征提取

    万次阅读 多人点赞 2018-11-21 13:59:21
    语音情感特征提取及其降维方法综述1 语音传递的信息可以分为两大类:语义信息和声学信息。关注语义方面的研究比较多,但是声学特征也能包含很多关键信息,既可以作为辅助语义信息进行研究和应用,也可以单独进行语音...
  • 语音信号特征提取<一>预处理

    万次阅读 2017-03-29 20:24:30
    在当前与语音有关的应用中,出了单纯的录制、不做任何处理之后播放之外,几乎所有的应用都要涉及到语音特征提取,例如语音文本转换、说话人识别、语音情感识别等等。此外,在进行音乐信息检索(MIR)的时候,也需要...
  • 语音识别中特征提取MFCC、FBANK、语谱图特征提取

    万次阅读 多人点赞 2018-11-06 09:43:13
    好久没写博客了,今天更新一下使用Python提取声学模型的特征,一共三种特征,分别是MFCC、... 该脚本用于提取语音特征,包括MFCC、FBANK以及语谱图特征; 该脚本是对标签数据进行处理; """ from python_speech...
  • 语音识别MFCC特征提取matlab代码

    热门讨论 2013-02-22 11:24:23
    语音识别MFCC特征提取matlab代码。 「梅尔倒频谱系数」(Mel-scale Frequency Cepstral Coefficients,简称MFCC),是最常用到的语音特征,此参数考虑到人耳对不同频率的感受程度,因此特别适合用在语音辨识。
  • 语音特征MFCC提取过程详解

    万次阅读 多人点赞 2018-09-17 15:39:15
    原来对语音特征参数MFCC的提取过程不是很了解,最近做实验需要自己手动去提取,所以借此机会,深入的学习了一下,所以记录下来,希望能够对日后的学习有一定的帮助。 一、MFCC概述   在语音识别(Speech...
  • 语音信号中的特征提取

    万次阅读 多人点赞 2016-04-18 11:19:47
    本文介绍了语音处理中常用到的语音特征的生物和物理含义,并给出了提取方法,主要包括响度,音高,基频,MFCC,共振峰,声门波,短时能量,过零率,短时幅度,语速,停顿,等等
  • 利用python实现语音文件的特征提取

    万次阅读 多人点赞 2018-07-06 15:33:17
    概述 语音识别是当前人工智能的比较热门的方向,...但训练这些模型的第一步就是将音频文件数据化,提取当中的语音特征。 MP3文件转化为WAV文件 录制音频文件的软件大多数都是以mp3格式输出的,但mp3格式文...
  • 语音特征参数MFCC提取过程详解

    万次阅读 多人点赞 2014-01-23 00:17:04
    原来对语音特征参数MFCC的提取过程不是很了解,最近做实验需要自己手动去提取,所以借此机会,深入的学习了一下,所以记录下来,希望能够对日后的学习有一定的帮助。
  • 语音识别 特征提取(一)

    千次阅读 2018-08-20 08:44:38
    语音识别 特征提取 一.语音的产生简介 1.1 发音器官 人体的语音是由人体的发音器官在大脑的控制下做生理运动产生的。人体发音器官由三部分组成:肺和气管、喉、声道。 肺是语音产生的能源所在。气管连接着肺和喉...
  • 语音识别的第一步是特征提取,目的是可以给模型提供更加高质量的输入以此获得更好的识别效果。常用的特征提取包括线性预测倒谱系数(LPCC)和梅尔频率倒谱系数(MFCC)。 LPCC:是根据声管模型建立的特征参数,是对...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,567
精华内容 17,426
关键字:

语音特征提取