Matlab音乐合成实验报告(重大 通院) - 图文
更新时间:2023-09-27 23:41:01 阅读量: 综合文库 文档下载
重庆大学Matlab音乐合成实验报告
班级:实验班 指导老师:印勇 学生: 覃继良 学号:20114909
重庆大学通信工程学院 音乐合成实验
介绍
本文共有三大部分:第一部分,简单的音乐合成;第二部分,用傅里叶变换分析音乐;第三部分,基于傅里叶级数的音乐合成。由潜入深,一步一步分析了用MATLAB进行音乐合成的过程。通过本实验达到了加深对傅里叶级数和傅里叶分析的理解,熟悉对MATLAB基本使用的目标。
第一部分 简单的合成音乐
1.1 合成《东方红》
根据《东方红》第一小节的简谱和十二平均律计算出该小节每个乐音的频率,在MATLAB中生成幅度为1,抽样频率为8kHz的正弦信号表示这些乐音,用sound播放合成的音乐
由图可知《东方红》的曲调定为F,即1=F,对应的频率为349.23Hz,据此可以计算出其他乐音的频率,例如5对应的频率为f5?349.23?27/12?523.25,一次类推计算出第一小节各乐音对应的频率为: 乐音
在确定了各乐音的频率之后需要确定每个乐音的持续时间。每小节有两拍,一拍的时间是0.5s,因此各乐音的持续时间为: 乐音 时间 5 0.5 5 0.25 6 0.25 2 1 1 0.5 1 0.25 6 0.25 2 1 5 5 6 2 392 1 1 6 2 392 频率 523.25 523.25 587.33 349.23 349.23 293.66 而在MATLAB中表示乐音所用的抽样频率为fs=8000Hz,也就是所1s钟内有8000个点,抽样点数的多少就可表示出每个乐音的持续时间的长短。用一个行向量来存储这段音乐对应的抽样点,
在用sound函数播放即可。 east1.m
clear;clc; fs=8000;
%抽样频率
f=[523.25 523.25 587.33 392 349.23 349.23 293.66 392]; %各个乐音对应的频率
time=fs*[1/2,1/4,1/4,1,1/2,1/4,1/4,1]; %各个乐音的抽样点数 N=length(time); %这段音乐的总抽样点数 east=zeros(1,N); %用east向量来储存抽样点 n=1;
for num=1:N
%利用循环产生抽样数据,num表示乐音编号
t=1/fs:1/fs:time(num)/fs; %产生第num个乐音的抽样点 east(n:n+time(num)-1)=sin(2*pi*f(num)*t); %抽样点对应的幅值 n=n+time(num); end
sound(east,8000);
%播放音乐
根据以上分析在MATLAB中编写如下程序:
在MATLAB中运行east1.m,播放出了《东方红》的第一段,但是可以听出效很不好,只能听出具有《东方红》的调子而已。
图1-1
由图1-1我们可以看到,每一个调子并没有能够区分出来,就是连续一片的。幅度也是相当的,都是1。
1.2 除噪音,加包络
在east1中,连接的音符产生了一个杂音,下面通过加包络来消噪音。 最简单的包络为指数衰减。最简单的指数衰减是对每个音乘以e的是e?1.5t??t因子,在实验中首先加
的衰减,这种衰减方法使用的是相同速度的衰减,但是发现噪音并没有完全消除,
播放的音乐效果不是很好,感觉音乐起伏性不强。于是采用不同速度的衰减,根据乐音持续时间的长短来确定衰减的快慢,乐音持续时间越长,衰减的越慢,持续时间越短,衰减的越快。在1.1程序的基础上加上包络,编写如下程序: East2.m
clear;clc; fs=8000;
%抽样频率
f=[523.25 523.25 587.33 392 349.23 349.23 293.66 392]; %各个乐音对应的频率
time=fs*[1/2,1/4,1/4,1,1/2,1/4,1/4,1]; %各个乐音的抽样点数 N=length(time); %这段音乐的总抽样点数 east=zeros(1,N); %用east向量来储存抽样点 n=1;
for num=1:N
%利用循环产生抽样数据,num表示乐音编号
%G为存储包络数据的向量
t=1/fs:1/fs:time(num)/fs; %产生第num个乐音的抽样点 G=zeros(1,time(num)); %产生包络点
east(n:n+time(num)-1)=sin(2*pi*f(num)*t).*G(1:time(num)); end
sound(east,8000); plot(east);
%播放
%给第num个乐音加上包络
n=n+time(num);
G(1:time(num))=exp(1:(-1/time(num)):1/8000);
播放后可以听出噪音已经消除,同时因为不同时长的乐音衰减的快慢不一样,音乐听起来更有起伏感,下图是加包络后的east图像。
更科学的包络如下图所示,每个乐音都经过冲激、衰减、持续、消失四个阶段。
由上图可以看出这个包络是四段直线段构成的,因此只要确定了每段线段的端点,即可用端点数据写出直线方程,因此这段包络可以用简单的循环来完成。例如认为包络线上的数据如下图所示:
elseif (p(k)>0.015)&&(p(k)>p(k-1))&&(p(k)>p(k+1))
%若未找到基频,将幅值限制改为0.015,继续寻找
y1(1)=g(k); y2(1)=p(k); end end for t=2:7
for i=t*(k-d):t*(k+d)
%在误差允许的范围内寻找t次谐波点
%谐波幅值归一化
if (p(k)>0.02)&&(p(i)>0.05*p(k))&&(p(i)>p(i-1))&&(p(i)>p(i+1)) y2(t)=p(i)/y2(1); y1(t)=g(i); break
elseif (p(k)>0.015)&&(p(i)>0.05*p(k))&&(p(i)>p(i-1))&&(p(i)>p(i+1)) y2(t)=p(i)/y2(1); y1(t)=g(i); end end end
%这一段循环是与找基频条件相对应的获取高次谐波幅值
在编写完分析函数analysis后即可编写自动分析的主程序。
time=floor([0.096 0.267 1.767 2.234 2.706 3.146 3.606... 4.056 4.520 5.030 5.749 5.978 7.015 7.709 7.923... 8.028 8.490 8.959 9.454 9.852 10.125 10.356... 10.565 10.822 11.292 11.741 12.284 12.741...
13.269 13.758 14.315 14.939 15.432]/16.384*N);
“/16.384*N”中16.384是fmt.wav的总长度,N为fmt.wav数据点的总数,这一项是为了将时间转换成对应的数据点数,由于点的个数必须是整数,因此用floor函数进行取整。在得到了对应音调交接处的点后就可以进行编程了,用循环一个一个音调分析。程序如下: Test5.m
clear;clc;
wave=wavread('fmt.wav'); N=length(wave);
%读入文件
%确定数据总数
首先在Cool Edit中手动标定音调交界处的时间节点,得到了time向量
time=floor([0.096 0.267 1.767 2.234 2.706 3.146 3.606... 4.056 4.520 5.030 5.749 5.978 7.015 7.709 7.923... 8.028 8.490 8.959 9.454 9.852 10.125 10.356... 10.565 10.822 11.292 11.741 12.284 12.741...
13.269 13.758 14.315 14.939 15.432]/16.384*N); %节点向量 fs=N/16.384; n=length(time); for k=1:n; if k==1
temp=wave([1:time(k)-1]); else
temp=wave([time(k-1):time(k)-1]); %将第k个音调数据存入temp矩阵 end
temp=repmat(temp,1000,1); %将数据重复1000次 [F(k,1:7) U(k,1:7)]=analysis(temp,fs); %将每个音调的处理结果分别保存,F保存频率,U保存幅值 end
%确定数据的抽样频率
运行后的结果见F和U的表格,见附录
第三部分 基于傅里叶级数的音乐合成
3.1 用2.3分析出来的结果重新加谐波
基频329.1Hz 幅值为0.05401
谐波 幅值 2 3 4 5 0 6 7 8 9 0.07676 0.04841 0.0519 0.005709 0.01923 0.006741 0.007326
再次完成east3
只需将east3.m程序中的波形幅度矩阵 m=[1 0.3 0.2] 改为
m=[0.05401 0.07676 0.04841 0.0519 0.005709 0.01923 0.006791 0.007326]; 即可
3.2 通过2.4提取的吉他音调信息弹奏《东方红》
根据2.4分析的结果可以提取出吉他的音调信息,以下所用的音调信息用最接近的频率来近似。而所给信息中缺少523.25和587.33的数据,因此用它们的一般来近似
频率 293.66 349.23 392 523.25 587.33 350.65 近似频率 291.97 391.94 2*261.63 2*295.45 1 1 1 1 1 1 2 0.52030544 0.275786539 0.108616595 0.307149693 0.205838324 3 0 0.175812244 0.069072356 0 0.157080813 4 0 0 0 0.057298602 0 5 0.05280271 0.056035202 0 0.075386387 0.088917022 6 0.09594026 0 0 0 0 7 0 0 0 0 0.065977510
将1.4中的程序改为
Test6.m fs=8000;
%抽样频率
f=[523.25 523.25 587.33 392 349.23 349.23 293.66 392]; %各个乐音对应的频率
time=fs*[1/2,1/4,1/4,1,1/2,1/4,1/4,1]; %各个乐音的抽样点数 N=length(time); %这段音乐的总抽样点数 east=zeros(1,N); %用east向量来储存抽样点 n=1;
for num=1:N
%利用循环产生抽样数据,num表示乐音编号
%产生第num个乐音的抽样点
%P为存储包络数据的向量
t=1/fs:1/fs:(time(num))/fs; P=zeros(1,time(num));
L=(time(num))*[0 1/5 333/1000 333/500 1];
%包络线端点对应的横坐标
%包络线端点对应的纵坐标
T=[0 1.5 1 1 0]; s=1;
b=1:1:time(num); for k=1:4
P(s:L(k+1)-1)=(T(k+1)-T(k))/(L(k+1)-L(k))*(b(s:L(k+1)-1)-L(k+1)*ones(1,L(k+1)-s))+T(k+1)*ones(1,L(k+1)-s);
%包络线直线方程通式
s=L(k+1); end
m=[1 0.307149693 0 0.057298602 0.075386387 0 0;... 1 0.307149693 0 0.057298602 0.075386387 0 0;...
1 0.205838324 0.157080813 0 0.088917022 0 0.06597751;... 1 0.108616595 0.069072356 0 0 0 0;...
1 0.275786539 0.175812244 0 0.056035202 0 0;... 1 0.275786539 0.175812244 0 0.056035202 0 0;... 1 0.52030544 0 0 0.05280271 0.09594026 0;... 1 0.108616595 0.069072356 0 0 0 0]; ss=zeros(1,length(t));
%波形幅值矩阵
%产生包络线抽样点
for i=1:7
ss=ss+m(num,i)*sin(2*i*pi*f(num)*t); %加谐波 end
east(n:n+time(num)-1)=ss.*P(1:time(num)); %给第num个乐音加上包络 n=n+time(num); end
sound(2*east,8000); plot(east);
运行后可以听出声音更加真实了。
实验收获
我们没有学过 matlab。可以说是从头到尾都是自学,做这样一个音乐,花时间最多的就是去学习matlab的一些语言用法函数用法。现在网络发达,借助网络,我们就可以学到了很多东西。
Matlab是一个很强大的科学工具,能够学会并充分利用这样一个强大的工具对以后我们的学习有很大的帮助。
附录 F:
0216.3734222.0187246.1872201.2711220.4552328.2604191.1106174.6159174.4671294.8542165.9393247.86987.0319214.8285219.0475220.7794219.6159440.4049218.5936260.0727350.6508330.143291.9693261.6329247.2153147.3293146.6084174.242218.8702220.7766221.1542
000492.37440440.9008656.5075382.2231349.2317346.9734588.315331.8787493.791600438.0951441.5588439.2319880.8079437.18530701.2978660.2554583.9424523.2658494.4324292.8019293.2167346.5910439.7573440.70240649.1241663.3887736.41970659.09984.7832571.1117521.69230881.7806497.818740.68740644.4817657.1426662.3383656.70011319.191653.2669780.221051.949990.4137875.9117782.7702739.4218440.1388437.63730654.56390661.8586000984.7469802.9652879.54521310.8690698.4634000987.5832000883.117700874.372500001046.53986.6371585.618588.6211698.864873.4341000000001643.47800874.29620825.328800001101.73202202.021001748.9171645.9311459.8541306.0360732.9655733.0418873.1060000001477.12101322.7271973.91301049.8521048.7631763.56991.268200001324.6751313.4332642.4241314.070001747.93201478.842880.29881.83781049.2421317.311321.0681325.320001721.167002291.3041333.334000000000000002306.221001723.8311025.7831026.2580000 U:
00.0393990.023720.0330640.02130.0207290.0247740.0213150.0821510.0522190.0245650.0295330.0209180.0170820.032480.0693320.0407080.0283860.0331470.0243570.0202840.0329270.033640.0268770.0405080.0387240.0201360.0225990.0548980.021980.0275280.067601
0000.67094400.0705080.0859590.1626310.2923010.081130.0788120.636830.12954000.3062480.4075670.0640040.4846220.23798100.2757870.0620850.5203050.307150.1575970.0569720.7736730.10606900.0792590.05005800.1151140.1159150.0509700.0527390.2314680.0829940.05177100.1520330.0828710.06439700.0688310.3985510.1345920.0701470.4186090.147350.222250.1758120.0827430.1258980.0707450.2177850.0595320.06597100.20336400.1400380000.2390260.0510160.0635490.17392100.0753540000.3290370000.084063000.06083700000.0572990.3057340.0503250.1104930.1181560.079215000000000.06546000.0712700.25870600000.05310300.05039000.0560350.1014880.0528030.07538600.1000230.1014070.0618030000000.07391300.0945940.16138600.0515060.0631870.1422350.10710200000.138290.5909320.0765210.0609910000.0959400.1303160.0616820.071870.1588540.051750.0560950.0709760000.05227000.0695170.059796000000000000000.228534000.1646670.0527930.0635550000
正在阅读:
Matlab音乐合成实验报告(重大 通院) - 图文09-27
MTS4基站PM后状态查询常用命令12-01
卡特挖掘机故障代码03-20
公司两金压控情况总结季.docx04-09
针对菜鸟SEOer临手编写的实用的“学习SEO搜索引擎的方法”05-26
选修6 Unit1Art说课稿10-18
企业文化建设与学习型组织创建10-04
RiskManager产品简介07-19
畅游书海作文500字07-03
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 合成
- 重大
- 实验
- 图文
- 报告
- Matlab
- 音乐
- 第8章 应用VHDL语言方法设计简易正弦波信号发生器
- 门禁施工合同
- 采区巷道布置及采煤方法1
- 2018年12月西南大学管理心理学大作业答案 - 图文
- 滨州市中长期教育改革和发展规划纲要(2011—2020年)
- 公文篇实战演练及参考答案
- 2012春中国石油大学北京远程市场营销学在线作业试卷三及答案100分
- 现代模式识别是在 20 世纪 40 年代电子计算机发明以后逐渐发展起来的
- 广东省广州市华南师大附中2015届高考物理三模试卷
- 实验诊断学考试重点 txt
- 学生宿舍管理系统 - 毕业论文 - 图文
- 0617《幼儿文学经典作品赏析与教学》2015年6月期末考试指导
- 一下语文复习资料
- PSCAD报告 - 图文
- 左摆动杠杆的加工工艺规程及夹具设计
- 工废、料废管理办法
- (课标版)2019高中地理第1章行星地球第1节宇宙中的地球学案必修1
- 奶牛粗饲料品质评价指标2
- 液氨储罐规范要求2
- 试卷1答案其它页