当前位置:文档之家› matlab音乐处理合成实验报告

matlab音乐处理合成实验报告

matlab音乐处理合成实验报告
matlab音乐处理合成实验报告

MATLAB高级编程与工程应用语音合成综合实验

姓名:

班级:

学号:

日期:

1.2.1 简单的合成音乐

(1) 请根据《东方红》片断的简谱和“十二平均律”计算出该片断中各个乐音的频率,在MATLAB 中生成幅度为1 、抽样频率为8kHz 的正弦信号表示这些乐音。请用sound 函数播放每个乐音,听一听音调是否正确。最后用这一系列乐音信号拼出《东方红》片断,注意控制每个乐音持续的时间要符合节拍,用sound 播放你合成的音乐,听起来感觉如何

由“十二平均律”计算得到各个乐音的频率:

“5”——“C”:

“6”——“D”:

“1”——“F”:

“2”——“G”:392Hz

“6.”频率是“6”的一半:

代码:()

f=8000;

T=1/f;

t8=0:T:1*;

t4=0:T:2*;

t2=0:T:4*;

t1=0:T:8*;

part1=sin(2*pi**t4);

part2=sin(2*pi**t8);

part3=sin(2*pi**t8);

part4=sin(2*pi**t2);

part5=sin(2*pi**t4);

part6=sin(2*pi**t8);

part7=sin(2*pi**t8);

part8=sin(2*pi**t2);

total=[part1,part2,part3,part4,part5,part6,part7,part8];

sound(total);

试听发现,合成后的音乐基本保持了《东方红》的音调,但声音比较沉闷,相邻乐音之间有比较明显的“啪”的杂音。

(2) 你一定注意到(1) 的乐曲中相邻乐音之间有“啪”的杂声,这是由于相位不连续产生了高频分量。这种噪声严重影响合成音乐的质量,丧失真实感。为了消除它,我们可以用图所示包络修正每个乐音,以保证在乐音的邻接处信号幅度为零。此外建议用指数衰减的包络来表示。

首先尝试用折线包络,编写函数生成所需折线:

function envelope = envelope_line(t)

envelope(1:floor(t/8)) = linspace(0,1,floor(t/8));

envelope(floor(t/8)+1:floor(t/4)) = linspace(1,,floor(t/4)-floor(t/8)));

envelope(floor(t/4)+1:floor(3*t/4)) = linspace,,floor(t*3/4)-floor(t/4));

envelope(floor(3*t/4)+1:t) = linspace,0,floor(t)-floor(3*t/4));

对中的部分代码进行修改,调用envelope_line实现折线包络:()

part1=sin(2*pi**t4).*envelope_line(t4);

part2=sin(2*pi**t8).*envelope_line(t8);

part3=sin(2*pi**t8).*envelope_line(t8);

part4=sin(2*pi**t2).*envelope_line(t2);

part5=sin(2*pi**t4).*envelope_line(t4);

part6=sin(2*pi**t8).*envelope_line(t8);

part7=sin(2*pi**t8).*envelope_line(t8);

part8=sin(2*pi**t2).*envelope_line(t2);

试听结果杂音明显减少,但声音还比较生硬,尝试用指数衰减的包络来表示。也是对中的部分代码进行修改()

part1=sin(2*pi**t4).*exp(-2*t4);

part2=sin(2*pi**t8).*exp(4*t8);

part3=sin(2*pi**t8).*exp(4*t8);

part4=sin(2*pi**t2).*exp(1*t2);

part5=sin(2*pi**t4).*exp(2*t4);

part6=sin(2*pi**t8).*exp(4*t8);

part7=sin(2*pi**t8).*exp(4*t8);

part8=sin(2*pi**t2).*exp(1*t2);

试听结果比较好,声音很圆润,但仔细听的话也能发现杂音。

(3) 请用最简单的方法将(2) 中的音乐分别升高和降低一个八度。(提示:音乐播放的时间可以变化)再难一些,请用resample 函数(也可以用interp 和decimate 函数)将上述音乐升高半个音阶。(提示:视计算复杂度,不必特别精确)

方法一:

在正弦信号内添加系数改变其频率。

升高八度:

part1=sin(4*pi**t4).*exp(-4*t4);

part2=sin(4*pi**t8).*exp(8*t8);

part3=sin(4*pi**t8).*exp(8*t8);

part4=sin(4*pi**t2).*exp(2*t2);

part5=sin(4*pi**t4).*exp(4*t4);

part6=sin(4*pi**t8).*exp(8*t8);

part7=sin(4*pi**t8).*exp(8*t8);

part8=sin(4*pi**t2).*exp(2*t2);

high8_total=[part1,part2,part3,part4,part5,part6,part7,part8];

sound(high8_total);

降低八度:

part1=sin(1*pi**t4).*exp(-1*t4);

part2=sin(1*pi**t8).*exp(2*t8);

part3=sin(1*pi**t8).*exp(2*t8);

part4=sin(1*pi**t2).*exp*t2);

part5=sin(1*pi**t4).*exp(1*t4);

part6=sin(1*pi**t8).*exp(2*t8);

part7=sin(1*pi**t8).*exp(2*t8);

part8=sin(1*pi**t2).*exp*t2);

low8_total=[part1,part2,part3,part4,part5,part6,part7,part8];

sound(low8_total);

方法二:

直接调用resample函数。

升高八度:

high8_total=resample(total,1,2);

降低八度:

low8_total=resample(total,2,1);

x 104

x 104

升高半个音阶:

根据“十二平均律”中2^(1/12)=

highhalf_total=resample(total,1,2);

(4) 试着在(2) 的音乐中增加一些谐波分量,听一听音乐是否更有“厚度”了注意谐波分量的能量要小,否则掩盖住基音反而听不清音调了。(如果选择基波幅度为1 ,二次谐波幅度0:2 ,三次谐波幅度0:3 ,听起来像不像象风琴)()

part1=sin(2*pi**t4).*exp(-2*t4)+*sin(4*pi**t4).*exp(-2*t4)+*sin(6*pi**t4).*exp(-2*t 4);

part2=sin(2*pi**t8).*exp(4*t8)+*sin(4*pi**t8).*exp(4*t8)+*sin(6*pi**t8).*exp(4*t8); part3=sin(2*pi**t8).*exp(4*t8)+*sin(4*pi**t8).*exp(4*t8)+*sin(6*pi**t8).*exp(4*t8); part4=sin(2*pi**t2).*exp(1*t2)+*sin(4*pi**t2).*exp(1*t2)+*sin(6*pi**t2).*exp(1*t2); part5=sin(2*pi**t4).*exp(2*t4)+*sin(4*pi**t4).*exp(2*t4)+*sin(6*pi**t4).*exp(2*t4); part6=sin(2*pi**t8).*exp(4*t8)+*sin(4*pi**t8).*exp(4*t8)+*sin(6*pi**t8).*exp(4*t8); part7=sin(2*pi**t8).*exp(4*t8)+*sin(4*pi**t8).*exp(4*t8)+*sin(6*pi**t8).*exp(4*t8); part8=sin(2*pi**t2).*exp(1*t2)+*sin(4*pi**t2).*exp(1*t2)+*sin(6*pi**t2).*exp(1*t2);试听结果确实变得醇厚了,有风琴的感觉。

