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题 流行音乐发展简史 原题再现: 随着互联网的发展,流行音乐的主要传播媒介从传统的电台和唱片逐渐过渡到网络下载和网络电台等。网络电台需要根据收听者的已知喜好,自动推荐并播放其它音乐。由于每个人喜好…...
代码随想录算法训练营第39天 | 62.不同路径, 63不同路径II
Leetcode - 62:不同路径 题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” &#…...
Redis 的慢日志
Redis 的慢日志 Redis 的慢日志(Slow Log)是用于记录执行时间超过预设阈值的命令请求的系统。慢日志可以帮助运维人员和开发人员识别潜在的性能瓶颈,定位那些可能导致 Redis 性能下降或响应延迟的慢查询。以下是 Redis 慢日志的相关细节&…...
第十四届蓝桥杯第十题:蜗牛分享
问题描述 输入格式 输出格式 输出共一行,一个浮点数表示答案(四舍五入保留两位小数)。 样例输入 3 1 10 11 1 1 2 1样例输出 4.20样例说明 蜗牛路线:(0,0)→(1,0)→(1,1)→(10,1)→(10,0)→(11,0)(0,0)→(1,0)→(1,1)→(10,1…...
不懂技术的老板,如何避免过度依赖核心技术人员
在这个日新月异、技术驱动的时代,即使作为非技术背景的老板,也深知核心技术人员的价值。然而,过度依赖某几位核心技术人员,不仅可能带来经营风险,还可能限制企业的创新与发展。那么,不懂技术的老板…...
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项目命名规范
通用命名规范 变量和常量命名:变量和常量的命名应具有描述性,清晰明了,使用驼峰命名法或下划线命名法,例如:firstName、MAX_VALUE。 函数和方法命名:函数和方法的命名应该能够准确描述其功能&…...
NTP服务搭建
一、ntpd和ntpdate区别 1.ntpd是自动执行的远程更新本地系统时钟的服务,是平滑同步; 2.ntpdate是手工执行的服务,也就是一般用它执行一次本地时间更新,如果做成半自动,可以写入到crontab自动任务,从而变成…...
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语言: 指针讲解
为什么需要指针? (1)指针的使用使得不同区域的代码可以轻易的共享内存数据。当然你也可以通过数据的复制达到相同的效果,但是这样往往效率不太好,因为诸如结构体等大型数据,占用的字节数多,复制很消耗性能…...
C#使用Stopwatch类来实现计时功能
前言 在 C# 中,Stopwatch 类是用于测量经过的时间的工具类,提供了高精度的计时功能。Stopwatch 类位于 System.Diagnostics 命名空间中。通常情况下,使用 Stopwatch 的流程是创建一个 Stopwatch 对象,然后调用 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 创建用户组: useradd *-m* xiaoming(用户名) *PS:追加参数-m* passwd xiaoming(用户名) passwd xiaoming 输入新的 UNIX 密码: 重新输入新的 UNIX 密码&…...
深入MNN:开源深度学习框架的介绍、安装与编译指南
引言 在人工智能的世界里,深度学习框架的选择对于研究和应用的进展至关重要。MNN,作为一个轻量级、高效率的深度学习框架,近年来受到了众多开发者和研究人员的青睐。它由阿里巴巴集团开源,专为移动端设备设计,支持跨平…...
[LeetCode][400]第 N 位数字
题目 400. 第 N 位数字 给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位上的数字。 示例 1: 输入:n 3 输出:3 示例 2: 输入:n 11 输出:…...
clickhouse 查询group 分组最大值的一行数据。
按照 sql_finger_md5 分组取query_time_ms 最大的一行数据。 使用any函数可以去匹配到的第一行数据,所以可以先让数据按照query_time_ms 排序,然后再使用group by 和any结合取第一行数据,就是最大值的那一行数据。 selectany (time) as time…...
Python装饰器与生成器:从原理到实践
一、引言 Python 是一种功能强大且易于学习的编程语言,其丰富的特性使得开发者能够高效地完成各种任务。在 Python 中,装饰器和生成器是两个非常重要的概念,它们能够极大地增强代码的可读性和可维护性。本文将详细介绍如何学习 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分类…...
Spring:面试八股
文章目录 参考Spring模块CoreContainerAOP 参考 JavaGuide Spring模块 CoreContainer Spring框架的核心模块,主要提供IoC依赖注入功能的支持。内含四个子模块: Core:基本的核心工具类。Beans:提供对bean的创建、配置、管理功能…...
Flask Python:请求上下文和应用上下文
请求上下文和应用上下文详解 一、背景二、什么是上下文2.1、请求上下文2.2、应用上下文2.3、两种上下文的底层逻辑 三、写在最后 一、背景 在如何实现异步发送邮件的时候,遇到过这样一个报错 RuntimeError: Working outside of request context.This typically me…...
哔哩哔哩直播姬有线投屏教程
1 打开哔哩哔哩直播姬客户端并登录(按下图进行操作) 2 手机用usb数据线连接电脑(若跳出安装驱动的弹窗点击确定或允许),usb的连接方式为仅充电(手机差异要求为仅充电),不同品牌手机要求可能不一样,根据实际的来 3 在投屏过程中不要更改usb的连接方式(不然电脑会死机需要重启) …...
您现在可以在家训练 70b 语言模型
原文:Answer.AI - You can now train a 70b language model at home 我们正在发布一个基于 FSDP 和 QLoRA 的开源系统,可以在两个 24GB GPU 上训练 70b 模型。 已发表 2024 年 3 月 6 日 概括 今天,我们发布了 Answer.AI 的第一个项目&#…...
算法题剪格子使我重视起了编程命名习惯
剪格子是一道dfs入门题。 我先写了个dfs寻找路径的模板,没有按题上要求输出。当我确定我的思路没错时,一直运行不出正确结果。然后我挨个和以前写的代码对比,查了两个小时才发现,是命名风格的问题。 我今天写的代码如下ÿ…...
P19:注释
注释是什么? 在java的源程序中,对java代码的解释说明注释内容不会被编译到.class字节码文件中一个的开发习惯应该多写注释,增加程序的可读性 java中注释的方式: 单行注释:注释内容只占一行 // 注释内容多行注释&…...
python习题小练习(挑战全对)
1. (单选题)Python 3.0版本正式发布的时间? A. 1991B. 2000C. 2008D. 1989 2. (单选题)以下关于Python语言中“缩进”说法正确的是: A. 缩进在程序中长度统一且强制使用B. 缩进是非强制的,仅为了提高代码可读性C. 缩进可以用在任何语句之后…...
大数据学习-2024/3/30-MySQL基本语法使用介绍实例
学生信息表 create table studend(stu_id int primary key auto_increment comment 学生学号,stu_name varchar(20) not null comment 学生名字,mobile char(11) unique comment 手机号码,stu_sex char(3) default 男 comment 学生性别,birth date comment 出生日期,stu_time …...
C#_事件_多线程(基础)
文章目录 事件通过事件使用委托 多线程(基础)进程:线程: 多线程线程生命周期主线程Thread 类中的属性和方法创建线程管理线程销毁线程 事件 事件(Event)本质上来讲是一种特殊的多播委托,只能从声明它的类中进行调用,基本上说是一个用户操作&…...
vue 通过插槽来分配内容
通过插槽来分配内容 一些情况下我们会希望能和 HTML 元素一样向组件中传递内容: <AlertBox>Something bad happened. </AlertBox> 这可以通过 Vue 的自定义 <slot> 元素来实现: <template><div class"alert-box&quo…...
福田商城网站建设/世界足球排名
linux下的打包压缩打包和压缩gzip 压缩gzip -[1-9] filename 指定压缩等级gzip -c filename 输出压缩结果到标准输出gzip -d filename 解压缩gzip -k filename 保留原文件gzip -f filename 强制覆盖同名文件gzip -l filename 打印压缩信息gzip -n/N filename 保留源文件信息gzi…...
什么牛网站建设/seo运营
rem和::都起到注释的作用,然而又有些不同。一、rem是一条命令,在运行的时候相当于把rem本身及其后面的内容置空。既然它是一条命令,就必须处于单独的一行或者有类似“&”的连接符号连接。二、批处理遇到以冒号“:”开头的行时(…...
软件网站开发评估/seo关键词推广价格
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 514 Accepted Submission(s): 226Problem Description电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前&…...
自己做网站服务器要多少钱/淘宝搜索关键词排名查询工具
前言作为后端程序员的我们,通常我们要构建API服务,要写服务端接口,自然少不了写接口文档,否则就要口述,但口述的痛点也很多。一般情况下,我们的接口文档要写两份:1.给前端团队看的word接口文档。…...
深圳企业建站平台/百度快照官网
性能分析小案例系列,可以通过下面链接查看哦 https://www.cnblogs.com/poloyy/category/1814570.html 系统架构背景 VM1:用作 Web 服务器,来模拟性能问题VM2:用作 Web 服务器的客户端,来给 Web 服务增加压力请求使用两…...
建立企业网站费用/域名服务器查询
leetcode1477. 找两个和为目标值且不重叠的子数组 给你一个整数数组 arr 和一个整数值 target 。 请你在 arr 中找 两个互不重叠的子数组 且它们的和都等于 target 。可能会有多种方案,请你返回满足要求的两个子数组长度和的 最小值 。 请返回满足要求的最小长度…...