当前位置: 首页 > news >正文

2013年认证杯SPSSPRO杯数学建模B题(第一阶段)流行音乐发展简史全过程文档及程序

2013年认证杯SPSSPRO杯数学建模

B题 流行音乐发展简史

原题再现:

  随着互联网的发展,流行音乐的主要传播媒介从传统的电台和唱片逐渐过渡到网络下载和网络电台等。网络电台需要根据收听者的已知喜好,自动推荐并播放其它音乐。由于每个人喜好的音乐可能横跨若干种风格,区别甚大,需要分别对待。这就需要探讨如何区分音乐风格的问题。
  在流行音乐中,传统的风格概念包括 Pop(流行)、Country(乡村)、Jazz(爵士)、Rock(摇滚)、R&B(节奏布鲁斯)、New Age(新世纪)等若干大类,它们分别可以细分成许多小类,有些小类甚至可以做更进一步的细分。而每首歌曲只能靠人工赋予风格标签。这样的做法有许多不足:有的类别之间关系不清楚,造成混乱;有的类别过度粗略或精细;有的类别标签没有得到公认;有的音乐归属则存在争议或者难以划归。请你建立合理的数学模型,对流行音乐的风格给出一个自然、合理的分类方法,以便给网络电台的推荐功能和其它可能的用途1提供支持。

整体求解过程概述(摘要)

  由于社会文化的发展,流行音乐的风格日趋多元化,风格之间相互融合发展,造成类别混乱,难以划分,存在分类不当等诸多不足。本文采用循序渐进的方法对流行音乐的风格给出多模型优势互补的分类方法。
  模型一是基于标签的流行音乐风格分类模型。随着 Web日益健全完善,标签数据日益丰富且趋于稳定,标签所表达的语义信息要比描述文档中的关键词更接近被描述事物的特性,标签资源在音乐风格分类领域有着广阔的应用。模型通过 LDA 分析器对抽取的标签资源进行语料库建模,达到音乐风格分类的目的。
  模型二是基于语义的流行音乐风格分类模型。互联网上拥有海量的文本资源,当我们在网络上抓取数据的时候,如果一段流行音乐总与某个特定的流行音乐风格出现在一起,那么我们就认为此流行音乐与这个风格有着非常紧密的联系,从而我们就可以推断其风格,同时也能弥补某些类别标签不够准确、没有得到公认的缺点。
  模型三是基于 LDA 和多类 SVM的流行音乐风格分类模型。模型一和模型二都是在音乐文件具有大量相关数据的前提下具有较高分类准确率的,对于没有标签,数据较少的原创歌曲,体现了其局限性,此时需要提取底层的声学特征进行分类。这也是当前使用广泛且成熟的音频分类方法,本文通过对主流的特征提取及分类的算法进行改进,不但能取得最佳的分类精确率,而且也能实现最好的时间复杂度。
  模型四是基于分形维数的流行音乐风格分类模型。传统的基于声学特征的分类方法算法复杂,数据庞大,开销高,不具有深度推广的潜质,如何在准确率和开销之间做出权衡十分必要。基于分形维数的优势在于只用一维特征就能区分音乐的不同类型即分形刻画了音乐的内在特征——部分与整体的相似性。该方法具有应用简单,分类准确度较高,速度快等优点。
  没有一种模型能应对所有情况,只有扩大其优点,针对性解决,优势互补才能达到理想的分类效果,本文在模型的优化中将多种模型综合,提出了多模态音乐风格分类方法,使分类更加自然、合理、准确。