(5) 自选其它音乐合成,例如贝多芬第五交响乐的开头两小节。

我选取了一首儿歌《粉刷匠》()

f=8000;

T=1/f;

t8=0:T:1*;

t4=0:T:2*;

t2=0:T:4*;

t1=0:T:8*;

part1=sin(2*pi**t8).*exp(4*t8);

part2=sin(2*pi**t8).*exp(4*t8);

part3=sin(2*pi**t8).*exp(4*t8);

part4=sin(2*pi**t8).*exp(4*t8);

part5=sin(2*pi**t8).*exp(4*t8);

part6=sin(2*pi**t8).*exp(4*t8);

part7=sin(2*pi**t4).*exp(2*t4);

part8=sin(2*pi**t8).*exp(4*t8);

part9=sin(2*pi**t8).*exp(4*t8);

part10=sin(2*pi**t8).*exp(4*t8);

part11=sin(2*pi**t8).*exp(4*t8);

part12=sin(2*pi**t2).*exp(1*t2);

total=[part1,part2,part3,part4,part5,part6,part7,part8,part9,part10,part11,part12]; plot(total);

sound(total);

-1

-2

-3

x 104

1.2.2 用傅里叶级数分析音乐

(6) 先用wavread 函数载入光盘中的文件,播放出来听听效果如何是否比刚才的合成音乐真实多了

()

x=wavread('');

plot(x);

sound(x);

4

x 10

试听结果的确真实许多。

(7) 你知道待处理的wave2proc 是如何从真实值realwave 中得到的么这个预处理过程可以去除真实乐曲中的非线性谐波和噪声,对于正确分析音调是非常重要的。提示:从时域做,可以继续使用resample 函数。

这题开始时没有理解题目要求,不知道如何入手,于是在CSDN上查找帮助。要去除非线性杂波和噪声,首先要找出它们与真实乐曲的区别。非线性杂波和噪声都是随机产生的,不具有周期性,因此要在周期性的乐音中将其去除,可以考虑将真实乐曲多次叠加再取平均值。乐音可以想象,叠加次数越多,最后得到的平均后的乐音越具有周期性。

读出realwave波形,发现采样点为243,重复10次,可得周期为,所以可以将其延长至10倍,这样,周期就是整数。

()

load('');

l=length(realwave);

add=resample(realwave,10,1);

average=zeros(1,l);

for m=1:10

average=average+(add((m-1)*l+1:m*l))';

end

add=[average,average,average,average,average,average,average,average,average,averag e];

average=resample(add/10,1,10);

figure;

subplot(3,1,1);

plot(wave2proc);

title('wave2proc' );

subplot(3,1,2);

plot(average);

title('average');

subplot(3,1,3);

