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

2013年认证杯SPSSPRO杯数学建模

B题 流行音乐发展简史

原题再现:

  随着互联网的发展,流行音乐的主要传播媒介从传统的电台和唱片逐渐过渡到网络下载和网络电台等。网络电台需要根据收听者的已知喜好,自动推荐并播放其它音乐。由于每个人喜好的音乐可能横跨若干种风格,区别甚大,需要分别对待。这就需要探讨如何区分音乐风格的问题。
  第二阶段问题: 近几十年来,流行音乐的风格经历了相当复杂的演变过程。每个时代都有其代表性的人物和风格,歌曲的成功要素也随时间不断改变。请你建立合理的数学模型,对曾经走红过的流行歌曲,通过其原唱录音或曲谱来推断其所处时代。并请你写一篇短文2,向大众简述(在某个时期内)流行歌曲的“成功要素”是如何变化的。

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

  近几十年来,中国流行音乐的风格经历了相当复杂的演变过程,每个时代都有其代表性的人物和风格,歌曲的成功要素也随着时间不断变化。不同时期的流行音乐不仅反映了不同历史时期人们的精神面貌,也用音乐这个特殊的方式记载着不同历史时期人们的日常生活和人文背景。
  我们建立了基于层次分析法的模糊评价模型,先对各时代的流行歌曲进行随机选择(各 30 首,时间有限,理论上各 100 首为宜),然后对它们的音乐标签进行分析,总结出各时代的特点。接着随机选择 10 首歌,通过分析其特点判断出它所属的年代。并通过对近几十年来音乐发展的分析,得出了歌曲成功要素的变化趋势。
  在对歌曲的年代进行判断的问题中,我们首先使用了层次分析法,把影响歌曲分类的因素分为风格,主题和情感这三个因素。将风格又分为流行、乡村、摇滚和布鲁斯这四种;将主题分为爱国、爱情、友情、亲情和理想;将情感分为喜悦、忧伤、思念和励志。我们选取百度音乐、酷狗音乐、酷我音乐、QQ 音乐及 Last.fm 等大型音乐网站,从上面免费获得音乐(所筛选的歌曲)的标签(包括风格、主题和情感三个方面)。统计得出不同的时代各个因素在总体中的比例,然后运用模糊评价法,建立因子集、评判集等,从而确定风格、主题、情感对应的权值,即这三种因素在不同年代对流行音乐的影响程度。
  为了验证模型的正确性,我们对每个年代的流行歌曲再次进行随机选取(各 10 首,时间有限,理论上 30 首为宜)。我们建立了 BP 神经网络模型,并用matlab对歌曲的风格进行频谱和波形的分析,然后从歌词中总结其主体和情感。结果,运用所建模型得到的音乐标签与权威音乐网站所给标签的一致性很高(均超过 70%)。这表明所建模型具有可行性,因此,是正确的。
  在对音乐的成功要素进行分析的过程中,我们根据之前所统计的结果,并对其建立柱状图,可以清晰地得出风格、主题、情感这三种要素随时代的变化情况,从而分析出成功要素的变化趋势。从 60 年代开始,流行音乐在风格方面从单一化慢慢发展成丰富多元化。主题上以爱国、亲情和友情为主题的流行音乐逐渐减少,表达达爱情的歌曲则明显增加。情感方面表达忧伤的歌曲的比重上升明显,而表达喜悦的歌曲则明显下降;以励志和思念为情感的歌曲则变化不大。

