Matlab音乐合成实验报告(重大 通院)

合集下载

在Matlab中实现音乐合成和音乐分析的方法

在Matlab中实现音乐合成和音乐分析的方法

在Matlab中实现音乐合成和音乐分析的方法音乐作为一种艺术形式,是人类情感和创造力的结晶。

如何在Matlab中实现音乐合成和音乐分析的方法,成为了许多音乐爱好者和研究者所关注的问题。

本文将介绍一些常用的音乐合成和音乐分析的方法,并说明它们在Matlab中的实现。

首先,我们来讨论音乐合成的方法。

音乐合成的目标是通过人工的方式生成音乐声音信号。

这可以通过基于规则的方法或基于样本的方法实现。

基于规则的音乐合成常常依赖于合成器,通过调整音色、音高、音量等参数来实现声音生成。

在Matlab中,我们可以利用`audioplayer`函数和音频波形生成函数来实现基于规则的音乐合成。

首先,我们需要定义一个音频波形生成函数,它可以根据输入的参数生成对应的音频波形。

然后,我们可以使用`audioplayer`函数将生成的音频波形播放出来。

通过调整参数可以实现不同的音乐效果。

而基于样本的音乐合成则是利用已有的音频样本来合成音乐。

在Matlab中,我们可以使用`audioread`函数来读取音频样本,然后通过重复拼接、叠加和变调等方式来生成新的音乐。

此外,我们还可以利用`resample`函数来改变音频的采样率,从而实现音乐的时间拉伸或压缩。

通过调整样本的选择和变换方式,我们可以获得不同风格和效果的音乐合成结果。

接下来,我们来讨论音乐分析的方法。

音乐分析的目标是对音乐进行特征提取和结构分析,以便深入理解音乐的内在规律和风格特点。

在Matlab中,有许多用于音乐分析的工具箱和函数可供使用。

一种常用的音乐分析方法是通过频谱分析来提取音乐的频率和强度信息。

在Matlab中,我们可以利用`fft`函数对音频信号进行傅里叶变换,得到音频信号的频谱。

通过分析频谱的峰值频率、能量分布等特征,我们可以获得音乐的基本音高、音色和音量等信息。

此外,我们还可以利用`spectrogram`函数来生成音频的时频谱图,以便更直观地观察音乐信号的时变特征。

音乐合成实验实验报告

音乐合成实验实验报告

一、实验目的1. 了解音乐合成的基本原理和方法。

2. 掌握使用MATLAB进行音乐合成的技巧。

3. 通过实验,加深对音乐合成理论的理解。

二、实验原理音乐合成是指利用电子技术模拟或生成音乐的过程。

音乐合成的基本原理是将音乐的基本元素(如音高、音色、持续时间等)进行数字化处理,然后通过电子设备输出。

本实验采用MATLAB进行音乐合成,主要涉及以下原理:1. 傅里叶级数:将音乐信号分解为不同频率的正弦波和余弦波的叠加。

2. 快速傅里叶变换(FFT):对音乐信号进行快速傅里叶变换,以分析其频谱。

3. 音高合成:通过调整正弦波的频率来模拟不同音高的声音。

4. 音色合成:通过调整正弦波的幅度和相位来模拟不同的音色。

三、实验内容1. 合成《东方红》(1)读取《东方红》的音符序列。

(2)根据音符序列,生成对应的正弦波信号。

(3)将所有正弦波信号叠加,得到完整的音乐信号。

2. 除噪音、加包络(1)读取含有噪音的音乐信号。

(2)对音乐信号进行傅里叶变换,分析其频谱。

(3)将噪音频率的分量从频谱中去除。

(4)为音乐信号添加包络,以调整音量变化。

3. 改变程序,实现音乐升高和降低一个八度(1)修改程序,调整音符序列中每个音符的频率。

(2)重新生成音乐信号。

4. 在音乐中加入谐波(1)在原有音乐信号的基础上,添加谐波分量。

(2)调整谐波分量的频率和幅度。

5. 自选音乐合成(1)选择一首自己喜欢的音乐。

(2)按照实验原理,对音乐进行合成。

四、实验步骤1. 打开MATLAB软件,创建一个新的脚本文件。

2. 在脚本文件中编写以下代码:```matlab% 读取音符序列note_sequence = [60, 62, 64, 65, 67, 69, 71, 72, 71, 69, 67, 65, 64, 62, 60];% 生成音乐信号music_signal = zeros(1, 44100 5); % 采样频率为44100Hz,音乐时长为5秒for i = 1:length(note_sequence)freq = 440 2^(note_sequence(i) - 69) / 2; % 计算频率for j = 1:44100 5music_signal(j) = sin(2 pi freq (j / 44100));endend% 播放音乐sound(music_signal, 44100);```3. 运行脚本文件,观察音乐合成效果。

Matlab中的电子音乐制作与音频合成技术

Matlab中的电子音乐制作与音频合成技术

Matlab中的电子音乐制作与音频合成技术引言电子音乐制作是一种结合技术和艺术的创造过程,而Matlab作为一种强大的数学计算软件,不仅可以应用于科学研究和工程设计,也能够用于音频处理和音乐创作。

本文将介绍Matlab中的一些电子音乐制作和音频合成技术,探讨如何利用Matlab来实现音频效果的设计和实现。

1. Matlab中的音频处理工具Matlab提供了许多音频处理工具箱,如Audio System Toolbox和DSP System Toolbox。

这些工具箱包含了各种音频处理算法和函数,可以用于音频的录制、分析、编辑和合成等方面。

通过这些工具箱,用户可以实现各种音频效果,如均衡器、压缩器、延时器等,并可以对音频进行滤波、混响、合成等处理。

2. 音频合成技术音频合成是电子音乐制作的重要环节之一,它可以通过合成器、采样和合成算法等方式来生成各种音频信号。

Matlab中的音频合成技术主要通过生成相应的音频波形来实现。

2.1 合成器Matlab提供了很多合成器函数,如sine、square、sawtooth等,用于生成不同类型的音频波形。

用户可以通过调整参数,如频率、振幅、相位等来控制波形的特性。

这些合成器函数可以通过简单的数学公式来实现生成音频波形的过程,使用户能够灵活地创作各种音乐效果。

2.2 采样合成除了使用合成器函数生成音频波形外,Matlab还提供了采样合成技术,用户可以通过将各种音频样本进行采样和合成来实现音频合成。