plot(average-wave2proc');

title('average-wave2proc');

wav e2proc

050100150200250

av erage

050100150200250

-16av erage-wav e2proc

050100150200250

由图中前两个波形可以看出,所得average 波形与wave2proc波形几乎重合。但由第三个波形看出两者还是有细微差别的。

(8) 这段音乐的基频是多少是哪个音调请用傅里叶级数或者变换的方法分析它的谐波分量分别是什么。提示:简单的方法是近似取出一个周期求傅里叶级数但这样明显不准确,因为你应该已经发现基音周期不是整数(这里不允许使用resample 函数)。复杂些的方法是对整个信号求傅里叶变换(回忆周期性信号的傅里叶变换),但你可能发现无论你如何提高频域的分辨率,也得不到精确的包络(应该近似于冲激函数而不是sinc 函数),可选的方法是增加时域的数据量,即再把时域信号重复若干次,看看这样是否效果好多了请解释之。

开始我的代码是这样的:

F=8000;

l1=length(wave2proc);

l=10*l1;

[t omg FT IFT]=prefourier([0,(l-1)/F],l,[0,20000],10000);

r=[wave2proc;wave2proc;wave2proc;wave2proc;wave2proc;wave2proc;wave2proc;wave2proc; wave2proc;wave2proc];

R=FT*r;

R1=abs(R);

plot(omg,R1);

set(gca,'XGrid','on','YGrid','on');

但是对于prefourier函数的调用总是出错,(l-1)/F这一项不能为double。估计是MATLAB版本问题,于是换了一种fourier变换方法。

先将信号重复100遍,然后对整个信号求傅里叶变换,然后作图即可求得x的基频。

()

load('');

Times=100;

s=repmat(wave2proc,Times,1);

L=243*Times;

N=L;

T=L/8000;

OMG=N/T*2*pi;

t=linspace(-T/2,T/2-T/L,L)';

omg=linspace(-OMG/2,OMG/2-OMG/L,L)';

f1=s.*exp(-j*(-OMG/2)*t);

F1=T*exp(j*(-OMG/2)*(-T/2))/N*fft(f1);

plot(omg,abs(F1),'b-');

4

x 10

如图所示:基频频率为:,幅值为;

二次谐波:幅值为;

三次谐波:幅值为;四次谐波:幅值为;

我认为重复的好处是第一采样的点数多了,这样得到的信息量会增多。另外重复周期多了,就越接近周期信号,这样的话,傅里叶变换得到的图会比较清晰,像冲击函数。而如果只是对wave2proc进行傅里叶变换的话就会看到每一个谐波分量附近都有很明显是sa或者升余弦这样的形状。

(9) 再次载入,现在要求你写一段程序,自动分析出这段乐曲的音调和节拍!如果你觉得太难就允许手工标定出每个音调的起止时间,再不行你就把每个音调的数据都单独保存成一个文件,然后让MATLAB 对这些文件进行批理。注意:不允许逐一地手工分析音调。编辑音乐文件,推荐使用\CoolEdit" 编辑软件。

总体思路:先将每个音分开来,然后对同音调的这段音乐作傅里叶变换,然后找到基频。(同时为了后面方便,找到谐波的系数。)

在对音乐分段的时候,我利用的是音乐包络的突变性。通过max函数对波形取包络,这样可以比较明显的看出那边的变化率比较大。对变化率设定一个范围(在这里引入了不少误差)借此给音频信号分段。分出来的段落和人耳辨别得到的基本一致,但是有若干吉他的颤音被认为是弹奏了。这样的误差如果对音调做一点处理应当是能够消除的。(向同学请教了分段的根据)

在找基频的时候,采用傅里叶变换和上题类似。一开始比较简单的认为最大值即是基频,因为在6.2.1-4的题目中看到谐波分量比较小这一说法。后来参考了前面的题的傅里叶变换,发现谐波分量可以大于基频分量。因此程序做了修改,因为时间紧张,所以稍显仓促。大致的想法还是利用了max函数。因为最大值一定是谐波分量或者基频分量。考虑到这么大分量的谐波分量不会很大,一般都是2-3次谐波,最多是4次谐波,所以采用试探的方法。基频分量不可能小到无法和谐波分量相比,所以对基频分量和最大分量的比例设下限来寻找基频。当找到一

个大于下限比的值时,如果它和最大分量的比值几乎为整数,则可认为是基频。()

y=wavread('');

n=length(y);

k=100;

a1=floor(n/k);

x1=zeros(a1+1,3);

x2=zeros(a1+1,8);

m=1;

x2(1,1)=0;

for a=0:a1

if(a==a1)

[x1(a+1,1),x1(a+1,2)]=max(y(k*a+1:n));

else

[x1(a+1,1),x1(a+1,2)]=max(y(k*a+1:k*(a+1)));

end

end

for a=1:a1

if(x1(a+1,1)-x1(a,1)>

x1(a+1,3)=1;

x2(m,2)=((a+1)*k+x1(a+1,2))/8000;

m=m+1;

x2(m,1)=x2(m-1,2);

end

end

for a=1:a1

if(x2(a,2)~=0)

k1=floor(x2(a,1)*8000)+1;

k2=floor(x2(a,2)*8000);

s=repmat(y(k1:k2),100,1);

L=length(s);

N=L;

T=L/8000;

OMG=N/T*2*pi;

t=linspace(-T/2,T/2-T/L,L)';

omg=linspace(-OMG/2,OMG/2-OMG/L,L)';

f1=s.*exp(-j*(-OMG/2)*t);

F=T*exp(j*(-OMG/2)*(-T/2))/N*fft(f1);

F1=abs(F);

[C,I]=max(F1(N/2:N));

for A=1:I

if(F1(A+N/2)>C/3)

if(abs(I/A-5)<

x2(a,3)=A*8000/L;

x2(a,4)=F1(A+N/2);

x2(a,5)=F1(2*A+N/2);

x2(a,6)=F1(3*A+N/2);

x2(a,7)=F1(4*A+N/2);

x2(a,8)=C;

break;

else if(abs(I/A-4)<

x2(a,3)=A*8000/L;

x2(a,4)=F1(A+N/2);

x2(a,5)=F1(2*A+N/2);

x2(a,6)=F1(3*A+N/2);

x2(a,7)=C;

x2(a,8)=F1(5*A+N/2);

break;

else if(abs(I/A-3)<

x2(a,3)=A*8000/L;

x2(a,4)=F1(A+N/2);

x2(a,5)=F1(2*A+N/2);

x2(a,6)=C;

x2(a,7)=F1(4*A+N/2);

x2(a,8)=F1(5*A+N/2);

break;

else if(abs(I/A-2)<

x2(a,3)=A*8000/L;

x2(a,4)=F1(A+N/2); x2(a,5)=C;

x2(a,6)=F1(3*A+N/2); x2(a,7)=F1(4*A+N/2); x2(a,8)=F1(5*A+N/2);

break;

end

end

end

end

end

end

if(A==I)

x2(a,3)=I*8000/L;

x2(a,4)=C;

x2(a,5)=F1(2*I+N/2);

x2(a,6)=F1(3*I+N/2);

x2(a,7)=F1(4*I+N/2);

x2(a,8)=F1(5*I+N/2);

end

end

end

1.2.3 基于傅里叶级数的合成音乐

现在进入了合成音乐的高级境界,我们要用演奏的吉他合成出一段《东方红》。

(10) 用(7) 计算出来的傅里叶级数再次完成第(4) 题,听一听是否像演奏的吉他演奏出来的

()

fz=8000;

t=[0:1/fz:4-1/fz];

t1=t(1:*fz);

t2=t*fz+1:*fz);

t3=t*fz+1:1*fz);

t4=t(1*fz+1:2*fz);

t5=t(2*fz+1:*fz);

t6=t*fz+1:*fz);

t7=t*fz+1:3*fz);

t8=t(3*fz+1:4*fz);

p1=;

p2=;

p3=;

p4=392;

p5=;

p6=;

p7=;

p8=392;

part1=exp(-2*t1).**sin(2*pi*p1*t1)+*sin(4*pi*p1*t1)+*sin(6*pi*p1*t1)+*sin(8*pi*p1*t 1));

part2=exp(4*).**sin(2*pi*p2*t2)+*sin(4*pi*p2*t2)+*sin(6*pi*p2*t2)+*sin(8*pi*p2*t2)) ;

part3=exp(4*).**sin(2*pi*p3*t3)+*sin(4*pi*p3*t3)+*sin(6*pi*p3*t3)+*sin(8*pi*p3*t3)) ;

part4=exp(1*(1-t4)).**sin(2*pi*p4*t4)+*sin(4*pi*p4*t4)+*sin(6*pi*p4*t4)+*sin(8*pi*p 4*t4));

part5=exp(2*(2-t5)).**sin(2*pi*p5*t5)+*sin(4*pi*p5*t5)+*sin(6*pi*p5*t5)+*sin(8*pi*p 5*t5));

part6=exp(4*).**sin(2*pi*p6*t6)+*sin(4*pi*p6*t6)+*sin(6*pi*p6*t6)+*sin(8*pi*p6*t6)) ;

part7=exp(4*).**sin(2*pi*p7*t7)+*sin(4*pi*p7*t7)+*sin(6*pi*p7*t7)+*sin(8*pi*p7*t7)) ;

part8=exp(1*(3-t8)).**sin(2*pi*p8*t8)+*sin(4*pi*p8*t8)+*sin(6*pi*p8*t8)+*sin(8*pi*p 8*t8));

total=[part1,part2,part3,part4,part5,part6,part7,part8];

sound(total);

我发誓我是想弹一段吉他出来,但试听的结果像是钢琴,不过还是挺好听的,至少是个乐器。

(11) 也许(9) 还不是很像,因为对于一把泛音丰富的吉他而言,不可能每个音调对应的泛音数量和幅度都相同。但是通过完成第(8) 题,你已经提取出中的很多音调,或者说,掌握了每个音调对应的傅里叶级数,大致了解了这把吉他的特征。现在就来演奏一曲《东方红》吧。提示:如果还是音调信息不够,那就利用相邻音调的信息近似好了,毕竟可以假设吉他的频响是连续变化的。

()

fz=8000;

t=[0:1/fz:4-1/fz];

t1=t(1:*fz);

t2=t*fz+1:*fz);

t3=t*fz+1:1*fz);

t4=t(1*fz+1:2*fz);

t5=t(2*fz+1:*fz);

