语音识别字符分割算法_原创

合集下载

语音识别技术的原理及其实现方法

语音识别技术的原理及其实现方法

语音识别技术的原理及其实现方法语音识别技术是一种将人类语音转化为文字的技术,它正被越来越广泛地应用于智能助理、语音输入、自动翻译等领域。

本文将详细讨论语音识别技术的原理及其实现方法,以帮助读者更好地了解这一技术并掌握其应用。

一、语音识别技术的原理语音识别技术的原理可以分为三个主要步骤:信号处理、特征提取和模型匹配。

1. 信号处理:语音信号在传输过程中可能受到多种噪声的干扰,如环境噪声、话筒噪声等。

因此,首先需要对音频信号进行预处理,以提高识别准确率。

该步骤通常包括音频去噪、降噪、增强等技术。

2. 特征提取:在预处理后,需要对语音信号进行特征提取,即将连续的语音信号转换为更具区分度的特征向量。

常用的特征提取方法有MFCC (Mel Frequency Cepstral Coefficients)和PLP(Perceptual Linear Prediction)等。

这些特征提取方法通过对不同频率的声音进行分析,提取出语音信号的关键特征,如音高、音频的形态和时长等。

3. 模型匹配:在特征提取后,需要建立一个匹配模型,将特征向量与预先训练好的语音模型进行比对,以确定输入语音对应的文字内容。

常用的模型包括隐马尔可夫模型(HMM)和深度神经网络(DNN)等。

这些模型通过学习大量的语音样本,使模型能够根据输入的特征向量判断最有可能的文字结果。

二、语音识别技术的实现方法语音识别技术的实现需要借助特定的工具和算法。

以下是常用的语音识别技术实现方法:1. 基于统计模型的方法:该方法主要基于隐马尔可夫模型(HMM)和高斯混合模型(GMM)。

隐马尔可夫模型用于描述语音信号的动态性,而高斯混合模型则用于对特征向量进行建模。

这种方法的优点在于其模型简单,容易实现,但其处理长时语音和噪声的能力较弱。

2. 基于神经网络的方法:随着深度学习技术的发展,深度神经网络(DNN)成为语音识别领域的热门技术。

该方法使用多层神经网络模型来学习语音信号的特征表示和模式匹配。

语音识别字符分割算法_原创.

语音识别字符分割算法_原创.

5.设计方法5.1概述5.2硬件系统的设计语音信号预处理(1)预加重预加重的目的是提升高频部分,使信号的频谱变得平坦,保持在低频到高频的整个频带中,能用同样的信噪比求频谱,以便于频谱分析或声道参数分析。

在计算机里用具有6dB/频程升高频特性的预加重数字滤波器来实现,一般是一阶的FIR数字滤波器:为预加重系数,值接近于l,在0.9和1之间,典型值为0.94。

预加重的DSPBuilder实现:为了便于实现,将上式中的一阶FIR预加重滤波器用差分方程表示为:其中,为原始语音信号序列,N为语音长度,上面的公式显示其在时域上的特性。

又因为0.94接近于15/16,所以将上面的式子变为除以16可以用右移4位来实现,这样就将除法运算化简为移位运算,降低了计算复杂度。

在后面的模块设计中,也乘以或者除以一些这样的数,这些数为2的幂次,都可以用移位来实现。

预加重的硬件实现框图如下:预加重实现框图DSP Builder中的图形建模为:预加重滤波器的DSPBuilder结构图(2)分帧语音信号是一种典型的非平稳信号,其特性随时间变化,其在很短的时间内是平稳的,大概为1小20ms,其频谱特性和物理特征可近似的看做不变,这样就可以采用平稳过程的分析处理方法来处理。

分帧的DSP Builder实现:语音信号在10到20ms之间短时平稳(这样可以保证每帧内包含1一7个基音周期),也就是说选取的帧长必须介于10到20ms之间,此外,在MFCC特征提取时要进行FFT变换,FFT点数一般为2的幂次,所以本文中选择一帧长度为16ms,帧移为1/2帧长,这样一帧就包含了16KHz*16ms=256个点,既满足短时平稳,又满足FFT变换的要求。

由于采集的语音是静态的,语音长度已知,很容易计算出语音的帧数,但是在硬件上或实时系统中,语音长度是无法估计的,而且还要考虑存储空间的大小和处理速度,采用软件实现时的静态分帧方法是行不通的,可以利用硬件本身的特点进行实时的动态分帧。