问题分析:

  伴随着数字技术的飞速发展,越来越多的音乐被上传到互联网上,正是这种海量的且不断增长的音乐资源使得用来处理音乐数据库的音乐信息检索(MIR)系统受到了越来越多的关注。网络用户更希望可以利用和音乐内容有关的信息来检索音乐。音乐的风格,例如蓝调(Blues)、摇滚(Rock)等就是经常被用户使用的检索词。目前,很多音乐网站例如 Last.fm,mp3.com 等都相继推出了基于风格的音乐检索系统。因此,音乐风格的准确分类对于现代音乐信息检索系统来说是至关重要的。
  音乐风格分类历经了人工化和自动化两个阶段。早期,绝大多数的音乐网站都是对音乐的风格进行人工标注,其中最著名的就是潘多拉网站(pandora.com)聘请音乐专家所进行的“音乐染色体工程(music genome project)”。虽然人工地对音乐进行风格标注取得了一定的成功,但是这样做消耗了大量的人力成本、时间成本和资金成本;而更为严重的问题是,人工标注的速度显然已经不能满足网络中音乐资源飞速增长的需求。

  基于标签数据的分类方法
  Web 时代的到来恰恰提供了这样的一个机遇。Web 技术允许网络用户使用标签对其感兴趣的资源进行个性化标注,这其中自然也包括音乐资源,文献通过实验证明了互联网中的标签数据的分布服从无标度网络的特征,在若干时间间隔后标签会趋于稳定,而且标签所表达的语义信息要比描述文档中的关键词更接近被描述事物的特性;文献通过大量的实验数据验证了用户对歌曲进行标注时使用的标签与音乐专家对音乐的评价具有高度的一致性。因此,标签资源在音乐风格的自动分类领域同样有着广阔的应用前景。在此提出了基于标签的音乐风格分类方法,使用 LDA 方法对由音乐标签组成的语料库进行建模。

  基于语义的分类方法
  模型一中存在标签信息的不明确,有的标签没有得到公认等问题,使其不具有普遍适用性。在此提出了基于语义音乐风格分类模型,使用音乐名称和艺术家姓名这些与音乐有关的语义信息,通过搜索网络资源,计算音乐与不同音乐风格之间的联系紧密度并以此为依据进行音乐的风格分类。

  基于声学特征的分类方法
  模型一和模型二都是在音乐文件具有大量相关数据的前提下具有较高分类准确率的,当音乐文件最初发布时,其相关数据相对而言较少,基于标签和语义的方法不再适用。此时需要提取音乐自身的声学特征,然后根据这些特征对音乐进行风格分类。在此提出了基于线性判别分析和支持向量机的音乐分类模型。

  基于分形的分类方法
  目前绝大多数音频分类算法集中在两方面——音频的特征提取以及根据音频特征进行分类。现有的音频特征算法有:短时过零率、时域的短时能量、谱质心分析、频域带宽等,还有基于听觉感受的 MFCC(Mel-frequency cepstral coefficients)梅尔倒频谱系数等。另一方面,分类算法可利用模式识别和模式分类中已知算法,如CMM(Gaussian mixture model) 高斯混合模型、NN(Neural Network) 神经网络、HMM(Hidden Markov Model) 隐马尔可夫模型等。这些方法都存在着算法复杂,数据庞大,高精度带来的高开销等问题。在此提出了基于分形维数的音乐分类模型,通过对不同风格音乐的分形维数的计算与比较,确定音乐分类的范围指标,然后利用此指标作为依据对音乐进行自动分类。由于维数为 1,所以此方法使用简单,速度较快,同时也具有较高的分类精度。

模型假设:

  当代流行音乐进入了高度细分化的时代,同时尚在继续细分更微观的类型。流行音乐电台细分市场的类型化方向正是来自流行音乐的细分化。对于流行音乐的分类目前尚无统一标准,我们使用目前认同度较高的分类标准,对流行音乐类型进行筛选合并后将流行音乐分为如下类型。
  1. Pop 流行(Dream-Pop, Classical Pop, Britpop, Synth Pop)
  2. R&B 节奏布鲁斯(Soul)
  3. Hip-Hop 饶舌(Trip-Hop, Brit-Hop)
  4. Rap 说唱(Gangsta Rap)
  5. Jazz 爵士(Bossa Nova)
  6. Rock 摇滚(Reggae,Punk)
  7. Electro 电子(Techno,House,Disco,Chill Out)
  8. Country 乡村
  9. Blue 蓝调
  10. Newage 新世纪

论文缩略图:

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:(代码和文档not free)