这种方法可以将现实世界中的各种音频素材转化为数字信号,并通过合成算法进行处理和合成。

3. 音频效果的设计与实现Matlab中的音频处理工具箱提供了丰富的音频效果函数和滤波器设计工具,使用户能够设计和实现各种音频效果。

3.1 均衡器均衡器是一种常用的音频效果器,它可以调整不同频段的音量,改变音频频谱的平衡来达到音频加工的效果。

Matlab中可以使用filter函数和滤波器设计工具来设计和实现不同类型的均衡器。

MATLAB音乐合成

MATLAB音乐合成
x=x+E*(sin(a(music(n)).*t)).*u{n}; end sound(x,32000);
包络波形:
1.5 1
0.5 0
-0.5
0
0.5
1
1.5
2
2.5
3
3.5
4
用指数衰减也不行。经过与同学对比,发现对音符间隔理解不用。如果向( 1) 中那样,第一个 5 演奏后,停顿一个音符,虽然更好听些,但是加包络以后,还 是会造成有高频分量。 所以改变方法,将 5 延长至下一个 5.
figure; subplot(3,1,1); plot(wave2proc); title( 'wave2proc' ); subplot(3,1,2); plot(sample2); title( 'sample2' ); subplot(3,1,3); plot(sample2-wave2proc'); title( 'sample2-wa ve2proc' );
K=2^(1/12); a0=220*pi/2; for n=1:20
a(n)=a0.*K^n; end b0=a0*2; for n=1:20
b(n)=b0.*K^n; end c0=a0*3; for n=1:20
c(n)=c0.*K^n; end
a(25)=0; b(25)=0; c(25)=0;
因为非线性谐波和噪声有一个共同点,就是随机产生,无周期性变化。 所以可以把波形进行若干次叠加,然后取平均值,可以想到,叠加次数越多,其 平均值就越接近于周期波形。 读出realwave波形,发现采样点为243,重复十次,可得周期为24.3,所以可 以将其延长至十倍,这样,周期就是整数。

Matlab音乐合成实验报告

Matlab音乐合成实验报告

课程设计《音乐合成》实验报告专业:测控技术与仪器班级:测控11-2 班*名:***学号: ***********指导教师:**广东石油化工学院计算机与电子信息学院信号与系统课程设计-------利用matlab合成音乐一、实验目的1. 熟悉MATLAB的软件和语言指令的使用;2. 学习利用MATLAB进行连续信号的时域、频域分析;3. 熟悉抽样信号与连续信号的区别。

二、实验内容1.请根据《画心》片断的简谱和“十二平均律”计算出该片断中各个乐音的频率,在MATLAB 中生成幅度为1抽样频率为8kHz 的正弦信号表示这些乐音。

请用sound 函数播放每个乐音,听一听音调是否正确。

最后用这一系列乐音信号拼出《画心》片断,注意控制每个乐音持续的时间要符合节拍,用sound 播放你合成的音乐,听起来感觉如何?并用图显示生成的音乐信号。

相关知识:①《画心》完整曲谱,实验时从中随机截取几节用于编程。

②利用十二平均律计算频率以及相关音乐知识。

如图1,其中错误!未找到引用源。

,错误!未找到引用源。

,错误!未找到引用源。

相当于错误!未找到引用源。

的二次谐波,二者是倍频的关系。

从A到A1共有12个键,7个白色键,5个黑色键。

中间这些频率值得计算规律为相邻音倍乘系数错误!未找到引用源。

即错误!未找到引用源。

,别的依次类推。

图1 钢琴键盘图1中各键对应的频率如下表:bG表示的F升高半音,在乐谱中用#表示。

或者G降低半音,用b表示。

乐谱这中的4/4表示每小节有四拍,一个1/4音符的持续时间为一拍,一拍大概0.5s左右。

eg:y=0*t; %初始化y(t<0.25)=sin(440*2*pi*t(t<0.25)); %第一个音 5,持续时间0.25sy(0.25<t&t<0.5)=sin(392*2*pi*t(0.25<t&t<0.5)); %第二个音3,持续时间0.25ssound(y,8000) %播放音乐三.实验步骤3.1音乐合成根据《画心》第一小节的简谱和十二平均律计算出该小节每个乐音的频率,在MATLAB中生成幅度为1,抽样频率为8kHz的正弦信号表示这些乐音,用sound播放合成的音乐。

音乐合成实验报告

音乐合成实验报告

实验一音乐合成背景知识:乐音的基本特征可以用基波频率、谐波频率和包络波形三个方面来描述,我们用大写英文字母CDEFGAB表示每个音的“音名”(或称为“音调”),当指定某一音名时,它对应固定的基波信号频率。

图1表示钢琴的键盘结构,并注明了每个琴键对应的音名和基波频率值。

这些频率值是按“十二平均律”计算导出,下面解释计算规则:图1 钢琴键盘和相应频率从图1可以看到,靠下边的A键称为小字组A,它的频率值f A0 = 220Hz,而靠上面的另一个A键是小字一组A,它的频率值是f A1 = 440Hz。

两者为二倍频率关系,即f A1相当于f A0的二次谐波。

也称为8度音或倍频程Octave(即我们画频响特性图时所用的术语“倍频程”)。

从小字组A到小字一组A共有12个键,其中7个白色键,5个黑色键,其频率计算规律为相邻音倍乘系数K = 21/12 = 1.05946309,由此可求出图中各琴键对应之频率值。

从图1可以看出7个白建之间插入了5个黑键。

在EF之间和BC之间没有黑键,也即这两组相邻的白键之间的基波频率倍乘系数为21/12,也称为相隔半音,而在其他白键之间都有黑键相隔,因而他们的频率倍乘系数为22/12,也称为相隔全音(如CD、DE、FG……)。

若以白键英文字母为基准,则升高半音以“#”符号表示,降低半音则以“b”符号表示。

于是,可以依次写出12个音名从低到高的字母表示为:C,b D,D,b E,E,F,b G,G,b A,A,b B,B当然,若改用“#”号表示黑键,则b D改为#C,b E改为#D……下面给出“唱名”的概念。

所谓唱名是指平时读乐谱唱出的do,re,mi……每个唱名并未固定基波频率。

当指定乐曲的音调时才能知道此时唱名对应的音名,也即确定了对应的频率值。

下面给出一个乐曲的实例,练习写出每个唱名对应的基波频率值,如图2,这是《东方红》的开头两句曲谱,用简谱写出。

曲调定为F,于是可查出第一个音5对应C,频率值为523.25Hz,其他音之频率可依次写出。

音乐合成大作业实验报告

音乐合成大作业实验报告

音乐合成大作业实验报告无84 王梦娣2008011134实验报告部分一、简单的音乐合成1.请根据《东方红》片断的简谱和“十二平均律”计算出该片断中各个乐音的频率,在MATLAB 中生成幅度为1 、抽样频率为8kHz 的正弦信号表示这些乐音。

请用sound 函数播放每个乐音,听一听音调是否正确。

最后用这一系列乐音信号拼出《东方红》片断,注意控制每个乐音持续的时间要符合节拍,用sound 播放你合成的音乐,听起来感觉如何?问题解答:《东方红》片段:其中所用音符的唱名、音名及对应频率(由十二平均律和相应键数间隔即可导出)如下:(单位是Hz)用sound播放单音,音调正确。

以一拍0.5秒计,播出合成音乐。

发现音乐听起来,总体上音调、节拍正确,但乐音无声音强弱变化,两音之间有明显的“啪”的杂声。

2.你一定注意到(1) 的乐曲中相邻乐音之间有“啪”的杂声,这是由于相位不连续产生了高频分量。

这种噪声严重影响合成音乐的质量,丧失真实感。

为了消除它,我们可以用图1.5 所示包络修正每个乐音,以保证在乐音的邻接处信号幅度为零。

此外建议用指数衰减的包络来表示。

问题解答:这个问题,实际上我并没有完全理解题意,没有明白是需要乐音之间有重叠,还是没有重叠,所以,我把两种方法都做了一遍,结果发现,用耳朵完全听不出区别。

对于无重叠的包络:我对包络所做的处理是,对于上图折线部分用指数实现,因为题目中有说当主观感受为线性变化时声音的概率实际上呈指数变化。

做出的结果的图像如下:包络0.511.522.533.54加包络后的音乐有重叠的包络:(处理后的音)从图像上可明显看出有重叠包络和无重叠包络的区别,但是听起来,基本听不出区别。

3. 请用最简单的方法将(2) 中的音乐分别升高和降低一个八度。

(提示:音乐播放的时间可以变化)再难一些,请用resample 函数(也可以用interp 和decimate 函数)将上述音乐升高半个音阶。

(提示:视计算复杂度,不必特别精确)问题解答:0.050.10.150.20.25未处理的一个音符加包络处理过的音符x 104-1.5-1-0.50.511.5由于题目中已有提示“音乐播放的时间可以变化”,所以很容易就想到用Sample函数实现音调的改变,用Sample函数也确实是最简单的方法。

重庆大学通信工程 基于MATLAB的音乐采样实验-DSP

重庆大学通信工程 基于MATLAB的音乐采样实验-DSP

重庆大学本科生专业实验教学实验报告书实验课程名称:数字信号处理实验指导教师:朱冰莲学院:通信工程专业:通信工程学号:2011XXX姓名:XXX实验日期:2013年10月10日成绩:基于MATLAB的音乐采样实验实验背景声音信号的采集与分析处理在工程应用中是经常需要解决的题,如何实时采集声音信号并对其分析处理,找出声音信号的特征在科学研究中是一项非常有意义的工作。

采样定理是信号处理中最重要的定理之一,通过采样定理,可以确定对原始信号的采样频率及采样周期,确保在对已采样信号进行恢复时不失真,又不浪费频带。

实验目的本实验旨在对采样定理进行初步验证,体会频谱混叠现象,并大致确定音频信号的最低采样频率。

实验内容本实验通过MATLAB软件,完成以下三项任务:1、用fs=44100HZ采集一段音乐;2、改变采样频率,用fs=5512HZ采集一段音乐,体会混叠现象;3、录制一段自己的声音,试验当fs=?时,发生混叠。

实验原理现实当中遇到的绝大多数信号都是连续的,即所谓的连续信号。

如语音、图像、温度、压力、电流等等都是模拟信号。

要利用数字信号处理处理技术实现对这些信号的处理,需要借助A/D转换,先将模拟信号转变为数字信号后,才能利用数字技术对其进行加工处理。

因此,采样是从连续到离散的桥梁。

如果选择的采样频率太低,及fs<2fm,或者说是信号的最高频率fm超过fs/2,则采样后的频谱按照采样频率周期延拓时,各周期延拓分量产生频谱的交叠,这种现象叫频谱混叠。

图1 采样信号的频混现象模拟信号经过理想采样,得到采样信号,如果采样频率fs满足采样定理,模拟信号的频谱没有混频现象,则可以用一个理想低通滤波器,不失真的将原模拟信号恢复出来。

实验过程1.用fs=44100HZ采集一段音乐编写如下所示的程序,画出音乐“thislove.wav”的频谱图,如图2。

clc;clear;[y,fs,nbits]=wavread('thislove.wav'); %采样频率44100HZNFFT=2^nextpow2(length(y));fy=fft(y,NFFT)/length(y); %fft变换,p=2*abs(fy(1:NFFT)); %abs取幅度b=fs/2*linspace(0,1,NFFT); %b定义一个数组,作为图像的横坐标plot(b,p);axis([0 23000 0 0.02])title('用44100Hz抽样thislove后音乐的频谱')sound(y,44100);用44100Hz抽样thislove后音乐的频谱x 104图2用44100Hz抽样thislove后音乐的频谱分析:根据采样定理,当采样频率fs<2fm时,会产生频率混叠现象,听起来的声音会有种很多时刻的声音重叠的效果。

matlab音乐合成实验

matlab音乐合成实验

因此,要使播放采样率与原始音乐信号采样率相 等
技术分析:

提取谐波幅度的方法

包络处理方法
谐波幅度的提取:

对频谱图进行观察,提取第一个主峰值以及对应 的横坐标a 以k*a为中心,在(-100,100)的范围内提取峰值
将提取的峰值存入数组


包络处理:

对原始音乐信号进行时域分析,观察信号包络
matlab音乐合成实验
电信卓越班第4小组 黄钊炜、周瑛、吕舒亚、赖癸仲、唐伏龙、陈至珏
成果展示:

自选曲目:《天空之城》

必选曲目:《我们的歌》(节选)
信号分析——以钢琴为例
信号分析——以钢琴为例
信号分析——以钢琴为例
采样率

设原始采样率为aHz,播放采样率为bHz
若b>a:播放时长变短,音调变高 若b<a:播放时长变长,音调变低
对信号包络进行模拟,采用分段的方式,不断调 整包络函数上的各点,使其与原信号接近

包络处理——钢琴

衰减特性与音符持续的长度有关

对不同时间长度的音符,对包络函数进行伸缩变 换
包络处理——吉他

衰减特性与音符长ቤተ መጻሕፍቲ ባይዱ无关

对不同时间长度的音符,对包络函数进行截取操 作
谢谢观赏

matlab音乐合成

matlab音乐合成

M A T L A B数学实验报告姓名:学号:指导老师:专业班级:音乐合成学号班级姓名指导教师实验题目音乐合成评分1.实验目的:1.熟悉MATLAB的软件和语言指令的使用;2. 学习利用MATLAB进行连续信号的时域、频域分析;3. 通过电子音乐合成方面的练习增进对傅里叶级数的理解2.实验内容:使用matlab演奏《当你孤单你会想起谁》3.详细设计:1.本次音乐合成所作曲目为《当你孤单你会想起谁》简谱首先介绍matlab函数的玩法:matlab播放音乐是由sound(Y,fs,bits)函数完成的,该函数的3个参数代表输入信号、采样率、比特率。

先说采样率fs的设置,人耳能够听到的声音范围是20~20000Hz。

根据采样定理fs只需要大于40000即可。

此处采样率的设置采用了MP3的标准,即fs=44.1k.再说输入信号Y,Y一般是一个正弦波,如A*sin(2*pi*w*t)。

其中A控制着声音的大小,w控制着声音的高低,t的范围控制着声音的长短,所以理论上利用这个公式可以发出任何声音,只是不能控制音色和音质(音色音质很难用参数量化,我问了一下学语音的同学,这个东西跟音频谱重心,音频扩展度和音频谱平坦度有关系,这里不作讨论)。

比特率采用默认值即可,该参数省略。

于是用下面的公式就可以播放出标准音la:fs=44100;t=0: 1/fs: 0.5;la = sin(2*pi*440*t);sound(la, fs)据所知,音高和频率是指数的关系,它们满足下面的公式,其中p是音高,f是频率标准音la,即钢琴的A4键,定义为p=69。

音高每上升一个半音,p加1。

设计代码:%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% when you are lonely,who will you think about? //当你孤单你会想起谁 on Matlab fs = 44100; % sample ratedt = 1/fs;T16 = 0.125;t16 = [0:dt:T16];[temp k] = size(t16);t4 = linspace(0,4*T16,4*k);t8 = linspace(0,2*T16,2*k);[temp i] = size(t4);[temp j] = size(t8);% Modification functionsmod4=(t4.^4).*exp(-30*(t4.^0.5));mod4=mod4*(1/max(mod4));mod8=(t8.^4).*exp(-50*(t8.^0.5));mod8=mod8*(1/max(mod8));mod16=(t16.^4).*exp(-90*(t16.^0.5));mod16=mod16*(1/max(mod16));f0 = 2*146.8; % reference frequency ScaleTable = [2/3 3/4 5/6 15/16 ...1 9/8 5/4 4/3 3/2 5/3 9/5 15/8 ...2 9/4 5/2 8/3 3 10/3 15/4 4 ...1/2 9/16 5/8];% 1/4 notesdo0f = mod4.*cos(2*pi*ScaleTable(21)*f0*t4); re0f = mod4.*cos(2*pi*ScaleTable(22)*f0*t4); mi0f = mod4.*cos(2*pi*ScaleTable(23)*f0*t4); fa0f = mod4.*cos(2*pi*ScaleTable(1)*f0*t4); so0f = mod4.*cos(2*pi*ScaleTable(2)*f0*t4); la0f = mod4.*cos(2*pi*ScaleTable(3)*f0*t4); ti0f = mod4.*cos(2*pi*ScaleTable(4)*f0*t4); do1f = mod4.*cos(2*pi*ScaleTable(5)*f0*t4); re1f = mod4.*cos(2*pi*ScaleTable(6)*f0*t4); mi1f = mod4.*cos(2*pi*ScaleTable(7)*f0*t4); fa1f = mod4.*cos(2*pi*ScaleTable(8)*f0*t4); so1f = mod4.*cos(2*pi*ScaleTable(9)*f0*t4); la1f = mod4.*cos(2*pi*ScaleTable(10)*f0*t4); tb1f = mod4.*cos(2*pi*ScaleTable(11)*f0*t4); ti1f = mod4.*cos(2*pi*ScaleTable(12)*f0*t4); do2f = mod4.*cos(2*pi*ScaleTable(13)*f0*t4); re2f = mod4.*cos(2*pi*ScaleTable(14)*f0*t4); mi2f = mod4.*cos(2*pi*ScaleTable(15)*f0*t4); fa2f = mod4.*cos(2*pi*ScaleTable(16)*f0*t4); so2f = mod4.*cos(2*pi*ScaleTable(17)*f0*t4); la2f = mod4.*cos(2*pi*ScaleTable(18)*f0*t4); ti2f = mod4.*cos(2*pi*ScaleTable(19)*f0*t4); do3f = mod4.*cos(2*pi*ScaleTable(20)*f0*t4); blkf = zeros(1,i);% 1/8 notesdo0e = mod8.*cos(2*pi*ScaleTable(21)*f0*t8); re0e = mod8.*cos(2*pi*ScaleTable(22)*f0*t8); mi0e = mod8.*cos(2*pi*ScaleTable(23)*f0*t8); fa0e = mod8.*cos(2*pi*ScaleTable(1)*f0*t8); so0e = mod8.*cos(2*pi*ScaleTable(2)*f0*t8);la0e = mod8.*cos(2*pi*ScaleTable(3)*f0*t8);ti0e = mod8.*cos(2*pi*ScaleTable(4)*f0*t8);do1e = mod8.*cos(2*pi*ScaleTable(5)*f0*t8);re1e = mod8.*cos(2*pi*ScaleTable(6)*f0*t8);mi1e = mod8.*cos(2*pi*ScaleTable(7)*f0*t8);fa1e = mod8.*cos(2*pi*ScaleTable(8)*f0*t8);so1e = mod8.*cos(2*pi*ScaleTable(9)*f0*t8);la1e = mod8.*cos(2*pi*ScaleTable(10)*f0*t8);tb1e = mod8.*cos(2*pi*ScaleTable(11)*f0*t8);ti1e = mod8.*cos(2*pi*ScaleTable(12)*f0*t8); do2e = mod8.*cos(2*pi*ScaleTable(13)*f0*t8);re2e = mod8.*cos(2*pi*ScaleTable(14)*f0*t8); mi2e = mod8.*cos(2*pi*ScaleTable(15)*f0*t8);fa2e = mod8.*cos(2*pi*ScaleTable(16)*f0*t8); so2e = mod8.*cos(2*pi*ScaleTable(17)*f0*t8);la2e = mod8.*cos(2*pi*ScaleTable(18)*f0*t8);ti2e = mod8.*cos(2*pi*ScaleTable(19)*f0*t8); do3e = mod8.*cos(2*pi*ScaleTable(20)*f0*t8); blke = zeros(1,j);% 1/16 notesdo0s = mod16.*cos(2*pi*ScaleTable(21)*f0*t16); re0s = mod16.*cos(2*pi*ScaleTable(22)*f0*t16); mi0s = mod16.*cos(2*pi*ScaleTable(23)*f0*t16); fa0s = mod16.*cos(2*pi*ScaleTable(1)*f0*t16); so0s = mod16.*cos(2*pi*ScaleTable(2)*f0*t16); la0s = mod16.*cos(2*pi*ScaleTable(3)*f0*t16); ti0s = mod16.*cos(2*pi*ScaleTable(4)*f0*t16); do1s = mod16.*cos(2*pi*ScaleTable(5)*f0*t16); re1s = mod16.*cos(2*pi*ScaleTable(6)*f0*t16); mi1s = mod16.*cos(2*pi*ScaleTable(7)*f0*t16); fa1s = mod16.*cos(2*pi*ScaleTable(8)*f0*t16); so1s = mod16.*cos(2*pi*ScaleTable(9)*f0*t16); la1s = mod16.*cos(2*pi*ScaleTable(10)*f0*t16); tb1s = mod16.*cos(2*pi*ScaleTable(11)*f0*t16); ti1s = mod16.*cos(2*pi*ScaleTable(12)*f0*t16); do2s = mod16.*cos(2*pi*ScaleTable(13)*f0*t16); re2s = mod16.*cos(2*pi*ScaleTable(14)*f0*t16); mi2s = mod16.*cos(2*pi*ScaleTable(15)*f0*t16); fa2s = mod16.*cos(2*pi*ScaleTable(16)*f0*t16); so2s = mod16.*cos(2*pi*ScaleTable(17)*f0*t16); la2s = mod16.*cos(2*pi*ScaleTable(18)*f0*t16); ti2s = mod16.*cos(2*pi*ScaleTable(19)*f0*t16); do3s = mod16.*cos(2*pi*ScaleTable(20)*f0*t16); blks = zeros(1,k);% Melody by Schau_malpart1 = [mi1e fa1e so1e so1e so1e so1e so1f mi1e fa1e...so1e so1e so1e so1e so1f la1e ti1e...do2f mi1f mi1e re1e mi1e mi1e mi1e mi1e ...];part2=[ so1e so1e fa1e fa1e mi1e re1e do1e do1e mi1e...mi1e fa1e mi1e do1e do1f so1e so1e...so1e fa1e fa1e mi1e fa1e so1e so1e mi1e mi1e re1e re1e re1e ...];part3 = [mi1e fa1e so1e so1e so1e so1e so1f so1e so1e...so1e so1e so1e so1e so1f la1e ti1e...do2f mi1f mi1e re1e mi1e mi1e mi1e mi1e mi1e so1e...];part4 = [ so1e so1e fa1e fa1e mi1e re1e do1e do1e mi1e mi1e fa1e mi1e do1e so1e so1e...so1e fa1e fa1e mi1e fa1e so1e so1e la1e la1e so1e so1e la1f ti1f...do2e do2e re2e do2e do2f do2e do2e...ti1e do2e ti1e so1e so1e so1e so1e...la1f do1f do1f re1e mi1e mi1e so1e so1e mi1e re1f la1e ti1e...do2e do2e re2e do2e do2f do2e do2e...ti1e do2e ti1e so1e so1f so1e so1e...la1e do2e do2e do2e do2e do2e do2e...do2e re2s re2e do2e mi2e re2e re2f re2f re2f re2f re2f ...];part5 = [mi2f mi2e fa2e mi2e re2f do2e re2e so2e re2e re2f re2f...do2f do2e re2e do2f ti1e la1e...ti1f mi2e ti1e ti1e ...la1f re2e mi2e re2e do2e la1f ...so1f re2e mi2e re2e do2e la1f...];% Combination, v1 is complete version, v2 is simple version.v1 = [part1 part2 part3 part4 part5];s = v1;sound(s,fs);输入此代码后,即可使《当你孤单你会想起谁》以matlab的形式播放出来4:实验结果:经过matlab的处理后,《当你孤单你会想起谁》通过matlab播放了出来,并可以画出如下图片。

音乐合成大作业报告

音乐合成大作业报告

Matlab实验大作业一音乐合成微纳电子系微71 郝家悦2017011089第一部分1.用正弦信号合成《东方红》源代码如下:用到的乐音为高音C,高音D,G,F,低音D,长度有四分音符和八分音符。

clear all;close all;clc;t=0:(1/8192):0.5;tlong=0:(1/8192):1;tshort=0:(1/8192):0.25;hc=sin(2*pi*523.25*t);hcshort=sin(2*pi*523.25*tshort);hdshort=sin(2*pi*587.33*tshort);g=sin(2*pi*392*t);glong=sin(2*pi*392*tlong);f=sin(2*pi*349.23*t);fshort=sin(2*pi*349.23*tshort);ldshort=sin(2*pi*146.83*tshort);dfh=[hc,hcshort,hdshort,glong,f,fshort,ldshort,glong];sound(dfh);见music_ex1.m,运行结果音调正确,但是听起来缺乏真实感,较为刺耳,这是因为合成的音乐中缺乏谐波成分;而在音调衔接处会出现杂音,影响听感。

2.“啪”的杂音由相位不连续导致,为消除此效果,需要在音调衔接处将声强降低至0.这也符合正常音乐音量衰减的规律。

经过测试,在本题中,指数衰减与线性衰减听上去差别不大。

如图1.5所示,添加分段函数的包络。

源代码如下:clear all;close all;clc;t=(1/8192):(1/8192):0.5;tlong=(1/8192):(1/8192):1;tshort=(1/8192):(1/8192):0.25;hc=sin(2*pi*523.25*t);hcshort=sin(2*pi*523.25*tshort);hdshort=sin(2*pi*587.33*tshort);g=sin(2*pi*392*t);glong=sin(2*pi*392*tlong);f=sin(2*pi*349.23*t);fshort=sin(2*pi*349.23*tshort);ldshort=sin(2*pi*146.83*tshort);%四分音符对应的包络mult=zeros(1,4096);for k=1:1:600mult(k)=(1/600)*k;endfor k=601:1:1200mult(k)=1-(0.5/600)*(k-600);endfor k=1201:1:2500mult(k)=0.5;endfor k=2501:1:4096mult(k)=0.5-0.5/(4096-2500)*(k-2500); endmult2=zeros(1,8192);for k=1:1:1200mult2(k)=(1/1200)*k;endfor k=1201:1:2400mult2(k)=1-(0.5/1200)*(k-1200);endfor k=2401:1:5000mult2(k)=0.5;endfor k=5001:1:8192mult2(k)=0.5-0.5/(8192-5000)*(k-5000);endmult8=zeros(1,2048);for k=1:1:300mult8(k)=(1/300)*k;endfor k=301:1:600mult8(k)=1-(0.5/300)*(k-300);endfor k=601:1:1250mult8(k)=0.5;endfor k=1251:1:2048mult8(k)=0.5-0.5/(2048-1250)*(k-1250);endplot(mult8);dfh=[hc.*mult,hcshort.*mult8,hdshort.*mult8,glong.*mult2,f.*mult,fsho rt.*mult8,ldshort.*mult8,glong.*mult2];sound(dfh);见music_ex2.m由于不同长度的音的衰减有所不同,因此对二分音符、四分音符和八分音符的包络,都进行了多次调整,并非简单拉伸/收缩函数。

MATLAB中的音乐合成和音频处理技术

MATLAB中的音乐合成和音频处理技术

MATLAB中的音乐合成和音频处理技术音乐是人类文化的一部分,而音频处理和音乐合成则是现代技术的重要应用之一。

在MATLAB中,我们可以利用其强大的信号处理功能和数值计算能力,实现高质量的音频处理和音乐合成。

本文将探讨MATLAB中的音乐合成和音频处理技术,并介绍一些常用的方法和工具。

一、音频处理技术音频处理技术是指对音频信号进行各种操作和处理,以改善音频质量或提取有用信息。

MATLAB提供了许多处理音频信号的函数和工具箱,例如音频导入、滤波、降噪、特征提取等。

1. 音频导入和播放在MATLAB中,我们可以使用audioread函数将音频文件导入到工作空间中,并使用sound函数或audioplayer对象来播放音频。

2. 滤波和均衡器滤波是音频处理中常用的技术之一,用于去除噪声或强调特定频率的信号。

MATLAB提供了一系列滤波器设计和滤波函数,如低通滤波、高通滤波、带通滤波等。

此外,还可以使用均衡器调整音频频谱的均衡度。

3. 降噪和音频增益降噪是一项重要的音频处理任务,用于减少噪声对音频质量的影响。

MATLAB 中有多种降噪算法可供选择,如傅里叶变换降噪、小波降噪等。

此外,还可以通过调节音频增益来增强信号的强度和清晰度。

4. 音频特征提取音频特征提取是指从音频信号中提取与语音内容、音乐信息等相关的特征。

MATLAB中可以使用信号处理工具箱的功能来提取音频特征,如时域特征(如能量、过零率等)、频域特征(如频谱、谱图等)、光谱特征(如梅尔频率倒谱系数、线性预测编码系数等)等。

5. 音频合成和效果处理除了信号处理和特征提取外,MATLAB还提供了强大的音频合成和效果处理功能。

我们可以使用音频合成算法生成各种音频信号,如正弦波、白噪声、方波等。

此外,还可以使用音频效果处理算法实现音频混响、合唱、失真等效果。

二、音乐合成技术音乐合成是指通过声音的合成和处理,生成逼真的音乐作品。

在MATLAB中,我们可以利用其丰富的信号处理和数值计算功能,实现各种音乐合成技术。

音乐合成_matlab

音乐合成_matlab

MATLAB音乐合成一、简单音乐合成1、根据音乐简谱和十二平均律计算出每个乐音的频率,在 MATLAB中生成幅度为 1,抽样频率为 8kHz 的正弦信号表示这些乐音,用 sound 播放合成的音乐A=[174.61 196 220 246.94 261.62 293.66 329.63 349.23 392 440493.88 523.25 587.33 659.25 698.45 739.99 783.99]; % 定义各调频率fs=8000; %修改频率pu=[1 1 1 3 5 5 5 5 6 6 6 8 5 4 4 6 6 3 3 3 3 2 2 2 2 5 5 1 1 1 3 5 5 5 5 6 6 6 8 5 4 4 4 6 3 3 3 3 3 2 2 2 3 1 ]; %在pu中只需输入乐谱数字,在下面B=A-什么什么那部分调整音调,省去了写频率的麻烦p=0.5;last_time=[p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p p p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p ];%各乐音持续时间为节省空间,用p代替N=length(pu);f=zeros(1,N);B=A-5;for i=1:Nf(i)=B(pu(i)); %f为各个乐音对应的频率,修改其它调endpoint=fs*last_time; %各个乐音的抽样点数total_point=sum(point); %这段音乐的总抽样点数store=zeros(1,total_point); %用store向量来储存抽样点m=1;for num=1:N %利用循环产生抽样数据,num表示乐音编号 t=1/fs:1/fs:point(num)/fs; %产生第num个乐音的抽样点store(m:m+point(num)-1)=sin(2*pi*f(num)*t); %抽样点对应的幅值m=m+point(num);endsound(store,8000); %播放出storeplot(store); %画出store图像2、除噪音,加包络在1.1中听到有“啪”的杂声,这是由于相位不连续产生了高频分量,下面通过加包络来消噪音。

Matlab综合实验报告

Matlab综合实验报告

重庆交通大学学生实验报告实验课程名称《MATLAB编程与系统仿真》开课实验室信息技术实验室学院2012年级通信工程专业2班学生姓名周丙相学号631206040220《MATLAB编程与系统仿真》评分标准序号项目标准评分1仿真结果及实验报告(70%)实验报告各项目认真填写,仿真结果正确,具有清晰的设计思路及仿真结果分析。

(90-95)实验报告各项目认真填写,仿真结果基本正确,具有较为清晰的设计思路并对仿真结果进行了较为清晰的分析。

(80-89)实验报告各项目认真填写,设计思路正确,能得到仿真结果。

(70-79)实验报告进行为较为认真的填写,有设计思路。

(60-69)实验报告有未完成项或各项填写不属实或他人代做或抄袭。

(<60)2其他(30%)平时考勤、实验态度、工作量大小、工作的完善程度等实验得分目录实验一随机信号峰均功率的求法及其比较 (4)一、实验内容及要求 (4)二、程序仿真流程图 (4)三、实验主要步骤 (4)实验主要步骤: (4)实验主要步骤伪码: (5)四、实验结果及结果分析 (6)实验结果: (6)实验结果分析: (8)五、实验心得 (8)实验二BPSK调制设计 (9)一、实验题目内容及要求 (9)二、程序仿真流程图 (9)三、实验主要步骤 (11)实验主要步骤: (11)实验程序流程伪码: (12)四、实验结果以及结果分析 (19)实验结果: (19)实验结果分析: (22)180度相位模糊: (23)五、实验心得体会 (24)实验一:随机信号峰均功率的求法及其比较一、实验内容及要求随机生成四个长度为64的序列,分别为s1,s2,s3,s4,对每个序列乘上[1,-1,j,-j]中的任意一个因子后求和.求所有可能的和序列中峰均功率比最低的序列及相应的因子.二、程序仿真流程图三、实验主要步骤实验主要步骤:(一)、利用rand函数生成长度为64的随机序列s1,s2,s3,s4。

(二)、生成矩阵com=[1,-1,j,-j],并利用for循环将其与s1,s2,s3,s4分别相乘之后相加,并将相加后的结果存入矩阵temp中。

音乐合成实验

音乐合成实验

音乐合唱综合实验简单的合成音乐1、请根据《东方红》片断的简谱和“十二平均律”计算出该片断中各个乐音的频率,在MATLAB 中生成幅度为1 、抽样频率为8kHz 的正弦信号表示这些乐音。

请用sound 函数播放每个乐音,听一听音调是否正确。

最后用这一系列乐音信号拼出《东方红》片断,注意控制每个乐音持续的时间要符合节拍,用sound 播放你合成的音乐,听起来感觉如何?理论答案:《东方红》第一小节乐音的频率:5:523.25Hz6:587.33 Hz2:392 Hz1:349.23 Hz6.:293.66 Hz分析说明:用sound函数直接播放各个乐音时,音调间的高低关系是正确的。

故用此信号拼出的《东方红》第一小节时,能听出乐曲的旋律,但乐音之间有杂声。

产生杂音是因为计算机在播放合成的乐音片段时,每播放完一个乐音后再播放下一个音,而每个音都是瞬间达到最大值后保持一段时间然后立即消失,因此音跟音之间有微小间隔,听上去有“噗”的杂声。

而在现实中,用乐器演奏乐曲时,弹完一个音后,琴弦还在震动是,另一个音就会被拨响,这样音节之间会有重叠,每个音调也是有渐强和渐弱的过程。

如果想消除此处的杂音,必须是音调实现上述真实乐器的播放方式。

2、你一定注意到(1) 的乐曲中相邻乐音之间有“啪”的杂声,这是由于相位不连续产生了高频分量。

这种噪声严重影响合成音乐的质量,丧失真实感。

为了消除它,我们可以用图6.5 所示包络修正每个乐音,以保证在乐音的邻接处信号幅度为零。

此外建议用指数衰减的包络来表示。

开始使用教材中的包络对1中的乐音进行修正,但发现怎样也无法很好的消除“啪”的杂声,进过不断的修正包络的函数慢慢使杂音减小,最后得到的新的音乐明显比1中的音乐更为自然、动听。

程序中产生的包络如下图所示:加包络后的音乐如上图所示,可以发现音节间都有较短的重叠部分,正是这部分起到了消除“啪”声的作用。

3、请用最简单的方法将2中的音乐分别升高和降低一个八度。

基于MATLAB的简单音乐合成

基于MATLAB的简单音乐合成

《数字信号处理》课程设计说明书设计题目:基于MATLAB的简单音乐合成姓名:专业年级:学号:指导老师:时间:2015年6月25日《数字信号处理课程设计》任务书指导老师(签名):__________________________目录1 设计基础 ................................................................1.1 MATLAB软件简介......................................................1.2 乐曲解析.............................................................2 设计与实现 ..............................................................2.1 简单的音乐合成.......................................................2.1.1原理分析 .........................................................2.1.2 Matlab 源代码....................................................2.1.3 运行结果分析.....................................................2.2 除噪音,加包络.......................................................2.2.1 原理分析.........................................................2.2.2 Matlab 源代码....................................................2.2.3 运行结果分析.....................................................2.3 加谐波...............................................................2.3.1 原理分析.........................................................2.3.2 Matlab 源代码....................................................2.3.2 运行结果分析.....................................................3 总结与体会 ..............................................................4 参考文献 ................................................................1 设计基础1.1 MATLAB软件简介MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室MATLAB 工作界面)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