t6=t*fz+1:*fz);

t7=t*fz+1:3*fz);

t8=t(3*fz+1:4*fz);

p1=;

p2=;

p3=;

p4=392;

p5=;

p6=;

p7=;

p8=392;

part1=exp(-2*t1).*(sin(2*pi*p1*t1)+*sin(4*pi*p1*t1));

part2=exp(4*).*(sin(2*pi*p2*t2)+*sin(4*pi*p2*t2));

part3=exp(4*).*(sin(2*pi*p3*t3)+*sin(6*pi*p3*t3));

part4=exp(1*(1-t4)).*(sin(2*pi*p4*t4)+*sin(4*pi*p4*t4));

part5=exp(2*(2-t5)).**sin(2*pi*p5*t5)+*sin(4*pi*p5*t5)+*sin(6*pi*p5*t5)+*sin(8*pi*p 5*t5));

part6=exp(4*).**sin(2*pi*p6*t6)+*sin(4*pi*p6*t6)+*sin(6*pi*p6*t6)+*sin(8*pi*p6*t6)) ;

part7=exp(4*).*(sin(2*pi*p7*t7)+*sin(4*pi*p7*t7));

part8=exp(1*(3-t8)).*(sin(2*pi*p8*t8)+*sin(4*pi*p8*t8));

total=[part1,part2,part3,part4,part5,part6,part7,part8];

sound(total);

这次是只有一根弦的吉他有吉他的感觉,但声音不够丰满。我想这是因为泛音需要很多频率的叠加,而不仅仅是几个谐波加一个基波。

实验收获及感想:

这次大作业总体上比语音合成要难,花费的时间也多。其中很大一笔时间用在纠错上,最常见的错误是函数的参数不合要求。有时明明按例题给参数,也会报错,

仔细阅读函数说明会发现不同版本MATLAB对同一函数的描述也是不一样的,甚至对参数的要求也不同。

对于一段比较长的代码要分开编写,及时检测,勤代码中插入plot语句,及时发现错误并纠正。对于不同方法编辑出的同一段乐音,要多对比试听,发现不同因素对乐音的影响。

这次大作业花费的时间很长,但使我真正掌握了傅里叶变换的应用,还是很有收获的。

MATLAB实验报告

MATLAB程序设计语言 实 验 报 告 专业及班级:电子信息工程 姓名:王伟 学号:1107050322 日期 2013年6月20日

实验一 MATLAB 的基本使用 【一】 实验目的 1.了解MATALB 程序设计语言的基本特点,熟悉MATLAB 软件的运行环境; 2.掌握变量、函数等有关概念,掌握M 文件的创建、保存、打开的方法,初步具备将一般数学问题转化为对应计算机模型处理的能力; 3.掌握二维图形绘制的方法,并能用这些方法实现计算结果的可视化。 【二】 MATLAB 的基础知识 通过本课程的学习,应基本掌握以下的基础知识: 一. MATLAB 简介 二. MATLAB 的启动和退出 三. MATLAB 使用界面简介 四. 帮助信息的获取 五. MATLAB 的数值计算功能 六. 程序流程控制 七. M 文件 八. 函数文件 九. MATLAB 的可视化 【三】上机练习 1. 仔细预习第二部分内容,关于MATLAB 的基础知识。 2. 熟悉MATLAB 环境,将第二部分所有的例子在计算机上练习一遍 3. 已知矩阵???? ??????=??????????=123456789,987654321B A 。求A*B ,A .* B ,比较二者结果是否相同。并利用MATLAB 的内部函数求矩阵A 的大小、元素和、长度以 及最大值。 程序代码: >> A=[1 2 3;4 5 6;7 8 9]; >> B=[9 8 7;6 5 4;3 2 1]; >> A*B ans =

30 24 18 84 69 54 138 114 90 >> A.*B ans = 9 16 21 24 25 24 21 16 9 两者结果不同 >> [m,n]=size(A) m = 3 n = 3 >> b=sum(A) b = 12 15 18 >> a=length(A) a = 3 >>max(A) ans =

matlab音乐合成葫芦娃

目录 音乐合成实验................................................................................................. 错误!未定义书签。 摘要: (1) 第一部分简单的合成音乐 (1) 1.1合成《葫芦娃》 (1) 1.2 除噪音,加包络 (5) 1.3改变程序,实现1.2中的音乐升高和降低一个八度 (8) 1.4在1.2的音乐中加入谐波 (9) 摘要: 本文共有三大部分:第一部分,简单的音乐合成;第二部分,用傅里叶变换分析音乐;第三部分,基于傅里叶级数的音乐合成。由潜入深,一步一步分析了用MATLAB进行音乐合成的过程。通过本实验达到了加深对傅里叶级数和傅里叶分析的理解,熟悉对MATLAB 基本使用的目标。 第一部分简单的合成音乐 1.1 合成《葫芦娃》 根据《葫芦娃》第一小节的简谱和十二平均律计算出该小节每个乐音的频率,在MATLAB中生成幅度为1,抽样频率为8kHz的正弦信号表示这些乐音,用sound播放合成的音乐

而在MATLAB中表示乐音所用的抽样频率为fs=8000Hz,也就是所1s钟内有8000个点,抽样点数的多少就可表示出每个乐音的持续时间的长短。用一个行向量来存储这段音乐对应的抽样点,在用sound函数播放即可。 clear all;clc; freq=8000; %抽样频率 T=1/freq; pattime=0.5; %节拍的时间 note2=0:T:2*pattime; note4=0:T:1*pattime; note8=0:T:0.5*pattime; note_1=261.63; %各个音乐对应的频率 note_2=293.67; note_3=329.63; note_5=391.99; note_6=440; note_7=493.88; note_1b=523.25; wave1=sin(2*pi*note_1*note4); %各个音符所对应的节拍 wave2=sin(2*pi*note_1*note4); wave3=sin(2*pi*note_3*note2); wave4=sin(2*pi*note_1*note4); wave5=sin(2*pi*note_1*note4); wave6=sin(2*pi*note_3*note2); wave7=sin(2*pi*note_6*note4); wave8=sin(2*pi*note_6*note4); wave9=sin(2*pi*note_6*note8); wave10=sin(2*pi*note_5*note8); wave11=sin(2*pi*note_6*note4); wave12=sin(2*pi*note_5*note4);

matlab实验报告

MATLAB 数学实验报告 指导老师: 班级: 小组成员: 时间:201_/_/_

Matlab 第二次实验报告 小组成员: 1 题目:实验四,MATLAB 选择结构与应用实验 目的:掌握if 选择结构与程序流程控制,重点掌握break,return , pause语句的应用。 问题:问题1:验证“哥德巴赫猜想” ,即:任何一个正偶数(n>=6)均可表示为两个质数的和。要求编制一个函数程序,输入一个正偶数,返回两个质数的和。 问题分析:由用户输入一个大于6 的偶数,由input 语句实现。由if 判断语句判断是否输入的数据符合条件。再引用质数判断函数来找出两个质数,再向屏幕输出两个质数即可。 编程:function [z1,z2]=gede(n); n=input('please input n')

