声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1760|回复: 8

[其他] 求助:求音乐频率图时遇到的问题

[复制链接]
发表于 2006-12-7 18:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
求音乐的频率图matlab代码
[x,fs,nbits]= wavread('1.wav');
t=(1:length(x))/fs;
ht=1.0./t;
yy=fft(x);
subplot(3,1,3);
plot(ht,abs(yy));
但是得到的频率图不对
有朋友做过的吗
请问错在哪里?
谢谢

[ 本帖最后由 zhangnan3509 于 2007-7-4 14:19 编辑 ]
回复
分享到:

使用道具 举报

发表于 2006-12-7 23:30 | 显示全部楼层
你的变量名出错没?还有ht也给错了吧?是不是应该为:
变量名别用纯数字,你把1.wav 这个文件改个名,例如wav1.wav;另外
ht=0:fs/length(x):fs-fs/length(x)
注意出来的谱图只能取一半频率,还有就是如果你的wav格式是双声道的,出来的x可能是两列数据,最后plot时最好分开画。给个完整代码你试试看,(建议谱图不用abs,用分贝图)。假设你的wav是双声道文件,更名为wav1.wav。

[x,fs,nbits]= wavread('wav1.wav');
t=(0:length(x)-1)/fs;
tmax=(length(x)-1)/fs;
ht=0:1/tmax:fs;
yy=fft(x);
subplot(2,1,1);plot(ht(1:length(ht)/2),abs(yy(1:length(ht)/2,1)));
subplot(2,1,2);plot(ht(1:length(ht)/2),abs(yy(1:length(ht)/2,2)));

[ 本帖最后由 vibraman 于 2006-12-7 23:47 编辑 ]
 楼主| 发表于 2006-12-8 01:38 | 显示全部楼层
谢谢你
还有几个疑问想请教
ht=0:fs/length(x):fs-fs/length(x),是什么意思
ht=0:1/tmax:fs:为什么要这么取间隔呢
再次谢谢
 楼主| 发表于 2006-12-8 01:41 | 显示全部楼层
还有就是
建议谱图不用abs,用分贝图
请问这个怎么实现
谢谢
发表于 2006-12-8 08:46 | 显示全部楼层
1,文件名用1.wav没有问题;
2,对楼主的程序作了修改如下:
[x,fs,nbits]= wavread('1.wav');
N=length(x);
t=(1:N)/fs;
df=fs/N;
n2=1:N/2;
ff=(n2-1)*df;
%ht=1.0./t;
yy=fft(x);
%subplot(3,1,3);
plot(ff,abs(yy(n2)));
grid;

如果想在显示时由分贝表示,则把plot语句改为
plot(ff,20*log10(abs(yy(n2))));
即可。
 楼主| 发表于 2006-12-8 09:19 | 显示全部楼层
谢谢你
songzy41
 楼主| 发表于 2006-12-8 09:22 | 显示全部楼层
那请问可不可以全频率显示呢
谢谢
发表于 2006-12-8 09:52 | 显示全部楼层
没有必要进行全频率显示。当采样频率为fs时,信号中允许的最高频率<fs/2。在FFT之后,yy(N/2+1:N)内的数值是表示负频率的谱,没有实际意义的。
 楼主| 发表于 2006-12-8 10:41 | 显示全部楼层
明白了
谢谢你
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-30 15:44 , Processed in 0.064808 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表