我正在试图找到一种方法来创建一个图形,显示一个音频波形及其时频数据(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);
现在我需要两件事的帮助。
首先,如何获得以秒为单位的频谱图时间?现在它的x范围是0-340 (标记为'time'),我知道这个片段大约有40秒长(另一个图正确地显示了这一点)。
其次,如何将它们绘制在一起?我知道我可以从光谱图中得到一个矩阵,但是我应该从这个矩阵中得到哪个数组,以及如何将它的时间帧转换为秒?
编辑:
第一个问题解决了,但是图仍然在做一些奇怪的事情--它们都输出了大约40秒的数据,但是图的范围和数据的偏移量是不同的。频谱图从0到40秒,但第一个.5s没有显示数据,波形图从0到45秒,最后5秒没有数据。怎样才能使范围和偏移量保持一致?
编辑2:
我只需要在两个子图上使用axis tight;
发布于 2012-09-23 13:47:55
在相同的时间基础上对齐这两个图依赖于确定数据的采样频率。根据您传递给频谱图的参数,采样频率为1000 Hz。根据您对time = (1/8000)*length(wavEnergy)
的定义,采样频率为8,000 Hz。这些并不一致。要从wav文件中获取音频采样频率,您可以使用[audio, fs] = wavread('audio.wav')
。
https://stackoverflow.com/questions/12547704
复制