音乐分类器及其Matlab实现

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

FE i (1)
i FLen 1
x
n i
2 n ,其中 x 是第 n 个样本之,FLen 是每一帧的长度 n
FER 定义了相邻两个帧之间的能量比,也是特征之一,其计算公式如(2): (2) FERi max
FEi FEi 1 , , 其中Ei 和Ei 1均不为零 FEi 1 FEi
-2-
http://www.paper.edu.cn
% % % %
variance 是计算得出的特征值的方差 Coded By 陈凯 北京邮电大学信息工程学院
[F,Fs,NBITS] = wavread(FileName,20*44100);% time = 20; T = 1:time*Fs; Wave = F(T); Wave = Wave/max(abs(Wave)); WLen = length(T); winlen = 2^nextpow2(Fs*20/1000); dupwin = 2^nextpow2(Fs*5/1000); stepwin = winlen-dupwin; E = zeros(WLen-stepwin,1); for i = 1:stepwin:WLen-stepwin xm = Wave(i:i+stepwin); E(i) = sum(xm.*xm); end E0 = [E zeros(length(E),1)]; E0 = setxor(E0(:,1),0); j=1; for i = 1:length(E) if E(i)>0 E0(j,1)=E(i); E0(j,2)=i; j = j+1; end end Emin = min(E0(:,1)); Emax = max(E0(:,1)); Emean = mean(E0(:,1)); lamda = 0.5; Ttfe = Emin + lamda * (Emean - Emin); for i = 1:length(E0(:,1)) if E0(i,1) < Ttfe E0(i,1) = 0; end end % 寻找特征片段
-5-
%
Rocks
%
Pops
http://www.paper.edu.cn
GFE Emin ( E Emin ),0 1
计算得到静音阈值,并依次阈值对 FE 进行过滤,剩下的片段认为是非背景声; 然后用(2)式计算 FER,FER 比较大的帧即可判断为特征片段的端点,而端点之 间帧就是特征片段。
2.3 实验及对结果的分析 首先根据以上算法编写特征提取函数 Feature_Extract.m,返回值为各个端点之间距 离的平均值和方差。实验中采用的音频文件均是采样速率为 44.1KHz,PCM 编码的标 准 Wave 文件。各个音频文件只取 20 秒作为样本。 %% Feature_Extract.m function [FileName,mean_value,variance] = Feature_Extract(FileName) % [mean_value,variance] = Feature_Extract(FileName) % FileName 是需要分析的波形文件的路径 % mean_value 是计算得出的特征值的平均值
1. 引 言
基于内容的音乐信息检索 (music information retrieval) 问题长期以来研究的焦点主要集 中在音乐的特征表示与分类方法的问题上。常用音乐特征表示方法有:① 相对音高序列表 示,即用“ 倡”表示音高序列的开始,然后依次将序列的后一个音高同前一个音高进行比 较,分别用“Up” 、“Down” 、“Repeat” 等3 个参数来表示音高的升高、降低和相 同3 种情况;② 综合表示法,即采用(音高,音长,音强)三元组进行表示。对音乐的特 征进行表示之后, 需要针对特征的分类方法来进行音乐的分类。 常用音乐分类方法基于特征 匹配,而常用的特征匹配方法有:① 近似字符串匹配算法,即由Ghias 和McNab 等人采用 的Dynamic Programming法 ,将动态规划方法引入音乐字符串匹配问题中,查找相似音乐字 符串,而Salo 等人采用的N唱Gram 法进行近似字符串匹配;② 基于特征空间的算法,即 由Matt 等提出的基于特征空间的音频分类算法,K 近邻搜索算法。[1] 随着人们生活水平的提高, 对音乐的欣赏要求也日渐提高。 然而不同类型的音乐有不同 的音色音高,人们往往都会用各种方法对音乐进行调整,如人们最常使用的均衡器。我们努 力于研制一种基于DSP的滤波式均衡器, 使用者只需要将其连接在音频输出设备和播放设备 (耳机、音响)之间,均衡器既可对输入的音频进行分类,并进行均衡处理。与传统的均衡 器不同的是,这套设备可以根据以往使用者的设定,自行判定当前音乐应该属于哪类音乐, 自动地去迎合使用者的习惯。总结以上设计,这套设备的特点简单列举如下:1、能对音乐 进行智能地分类;2、对不同种类的音乐做出不同的均衡处理;3、处理满足实时性要求。 针对这样的特点,我们认为可以采用DSP作处理器,用实时性较强、学习特性较好的神 经网络作分类器以实现这样的功能。 本文对如何提取作为神经网络训练依据的各类音乐的特征值做出讨论和研究,并在 Matlab平台上进行了分类器的实现。
2.2 特征片段的提取 音乐分为平缓部分、高潮等部分,决定音乐风格的基本是高潮部分,如高潮出现的 时间、次数,以及强度等。特征的提取的工作就实际上就可以是一个分类的过程:将每 一个帧分类,将高潮部分和相对激烈的帧提取出来作为特征向量[1]。 首先,将音乐划分为一系列的帧,对每一个帧用(1)式计算 FE。根据
% % %
初始化帧能量比矩阵 计算帧能量比 若当前帧与后一帧都不为零
FERa = E0(i+1,1)/E0(i,1); FERb = E0(i,1)/E0(i+1,1); FER(i,1)=max(FERa,FERb); FER(i,2)=E0(i,2); end end level = mean(FER(:,1)); result0 = zeros(length(FER(:,2)),1); j = 2; if FER(1,1)-level >0 result(1) = FER(1,2); end for i = 2:length(FER(:,2))-1 if FER(i,2)-level >0 if FER(i-1,2)-level <0 result0(j) = FER(i,2); j = j+1; end end end result0 = setxor(result0,0); result = zeros(length(result0)-1,1); for i = 1:length(result0)-1 result(i) = result0(i+1)-result(i); end charaction = zeros(size(result)); for i = 1:length(result)-1 charaction(i) = result(i+1)-result(i); end result = charaction; % 特征分析 FileName; u = mean(result); d = var(result); disp([FileName]) disp([ ' 均值:' num2str(u) ' mean_value = u; variance = d; end
i=1;
TS = zeros(12,3); % the name list of the samples FileNameList = { ' 曲目 1.wav' ' 曲目 2.wav' ' 曲目 3.wav' ' 曲目 4.WAV' ' 曲目 5.wav' ' 曲目 6.wav' ' 曲目 7.wav' ' 曲目 8.wav' ' 曲目 9.wav' ' 曲目 10.wav' ' 曲目 11.wav' ' 曲目 12.wav' ' 曲目 13.wav' ' 曲目 14.wav' ' 曲目 15.wav' }; % Analyse Pianos for i = 1:5 FileName = FileNameList(i); FileName = cell2mat(FileName); [FN,u,v] = Feature_Extract(FileName); TS(i,:) = [ u,v,-1 ]; end % Analyse Rocks for i = 6:10 FileName = FileNameList(i); FileName = cell2mat(FileName); [FN,u,v] = Feature_Extract(FileName); TS(i,:) = [ u,v,0 ]; end % Analyse Pops for i = 11:15 FileName = FileNameList(i); FileName = cell2mat(FileName); [FN,u,v] = Feature_Extract(FileName); TS(i,:) = [ u,v,1 ]; end
http://www.paper.edu.cn
音乐分类器及其 Matlab 实现
陈凯 ,王佳 ,徐士彪
北京邮电大学 信息工程学院,北京海淀区 (100876)
E-mail:cyre@163.com
摘 要:
利用不同类别音乐的统计规律提取特征向量,并利用神经网络进行分类。文中对
特征向量的寻找、神经网络进行了讨论和研究,并在 Matlab 上进行了实验,给出了实验的 关键代码。实验表明,特征提取的方法可以较快较准地对一些常见类型的音乐进行分类。文 章最后还提出了一种利用 DSP 构造自适应均衡器的设计作为该算法的应用实例。 关键词:音乐分类;特征向量;神经网络;Matlab;DSP 中图分类号: TP391.4
-4-
% %
设定高潮端点阈值 初始化结果矩阵
%
过滤出高潮端点
%
删除多余的零元素
%
输出特征向量
方差:' num2str(d)]); % 函数返回特征向量
http://www.paper.edu.cn
利用这个函数分析三种类型的音乐:Classic 、Rock、Pop 每种风格各五首。 %% Analyse_Wave.m % 存储采样数据 % Pianos
-3-
读入波形数据 % % % % % 采样时间 60 秒 采样时间轴 采样段数据 数据归一化处理 统计采样数据点的数量
% % % %
窗长为 10ms~30ms, 这里取 20ms 为保持连续性,窗口有重叠,重叠 5ms 窗每次移动 stepwin 个采样点 计算帧能量 FE
%` 初始化能量矩阵
% % % %
本文受国家级大学生创新性实验计划(项目名称:基于 DSP 技术的音频自适应均衡系统)支持。
1Hale Waihona Puke Baidu
http://www.paper.edu.cn
2. 音频特征提取和表示
2.1 音频信息的选择 由于要考虑在 DSP 上实现实时的分类,所以算法的计算不能太复杂,特征向量也 不宜过多。而且要求在不完整载入音乐的条件下就能进行分类。综合考虑,选用相对容 易的时域进行特征的选取,采用了以下两个特征量: 1. 帧能量(FE) 2. 帧能量比(FER) 并取短时窗窗长 20ms 其中 FE 描述的是一个帧的能量值,该特征描述了一个帧强度的大小, 第 i 帧的 FE 计算公式如(1):
为记录帧的位置准备,E0 第一维是 E 第二维是相应的位置 删除末尾零记录 记录帧的位置
% % % %
计算帧能量的最小值 计算帧能量的最大值 计算帧能量的平均值 设定静音阈值
%
屏蔽 E0 中对饮帧能量小于静音阈值的值
http://www.paper.edu.cn
FER = ones(length(E0(:,1)),2); for i = 1:(length(E0(:,1))-1) if(and(E0(i,1),E0(i+1,1)))
相关文档
最新文档