python中超简单的字符分割算法记录(车牌识别、仪表识别等)

python中超简单的字符分割算法记录(车牌识别、仪表识别等)

python中超简单的字符分割算法记录(车牌识别、仪表识别等)背景在诸如车牌识别,数字仪表识别等问题中,最关键的就是将单个的字符分割开来再分别进⾏识别,如下图。

最近刚好⽤到,就⾃⼰写了⼀个简单地算法进⾏字符分割,来记录⼀下。

图像预处理彩图⼆值化以减⼩参数量,再进⾏腐蚀膨胀去除噪点。

image = cv2.imread('F://demo.jpg', 0) # 读取为灰度图_, image = cv2.threshold(image, 50, 255, cv2.THRESH_BINARY) # ⼆值化kernel1 = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7)) # 腐蚀膨胀核kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 腐蚀膨胀核image = cv2.erode(image, kernel=kernel1) # 腐蚀image = cv2.dilate(image, kernel=kernel2) # 膨胀确定字符区域考虑最理想的情况,图中的字符是端正没有倾斜歪曲的。

将像素灰度矩阵分别进⾏列相加、⾏相加,则在得到的列和、⾏和数组中第⼀个⾮ 0 元素索引到最后⼀个⾮ 0 元素索引包裹的区间即就是字符区域。

h, w = image.shape # 原图的⾼和宽list1 = [] # 列和list2 = [] # ⾏和for i in range(w):list1.append(1 if image[:, i].sum() != 0 else 0) # 列求和,不为0置1for i in range(h):list2.append(1 if image[i, :].sum() != 0 else 0) # ⾏求和,不为0置1# 裁剪字符区域# 求⾏的范围flag = 0for i, e in enumerate(list1):if e != 0:if flag == 0: # 第⼀个不为0的位置记录start_w = iflag = 1else: # 最后⼀个不为0的位置end_w = i# 求列的范围flag = 0for i, e in enumerate(list2):if e != 0:if flag == 0: # 第⼀个不为0的位置记录start_h = ielse: # 最后⼀个不为0的位置end_h = iprint(start_w, end_w) # ⾏索引范围print(start_h, end_h) # 列索引范围分割单个字符与分割全部字符区域同理,在⾏和数组中⾮ 0 元素索引的范围即是单个字符的区域。

一种基于声韵母分割的汉语语音识别方法

一种基于声韵母分割的汉语语音识别方法

一种基于声韵母分割的汉语语音识别方法摘要:汉语语音识别研究中,识别单元的选取是很重要的。

该文提出一种基于声韵母分割的,以韵母为基本识别单元的大词汇量孤立词的语音识别方法,并与以汉语词为基本识别单元的语音识别方法进行比较识别实验。

结果表明,基于韵母为基本识别单元的语音识别性能优于以汉语词为基本识别单元的语音识别方法。

关键词:识别单元声韵母分割大词汇量汉语词语音识别是近年来十分活跃的一个研究领域。

在不远的将来,语音识别技术有可能作为一种重要的人机交互手段,辅助甚至取代传统的键盘、鼠标等输入设备,在个人计算机上进行文字录入和操作控制。

按可识别词汇的多少分,语音识别可分为小词汇量语音识别和大词汇量语音识别。

两种语音识别系统所采用的处理方法也不完全一样。

小词汇量语音识别基本都是以汉语词为基本识别单元,而大词汇量语音识别则多以音素为基本识别单元。

该文中,我们主要的研究对象是大词汇量汉语语音识别问题。

所以,这里的音素是指汉语的音素,它与英语的音素有比较大的区别。

因此,在汉语音素分割处理方面也有不同于通常对英语音素的处理方法。

该文介绍了一种基于汉语声韵母分割的,以韵母为识别单元的语音识别方法。

1汉语语音的声韵母分割汉语普通话是以字为单位的。

从声学角度看,汉语中一个字就对应一个音节。

因此,音节是汉语语音识别中最自然的识别单位。

目前,汉语语音识别逐渐向大词汇量连续语音识别的方向发展,音节作为识别单元已经慢慢被取代。