问题分析:

  不同时期的流行音乐不仅反映了不同历史时期人们的精神面貌,也用音乐这个特殊的方式记载着不同历史时期人们的日常生活和人文背景。
  我们研究一首歌曲能够成为一个时代的流行歌曲的原因,首先要从其流行要素来分析。所谓流行要素,即歌曲在流行过程中所必须具备的条件。毫无疑问,好的歌词在歌曲的流行要素中比之音乐是第一位的。词作者借助于艺术想象力和各种其它处理,使得艺术幻象中的空间形象得以再现。歌词创作是一种造型的艺术,词作者要通过各种想象和艺术处理,创造一种美的艺术的幻象。同时,所有的歌词又必须能够传达一个可以用音乐来谱写的思想,并且能够提供某种感情基调和联系线索,以此来激发音乐家的想象力。实际上,当今的流行歌曲已经成为体现当代社会群体文化生活质量的重要衡量标准之一,歌曲的主题和情感主要通过歌词来表现。
  歌曲的第二个重要的流行要素是音乐。当作曲家被一首好的歌词所激励并为它谱曲时,这首词才能变成一支歌。在音乐艺术的创作过程中,音乐家始终处于一种纯粹音响的天地里,大脑里所有的世界有形的影象和现实都变得模糊不清了,感觉对象变得与视觉影象关系不再那么紧密,在其音乐想象中异常充实的是具有广阔连续性的无比激情,每一种东西都能用一种曲调表现出来,并使其组合成为一部完整的作品。音乐的旋律能够反映一首歌的风格。
  我国流行音乐逐渐发展起来是在 70 年代,改革开放后,随着通俗文艺的兴起,流行歌曲在中国大陆保持着迅猛的发展态势,产生了广泛的社会影响。为了进行有针对性的研究,我们将研究对象定义在中国流行音乐范围内,并且将研究阶段分为:60 年代-70年代末、80 年代、90 年代、21 世纪-今…四个时期。
  我们将研究分为两个步骤完成,第一步总结出每个时期流行音乐的特点,第二步根据所得结论将音乐按时代分类。因此建立基于层次分析法的模糊评价模型和 BP 神经网络模型。
  1.第一部分:每个时代流行音乐的特点:可以利用逐层分析法,通过分析不同时代流行音乐的不同标签,总结出其风格特点、主题特点、情感特点这三种具有决定性因素的性质,从而归纳总结出每个时代的流行要素。然后将音乐按时代划分等级,即 60-80年代音乐、80 年代音乐、90 年代音乐、21 世纪音乐,构成评语集。利用模糊分析法,将影响因素分为两个层次,组成一级、二级因素集,再根据抽取的歌曲的数据找出相应的权重集,模糊矩阵,建立模糊评价模型,从而得出歌曲所属的年代。
  2.第二部分:将音乐按时代分类:先建立 BP 神经网络模型,找出能提取流行音乐风格的方法,在分析其主题和情感,按权重得出所在年代。

模型假设:

  (1)随机抽取的音乐具有代表性,能购反映时代的音乐特点。
  (2)音乐的高潮部分能反映它的音乐风格特征。
  (3)流行音乐所属年代的判别因素主要由风格、主题和情感三种因素决定。
  (4)流行音乐的风格特征主要由流行、乡村、摇滚、新世纪这四种因素决定;其他因素影响不大。
  (5)流行音乐的主题特征主要由理想、爱国、爱情、亲情、友情这五种因素决定,其他因素忽略不计。
  (6)流行音乐的情感特征主要由喜悦、忧伤、思念、励志这四种因素决定,其他因素忽略不计。
  (7)所选取的百度音乐、酷狗音乐、酷我音乐、QQ 音乐及 Last.fm 等大型音乐网站上给出的音乐标签具有权威性,即所给标签是正确合理的。

论文缩略图:

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

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

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

%画出频谱图和波形图
[y,Fs,bits]=wavread('1yao.wav');%读出信号,采样率和采样位数。
y=y(:,1);
sigLength=length(y);
Y = fft(y,sigLength);
Pyy = Y.* conj(Y) / sigLength;
halflength=floor(sigLength/2);
f=Fs*(0:halflength)/sigLength;
figure;plot(f,Pyy(1:halflength+1));
title('摇滚音乐的频谱图');
xlabel('Frequency(Hz)');%频谱图
t=(0:sigLength-1)/Fs;
figure;plot(t,y);
title('摇滚音乐的波形图');%波形图
xlabel('Time(s)');
%这是提取特征值函数,返回值为各个端点之间距离的平均值和方差。
function [ FileName,mean_value,variance ] = Feature_Extract( FileName )
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here
[F,Fs,bits]=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%计算帧能量 FE
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))%屏蔽 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)))%若当前帧与后一帧都不为 0
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);%删除多余的 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) ' 方差:' num2str(d)]);%输出结果
mean_value=u;
variance=d;
end
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/589087.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

马化腾的电商梦,只能靠它来实现了~

我是王路飞。 腾讯要开始加大对电商的投入力度了&#xff0c; 而这些资源所依托的载体&#xff0c;正是【视频号】。 在2023微信公开课PRO上&#xff0c;视频号团队介绍&#xff0c;2022年总用户使用时长已经超过了朋友圈总用户使用时长的80%。视频号直播的看播时长增长156%…

