page contents

C#基于NAudio的音量识别

本文讲述了C#基于NAudio的音量识别!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2022-10-dzyOoebl633ceac212546.png本文讲述了C#基于NAudio的音量识别!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

以下将走过的坑分享一下:

1.不定长声音的MFCC也不定长(废话),解决不定长,我用了人工指定的方式,即指定MFCC特征的个数,多的丢,少的补零。仅个人实践表明,特征越多分类效果越好,所以,多补零吧。


 string[] MFCCa = MFCCs.Split(',');

                for (int j = 0; j < chanum; j++)

                {

                    if (j > MFCCa.Length - 2)//存的时候多了个“,”,所以回退一位

                    {

                        trainDate[i, j] = 0;

                    }

                    else

                    {

                        trainDate[i, j] = Convert.ToSingle(MFCCa[j]);

                    }

 

                    trainLab[i, 0] = 1;

                }

2.Emgucv3.×以上的训练结果文件(.XML)的读存请自行修改下,直接save和load似乎不行。半公开的秘密,代码如下:


        private static void saveSVMtoFile(SVM model,String path)

        {

            if (File.Exists(path))

                File.Delete(path);

 

            FileStorage fs = new FileStorage(path, FileStorage.Mode.Write);

            model.Write(fs);

            fs.ReleaseAndGetString();

        }

 

        private static SVM loadSVMtoFile(String path)

        {

            SVM svm = new SVM();

            FileStorage fs = new FileStorage(path, FileStorage.Mode.Read);

            svm.Read(fs.GetRoot());

            fs.ReleaseAndGetString();

            return svm;

 

        }

3.Emgucv的SVM和BP之间细微的差别


本以为只是改改训练器,几行代码的事情,但报了一堆错,全是小细节。


3.1 SVM的分类标签可以是int或者float,但BP一定一定要是float


 Matrix<float> trainDate = new Matrix<float>(allnum, chanum);

            Matrix<int> trainLab = new Matrix<int>(allnum,1);

 Matrix<float> trainData = new Matrix<float>(allnum, chanum);

            Matrix<float> trainClasses = new Matrix<float>(allnum, 1);

3.2 SVM可以直接给出预测结果(即标签),BP给出的不知道是什么(大概是到你定的标签范围内的落点,我定了1和-1,但有时候超出了1和-1,所以很奇怪,有真懂的同学留言教我一下),还要自己判断一下。


 Matrix<float> preDate = new Matrix<float>(1, chaNum);

                getPerDate(preDate, OutfileName[j], chaNum);

                float kinds=svm.Predict(preDate);

 Matrix<float> preDate = new Matrix<float>(1, chaNum);

                Matrix<float> prediction = new Matrix<float>(1, 1);

                getPerDate(preDate, OutfileName[j], chaNum);

                network.Predict(preDate, prediction);

 

                float kinds = prediction.Data[0, 0];

3.3 SVM(线性核函数)+MFCC我做出来50%上下,几乎没什么意义。BP效果不错,起码70以上,一般水准在80%上下。

attachments-2022-10-xueMeNQV633cea8eb19ea.png

悲伤的补一句,样本数量还可以且分类数量很小的情况下,最短路径的效果其实很好。

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2022-10-05 10:24
  • 阅读 ( 356 )
  • 分类:C/C++开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. Pack 1131 文章
  3. 小柒 1046 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章