2016-06-10 17:29:40 qq_27217131 阅读数 4620
  • 定时器、看门狗和RTC-1.9.ARM裸机第九部分

    本期课程主要讲述SoC中的时间相关的外设,包括定时器、看门狗定时器和实时时钟RTC。首先讲述了定时器的基本概念,然后以PWM定时器为例详细讲解了定时器的使用及编程细节;看门狗定时器部分详细讲了看门狗的意义和常规工作形式;后2节课讲了RTC的概念、框图和编程方法

    7401 人正在学习 去看看 朱有鹏
实验目的 

运用课堂上所学知识以及matlab工具,利用DTW(Dynamic Time Warping,动态时间规整)算法,进行说话者的语音识别。

实验原理 
1、语音识别系统概述 
一个完整特定人语音识别系统的方案框图如图1所示。输入的模拟语音信号首先要进行预处理,包括预滤波、采样和量化、加窗、端点检测、预加重等,然后是参数特征量的提取。提取的特征参数满足如下要求: 
(1)特征参数能有效地代表语音特征,具有很好的区分性;

(2)参数间有良好的独立性; 
(3)特征参数要计算方便,要考虑到语音识别的实时实现。


语音识别的过程可以被看作模式匹配的过程,模式匹配是指根据一定的准则,使未知模式与模型库中的某一个模型获得最佳匹配的过程。模式匹配中需要用到的参考模板通过模板训练获得。在训练阶段,将特征参数进行一定的处理后,为每个词条建立一个模型,保存为模板库。在识别阶段,语音信号经过相同的通道得到语音特征参数,生成测试模板,与参考模板进行匹配,将匹配分数最高的参考模板作为识别结果。


2、语音信号的处理 1、语音识别的DTW算法 
本设计中,采用DTW算法,该算法基于动态规划(DP)的思想解决了发音长短不一的模板匹配问题,在训练和建立模板以及识别阶段,都先采用端点检测算法确定语音的起点和终点。


在本设计当中,我们建立的参考模板,m为训练语音帧的时序标号,M为该模板所包含的语音帧总数,R(m)为第m帧的语音特征矢量。所要识别的输入词条语音称为测试模板,n为测试语音帧的时序标号,N为该模板所包含的语音帧总数,T(n)为第n帧的语音特征矢量。参考模板和测试模板一般都采用相同类型的特征矢量(如LPCC系数)、相同的帧长、相同的窗函数和相同的帧移。 
考虑到语音中各段在不同的情况下持续时间会产生或长或短的变化,因而更多地是采用动态规划DP的方法。把测试模板的各个帧号n=1~N在一个二维直角坐标系中的横轴上标出,把参考模板的各帧号m=1~M在纵轴上标出,通过这些形成网格,网格的每一个交叉点(n,m)即表示测试模式中某一帧与训练模式中某一帧的交汇点。DP算法即可以归结为寻找一条通过此网格中若干个点的路径。路径通过的格点即为此时与参考模板中进行距离计算的帧号。应当注意,路径不是随意选择的,选取的路径必定是从左下角出发,在右上角结束。 
通常,规整函数被限制在一个平行四边形的网格内,如图2所示。它的一条边斜率为2,另一条边斜率为1/2。规整函数的起点是(1, 1),终点为(N,M)。DTW算法的目的是在此平行四边形内由起点到终点寻找一个规整函数,使其具有最小的代价函数,保证了测试模板与参考模板之间具有最大的声学相似特性。 


由于在模板匹配过程中限定了弯折的斜率,因此平行四边形之外的格点对应的帧匹配距离是不需要计算的。另外,因为每一列各格点上的匹配计算只用到了前一列的3个网格,所以没有必要保存所有的帧匹配距离矩阵和累积距离矩阵。充分利用这两个特点可以减少计算量和存储空间的需求,形成一种高效的DTW算法。



2019-05-19 12:06:47 qq_29416647 阅读数 533
  • 定时器、看门狗和RTC-1.9.ARM裸机第九部分

    本期课程主要讲述SoC中的时间相关的外设,包括定时器、看门狗定时器和实时时钟RTC。首先讲述了定时器的基本概念,然后以PWM定时器为例详细讲解了定时器的使用及编程细节;看门狗定时器部分详细讲了看门狗的意义和常规工作形式;后2节课讲了RTC的概念、框图和编程方法

    7401 人正在学习 去看看 朱有鹏

前言

大家好!临近期末,本人需要交一份模式识别课程大作业,作业内容是:用传统的方法对kaggle语音数据集进行性别分类。那么何谓传统的方法,在查阅相关资料后,决定采用朴素贝叶斯分类器对其分类。这是小编第一次写博客,有什么不足之处还请共同探讨。

数据集介绍