这是因为当词汇量增大时,不可能要求在进行语音数据训练中每个音节重复出现很多次,以得到可靠的结果,那么如何合理地选取语音识别单元,并建立相应的声学模型,是汉语语音识别的关键。

因此,必须选取比音节更小的单元(音素)作为训练和识别的基本语音识别单元。

1、1汉语音节的结构按照我国传统音素分类方法,汉语的一个字节可以看成是由声母和韵母拼合而成,即声—韵母结构是汉语音节结构的显著特点。

该结构构成使得汉语音节的声学单元组合具有一定的规律性,在这种结构中汉语音节的过渡音体现了音节的一种过渡性质。

一种基于声韵母分割的汉语语音识别方法①

一种基于声韵母分割的汉语语音识别方法①
音 识 别 系统 所 采用 的 处 理 方 法 也 不 完 全 一
划 分 成 声 韵 母 音 素 作为 识 别单 元 是 符 合 汉 样。 小 词 汇 量 语 音 识 别基 本 都 是 以汉 语 词 语 特 点的 。 为基本识 别单元, 而 大 词 汇 量 语音 识 别 则 1 . 2 汉语 的波 形特 征 多以 音 素 为 基 本 识 别 单元 。 该 文 中, 我 们 主 汉 语 的每 一 个 字都 是 一 个单 音节 字。 每 要 的 研 究 对 象 是 大 词 汇 量 汉语 语 音 识 别问 个单 音 节又 都 是 由声母 和 韵 母拼 音 而成 。 每 题。 所以, 这里的音素是指汉语的音素 , 它 个 韵 母 又 由若 干 个 音 节组 成 有多种 声调 。 因 与英 语 的 音 素 有 比较 大 的 区 别 。 因此 , 在 汉 此 共 组 成 l 2 0 0 多 个有 调 音 节。 从 汉 语 的波
语 音 素 分 割 处 理 方 面 也 有 不 同于 通常 对 英 形 特 征 上 看 , 声母 部 分 的变 化 很 快 , 周 期特 见表 l 。 语音 素的 处 理 方法 。 该文介绍了 一 种 基于 汉 性 不 明 显 ; 到 了过 渡 音 段 , 逐 渐呈 现 出 周期 语声韵母 分割的, 以 韵 母 为 识 别 单 元 的 语 性 , 而 到 了韵 母 部 分 , 周期特性非常明显, 3 结语 音识 别 方法 。 波形显得稳 定而有规律 ; 最 后 能 量 逐 渐 减 该 文 提 出 了基 于 声 韵 母 切 割 的 汉 语 语 少, 但依然保持周期性的特征 。 因此, 任 何 音 识 别方 法 , 对 该 识 别 单 元 在 特 定 人 和 非 个汉语音节 ( 零声母除外) , 其 波 形 运 动 特 定 人 在 汉 语 语 音 识 别 中 的应 用进 行 了实 1 汉 语语 音 的声 韵 母 分 割 所 验 分析 , 汉 语 普 通 话 是 以 字 为单 位 的 。从 声 学 周 期 性 呈 现 无 序一基 本 有 规 律一有规 律 。 并与 传 统 的汉 字词 为 识 别单 元 的语 才 能 音 识 别 方法 进 行 了比较 。 角度 看 , 汉 语 中一 个 字 就 对 应一 个 音 节。 因 以 只 要 检 测 到 语 音 信号 波 形 的 变 化 , 结 果 表 明, 本 文提

语音识别算法及其实现

语音识别算法及其实现

语音识别算法及其实现
一、概述
语音识别(speech recognition)是一种将语音信号转化为机器可以
理解的文字或符号的技术。

它通常被用来构建智能语音系统,使用户可以
通过语音与计算机进行交互。

在过去的数十年里,语音识别技术取得了巨
大的进步,开发出了更加准确、实用的算法。

目前,语音识别已经广泛应用于智能家居、安全监控、智能驾驶和智
能安防等多个领域。

本文将介绍语音识别算法、实现及其发展趋势。

二、语音识别算法
1.短时傅里叶变换
2.语音模板匹配
语音模板匹配(voice template matching)是一种语音识别技术,
可以根据已有的语音模板识别输入的语音。

它将语音信息转化为特定的特
征值,然后用这些特征值与模板中的特征值进行比较,从而进行识别。

