ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:327.75KB ,
资源ID:10847127      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10847127.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(重庆大学通信工程学院信号与系统课程设计.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

重庆大学通信工程学院信号与系统课程设计.docx

1、重庆大学通信工程学院信号与系统课程设计信号与系统课题设计音乐合成的Matlab实现学 生:学 号:20114820指导教师:印勇专 业:11级电子信息实验班重庆大学通信工程学院二O一三年06月摘要: 本文共有三大部分:第一部分,简单的音乐合成;第二部分,用傅里叶变换分析音乐;第三部分,基于傅里叶级数的音乐合成。由潜入深,一步一步分析了用MATLAB进行音乐合成的过程。通过本实验达到了加深对傅里叶级数和傅里叶分析的理解,熟悉对MATLAB基本使用的目标。第一部分 简单的合成音乐1.1 合成茉莉花根据茉莉花第一小节的简谱和十二平均律计算出该小节每个乐音的频率,在MATLAB中生成幅度为1,抽样频率

2、为8kHz的正弦信号表示这些乐音,用sound播放合成的音乐由图可知茉莉花的曲调定为F,即1=F,对应的频率为349.23Hz,据此可以计算出其他乐音的频率,例如5对应的频率为,一次类推计算出第一小节各乐音对应的频率为:乐音33561166频率440440523.88587.33349.23349.23587.33587.33在确定了各乐音的频率之后需要确定每个乐音的持续时间。每小节有两拍,一拍的时间是0.5s,因此各乐音的持续时间为:乐音33561166时间0.50.250.250.250.250.250.251而在MATLAB中表示乐音所用的抽样频率为fs=8000Hz,也就是所1s钟内有

3、8000个点,抽样点数的多少就可表示出每个乐音的持续时间的长短。用一个行向量来存储这段音乐对应的抽样点,在用sound函数播放即可。 图1-1未加包络的图像 Matlab中运行Prjoct1to1.m,播放出了茉莉花的第一段,但是可以听出效果很不好,只能听出具有茉莉花的调子而已。1.2 除噪音,加包络在1.1中的结果中,你一定听到乐曲相邻乐音之间有“啪”的杂声,这是由于相位不连续产生了高频分量。这种噪声严重影响合成音乐的质量,丧失真实感。为了消除它,下面通过加包络来消噪音。最简单的包络为指数衰减。最简单的指数衰减是对每个音乘以因子,在实验中首先加的是的衰减,这种衰减方法使用的是相同速度的衰减,

4、但是发现噪音并没有完全消除,播放的音乐效果不是很好,感觉音乐起伏性不强。于是采用不同速度的衰减,根据乐音持续时间的长短来确定衰减的快慢,乐音持续时间越长,衰减的越慢,持续时间越短,衰减的越快。在1.1程序的基础上加上包络,project1to2to2exp.m播放后可以听出噪音已经消除,同时因为不同时长的乐音衰减的快慢不一样,音乐听起来更有起伏感,下图是加包络后的wave图像。图1-2 加指数包络之后的图像 更科学的包络如下图所示,每个乐音都经过冲激、衰减、持续、消失四个阶段。由上图可以看出这个包络是四段直线段构成的,因此只要确定了每段线段的端点,即可用端点数据写出直线方程,因为直线方程可以用

5、通式写出(我用的是斜截式),因此这段包络可以用简单的循环来完成。例如认为包络线上的数据如下图所示:据此在MATLAB中编写如下程序:project1to2to1linear.m运行得到的图像为:图1-2-2 加直线包络无重叠之后的图像 下图是两个乐音交接处的局部放大图,可以看到前一个乐音一直衰减到0,后一个乐音从0开始增加,因此消除了噪音。若不需要每个音都衰减到0,例如只需衰减到持续阶段幅值的15%,对程序做简单的修改即可,将T=0 1.5 1 1 0改为T=0.15 1.5 1 1 0.2运行得到的结果为:图1-2-3 加直线包络无重叠之后的图像 由图可见,每个乐音都是衰减到一较小值而不是0

6、,也能消除噪音,同时音乐听起来更加连续。1.3 改变程序,实现1.2中的音乐升高和降低一个八度 升高一个八度即每个乐音的频率都提高一倍,变为原来的2被;降低一个八度即每个乐音的频率都减小一倍,变为原来的1/2。因此最简单的办法是将存储乐音频率的向量每个元素改变为2或1/2倍。即将程序中的f= 440 440 523.25 587.33 698.46 698.46 587.23 523.25 523.25 587.33 523.25.;改为f= 440 440 523.25 587.33 698.46 698.46 587.23 523.25 523.25 587.33 523.25.*2;或f

7、= 440 440 523.25 587.33 698.46 698.46 587.23 523.25 523.25 587.33 523.25./2;将上述音乐上高半个音阶,即将频率变为原来的(1.06)倍,可以利用resamlpe函数对原来的数据点进行重采样来实现 wave=resample(wave,100,106);因为resample进行重新采样后会使每个乐音的持续时间改变,但是因为升高半个音阶,频率改变不大,所以每个音的持续时间是基本不变的。1.4 在1.2的音乐中加入谐波 在1.2的音乐中加上二、三次谐波,基波幅度为1,高次谐波幅度分别为0.3、0.2。只需将1.2程序改为如Pr

8、oject1to4.m示,波形如下图所示。图1-4 加入谐波之后的波形图像第二部分 用傅里叶变换分析音乐2.1 载入fmt.wav并播放利用wavread函数载入fmt.wav,用sound函数播放,程序见roject2to1.m。相比之下,这段音乐听起来比之前合成的音乐更加真实,因为里边含有丰富的谐波,有金属弹奏的感觉。画出图像如下:2.2 载入文件Guitar.mat,处理原始数据realwave问题:载入文件Guitar.mat,分析wave2proc是怎么由realwave得到的?首先,利用load Guitar.mat;载入并用plot函数将realwave、wave2proc分别画

9、出,得到以下两幅图对比,观察两幅图像差别,可明显观察出二者的异同点主要为: 二者均近似为周期函数,周期约为整个时间轴的十分之一;但是其区别就是wave2proc的周期性更强一些,realwave中的非线性谐波和噪声大一点。 所以,这里对realwave的处理的主要想法是尽可能的减小噪声的干扰,一个很有效的方法就是对其做平均。由于所给信号极其接近十个周期,所以将其分为等长的十段再做平均,同时这里还有一个处理,使用resample函数改变抽样频率,以提高处理精度。可以看到,wave2proc比realwave的周期性好得多,去掉了非线性谐波和噪声。在时域做,从图上可以看到,realwave的数据大

10、约是10个周期的共243个数据,因此可以用resample函数对realwave进行重新采样,将采样点提高到250个,那么重采样后每个周期有25个点,将这25个点对应相加求平均值后得到一个周期的值,因为进行了平均,减小了非线性谐波和噪音,然后将这25个数据延托成十个周期即250个点,在利用resample函数对得到的函数重新采样将采样点数恢复到243个。根据以上分析,编写M文件project2to2to2:(红色部分是处理得到的信号,蓝色是wave2proc,第三幅图是红色和蓝色的叠加)由图可见,两组数据重合的很好,说明这种方法是很不错的方法。2.3 分析wave2proc的基波和谐波 为了分

11、析wave2proc的基波和谐波,可以对wave2proc进行傅里叶变换,得到wave2proc的幅值谱,在频谱图上的第一个突出的波峰对应的频率即为wave2proc基频,利用help fft学习了MATLAB中快速傅里叶变换函数fft的用法,编写了M文件project2to3to1.m:运行后得到的结果为 虽然从图上可以大概看出包络,但是非常不明显,假如提高频域的抽样频率,例如将抽样频率由NFFT = 2nextpow2(length(wave2proc)改为NFFT = 8nextpow2(length(wave2proc)得到的结果如下; 由图可见虽然频域的抽样频率提高了很多,但是得到的

12、包络依然不精确,这是因为wave2proc是周期函数,但是现在的wave2proc只有243个数据点,并不能非常明显的体现出其周期性,因此它的幅值谱的离散化程度不高,虽然提高了频域的抽样频率,但是wave2proc数据点的周期性并没有增加,所以要显示出离散化程度高的幅值谱,就要增加wave2proc的周期性,即让wave2proc在时域重复多次后在进行傅里叶变换。 利用repmat函数可以将wave2proc在时域重复。将程序修改为project2to3to2.m运行后得到的幅值谱为:可以看出幅值谱的离散化程度已经非常高了。由图读出wave2proc的基频为329.1Hz,幅值为0.05401

13、,高次谐波幅值分别为:谐波23456789幅值0.076760.048410.051900.0057090.019230.0067410.007326第三部分 基于傅里叶级数的音乐合成3.1 用2.3分析出来的结果重新加谐波基频329.1Hz 幅值为0.05401谐波23456789幅值0.076760.048410.051900.0057090.019230.0067410.007326再次完成project1to4.m只需将project1to4.m程序中的波形幅度矩阵m=1 0.3 0.2改为m=0.05401 0.07676 0.04841 0.0519 0.005709 0.0192

14、3 0.006791 0.007326;即可实验总结:本次实验进一步提高了我对matlab的掌握,提高了应用matlab工具分析信号处理中的问题。在遇到困难时,冷静的分析,认真查找问题产生的原因。同时,此次实验也让我了解到更多的关于信号系统方面应用的知识,比如sound函数,sample函数等的用法,为以后的实验课程奠定了基础。最重要的是,通过此次实验使我们加深了对有关音乐合成的知识的运用,巩固了对抽样,频谱变换等基本概念的理解,受益匪浅。而MATLAB中的帮助文件对我提供了很大的帮助,想很多函数resample、repmat、fft等等很多函数之前并没有接触过,都是通过帮助文件学习了它们的使

15、用方法。同时在遇到问题时跟同学讨论、交流,也产生了不少好想法。总之,这次实验真的收获很大,积累了遇到新问题该怎么解决的方法。 附录代码清单:简单的乐合成1.1合成东方红projectbegin.m1.2除噪声,加包络project1to2to1linear.mproject1to2to2exp.m1.3改变程序使音乐升高或降低八度project1to3to1.mproject1to3to2.m1.4加入谐波project1to4.m用傅里叶级数分析音乐2.1载入fmt.wav并播放project2to1.m2.2 载入文件Guitar.mat,处理原始数据realwaveproject2to2to1.mproject2to2to2.m2.3 分析wave2proc的基波和谐波project2to3to1.mproject2to3to2.m

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1