if n<6 disp('data error'); return end if mod(n,2)==0 for i=2:n/2 k=0; for j=2:sqrt(i) if mod(i,j)==0 k=k+1; end end for j=2:sqrt(n-i) if mod(n-i,j)==0 k=k+1; end end if k==0 fprintf('two numbers are') fprintf('%.0f,%.0f',i,n- i) break end

end end 结果分析 如上图,用户输入了大于6的偶数返回两个质数5和31,通过 不断试验,即可验证哥德巴赫猜想。 纪录:if判断语句与for循环语句联合嵌套使用可使程序结构更加明晰,更快的解决问题。 2题目:实验四,MATLAB选择结构与应用实验 目的:用matlab联系生活实际,解决一些生活中常见的实际问 题。

matlab音乐处理合成实验报告

MATLAB高级编程与工程应用语音合成综合实验 姓名: 班级: 学号: 日期:

1.2.1 简单的合成音乐 (1) 请根据《东方红》片断的简谱和“十二平均律”计算出该片断中各个乐音的频率,在MATLAB 中生成幅度为1 、抽样频率为8kHz 的正弦信号表示这些乐音。请用sound 函数播放每个乐音,听一听音调是否正确。最后用这一系列乐音信号拼出《东方红》片断,注意控制每个乐音持续的时间要符合节拍,用sound 播放你合成的音乐,听起来感觉如何 由“十二平均律”计算得到各个乐音的频率: “5”——“C”: “6”——“D”: “1”——“F”: “2”——“G”:392Hz “6.”频率是“6”的一半: 代码:() f=8000; T=1/f; t8=0:T:1*; t4=0:T:2*; t2=0:T:4*; t1=0:T:8*; part1=sin(2*pi**t4); part2=sin(2*pi**t8); part3=sin(2*pi**t8); part4=sin(2*pi**t2); part5=sin(2*pi**t4); part6=sin(2*pi**t8); part7=sin(2*pi**t8); part8=sin(2*pi**t2); total=[part1,part2,part3,part4,part5,part6,part7,part8]; sound(total); 试听发现,合成后的音乐基本保持了《东方红》的音调,但声音比较沉闷,相邻乐音之间有比较明显的“啪”的杂音。 (2) 你一定注意到(1) 的乐曲中相邻乐音之间有“啪”的杂声,这是由于相位不连续产生了高频分量。这种噪声严重影响合成音乐的质量,丧失真实感。为了消除它,我们可以用图所示包络修正每个乐音,以保证在乐音的邻接处信号幅度为零。此外建议用指数衰减的包络来表示。 首先尝试用折线包络,编写函数生成所需折线: function envelope = envelope_line(t) envelope(1:floor(t/8)) = linspace(0,1,floor(t/8)); envelope(floor(t/8)+1:floor(t/4)) = linspace(1,,floor(t/4)-floor(t/8))); envelope(floor(t/4)+1:floor(3*t/4)) = linspace,,floor(t*3/4)-floor(t/4)); envelope(floor(3*t/4)+1:t) = linspace,0,floor(t)-floor(3*t/4)); 对中的部分代码进行修改,调用envelope_line实现折线包络:() part1=sin(2*pi**t4).*envelope_line(t4);

Matlab音乐合成实验报告

音乐合成实验 目录 音乐合成实验 (1) 摘要: (1) 第一部分简单的合成音乐 (2) 1.1合成《东方红》 (2) 1.2 除噪音,加包络 (3) 1.3改变程序,实现1.2中的音乐升高和降低一个八度 (8) 1.4在1.2的音乐中加入谐波 (9) 1.5自选音乐合成——《两只老虎》 (10) 第二部分用傅里叶变换分析音乐 (11) 2.1载入fmt.wav并播放 (11) 2.2载入文件Guitar.mat,处理原始数据realwave (11) 2.3分析wave2proc的基波和谐波 (13) 2.4自动分析fmt.wav的音调和节拍 (16) 第三部分基于傅里叶级数的音乐合成 (19) 3.1 用2.3分析出来的结果重新加谐波 (19) 3.2 通过2.4提取的吉他音调信息弹奏《东方红》 (19) 实验收获 (21) 摘要:

本文共有三大部分:第一部分,简单的音乐合成;第二部分,用傅里叶变换分析音乐;第三部分,基于傅里叶级数的音乐合成。由潜入深,一步一步分析了用MATLAB 进行音乐合成的过程。通过本实验达到了加深对傅里叶级数和傅里叶分析的理解,熟悉对MATLAB 基本使用的目标。 第一部分 简单的合成音乐 1.1 合成《东方红》 根据《东方红》第一小节的简谱和十二平均律计算出该小节每个乐音的频率,在MATLAB 中生成幅度为1,抽样频率为8kHz 的正弦信号表示这些乐音,用sound 播放合成的音乐 由图可知《东方红》的曲调定为F ,即1=F ,对应的频率为349.23Hz ,据此可以计算出其他乐音的频率,例如5对应的频率为 7/125349.232523.25f =?=,一次类推计算出第一小节各乐音对应的频率为: 乐音 5 5 6 2 1 1 6 2 在确定了各乐音的频率之后需要确定每个乐音的持续时间。每小节有两拍, 一拍的时间是0.5s ,因此各乐音的持续时间为: 乐音 5 5 6 2 1 1 6 2 而在MATLAB 中表示乐音所用的抽样频率为fs=8000Hz ,也就是所1s 钟内有8000个点,抽样点数的多少就可表示出每个乐音的持续时间的长短。用一个行向量来存储这段音乐对应的抽样点,在用sound 函数播放即可。 根据以上分析在MATLAB 中编写如下程序: sound_1_1.m

MATLAB实验报告(1-4)

信号与系统MATLAB第一次实验报告 一、实验目的 1.熟悉MATLAB软件并会简单的使用运算和简单二维图的绘制。 2.学会运用MATLAB表示常用连续时间信号的方法 3.观察并熟悉一些信号的波形和特性。 4.学会运用MATLAB进行连续信号时移、反折和尺度变换。 5.学会运用MATLAB进行连续时间微分、积分运算。 6.学会运用MATLAB进行连续信号相加、相乘运算。 7.学会运用MATLAB进行连续信号的奇偶分解。 二、实验任务 将实验书中的例题和解析看懂,并在MATLAB软件中练习例题,最终将作业完成。 三、实验内容 1.MATLAB软件基本运算入门。 1). MATLAB软件的数值计算: 算数运算 向量运算:1.向量元素要用”[ ]”括起来,元素之间可用空格、逗号分隔生成行向量,用分号分隔生成列向量。2.x=x0:step:xn.其中x0位初始值,step表示步长或者增量,xn 为结束值。 矩阵运算:1.矩阵”[ ]”括起来;矩阵每一行的各个元素必须用”,”或者空格分开; 矩阵的不同行之间必须用分号”;”或者ENTER分开。2.矩阵的加法或者减法运算是将矩阵的对应元素分别进行加法或者减法的运算。3.常用的点运算包括”.*”、”./”、”.\”、”.^”等等。 举例:计算一个函数并绘制出在对应区间上对应的值。