重庆大学Matlab音乐合成实验报告班级:实验班指导老师:***学生: 覃继良学号:********重庆大学通信工程学院音乐合成实验介绍本文共有三大部分:第一部分,简单的音乐合成;第二部分,用傅里叶变换分析音乐;第三部分,基于傅里叶级数的音乐合成。

由潜入深,一步一步分析了用MATLAB 进行音乐合成的过程。

通过本实验达到了加深对傅里叶级数和傅里叶分析的理解,熟悉对MATLAB 基本使用的目标。

第一部分 简单的合成音乐1.1 合成《东方红》根据《东方红》第一小节的简谱和十二平均律计算出该小节每个乐音的频率,在MATLAB 中生成幅度为1,抽样频率为8kHz 的正弦信号表示这些乐音,用sound 播放合成的音乐由图可知《东方红》的曲调定为F ,即1=F ,对应的频率为349.23Hz ,据此可以计算出其他乐音的频率,例如5对应的频率为7/125349.232523.25f =⨯=,一次类推计算出第一小节各乐音对应的频率为:在确定了各乐音的频率之后需要确定每个乐音的持续时间。

每小节有两拍,一拍的时间是0.5s ,因此各乐音的持续时间为:而在MATLAB 中表示乐音所用的抽样频率为fs=8000Hz ,也就是所1s 钟内有8000个点,抽样点数的多少就可表示出每个乐音的持续时间的长短。

