在matlab中绘制时间与频率的关系图

时间:2012-09-22 21:06:45

标签: matlab graph spectrum

我试图找到一种方法来创建一个图形,显示音频波及其时频数据(x轴上的时间,y轴上的波浪能和频率数据)。我有这个代码在两个单独的图上执行:

[audio, fs] = wavread('audio.wav');

subplot(211)
spectrogram(audio,256,200,256,fs,'yaxis')

subplot(212)
wavEnergy=audio(:,1);
time=(1/fs)*length(wavEnergy);
t=linspace(0,time,length(wavEnergy));
plot(t,wavEnergy);

现在我需要2件事的帮助。

首先,如何让光谱图时间以秒为单位?现在它的x-range为0-340(标记为' time')并且我知道剪辑长约40s(另一个图正确地显示了这个)。

其次,我如何将它们一起绘制?我知道我可以从频谱图中得到一个矩阵,但我从该矩阵得到哪个数组,如何将其时间帧转换为秒?

编辑:

第一个问题解决了,但图表仍然做了一些奇怪的事情 - 它们都输出了大约40秒的数据,但图表的范围和数据的偏移量是不同的。频谱图从0s-40s开始,但是第一个.5s显示没有数据,波形图从0s-45s开始,最后5s显示没有数据。如何才能使范围和偏移相同?

编辑2:

我只需要在两个子图上使用axis tight;

1 个答案:

答案 0 :(得分:3)

在同一时基上对齐这两个图依赖于确定数据的采样频率。根据您传递到频谱图的参数,采样频率为1000 Hz。根据您对time = (1/8000)*length(wavEnergy)的定义,采样频率为8000 Hz。这些并不一致。要从wav文件中获取音频采样频率,您可以使用[audio, fs] = wavread('audio.wav')。另外,我认为您的subplot命令应该是subplot(2,1,1)而不是subplot(211)