fft 在 matlab 中的音频文件样本上

Posted

技术标签:

【中文标题】fft 在 matlab 中的音频文件样本上【英文标题】:fft on samples of an audio file in matlab 【发布时间】:2013-04-23 18:26:08 【问题描述】:

我正在尝试从声音文件中提取信息,以便在我正在研究的视频分类算法中使用它。

我的问题是我不知道如何在 Matlab 中准确处理音频文件。

以下是我需要完成的:

打开音频文件并获取采样率/频率 我需要在一个 2 秒的窗口上工作,所以我必须循环文件并获取每 2 秒作为一个窗口,然后在每个窗口上执行 ftt(快速傅立叶变换)。

之后轮到我使用这些价值观做我想做的事了

任何帮助将不胜感激

谢谢。

【问题讨论】:

您是否打算将您的两秒样本窗口化?否则你可能会得到工件。 【参考方案1】:

以下代码可能只会给您一些想法。您可能需要确定另一个 fft 大小,一个窗口函数,如汉明等。

读取 wav 文件:

[data, Fs] = wavread('path.wav');

拆分到 2 秒窗口并获取 fft:

frameFFT = [];
timeStep = Fs*2;
for i=1:timeStep:length(data)-timeStep
   frameFFT = [frameFFT; fft(data(i:i+timeStep-1),1024)];
end

【讨论】:

我正在使用 mp3 文件,所以我不能使用 wavread,我尝试了 data = dsp. AudioFileReader("...");但是长度(数据)是一,我不知道为什么会这样 我也使用了 data = audioread("..");但数据似乎不是向量,因为我检查了它的大小,它是 [4186368 2],你知道吗? @Maystro,音频文件可能是2声道,您只能将第一列作为输入。 @Maystro,这取决于原始记录的获取方式。它可能是真正的立体声或不同通道上的相同信号,为了安全起见,您可以按照链接中的建议取两者的平均值:dsp.stackexchange.com/questions/2484/… 我明白了,大多数音频文件应该有 2 个通道(左、右),并且两个通道中的数据很可能是相同的

以上是关于fft 在 matlab 中的音频文件样本上的主要内容,如果未能解决你的问题,请参考以下文章

Python FFT音频文件

iOS 如何从歌曲(ipod 库)中获取音频样本?

我如何获得定义频带中的所有 fft bin 数量?

FFT的大小实际上是啥意思

wav文件和FFT的matlab中的Audioread

matlab中disp的用法