构建具有多个类的KNN分类器,用于识别不同的音频

时间:2017-02-10 18:38:56

标签: matlab audio

我正在构建KNN算法,目的是在Matlab中识别和分类常见的引擎问题。我一直在使用“音频分析简介:一种Matlab方法”一书中的构建,其中包含了我继续实验所需的内容。问题是,当我确定音频样本保存在计算机上的位置时,系统声称它发出消息“音频样本路径无效!”以下是本书作者提供的原始算法

function kNN_model_add_class(modelName,className,classPath,...     listOfStatistics,stWin,stStep,mtWin,mtStep)

%
% function kNN_model_add_class(modelName, className, classPath, ...
%         listOfStatistics, stWin, stStep, mtWin, mtStep)
%
% This function adds an audio class to the kNN classification model
% 
% ARGUMENTS;
% - modelName:  the filename of the model (mat file)
% - className:  the name of the audio class to be added to the model
% - classPath:  the path of the directory where the audio segments of the
%               new class are stored
% - listOfStatistics:   list of mid-term statistics (cell array)
% - stWin, stStep:      short-term window size and step
% - mtWin, mtStep:      mid-term window size and step
%
% Example:
% kNN_model_add_class('modelSpeech.mat', 'speech', './Music/', ...
%  {'mean','std',}, 0.050, 0.025, 2.0, 1.0);
%

if ~exist(classPath,'dir')
    error('Audio sample path is not valid!');
else
    classPath = [classPath filesep];
end

% check if the model elaready exists:
fp = fopen(modelName, 'r');
if fp>0 % check if file already exists
    load(modelName);
end

% Feature extraction:
D = dir([classPath '*.wav']);
F = [];
for (i=1:length(D)) % for each wav file in the given path:
    curFileName = [classPath D(i).name];
    FileNamesTemp{i} = curFileName;
    % mid-term feature extraction for each wav file:
    midFeatures = featureExtractionFile(curFileName, ...
        stWin, stStep, mtWin, mtStep, listOfStatistics);

    % long-term averaging:
    longFeatures = mean(midFeatures,2);       

    F = [F longFeatures];
end

% save the model:
Statistics = listOfStatistics;
fp = fopen(modelName, 'r');
if fp<0 % model does not exist --> generate     
    ClassNames{1} = className;
    Features{1} = F;   
    FileNames{1} = FileNamesTemp;
    save(modelName, 'ClassNames', 'Features', ...
        'Statistics', 'stWin', 'stStep', 'mtWin', 'mtStep', 'FileNames');
else
    load(modelName);
    ClassNames{end+1} = className;
    Features{end+1} = F;
    FileNames{end+1} = FileNamesTemp;
    save(modelName, 'ClassNames', 'Features', ...
        'Statistics', 'stWin', 'stStep', 'mtWin', 'mtStep', 'FileNames');
end

以下是我将其实施到我自己的项目中的方式。

    %Knn algorithm training
%path to folder containing the audio segements 

strDir ='/Users/itsolutions/Documents/MATLAB/Wav_engine_edits ';

%mid-term statistics to be used:

Statistics = {'mean','median','std','stdbymean','max','min'};

%short-term and mid-term, processing windon length and step:

stWin = 0.040; stStep = 0.040;

mtWin = 2.0;  mtStep = 1.0;

%perform feature extraction
kNN_model_add_class ('model8.mat','connection rod noise', [ strDir '/Connection_rod_edits/'],Statistics, stWin, stStep, mtWin, mtStep);

kNN_model_add_class ('model8.mat','detonation noise', [strDir ' /Detonation_noise_edits/'],Statistics, stWin, stSteo, mtWin, mtStep)

%kNN_model_add_class ('model8.mat','Engine bearing noise' [strDir '/Engine Bearing Noise edits/'],Statistics, stWin, stStep, mtWin, mtStep);

有什么想法吗?我已经查看了函数knn_model_add_class()中存在的对象,并且发现它仍然使用wavread,现在在2016b版本的matlab中使用无效语法。

有人能帮我一把吗?好像我要进入圈子,这是我看不到的非常明显的事情。

此致

M.Brown

编辑:

使用消除过程我发现错误来自这段代码

if ~exist(classPath,'dir')
error('Audio sample path is not valid!');

否则     classPath = [classPath filesep]; 端

代码似乎无法找到有问题的音频样本。我已经联系了本书的作者,但在此之前有人知道为什么matlab文件路径无法识别wav文件吗?

0 个答案:

没有答案