3.基于HMM的语音识别
基于HMM(hidden Markov model)的语音识别是一种先进的语音识
别技术,利用HMM模型对语音信号进行建模,从而将语音信号转换为文本。

它是一种基于概率模型的语音识别算法,能够更好地处理语音的变化及其
复杂性。

语音识别系统的语音分割技术研究

语音识别系统的语音分割技术研究语音识别技术的发展在近年来取得了长足的进步,其中语音分割技术是其中一个重要的研究方向。

语音分割技术指的是将连续的语音信号分割成一段段较短的语音单位,这对于后续的语音识别和语音合成任务都具有重要意义。

本文将深入分析语音分割技术的研究方法以及应用领域。

一、语音分割技术的研究方法语音分割技术是通过对语音信号的特征进行分析,将其划分为语音段和非语音段。

下面将介绍几种常用的语音分割技术的研究方法。

1. 基于短时能量的语音分割方法基于短时能量的语音分割方法是最早被广泛应用的一种方法。

该方法通过计算语音信号在短时窗口内的能量大小,当能量超过某个阈值时认为该段为语音段。

然而,由于语音信号的能量会因发音的不同而有很大的差异,导致该方法在一些噪声环境下会出现错误的分割结果。

2. 基于短时过零率的语音分割方法基于短时过零率的语音分割方法是另一种常用的方法。

该方法通过计算语音信号在短时窗口内的过零率,当过零率超过某个阈值时认为该段为语音段。

相比于基于短时能量的方法,基于过零率的方法对于噪声的影响相对较小,但仍然存在一些缺陷,例如在某些语音较弱的段落会出现错误的分割结果。

3. 基于隐马尔可夫模型的语音分割方法隐马尔可夫模型(Hidden Markov Model,HMM)被广泛应用于语音识别任务中,同时也可以用于语音分割。

该方法通过训练一对HMM 模型,分别对语音段和非语音段进行建模,然后利用Viterbi算法来对整段语音信号进行自动分割。

相比于前两种方法,基于HMM的方法具有更好的分割精度和抗噪性,但在训练模型和选择特征时需要更多的工作量。

二、语音分割技术的应用领域语音分割技术在语音识别和语音合成等领域有着广泛的应用。

下面将介绍一些常见的应用场景。

1. 语音识别在语音识别中,语音分割技术可以将连续的语音信号划分为不同的语音单元,如音素或音节,以便后续的特征提取和识别过程。

准确的语音分割可提高语音识别的准确度和鲁棒性,使得识别系统能够更好地理解和解码语音信号。

音频处理中的语音识别算法使用方法和技巧

音频处理中的语音识别算法使用方法和技巧语音识别技术是人工智能领域的重要应用之一,已经广泛应用于语音助手、语音转文字等场景。

在音频处理中,语音识别算法起着关键作用,它能将人的口述语言转换成计算机可以理解和处理的文本。

本文将介绍语音识别算法的使用方法和技巧,帮助读者更好地应用于音频处理中。

一、语音识别算法的基本原理在了解语音识别算法的使用方法和技巧之前,我们首先需要了解其基本原理。

语音识别算法主要分为以下几个步骤:1. 预处理:对音频信号进行预处理,包括降噪、滤波等操作,以提高后续处理的准确性和稳定性。

2. 特征提取:将预处理后的音频信号转换成一系列特征向量,常用的特征提取方法包括MFCC(Mel频率倒谱系数)、PLP(Perceptual Linear Prediction)等。

3. 建模:将特征向量与预先训练好的声学模型进行比较,选择最可能的模型作为识别结果。

常用的声学模型包括隐马尔可夫模型(HMM)、深度神经网络(DNN)等。

4. 解码:将模型输出的概率序列转换成文本结果,常用的解码算法包括维特比算法、剪枝算法等。

二、语音识别算法的使用方法1. 数据准备:首先需要准备训练数据和测试数据。

训练数据应该包含大量的语音样本及其对应的文本标注,用于训练声学模型。

测试数据用于评估和验证模型的性能。

2. 特征提取:选择合适的特征提取方法进行特征提取,例如MFCC。

特征向量的维度和时间步长需要根据具体需求进行调整。

3. 建模训练:使用训练数据对声学模型进行训练。

常用的训练方法包括最大似然估计(MLE)和隐马尔可夫模型(HMM)的训练方法。