%%Feature_Extract.m
function [FileName,mean_value,variance]=Feature_Extract(FileName)
% [mean_value,variance]=Feature_Extract(FileName)
% FileName是需要分析的波形文件的路径
% mean_value是计算得出的特征值的平均值
% variance是计算得出的特征值的方差
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[F,Fs,NBITS] = wavread(FileName,20*44100);         % 读入波形数据
time = 20;                                         % 采样时间60秒
T = 1:time*Fs;                                       % 采样时间轴
Wave = F(T);                                         % 采样段数据
Wave = Wave/max(abs(Wave)); % 数据归一化处理
WLen = length(T); % 统计采样数据点的数量winlen = 2^nextpow2(Fs*20/1000); % 窗长为10ms~30ms,这里取20ms
dupwin = 2^nextpow2(Fs*5/1000); % 为保持连续性,窗口有重叠,重叠5ms
stepwin = winlen-dupwin; % 窗每次移动stepwin个采样点
E = zeros(WLen-stepwin,1); %` 初始化能量矩阵
for i = 1:stepwin:WLen-stepwin % 计算帧能量FExm = Wave(i:i+stepwin);E(i) = sum(xm.*xm);
end
E0 = [E zeros(length(E),1)]; % 为记录帧的位置准备,E0第一维是E,% 第二维是相应的位置
E0 = setxor(E0(:,1),0); % 删除末尾零记录
j=1;
for i = 1:length(E) % 记录帧的位置if E(i)>0E0(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)) % 屏蔽E0中对饮帧能量小于静音阈值的值if E0(i,1) < Ttfe E0(i,1) = 0;end
end
% 寻找特征片段
FER = ones(length(E0(:,1)),2); % 初始化帧能量比矩阵
for i = 1:(length(E0(:,1))-1) % 计算帧能量比if(and(E0(i,1),E0(i+1,1))) % 若当前帧与后一帧都不为零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 >0result(1) = FER(1,2);
end              %过滤出高潮端点
for i = 2:length(FER(:,2))-1if FER(i,2)-level >0if FER(i-1,2)-level <0result0(j) = FER(i,2);j = j+1;endend
end
result0 = setxor(result0,0); % 删除多余的零元素
result = zeros(length(result0)-1,1);
for i = 1:length(result0)-1result(i) = result0(i+1)-result(i);
end
charaction = zeros(size(result));
for i = 1:length(result)-1charaction(i) = result(i+1)-result(i);
end
result = charaction;
FileName;                 %输出特征向量
u = mean(result);
d = var(result);
disp([FileName])
disp([ '均值:' num2str(u) '方差:' num2str(d)]);
mean_value = u; % 函数返回特征向量
variance = d;
end
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

相关文章:

2013年认证杯SPSSPRO杯数学建模B题(第一阶段)流行音乐发展简史全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 B题 流行音乐发展简史 原题再现&#xff1a; 随着互联网的发展&#xff0c;流行音乐的主要传播媒介从传统的电台和唱片逐渐过渡到网络下载和网络电台等。网络电台需要根据收听者的已知喜好&#xff0c;自动推荐并播放其它音乐。由于每个人喜好…...

代码随想录算法训练营第39天 | 62.不同路径, 63不同路径II

Leetcode - 62&#xff1a;不同路径 题目&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#…...

Redis 的慢日志

Redis 的慢日志 Redis 的慢日志&#xff08;Slow Log&#xff09;是用于记录执行时间超过预设阈值的命令请求的系统。慢日志可以帮助运维人员和开发人员识别潜在的性能瓶颈&#xff0c;定位那些可能导致 Redis 性能下降或响应延迟的慢查询。以下是 Redis 慢日志的相关细节&…...

第十四届蓝桥杯第十题:蜗牛分享

问题描述 输入格式 输出格式 输出共一行&#xff0c;一个浮点数表示答案&#xff08;四舍五入保留两位小数&#xff09;。 样例输入 3 1 10 11 1 1 2 1样例输出 4.20样例说明 蜗牛路线&#xff1a;(0,0)→(1,0)→(1,1)→(10,1)→(10,0)→(11,0)(0,0)→(1,0)→(1,1)→(10,1…...

不懂技术的老板,如何避免过度依赖核心技术人员

在这个日新月异、技术驱动的时代&#xff0c;即使作为非技术背景的老板&#xff0c;也深知核心技术人员的价值。然而&#xff0c;过度依赖某几位核心技术人员&#xff0c;不仅可能带来经营风险&#xff0c;还可能限制企业的创新与发展。那么&#xff0c;不懂技术的老板&#xf…...

Vue系列-el挂载

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>el:挂载点</title> </head> <body&g…...

python--os和os.path模块

>>> import os >>> #curdir #获取当前脚本的绝对路径 >>> os.curdir . >>> import os.path >>> #获取绝对路径 >>> os.path.abspath(os.curdir) C:\\Users\\GUOGUO>>> #chdir #修改当前目录 >&g…...

前端通用命名规范和Vue项目命名规范

​​​​​​通用命名规范 变量和常量命名&#xff1a;变量和常量的命名应具有描述性&#xff0c;清晰明了&#xff0c;使用驼峰命名法或下划线命名法&#xff0c;例如&#xff1a;firstName、MAX_VALUE。 函数和方法命名&#xff1a;函数和方法的命名应该能够准确描述其功能&…...

NTP服务搭建

一、ntpd和ntpdate区别 1.ntpd是自动执行的远程更新本地系统时钟的服务&#xff0c;是平滑同步&#xff1b; 2.ntpdate是手工执行的服务&#xff0c;也就是一般用它执行一次本地时间更新&#xff0c;如果做成半自动&#xff0c;可以写入到crontab自动任务&#xff0c;从而变成…...

Linux离线安装mysql,node,forever

PS:本文是基于centos7实现的,要求系统能够查看ifconfig和unzip解压命令, 实现无网络可安装运行 首先现在百度网盘的离线文件包****安装Xftp 和 Xshell 把机房压缩包传到 home目录下****解压unzip 包名.zip 获取IP先获取到 linux 主机的ip ifconfig Xftp 连接输入IP,然后按照…...

WPF中获取TreeView以及ListView获取其本身滚动条进行滚动

实现自行调节scoll滚动的位置(可相应获取任何控件中的内部滚动条) TreeView:TreeViewAutomationPeer lvap new TreeViewAutomationPeer(treeView); var svap lvap.GetPattern(PatternInterface.Scroll) as ScrollViewerAutomationPeer; var scroll svap.Owner as ScrollVie…...

C语言: 指针讲解

为什么需要指针? &#xff08;1&#xff09;指针的使用使得不同区域的代码可以轻易的共享内存数据。当然你也可以通过数据的复制达到相同的效果&#xff0c;但是这样往往效率不太好&#xff0c;因为诸如结构体等大型数据&#xff0c;占用的字节数多&#xff0c;复制很消耗性能…...

C#使用Stopwatch类来实现计时功能

前言 在 C# 中&#xff0c;Stopwatch 类是用于测量经过的时间的工具类&#xff0c;提供了高精度的计时功能。Stopwatch 类位于 System.Diagnostics 命名空间中。通常情况下&#xff0c;使用 Stopwatch 的流程是创建一个 Stopwatch 对象&#xff0c;然后调用 Start 方法开始计时…...

ubuntu18.04安装qt

ubuntu18.04安装qt 1、下载文件 比如我下载的是5.13.0版本 下载链接 2、安装 wget https://download.qt.io/archive/qt/5.13/5.13.0/qt-opensource-linux-x64-5.13.0.runsudo chmod x qt-opensource-linux-x64-5.13.0.runsudo ./qt-opensource-linux-x64-5.13.0.run参考文…...

ElasticSearch、java的四大内置函数式接口、Stream流、parallelStream背后的技术、Optional类

第四周笔记 一、ElasticSearch 1.安装 apt-get install lrzsz adduser -m es 创建用户组&#xff1a; useradd *-m* xiaoming(用户名) *PS&#xff1a;追加参数-m* passwd xiaoming(用户名) passwd xiaoming 输入新的 UNIX 密码&#xff1a; 重新输入新的 UNIX 密码&…...

深入MNN:开源深度学习框架的介绍、安装与编译指南

引言 在人工智能的世界里&#xff0c;深度学习框架的选择对于研究和应用的进展至关重要。MNN&#xff0c;作为一个轻量级、高效率的深度学习框架&#xff0c;近年来受到了众多开发者和研究人员的青睐。它由阿里巴巴集团开源&#xff0c;专为移动端设备设计&#xff0c;支持跨平…...

[LeetCode][400]第 N 位数字

题目 400. 第 N 位数字 给你一个整数 n &#xff0c;请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位上的数字。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;n 11 输出&#xff1a;…...

clickhouse 查询group 分组最大值的一行数据。

按照 sql_finger_md5 分组取query_time_ms 最大的一行数据。 使用any函数可以去匹配到的第一行数据&#xff0c;所以可以先让数据按照query_time_ms 排序&#xff0c;然后再使用group by 和any结合取第一行数据&#xff0c;就是最大值的那一行数据。 selectany (time) as time…...

Python装饰器与生成器:从原理到实践

一、引言 Python 是一种功能强大且易于学习的编程语言&#xff0c;其丰富的特性使得开发者能够高效地完成各种任务。在 Python 中&#xff0c;装饰器和生成器是两个非常重要的概念&#xff0c;它们能够极大地增强代码的可读性和可维护性。本文将详细介绍如何学习 Python 装饰器…...

python-函数引入模块面向对象编程创建类继承

远离复读机行为 def calculate_BMI(weight,height):BMI weight / height**2if BMI < 18.5:category "偏瘦"elif BMI < 25:category "正常"elif BMI < 30:category "偏胖"else:category "肥胖"print(f"您的BMI分类…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...