2).MATLAB软件的符号运算:定义符号变量的语句格式为”syms 变量名” 2.MATLAB软件简单二维图形绘制 1).函数y=f(x)关于变量x的曲线绘制用语:>>plot(x,y) 2).输出多个图像表顺序:例如m和n表示在一个窗口中显示m行n列个图像,p表 示第p个区域,表达为subplot(mnp)或者subplot(m,n,p) 3).表示输出表格横轴纵轴表达范围:axis([xmax,xmin,ymax,ymin]) 4).标上横轴纵轴的字母:xlabel(‘x’),ylabel(‘y’) 5).命名图像就在subplot写在同一行或者在下一个subplot前:title(‘……’) 6).输出:grid on 举例1: 举例2:

matlab实验报告

2015秋2013级《MATLAB程序设计》实验报告 实验一班级:软件131姓名:陈万全学号:132852 一、实验目的 1、了解MATLAB程序设计的开发环境,熟悉命令窗口、工作区窗口、历史命令等窗口的使用。 2、掌握MATLAB常用命令的使用。 3、掌握MATLAB帮助系统的使用。 4、熟悉利用MATLAB进行简单数学计算以及绘图的操作方法。 二、实验内容 1、启动MATLAB软件,熟悉MATLAB的基本工作桌面,了解各个窗口的功能与使用。 图1 MATLAB工作桌面 2、MATLAB的常用命令与系统帮助: (1)系统帮助 help:用来查询已知命令的用法。例如已知inv是用来计算逆矩阵,键入help inv即可得知有关inv命令的用法。 lookfor:用来寻找未知的命令。例如要寻找计算反矩阵的命令,可键入lookfor inverse,MATLAB即会列出所有和关键字inverse相关的指令。找到所需的

命令後,即可用help进一步找出其用法。 (2)数据显示格式: 常用命令:说明 format short 显示小数点后4位(缺省值) format long 显示15位 format bank 显示小数点后2位 format + 显示+,-,0 format short e 5位科学记数法 format long e 15位科学记数法 format rat 最接近的有理数显示 (3)命令行编辑:键盘上的各种箭头和控制键提供了命令的重调、编辑功能。 具体用法如下: ↑----重调前一行(可重复使用调用更早的) ↓----重调后一行 →----前移一字符 ←----后移一字符 home----前移到行首 end----移动到行末 esc----清除一行 del----清除当前字符 backspace----清除前一字符 (4)MATLAB工作区常用命令: who--------显示当前工作区中所有用户变量名 whos--------显示当前工作区中所有用户变量名及大小、字节数和类型 disp(x) -----显示变量X的内容 clear -----清除工作区中用户定义的所有变量 save文件名-----保存工作区中用户定义的所有变量到指定文件中 load文件名-----载入指定文件中的数据

Matlab音乐合成实验报告

课程设计《音乐合成》实验报告 专业:测控技术与仪器 班级:测控11-2 班 姓名:谷晓峰 学号: 11034010219 指导教师:贺婷 广东石油化工学院计算机与电子信息学院

信号与系统课程设计 -------利用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.25s y(0.25

MATLAB实验报告

实验一 MATLAB 环境的熟悉与基本运算 一、实验目的及要求 1.熟悉MATLAB 的开发环境; 2.掌握MATLAB 的一些常用命令; 3.掌握矩阵、变量、表达式的输入方法及各种基本运算。 二、实验内容 1.熟悉MATLAB 的开发环境: ① MATLAB 的各种窗口: 命令窗口、命令历史窗口、工作空间窗口、当前路径窗口。 ②路径的设置: 建立自己的文件夹,加入到MATLAB 路径中,并保存。 设置当前路径,以方便文件管理。 2.学习使用clc 、clear ,了解其功能和作用。 3.矩阵运算: 已知:A=[1 2;3 4]; B=[5 5;7 8]; 求:A*B 、A.*B ,并比较结果。 4.使用冒号选出指定元素: 已知:A=[1 2 3;4 5 6;7 8 9]; 求:A 中第3列前2个元素;A 中所有列第2,3行的元素; 5.在MATLAB 的命令窗口计算: 1) )2sin(π 2) 5.4)4.05589(÷?+ 6.关系及逻辑运算 1)已知:a=[5:1:15]; b=[1 2 8 8 7 10 12 11 13 14 15],求: y=a==b ,并分析结果 2)已知:X=[0 1;1 0]; Y=[0 0;1 0],求: x&y+x>y ,并分析结果 7.文件操作 1)将0到1000的所有整数,写入到D 盘下的文件 2)读入D 盘下的文件,并赋给变量num

8.符号运算 1)对表达式f=x 3 -1 进行因式分解 2)对表达式f=(2x 2*(x+3)-10)*t ,分别将自变量x 和t 的同类项合并 3)求 3(1)x dz z +? 三、实验报告要求 完成实验内容的3、4、5、6、7、8,写出相应的程序、结果

基于MATLAB软件的音乐合成毕业设计论文

毕业设计(论文) 基于MATLAB的软件的音乐合成 Music Synthesis Based On MATLAB Software

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名:日期:年月日 导师签名:日期:年月日

基于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参考文献....................................

matlab实验报告

实验报告 实验课程:MATLAB综合实验 学生姓名: 学号: 专业班级: 2012年 5 月 20 日 实验四模拟滤波器频率特性测试 一、实验目的 1、掌握低通无源滤波器的设计; 2、学会将无源低通滤波器向带通、高通滤波器的转换; 3、了解常用有源低通滤波器、高通滤器、带通滤波器、带阻滤波器的结构与特性; 二、预备知识 1、学习“模拟滤波器的逼近”; 2、系统函数的展开方法; 3、低通滤波器的结构与转换方法; 预习报告中回答以下问题: 1、实际中常用的滤波器电路类型有哪些,有何特点? 2、有源滤波器、无源滤波器的概念,优缺点和各自的应用场合? 3、绘出低通、带通、带阻、高通四种滤波器的理想频响曲线及实际频响曲线,两者 有何根本区别,产生原因? 三、实验原理 模拟滤波器根据其通带的特征可分为: (1)低通滤波器:允许低频信号通过,将高频信号衰减; (2)高通滤波器:允许高频信号通过,将低频信号衰减; (3)带通滤波器:允许一定频带范围内的信号通过,将此频带外的信号衰减; (4)带阻滤波器:阻止某一频带范围内的信号通过,而允许此频带以外的信号衰减; 各种滤波器的频响特性图: 图2一1低通滤波器图2一2高通滤波器 图2一3带通滤波器图2一4带阻滤波器 在这四类滤波器中,又以低通滤波器最为典型,其它几种类型的滤波器均可从它转 化而来。 1、系统的频率响应特性是指系统在正弦信号激励下系统的稳态响应随激励信号频率变