4. 解码生成:使用训练好的声学模型对测试数据进行解码生成文本。

可以采用维特比算法等解码算法进行解码。

5. 结果评估:对生成的文本结果与真实标注进行比较,计算准确率、召回率、F1值等指标,评估模型的性能。

三、语音识别算法的技巧1. 数据增强:通过对训练数据进行变速、变音调、加噪声等操作,扩充训练数据量,提高模型的泛化能力。

字符分割算法

字符分割算法
字符分割算法,是指将一个字符串按照一定的规则分割成若干个子串的过程。

在计算机科学中,字符分割算法被广泛应用于文本处理、信息抽取、自然语言处理等领域。

常见的字符分割算法包括:
1. 基于正则表达式的分割算法:利用正则表达式匹配字符串中的特定模式,并将其分割成子串。

2. 基于空格、标点符号等分隔符的分割算法:将字符串按照空格、标点符号等特定符号进行分割。

3. 基于最大匹配的分割算法:将一个字符串按照最大匹配的原则进行分割,即尽可能地匹配长的子串。

4. 基于最小编辑距离的分割算法:在字符串分割的过程中,根据最小编辑距离的原则进行拆分,使得被拆分出的子串之间的编辑距离最小。

以上算法均有其优缺点,需要根据具体应用场景进行选择。

需要注意的是,在实际应用中,字符分割算法常常需要与其他算法相结合,才能更好地完成任务。

- 1 -。

语音识别字符分割算法_原创

5.设计方法5.1概述5.2硬件系统的设计语音信号预处理(1)预加重预加重的目的是提升高频部分,使信号的频谱变得平坦,保持在低频到高频的整个频带中,能用同样的信噪比求频谱,以便于频谱分析或声道参数分析。

在计算机里用具有6dB/频程升高频特性的预加重数字滤波器来实现,一般是一阶的FIR数字滤波器:为预加重系数,值接近于l,在0.9和1之间,典型值为0.94。

预加重的DSPBuilder实现:为了便于实现,将上式中的一阶FIR预加重滤波器用差分方程表示为:其中,为原始语音信号序列,N为语音长度,上面的公式显示其在时域上的特性。

又因为0.94接近于15/16,所以将上面的式子变为除以16可以用右移4位来实现,这样就将除法运算化简为移位运算,降低了计算复杂度。

在后面的模块设计中,也乘以或者除以一些这样的数,这些数为2的幂次,都可以用移位来实现。

预加重的硬件实现框图如下:预加重实现框图DSP Builder中的图形建模为:预加重滤波器的DSPBuilder结构图(2)分帧语音信号是一种典型的非平稳信号,其特性随时间变化,其在很短的时间内是平稳的,大概为1小20ms,其频谱特性和物理特征可近似的看做不变,这样就可以采用平稳过程的分析处理方法来处理。

分帧的DSP Builder实现:语音信号在10到20ms之间短时平稳(这样可以保证每帧内包含1一7个基音周期),也就是说选取的帧长必须介于10到20ms之间,此外,在MFCC特征提取时要进行FFT变换,FFT点数一般为2的幂次,所以本文中选择一帧长度为16ms,帧移为1/2帧长,这样一帧就包含了16KHz*16ms=256个点,既满足短时平稳,又满足FFT变换的要求。

由于采集的语音是静态的,语音长度已知,很容易计算出语音的帧数,但是在硬件上或实时系统中,语音长度是无法估计的,而且还要考虑存储空间的大小和处理速度,采用软件实现时的静态分帧方法是行不通的,可以利用硬件本身的特点进行实时的动态分帧。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5.设计方法
5.1概述
5.2硬件系统的设计
语音信号预处理
(1)预加重
预加重的目的是提升高频部分,使信号的频谱变得平坦,保持在低频到高频的整个频带中,能用同样的信噪比求频谱,以便于频谱分析或声道参数分析。

在计算机里用具有6dB/频程升高频特性的预加重数字滤波器来实现,一般是一阶的FIR数字滤波器:
为预加重系数,值接近于l,在0.9和1之间,典型值为0.94。

预加重的DSPBuilder实现:
为了便于实现,将上式中的一阶FIR预加重滤波器用差分方程表示为:
其中,为原始语音信号序列,N为语音长度,上面的公式显示其在时域
上的特性。

