playtree 发表于 2006-12-7 18:34

请问如何求取音乐的声谱图(spectrogram)?

请问如何求取音乐的声谱图(spectrogram)的matlab代码?
我是想这样实现的:
对音乐片段分帧;
对每帧求声谱图;
请问然后怎么处理?
谢谢

[ 本帖最后由 zhangnan3509 于 2007-7-4 10:56 编辑 ]

songzy41 发表于 2006-12-8 08:54

可用tfrstft函数进行分析,但楼主要确定每帧为多长等参数。

playtree 发表于 2006-12-8 09:27

你说的tfrstft这个函数
是怎么得到的呢?
谢谢

songzy41 发表于 2006-12-8 09:48

该函数在时频分析工具箱中

playtree 发表于 2006-12-8 10:45

那请问在哪里可以下载时频分析工具箱中?
谢谢

playtree 发表于 2006-12-8 11:39

我想直接对输入信号通过spectrogram函数求得它的声谱
可以吗
= wavread('F:\code\music\88.wav');
spectrogram(x)
但是图好象划不出来
请问应该如何修改呢
谢谢

playtree 发表于 2006-12-8 11:42

此时的信号是单声道的

songzy41 发表于 2006-12-8 13:23

在MATLAB中好象没有spectrogram函数,而有specgram,求谱图的,不知楼主是否是指这个函数?

playtree 发表于 2006-12-8 14:08

matlab7.0中spectrogram函数和specgram函数都有

我就是用来求谱图的
= wavread('F:\code\music\88.wav');
spectrogram(x)
但是图好象划不出来
请问应该如何修改呢
谢谢

playtree 发表于 2006-12-8 22:11

利用spectrogram可以得到音乐的语谱图
= wavread('F:\code\music\88.wav');
specgram(x,1024,fs,win,inc);
此时的信号是单声道的
但是和别人得到的有些偏差

怎么不能够贴图啊

[ 本帖最后由 playtree 于 2006-12-15 09:18 编辑 ]

songzy41 发表于 2006-12-9 08:43

原帖由 playtree 于 2006-12-8 22:11 发表
specgram(x,1024,fs,win,inc);
此时的信号是单声道的
但是和别人得到的有些偏差

在specgram函数中由于参数不同,得到的谱图就会不完全一样。

playtree 发表于 2006-12-15 09:19

麻烦你看看上面的这个语谱图是怎么得到的?
谢谢

songzy41 发表于 2006-12-15 10:56

请你把数据传上来,我试试看。

playtree 发表于 2006-12-15 14:29

好的
我这里有一个音乐文件
麻烦你看看根据信号如何得到相应的图中的语谱图
你有邮箱吗
音乐文件好象不能上传

[ 本帖最后由 playtree 于 2006-12-15 14:40 编辑 ]

songzy41 发表于 2006-12-16 06:38

我的邮箱是:songzy41@126.com
实际上音乐文件可压缩后上传。
又我看了楼主的谱图,感觉可用tfrstft函数对信号分析能得到贴出的类似图。以下有一个相类似的数据文件aa.txt,把它用tfrstft函数分析,程序和结果如下:
xy=load('aa.txt');
N=1024;
fs=8000;
T=1/fs;
tt=(0:N-1)*T;
subplot 211; plot(tt,xy);
axis();
grid;
X=tfrstft(xy);
ff=(0:511)*fs/N;
subplot 212;
imagesc(tt,ff(1:256),abs(X(1:256,:)));
axis('xy');
页: [1] 2
查看完整版本: 请问如何求取音乐的声谱图(spectrogram)?