化的情况。用矢量形式表示: 其中:|H(j ω)|为幅频特性,表示输出信号与输入信号的幅度比随输入信号频率的变化关系;φ(ω)为相频特性,表示输出信号与输入信号的相位差随输入信号频率的变化关系。 2、H(j ω)可根据系统函数H(s)求得:H(j ω)= H(s)︱s=j ω因此,对于给定的电路可根椐S 域模型先求出系统函数H(s),再求H(j ω),然后讨论系统的频响特性。 3、频响特性的测量可分别测量幅频特性和相频特性,幅频特性的测试采用改变激励信号的频率逐点测出响应的幅度,然后用描图法描出幅频特性曲线;相频特性的测量方法亦可改变激励信号的频率用双踪示波器逐点测出输出信号与输入信号的延时τ,根椐下面的公式推算出相位差 当响应超前激励时为 ()φω正,当响应落后激励时()φω为负。 四、实验原理图 图2一5实验电路 图中:R=38k Ω,C=3900pF ,红色框内为实验板上的电路。 五、实验前预习内容: 1、写出原理图中高、低通及并联后滤波器网络的电压移函数,计算截止频率,并画出幅 频特性及相频特性曲线; 2、测试频率特性时,测试点频率应如何选取。 六、实验内容及步骤: 将信号源CH1的信号波形调为正弦波,信号的幅度调为Vpp=10V 。 1、RC 高通滤波器的频响特性的测量: 将信号源的输出端(A)接实验板的IN1端,滤波后的信号OUT1接示波器的输入(B) 。根据被测电路的参数及系统的频特性,将输入信号的频率从低到高逐次改变十 次以上(幅度保持Vipp=10v) , 逐个测量输出信号的峰峰值大小(Vopp)及输出信号与输入信号的相位差 ,并将测量数据填入表一: 表一 得到幅频特性为: 2.RC 低通滤波器的频响特性的测量: 将信号源的输出(A)接实验板的IN2,滤波后的输出信号OUT2接示波器的输入(B) 。根

MATLAB实验报告 (2)

仲恺农业工程学院实验报告纸 _自动化学院_(院、系)_工业自动化_专业_144_班_Matlab仿真控制实践课程 实验一MATLAB绘图基础 一、实验目的 了解MATLAB常用命令和常见的内建函数使用。 熟悉矩阵基本运算以及点运算。 掌握MATLAB绘图的基本操作:向量初始化、向量基本运算、绘图命令plot,plot3,mesh,surf 使用、绘制多个图形的方法。 二、实验内容 建立并执行M文件multi_plot.m,使之画出如图的曲线。

三、实验方法 四、实验要求 1.分析给出的MA TLAB参考程序,理解MA TLAB程序设计的思维方法及其结构。 2.添加或更改程序中的指令和参数,预想其效果并验证,并对各语句做出详细注释。对不 熟悉的指令可通过HELP查看帮助文件了解其使用方法。达到熟悉MA TLAB画图操作的目的。 3.总结MATLAB中常用指令的作用及其调用格式。 五、实验思考 1、实现同时画出多图还有其它方法,请思考怎样实现,并给出一种实现方法。 (参考程序如下)