又因为0.94接近于15/16,所以将上面的式子变为
除以16可以用右移4位来实现,这样就将除法运算化简为移位运算,降低了计算复杂度。

在后面的模块设计中,也乘以或者除以一些这样的数,这些数为2的幂次,都可以用移位来实现。

预加重的硬件实现框图如下:
预加重实现框图
DSP Builder中的图形建模为:
预加重滤波器的DSPBuilder结构图
(2)分帧
语音信号是一种典型的非平稳信号,其特性随时间变化,其在很短的时间内是平稳的,大概为1小20ms,其频谱特性和物理特征可近似的看做不变,这样就可以采用平稳过程的分析处理方法来处理。

分帧的DSP Builder实现:
语音信号在10到20ms之间短时平稳(这样可以保证每帧内包含1一7个基音周期),也就是说选取的帧长必须介于10到20ms之间,此外,在MFCC特征提取时要进行FFT变换,FFT点数一般为2的幂次,所以本文中选择一帧长度为16ms,帧移为1/2帧长,这样一帧就包含了16KHz*16ms=256个点,既满足短时平稳,又满足FFT变换的要求。

由于采集的语音是静态的,语音长度已知,很容易计算出语音的帧数,但是在硬件上或实时系统中,语音长度是无法估计的,而且还要考虑存储空间的大小和处理速度,采用软件实现时的静态分帧方法是行不通的,可以利用硬件本身的特点进行实时的动态分帧。

为了使帧与帧之间平滑过渡,保持连续语音流的自相关性和过渡性,采用交叠分帧的算法。

帧移取1/2帧长,即128个数据点当作一个数据块。

FIFO1大小为一帧语音长度,分成两个数据块,预加重后的数据写入这个FIFO。

为了实现帧移交叠,在FIFO1读数据时,同时再用FIFO2保存起来,当FIFO的一块数据读完以后,紧接着从FIF22读出这一块的副本。

写入的一块数据,相当于被重复读出2次,所以FIFO1的读时钟频率设计为写时钟频率的2倍,而FIFOZ的读写时钟频率和FIFO1的读时钟频率相同。

分帧以后的数据在图中按时间标号为1、2、2、3.··…,1、2为第一帧,2、3为第二帧,以此类推。

分帧实现框图
FIFO1的写信号一直为1(写允许),等到写完第1块(128点)再允许读。

当FIFO1读第1块数据的时,FIFO2保存第1块的数据,两者时钟频率一致,同时FIF01也在写第2块数据。

FIFO1读完第1块数据,FIFO2里为第1块数据,FIFO1中第2块数据写了一半,此时禁止FIFO1读,并使能FIF02的读信号,从FIFO2中将第1块数据再读一遍,读完时第2块数据己经完全写入FIFO1,再允许FIFO1读,同时禁止FIF02读,如此循环。

图中,数据选择器就是为了实现两个FIFO的读出数据选通,第1次数据为FIFO1的读出内容,第2次数据为FIFO2读出内容,这样就实现将一块数据内容重复输出两次,读完两次的同时,写完下一块内容。

分帧的DSPBullder实现为:
分帧的DSPBuilder的结构图
Inc 模块是为了让FIFO1写入128个数据后才产生读使能信号,其时钟频率与写时钟相同。

Counter 是模256的计数器,当计数值在0到127之间时输出FIFOI 的值,128到255之间输出FIFO2的值,时钟频率与读时钟相同,为写时钟的两倍。

DMUX 为数据选择器。

分帧后,波形平滑了许多,略微有了一点延时,这是因为FIFOI 的读使能比写使能晚了128个采样点。

但这样实现的实时分帧,与静态分帧相比,速度提高了很多,有效的减少了存储空间的浪费。

(3) 加窗
加窗的目的是使主瓣更尖锐,旁瓣更低。

语音信号数字处理中常用的窗函数是矩形窗和汉明窗,本文选取的是汉明窗。

因为矩形窗虽然有较高的频率分辨率,但它的频谱泄露比较严重,相比较来说,虽然汉明窗频率分辨率没有矩形窗高,但它有更平滑的底通特性,能够在较高程度上反映短时语音信号的频率特性。