用一个行向量来存储这段音乐对应的抽样点,在用sound函数播放即可。

根据以上分析在MATLAB中编写如下程序:east1.mclear;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);endsound(east,8000); %播放音乐在MATLAB中运行east1.m,播放出了《东方红》的第一段,但是可以听出效很不好,只能听出具有《东方红》的调子而已。

图1-1由图1-1我们可以看到,每一个调子并没有能够区分出来,就是连续一片的。

幅度也是相当的,都是1。

1.2 除噪音,加包络在east1中,连接的音符产生了一个杂音,下面通过加包络来消噪音。

eα-因子,在实验中首先加最简单的包络为指数衰减。

最简单的指数衰减是对每个音乘以te-的衰减,这种衰减方法使用的是相同速度的衰减,但是发现噪音并没有完全消除,的是 1.5t播放的音乐效果不是很好,感觉音乐起伏性不强。

于是采用不同速度的衰减,根据乐音持续时间的长短来确定衰减的快慢,乐音持续时间越长,衰减的越慢,持续时间越短,衰减的越快。

在1.1程序的基础上加上包络,编写如下程序:East2.mclear;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个乐音的抽样点G=zeros(1,time(num)); %G为存储包络数据的向量G(1:time(num))=exp(1:(-1/time(num)):1/8000);%产生包络点east(n:n+time(num)-1)=sin(2*pi*f(num)*t).*G(1:time(num));%给第num个乐音加上包络n=n+time(num);endsound(east,8000); %播放plot(east);播放后可以听出噪音已经消除,同时因为不同时长的乐音衰减的快慢不一样,音乐听起来更有起伏感,下图是加包络后的east图像。