2、思考三维曲线(plot3)与曲面(mesh, surf)的用法,(1)绘制参数方程 233,)3cos(,)3sin()(t z e t t y e t t t x t t ===--的三维曲线;(2)绘制二元函数 xy y x e x x y x f z ----==22)2(),(2 ,在XOY 平面内选择一个区域(-3:0.1:3,-2:0.1:2),然后绘 制出其三维表面图形。(以下给出PLOT3和SURF 的示例)

绘制题目要求曲面: %绘制二元函数,在XOY平面内选择一个区域(-3:0.1:3,-2:0.1:2)

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

重庆大学Matlab音乐合成实验报告 班级:实验班 指导老师:印勇 学生: 覃继良 20114909 学号:

音乐合成实验 介绍 本文共有三大部分:第一部分,简单的音乐合成;第二部分,用傅里叶变换分析音乐;第三部分,基于傅里叶级数的音乐合成。由潜入深,一步一步分析了用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.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中运行east1.m,播放出了《东方红》的第一段,但是可以听出效很不好,只能听出具有《东方红》的调子而已。 图1-1 由图1-1我们可以看到,每一个调子并没有能够区分出来,就是连续一片的。幅度也是相当的,都是1。

基于Matlab的MP3播放器

基于Matlab的MP3播放器 1.概述 MP3的全称为MPEG1(Moving Picture Experts Group) Layer – 3音频文件。它根据压缩质量和编码复杂程度划为三层,Layer –1 、Layer –2 、Layer –3 ,且分别对应MP1 、MP2\ MP3 这三种声音文件,并根据不同的用途,使用不同层次的编码。MPEG音频的层次越高,编码器越复杂,压缩率也越高,MP3的压缩率则高达10:1 – 12:1。 MA TLAB 是国际上公认的最优秀的科技应用软件,它在数据分析和处理功能都是很强大,利用它可以灵活方便地处理音频信号。本文将使用matlab对MP3进行解码,做一个简易的MP3播放器。 2.MP3文件格式 MP3文件大体分为三部分:TAG_V2(ID3V2),frame,TAG_V1(ID3V1) 一个MPEG音频文件是许多的称为帧的较小部分组成的,通常,帧是独立的组成部分,每个帧都拥有之间的头和音频信息,没有文件头。所以我们可以剪切MPEG文件的任何部分并且能够正常播放。但在LayerIII中就并不总是正确的。 2.1、帧头格式 下面是一个头内容图示,使用字符A到M表示不同的区域

AAAAAAAAAAA BB CC D EEEE FF G H II JJ K L MM A表示帧同步,都为1,长度为11; B 表示MPEG音频版本ID (00 – MPEG 2.5; 01 –保留;10 – MPEG 2; 11 – MPEG 1); C 表示Layer描述,(00 –保留;01- LayerIII;10 – LayerII;11 - LayerI); D 表示校验位(0 有跟16位CRC校验位;1 无校验位); E 位率索引,长度为4,对不同的版本,不同层索引值表示不同的位率;单位Kbit

《MATLAB及应用》实验报告2

核科学技术学院 实验报告 实验项目名称MATLAB符号计算 所属课程名称MATLAB及应用 实验类型上机实验 实验日期12月日 指导教师谢芹 班级 学号 姓名 成绩 一、实验名称 MATLAB符号计算 二、实验目的

(1)掌握定义符号对象的方法 (2)掌握符号表达式的运算法则以及符号矩阵运算 (3)掌握求符号函数极限及导数的方法 (4)掌握求符号函数定积分和不定积分的方法 三、实验原理 1. 函数极限及导数的方法 (1)函数极限:limit(F,x,a) 求符号函数f(x)的极限值。即计算当变量x趋近于常数a时,f(x)函数的极限值。 (2)limit(f):求符号函数f(x)的极限值。符号函数f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况。 (3)limit(f,x,a,'right'):求符号函数f的极限值。'right'表示变量x从右边趋近于a。 (4)limit(f,x,a,‘left’):求符号函数f的极限值。‘left’表示变量x从左边趋近于a。 2. 微分: diff(s):没有指定变量和导数阶数,则系统按findsym函数指示的默认变量对符号表达式s求一阶导数。 diff(s,'v'):以v为自变量,对符号表达式s求一阶导数。 diff(s,n):按findsym函数指示的默认变量对符号表达式s求n阶导数,n为正整数。 diff(s,'v',n):以v为自变量,对符号表达式s求n阶导数。 3. 函数定积分和不定积分的方法: int(s):没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式s求不定积分。 int(s,v):以v为自变量,对被积函数或符号表达式s求不定积分。 int(s,v,a,b):求定积分运算。a,b分别表示定积分的下限和上限。 梯形法:trapz(x,y):x为分割点构成的向量,y为被积函数在分割点上的函数值构成的向量; 抛物线法:quad(f,a,b,tol),f是被积函数,[a,b]是积分区间,tol是精度。

matlab音乐合成报告

MATLAB音乐合成综合实验 学院: 班级: 指导老师:吴宪祥 同做者: 二0一六年十二月

摘要 本实验共有三部分:1.简单的音乐合成;2.用傅里叶变换分析音乐;3.基于傅里叶级数的音乐合成。一步一步分析了用MATLAB进行音乐合成的过程。通过本实验达到加深对傅里叶级数和傅里叶分析的理解,熟悉对MATLAB基本使用的目标。该实验采用MATLAB软件仿真来实现。首先,通过编程对一段真实的音乐进行分析、处理,求得这段音乐的基频、谐波分量、等数据;然后,通过对乐理的研究,根据分析中求得的数据编写程序,进行基于傅里叶分析的音乐合成设计,并设计了图形用户界面。

目录 1.绪论 1.1 引言 (3) 1.2 实验要求 (3) 1.3 实验原理 (3) 2.简单的合成音乐 2.1 乐理知识介绍 (4) 2.2 利用MATLAB实现音乐合成器,生成 WAV文件 (5) 2.3 除噪音,加包络 (5) 2.4 音乐升高和降八度 (9) 2.5 加入谐波 (9) 3.用傅里叶变换分析音乐 3.1 载入fmt.wav并播放 (11) 3.2 处理realware (11) 3.3 分析wave2proc的基波和谐波 (13) 3.4 自动分析fmt.wav的音调和节拍 (16) 4.基于傅里叶级数的音乐合成 4.1 重新加谐波 (17) 4.2 通过音调信息弹奏《送别》 (19) 5.制作GUI界面 (20) 6.实验难点及问题 (21) 7.实验收获 (22)

1.绪论 1.1 引言 信号与系统的概念及分析方法广泛应用于通信、自动控制、航空航天、电子信息、地震学、生物工程等领域,因此“信号与系统”是一门电子信息学科相关专业的主干技术课程。MATLAB 是国际上公认的优秀的科技应用软件,随着版本的不断升级,内容也在不断扩充。基于MATLAB 的音乐分析与合成实验是针对“信号与系统”课程的重点和难点之一的傅里叶变换和傅里叶级数等内容而设计的。由于该实验是真实音乐的实际应用,可以增进对傅里叶级数和傅里叶变换的理解,加深对信号分析工程应用的理解,提高在信号分析领域的应用能力。 1.2 实验要求 1、3-5人一组,选择不同乐曲,利用MATLAB 实现音乐合成器,生成WAV 文件; 2、给乐音加包络消噪; 3、实现音乐的升八度和降八度; 4、在音乐中添加谐波; 5、用傅里叶级数分析音乐的基频、音调和节拍; 6、模仿一些常用乐器(如钢琴、吉他等)实现音乐合成; 7、设计GUI 界面; 8、提交设计报告。 1.3实验原理 傅里叶变换建立了信号频谱的概念。所谓傅里叶分析即分析信号的频谱(频率构成)、频带宽度等。要想合成出一段音乐,就要了解该段音乐的基波频率、谐波构成等。因此,必须采用傅里叶变换这一工具。对于连续时间信号f(t),其傅里叶变换为: dt jwt e t f w ?∞ ∞--=)(F )( 由于其变换两边的函数f (t) 和F (w )都是连续函数,不适合于计算机处理。MATLAB 语言提供了符号函数FOURIER 来实现傅里叶变换,但该函数需要信号的解析表达式。而工程应用中经常需要对抽样数据进行傅里叶分析,这种情况下往往无法得到信号的解析表达式,必须采用傅里叶变换的数值计算方法。

MATLAB实验报告(8个实验)

四川师范大学MATLAB语言实验报告1 系级班年月日 实验名称:Intro, Expressions, Commands 姓名学号指导教师成绩1Objective The objective of this lab is to familiarize you with the MATLAB program development environment and to develop your first programs in this environment. 2Using MATLAB 2.1Starting MATLAB Logon to your computer and start MATLAB by double-clicking on the icon on the desktop or by using the Start Programs menu. MATLAB Desktop window will appear on the screen. The desktop consists of several sub-windows. The most important ones are: ●Command Window (on the right side of the Desktop) is used to do calculations, enter variables and run built-in and your own functions. ●Workspace (on the upper left side) consists of the set of variables (arrays) created during the current MATLAB session and stored in memory. ●Command History (on the lower left side) logs commands entered in the Command Window. You can use this window to view previously run statements, and copy and execute selected statements. You can switch between the Launch Pad window and the Workspace window using the menu tabs under the sub-window on the upper left side. Similarly, you can switch between the Command History and Current Directory windows using the menu tabs under the sub-window on the lower left side. 2.2Executing Commands You can type MATLAB commands at the command prompt “>>” on the Command Window. For example, you can type the formula cos(π/6)2sin(3π/8) as >>(cos(pi/6) ^ 2) * (sin(3 * pi/8)) Try this command. After you finish typing, press enter. The command will be interpreted and the result will be displayed on the Command Window. Try the following by observing how the Workspace window changes: >> a = 2; (M ake note of the usage of “;”) >> b = 3;

相关主题
文本预览
相关文档 最新文档