汉明窗公式如下(其中N 为帧长):
0.540.46cos[2/(1)],01n N n N π--≤≤-
()n ω=
{
0,n else =
设分帧后的信号为S(n),加窗就是窗函数诚w(n)来乘分帧后的信号S(n),从而形成加窗语音信号()()()*s n s n n ωω=
加窗的DSP Builder 实现:
分帧后数据为8位定点QO(即8位有符号整数),三角余弦函数的范围为-1到1,可以用Q15来表示,但是Q15能表示的范围为一1到32767/32768之间,原则上应该用Q14表示,但从方便和总体精度考虑,仍然用Q15,+l 用32767来表示。

加窗后输出还是为8位定点QO 。

具体方法是:
窗函数采取查表的方法,表的大小为帧长(本文为256),将窗函数()n ω中 的0.08~1的值用Q15表示,其数值上相当于小32768(2的15次方),保存在 windowTable[]中,然后用预加重的信号s(n)乘以WindowTable[i]来计算加窗后的语音信号,得到加窗后的语音信号[]s i ω,仍然与预加重后的位数相同,公式如下:
[]()[]*[]15S i S i WindowTable i ω=>>
其实,分帧和加窗是同时进行的,分帧时只要找到与窗函数中对应点的关系,然后相乘就能得到加窗的数据,下图表示了预加重、分帧和加窗的时序关系:
预加重、分帧和加窗时序关系
由图知,真正的第1帧有效数据应该是在FIF01写信号有效的192个时钟期后产生。

加窗的主要运算对象是查找表,其DSPBullder实现如下:
加汉明窗的DSPBuilder 结构图
图中,Counter 为模256(窗长为256)个计数器,Incl 模块使其在192个点 之后才开始循环计数,这样每帧的数据点与窗函数的数据点就一一对应了。

hamming--table 的设置为:17964-15073*cos([0:2*pi/255:2*pi]),将0到2π分成255个区间,再将其余弦值放大了32768倍。

● 总线接口的设计
● 自定义指令
5.3软件系统的设计 ● 连续语音分割
该部分功能利用matlab 软件验证通过,并在nios II 编程实现。

包含有‘前’、‘退’、‘左’、‘右’、‘停’五个孤立字的连续语音信号波形如下图1所示:
1
2
3
4
5
6
7
x 10
5
-1-0.8-0.6-0.4-0.200.20.40.60.8
1
图1:连续语音信号波形
上述语音信号通过麦克风输入、采样量化后存储在DE1开发板上Rom 中,根据地址存储形象化如下:
图2:语音数据在rom 中的存储
对其处理步骤如下:
(1) 如图所示,L
为语音数据帧长,其大小根据经验值得到,与单个字语音信
息的长度、采样频率有关,L 取值的标准是能包含住各个字的语音信息长度。

对于本设计8KHz 的采样率,L 取11792。

∆可以根据情况进行取值,在这里取18。

对上述存储数据从首地址开始取数据,每隔∆个数据顺序取L 个数据存放到一数组中,由此可以得到一系列的数组,对于上述语音数据可以得到6000多个数组。

(2) 对上步中得到的数组分别进行取绝对值、求和,以存储先后为横轴,各数
组和为纵轴作曲线如下图3:
0100020003000400050006000
0.5
1
1.5
2
2.5
4
图3
(3) 如上图3所示,五个波形尖峰对应五个孤立字语音信息,分析可知这五个
尖峰值所对应的数组即为那五段有用语音信息。

按照步骤(1)的思路,从上图3曲线起点开始,取1000个数据点放到一个数组里面,求出该数组里面的最大值以及其所对应的位置。

若最大值满足阈值条件,则步进1000,从第1001个点再顺序取1000个点放到一个数组里面,重复上述操作。

若最大值不满足所设阈值条件,则步进1,从第2个点顺序取1000个点放到一个数组里面,重复上述操作。

这样即可求得到五段包含有用孤立字信息的语音信号。

所得结果通过matlab 仿真作图如下所示:
4
x 104x 104
x 104x 104
x 104x 104
x 104x 104
x 104x 104
图4:仿真结果图
图中第一行第一列为原始包含五个孤立字的语音信号波形,第二行到第六行左侧依次为‘前’‘退’‘左’‘右’‘停’的原始波形,右侧为通过上述方法提取出的对应孤立字的语音信号波形,由图可以看出,提取效果很好。

●端点检测
●Mfcc系数提取
●HMM训练模块
●语音识别模块。

相关文档
最新文档