【发布时间】:2012-09-22 21:06:44
【问题描述】:
我正在尝试找到一种方法来创建显示音频波及其时频数据(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;
【问题讨论】:
-
在同一个时基上对齐这两个图依赖于确定数据的采样频率。根据您传递给频谱图的参数,采样频率为 1000 Hz。根据您对
time = (1/8000)*length(wavEnergy)的定义,采样频率为8000 Hz。这些并不一致。要从您的 wav 文件中获取音频采样频率,您可以使用[audio, fs] = wavread('audio.wav')。另外,我认为您的 subplot 命令应该是subplot(2,1,1)而不是subplot(211)。 -
感谢您的解释。我能够得到正确的时间范围,但我也遇到了一个新问题
-
非虚拟机。你基本上回答了我的问题 - 如果你把它变成一个答案,我会接受它。