更科学的包络如下图所示,每个乐音都经过冲激、衰减、持续、消失四个阶段。

由上图可以看出这个包络是四段直线段构成的,因此只要确定了每段线段的端点,即可用端点数据写出直线方程,因此这段包络可以用简单的循环来完成。

例如认为包络线上的数据如下图所示:包络的通式可以这样表示211121()y y y x x y x x -=-+-据此在MATLAB 中编写如下程序:East3.mclear;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); n=1;for num=1:Nt=1/fs:1/fs:(time(num))/fs; P=zeros(1,time(num));X=(time(num))*[0 1/5 333/1000 333/500 1]; Y=[0 1.5 1 1 0]; s=1;b=1:1:time(num); for k=1:4P(s:X(k+1)-1)=(Y(k+1)-Y(k))/(X(k+1)-X(k))*(b(s:X(k+1)-1)-X(k+1)*ones(1,X(k+1)-s))+Y(k+1)*ones(1,X(k+1)-s); s=X(k+1); endeast(n:n+time(num)-1)=sin(2*pi*f(num)*t).*P(1:time(num)); n=n+time(num); endsound(east,8000); plot(east);运行得到的图像为:下图是两个乐音交接处的局部放大图,可以清楚地看到前一个乐音一直衰减到0,后一个乐音从0开始增加,因此消除了噪音。

