3

我正在尝试找到一种方法来创建显示音频波及其时频数据(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);

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

首先,我如何获得以秒为单位的频谱图时间?现在它以 0-340 的 x 范围(标记为“时间”)绘制图形,我知道剪辑大约有 40 秒长(另一个图正确显示了这一点)。

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

编辑:

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

编辑2:

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

4

1 回答 1

3

在同一时间基准上对齐这两个图取决于确定数据的采样频率。根据您传递给频谱图的参数,采样频率为 1000 Hz。根据您对 的定义time = (1/8000)*length(wavEnergy),采样频率为 8000 Hz。这些并不一致。要从您的 wav 文件中获取音频采样频率,您可以使用[audio, fs] = wavread('audio.wav').

于 2012-09-23T13:47:54.643 回答