2012-09-22 108 views
3

我想找到一种方法来创建一个图表,显示一个音频波形及其时间频率数据(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:

我只需要在两个副区

+0

将这两幅图在同一时基上对齐取决于确定数据的采样频率。根据您传递给光谱图的参数,采样频率为1000 Hz。根据您对“时间=(1/8000)*长度(wavEnergy)”的定义,采样频率为8000 Hz。这些不一致。要从wav文件获取音频采样频率,您可以使用'[audio,fs] = wavread('audio.wav')'。另外,我认为你的subplot命令应该是'subplot(2,1,1)'而不是'subplot(211)'。 – cjh

+0

感谢您的解释。我能够得到正确的时间范围,但我遇到了一个新问题以及 – Cbas

+0

nvm。你基本上回答了我的问题 - 如果你把它变成答案,我会接受它。 – Cbas

回答

3

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