1.3 改变程序,实现1.2中的音乐升高和降低一个八度升高一个八度即每个乐音的频率都提高一倍,变为原来的2被;降低一个八度即每个乐音的频率都减小一倍,变为原来的1/2。

因此最简单的办法是将存储乐音频率的向量每个元素改变为2或1/2倍。

即将程序中的f=[523.25 523.25 587.33 392 349.23 349.23 293.66 392];改为f=[523.25 523.25 587.33 392 349.23 349.23 293.66 392]*2;或f=[523.25 523.25 587.33 392 349.23 349.23 293.66 392]/2;2(1.06)倍,可以利用resamlpe函数将上述音乐上高半个音阶,即将频率变为原来的1/12对原来的数据点进行重采样来实现east=resample(east,100,106);因为resample进行重新采样后会使每个乐音的持续时间改变,但是因为升高半个音阶,频率改变不大,所以每个音的持续时间是基本不变的。

1.4 在1.2的音乐中加入谐波在1.2的音乐中加上二、三、四次谐波,基波幅度为1,高次谐波幅度分别为0.2、0.3、0.1。

只需将east3.m程序改为即可,加颜色部分为修改的部分,加上谐波后音乐效果变得更好了。

1.5 自选音乐合成——《》曲调为C,因此可以得到每个乐音对应的频率分别为:56220 233.08各个乐音对应的持续时间为(单位s)5 2 6550.25 0.5 0.5因此,可以得到如下的程序Music1.mclear;clc;fs=8000; %抽样频率f=[392 392 329.63 293.66 329.63 329.63 392 262.63 233.08 220 220];%各个乐音对应的频率time=fs*[0.5,0.25,0.25,0.5,0.5,0.25,0.25,0.25,0.25,0.5,0.5]; %各个乐音的抽样点数N=length(time); %这段音乐的总抽样点数east=zeros(1,N); %用east向量来储存抽样点n=1;for num=1:N %利用循环产生抽样数据,num表示乐音编号t=1/fs:1/fs:(time(num))/fs; %产生第num个乐音的抽样点P=zeros(1,time(num)); %P为存储包络数据的向量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:4P(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);endm=[1 0.3 0.2]; %波形幅值矩阵ss=zeros(1,length(t));for i=1:length(m)ss=ss+m(i)*sin(2*i*pi*f(num)*t); %加谐波endeast(n:n+time(num)-1)=ss.*P(1:time(num));n=n+time(num);endsound(2*east,8000);plot(east);第二部分用傅里叶变换分析音乐2.1 载入FMT.WAV并播放利用wavread函数载入,用sound函数播放,程序如下:test.mwave=wavread('fmt.wav');sound(wave)这段音乐听起来比之前合成的音乐更加真实,因为里边含有丰富的谐波。

2.2 载入文件GUITAR.MAT,处理原始数据REALWAVE载入文件Guitar.mat,分析wave2proc是怎么由realwave得到的。

利用load Guitar.mat;载入并用plot函数将realwave、wave2proc分别画出,得到以下两幅图图2.2-1050100150200250图2.2-2可以看到,wave2proc比realwave的周期性好得多,去掉了非线性谐波和噪声。

相关文档
最新文档