Kaggle 是一个提供机器学习竞赛、托管数据库、编写和分享代码的平台,上面有一些用户分享的开放数据集,本文选取Kory Becker提供的男女声音特征分类数据集。这个数据集是基于对男女语音段进行合理的声音预处理而得到的语音特征(并不包含原始语音段)。集合中共有3168条数据,男女各1584条,每条数据可视作一个长度为21的一维数组。其中前20个数值是这条语音的20个特征值,这些特征值包括了语音信号的长度、基频、标准差、频带中值点/一分位频率/三分位频率等;最后一个数值是性别标记。原数据集中直接以字符串male和female进行标注,本文用0表示男性、1表示女性以方便后续处理。

朴素贝叶斯分类原理

朴素贝叶斯分类是一种十分简单的分类算法,叫它朴素贝叶斯分类是因为这种方法的思想真的很朴素,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。
朴素贝叶斯分类的正式定义如下:
1、设x=(a1,a2,…,am)为一个待分类项,而每个a为x的一个特征属性。
2、有类别集合C=(y1,y2,…,yn)。
3、计算P(y1/x),P(y2/x),…,P(yn/x)。
4、如果P(yk/x)=max{P(y1/x),P(y2/x),…,P(yn/x)},则x属于yk
那么现在的关键就是如何计算第3步中的各个条件概率。我们可以这么做:
1、找到一个已知分类的待分类项集合,这个集合叫做训练样本集。
2、统计得到在各类别下各个特征属性的条件概率估计。即
在这里插入图片描述
3、如果各个特征属性是条件独立的,则根据贝叶斯定理有如下推导:
在这里插入图片描述
因为分母对于所有类别为常数,因为我们只要将分子最大化皆可。又因为各特征属性是条件独立的,所以有:
在这里插入图片描述

朴素贝叶斯分类流程

整个朴素贝叶斯分类分为三个阶段:
第一阶段——准备工作阶段,这个阶段的任务是为朴素贝叶斯分类做必要的准备,主要工作是根据具体情况确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。这一阶段是整个朴素贝叶斯分类中唯一需要人工完成的阶段,其质量对整个过程将有重要影响,分类器的质量很大程度上由特征属性、特征属性划分及训练样本质量决定。
第二阶段——分类器训练阶段,这个阶段的任务就是生成分类器,主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录。其输入是特征属性和训练样本,输出是分类器。这一阶段是机械性阶段,根据前面讨论的公式可以由程序自动计算完成。
第三阶段——应用阶段。这个阶段的任务是使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系。这一阶段也是机械性阶段,由程序完成。

本实验所采用模型

我们假设20个特征值分类为F1,F2 ,F3 …,F20,F1i1表示 特征F1 取 第i1 个 分类,则一个测试样本向量可以表示如下:
test_vector = [F1i1 , F2i2 , F3i3 … F19i19 , F20i20]
则其是男性的概率为:
P(男 | F1i1 ✕ F2i2 ✕ F3i3 … F19i19 ✕ F20i20)= P(F1i1 ✕ F2i2 ✕ F3i3 … F19i19 ✕ F20i20 | 男) * P(男) / P(F1i1 ✕ F2i2 ✕ F3i3 … F19i19 ✕ F20i20)

需要注意的是:

  1. 从实际应用角度来看,朴素贝叶斯分类法其实并不太适合于特征数量过多的分类问题,不管是二分类还是多分类。这是由于该方法本质上是概率的叠乘,每有一个特征就需要进行一次概率相乘,而这里有20个特征就需要乘上20次。而概率都是小于1的,所以在计算上颇为麻烦——会得到小于10的负20次方的小数。对这个问题可以采用每次都乘以某个略大于1的常数如sqrt(2)来补偿,或者取对数。
  2. 另外一个就是计算量,这一点可以通过不考虑全概率以及人为操作使得先验概率相同这两样手法来减少一些运算。
    第三点比较细节,在于若某个新数据在某个特征处取到了训练集所未曾取到的数据,就会得出此处的后验概率为0的结果,从而通过概率连乘导致最终的概率为0,而这显然是不正确的。解决措施也很简单,只要在每次计算时分子分母同时加1即可,而因此所造成的误差可以认为是忽略不计的。

实验过程

流程框图及程序文件

流程框图:
在这里插入图片描述
程序文件:
在这里插入图片描述

数据集处理

  1. 本实验在MATLAB操作平台上实现,而获取的数据集是CSV文件(voice.xls),需要通过转换将此数据集变为mat文件,即读入MATLAB成为一个3168*21的矩阵,使用xls2mat.m程序可以完成此功能,得到voive_data.mat文件,得到的数据是量化后的(因为此程序会调用量化程序mydiscretization.m),量化的概念和作用见下文。仔细观察数据会发现其中有不少数值为0项,这是原始数据的缺项,我直接采用均值加以弥补,在不确定的时候优先考虑均值总不失为一种稳妥的处理方法。注意,对缺项数据的补写应当最优先处理。
  2. 一般而言,在不考虑测试集时训练集、验证集常采用7:3或8:2的数量划分,考虑到测试集时一般划分为6:2:2。原始数据集的划分还是很有讲究的,周志华教授在他著名的科普大作《机器学习》中对此有很详细的讨论。本数据集公有3168条数据,为了让男性声音样本和女性声音样本随机地分布到训练和测试数据集,这里使用随机算法随机选取2000条作为训练数据集,其余的1168条作为测试数据集。