使用OpenCV4.9的随机生成器和文本

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV 4.9基本绘图 下一篇&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用随机数生…

C++ 11是如何封装Thread库的?

引言 C11 标准引入了一个重要的特性&#xff0c;即原生线程支持&#xff0c;这标志着C语言在并发编程领域迈出了坚实的步伐。在此之前&#xff0c;开发人员在进行跨平台的多线程编程时&#xff0c;不得不依赖于操作系统提供的特定API&#xff0c;如Windows API或POSIX Threads…

33-SDK设计(上):如何设计出一个优秀的GoSDK?

在实际的项目开发中&#xff0c;通常会提供对开发者更友好的SDK包&#xff0c;供客户端调用。很多大型服务在发布时都会伴随着SDK的发布&#xff0c;例如腾讯云很多产品都提供了SDK&#xff1a; 什么是SDK&#xff1f; 对于SDK&#xff08;Software Development Kit&#xff0c…

GBK文件批量转UTF-8,python脚本

import os import codecsdef convert_encoding(file_path):try:# 尝试以gb18030编码打开文件并读取内容with codecs.open(file_path, r, gb18030) as f:content f.read()except UnicodeDecodeError:# 如果出现解码错误&#xff0c;尝试使用utf-8编码打开文件with codecs.open(…

【数据结构与算法】二叉搜索树和平衡二叉树

二叉搜索树 左子树的结点都比当前结点小&#xff0c;右子树的结点都比当前结点大。 构造二叉搜索树&#xff1a; let arr [3, 4, 7, 5, 2]function Node(value) {this.value valuethis.left nullthis.right null }/*** 添加结点* param root 当前结点* param num 新的结…

SpringBoot 登录认证(二)Cookie与Sesstion

SpringBoot 登录认证&#xff08;一&#xff09;-CSDN博客 SpringBoot 登录认证&#xff08;二&#xff09;-CSDN博客 SpringBoot登录校验&#xff08;三&#xff09;-CSDN博客 HTTP是无状态协议 HTTP协议是无状态协议。什么又是无状态的协议&#xff1f; 所谓无状态&…

有Digicert免费证书吗

说到Digiert证书&#xff0c;DigiCert 是美国CA认证可信&#xff0c;提供了很过十年的SSL证书和SSL管理工具。与其他CA不同&#xff0c;DigiCert 完全专注于SSL的创新&#xff0c;提供完整系列的SSL证书、工具和管理平台。它是名副其实的行业单位。 “DigiCert”是这个行业中根…

【JS】打乱数组顺序,用作领域:随机播放音乐

思路 循环数组随机获取数组下标取值&#xff1a; 取当前随机下标数组取当前循环的下标数组 相互替换步骤3的数组 /*** 随机数组顺序* param {Array} arr 数组* returns Array*/ const shufArr arr > {for (let i arr.length - 1; i > 0; i--) {const j Math.floor(M…

Postman和Python Request测试多行Form-data

1、请求参数有多个&#xff0c;F12查看请求体如下&#xff1a; 查看源代码&#xff1a; ------WebKitFormBoundaryHknGXm9VkhRUXZYC Content-Disposition: form-data; name"custId"IICON004 ------WebKitFormBoundaryHknGXm9VkhRUXZYC Content-Disposition: form-da…

企业邮箱给谷歌Gmail报错550-5.7.25解决方案

企业邮箱给谷歌Gmail报错550-5.7.25解决方案 问题表现 今天接到同事报告企业邮箱发送报错的问题&#xff0c;具体问题表现如下&#xff1a; 我司内部邮箱 xxXXX.com 邮箱给国内的163和新浪和企业内部发送邮件可以成功给Hotmail发送邮件&#xff0c;成功。给Gmail发送邮件&am…

IoT数采平台1:开篇

IoT数采平台1&#xff1a;开篇IoT数采平台2&#xff1a;文档IoT数采平台3&#xff1a;功能IoT数采平台4&#xff1a;测试 【功能概述】 开箱即用; 向下接入不同设备(PLC / 采集网关 / OPC / TCP设备 / UDP设备 / HTTP接入),向上通过MQTT发布消息; 数采底层基于NET CORE,既支持P…