我想找到一种方法来创建一个图表,显示一个音频波形及其时间频率数据(x轴上的时间,y轴上的波浪能量和频率数据)。我有这样的代码,它在两个独立的情节:在matlab中绘制时间与频率
[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多岁的两个输出,但图的范围和数据的偏移量是不同的。频谱图从0s-40s开始,但第一个.5s没有显示数据,波形图从0s-45s开始,最后5s显示没有数据。我怎样才能让范围和偏移量相同?
编辑2:
我只需要在两个副区
将这两幅图在同一时基上对齐取决于确定数据的采样频率。根据您传递给光谱图的参数,采样频率为1000 Hz。根据您对“时间=(1/8000)*长度(wavEnergy)”的定义,采样频率为8000 Hz。这些不一致。要从wav文件获取音频采样频率,您可以使用'[audio,fs] = wavread('audio.wav')'。另外,我认为你的subplot命令应该是'subplot(2,1,1)'而不是'subplot(211)'。 – cjh
感谢您的解释。我能够得到正确的时间范围,但我遇到了一个新问题以及 – Cbas
nvm。你基本上回答了我的问题 - 如果你把它变成答案,我会接受它。 – Cbas