量化

贝叶斯分类器比较难以处理非整数特征的数据,所以需要对数据进行量化。贝叶斯分类器是基于条件概率而进行分类的,所以最重要的一点是数据处理不能改变其分布律,因此一定要进行线性量化。而在这里事实上对结果有影响的是每个特征的相对数值而非绝对大小,故仅量化相对量即可。也就是说,以某一特征在所有实验数据(如上文所说,共计3168条)中的最大、最小值分别作为量化之后的最大、最小值,而不用去管小于最小值的所谓“基础量”。 量化阶也是一个需要考虑的参数。量化阶越大,量化越粗糙,计算量越小;量化阶越小,量化越细致,计算量越大,本文中量化阶取 20,故每个特征的最大值量化后为20,最小值量化后为1。具体过程如下:
原始数据voice.xls:
在这里插入图片描述
量化后的数据voive_data.mat:
在这里插入图片描述
以上两个图,共20个特征,第十个特征原始数据中最大值为0.8045(图1所示),则量化后的最大值为20(图2所示),以此类推。每个特征在1~20量化阶取值。

训练

通过文件training.m得到TrainingSets.mat,生成表格:
在这里插入图片描述
Feature:训练集(男女各1100)中20个特征值
Feature_prob:每一个特征值所对应每一个量化阶的概率。列表示20个特征,行表示20个量化阶。
Feature_prob具体数值(比如:第一个特征对应的第一阶概率为0.0027,对应的第三阶概率为0.0018,以此类推):
在这里插入图片描述

测试

通过文件validation.m得到ValidationSets.mat,生成表格:
在这里插入图片描述
Results为对应结果,第一列为男性的概率,第二列为女性的概率,比较之后得到最终结果如第三列所示(0:男性 1:女性),具体如下:
在这里插入图片描述
同时可得出总的成功率:
在这里插入图片描述
即:
男性判断正确的概率:0.9711
女性判断正确的概率:0.8554
总的正确率 :0.9132

核心代码

数据训练步骤的核心代码如下:

for j=1:20
    for i=1:stepnum
        TrainingSets(1).feature_prob(i,j) = ...
            (myhowmany(i,TrainingSets(1).feature(:,j))+1)/(M_train_num+1);
        TrainingSets(2).feature_prob(i,j) = ...
            (myhowmany(i,TrainingSets(2).feature(:,j))+1)/(F_train_num+1);
    end
end

得到了每一个特征在量化范围内的每一个可能取值的概率。
数据验证步骤的核心代码如下:

for i=1:2
    for j=1:ValidationSets(i).number              % for each voice
        data = ValidationSets(i).feature(j,:);
        for k=1:20
            % probability of being male voice
            ValidationSets(i).results(j,1)=...
                TrainingSets(1).feature_prob(data(k),k)*ValidationSets(i).results(j,1);
            % probability of being female voice
            ValidationSets(i).results(j,2)=...
                TrainingSets(2).feature_prob(data(k),k)*ValidationSets(i).results(j,2);
        end
        if ValidationSets(i).results(j,1) > ValidationSets(i).results(j,2)
            % this is male voice
            ValidationSets(i).results(j,3) = 0;
        else
            % this is female voice
            ValidationSets(i).results(j,3) = 1;
        end
    end
end

得到了每一条待验证的数据分别为男声和女声的概率,通过比较大小即可得出最终判断。

注意点

  1. 从实际应用角度来看,朴素贝叶斯分类法其实并不太适合于特征数量过多的分类问题,不管是二分类还是多分类。这是由于该方法本质上是概率的叠乘,每有一个特征就需要进行一次概率相乘,而这里有20个特征就需要乘上20次。而概率都是小于1的,所以在计算上颇为麻烦——会得到小于10的负20次方的小数。对这个问题可以采用每次都乘以某个略大于1的常数如sqrt(2)来补偿,或者取对数。
  2. 计算量。这一点可以通过不考虑全概率以及人为操作使得先验概率相同这两样手法来减少一些运算。
  3. 若某个新数据在某个特征处取到了训练集所未曾取到的数据,就会得出此处的后验概率为0的结果,从而通过概率连乘导致最终的概率为0,而这显然是不正确的。解决措施也很简单,只要在每次计算时分子分母同时加1即可,而因此所造成的误差可以认为是忽略不计的。.

后记

本文是根据原博主和自己写的大作业改编而来,功能和内容没有原博主的丰富,感兴趣的朋友也可参照原博主和我的解释,更容易消化。原博主的两个程序myisinterger.m和myrowcheck.m我没有用到,所以没有提及。
我已将代码已上传至网络,链接:https://pan.baidu.com/s/1I8bHfqsj2yqHDKcFIQ_byw
提取码:5vih。
原文链接:https://blog.csdn.net/ctyqy2015301200079/article/details/83346310

没有更多推荐了,返回首页