【问题标题】:MATLAB - Trouble of converting training data to spectrogramMATLAB - 将训练数据转换为频谱图的麻烦
【发布时间】:2011-09-19 17:18:57
【问题描述】:

我是一名学生,几个月前刚接触信号处理。我为我的项目选择了“A Novel Fuzzy Approach to Speech Recognition”(您可以在 Google 上搜索可下载的版本)。

我在将训练数据转换为已通过 mel 过滤器的频谱图时有点卡住了。

我将this 用于我的 mel-filterbank,当然稍作修改。

然后我编写了这个简单的代码来制作我的训练数据的频谱图:

p   =25;
fl  =0.0;
fh  =0.5;
w   ='hty';
[a,fs]=wavread('a.wav'); %you can simply record a sound and name it a.wav, other param will follows
n=length(a)+1;
fa=rfft(a);
xa=melbank_me(p,n,fs); %the mel-filterbank function
za=log(xa*abs(fa).^2);
ca=dct(za);
spectrogram(ca(:,1))

我得到的只是这样,不像报纸上说的那样:

请让我知道我的代码或频谱图是正确的。如果是这样,我该怎么做才能使我的频谱图像纸上的一样?如果没有,请告诉我哪里错了

还有一个问题,FFT 的长度可以这么长吗? 因为当我尝试降低它时,我的代码会出错。

【问题讨论】:

  • 你为什么要获取 mfcc 系数的频谱图?计算 mffc 的最后一步是获取 dct。你想用频谱图功能实现什么?
  • 其实我不是要把mfcc的代码当成谱图,我要做的就是把我的语音样本通过mel-filterbank后的谱图,我的代码错了吗?我已经 dct 了。我正在尝试将我的样本语音作为模板,这样我就可以根据我的模板制作模糊化规则
  • 其实我不是要把mfcc的代码当成谱图,我要做的就是把我的语音样本通过mel-filterbank后的谱图,我的代码错了吗?我已经 dct 了。我正在尝试将我的样本语音作为模板,这样我就可以根据我制作的模板制定模糊化规则。就像纸一样。就是这样。

标签: signal-processing fft dct spectrogram


【解决方案1】:

您不应该对整个文件进行 FFT - 这将包含太多时变信息 - 您应该选择声音相对静止的窗口大小,例如10 ms @ 44.1 kHz = 441 个样本,所以也许 N = 512 可能是一个很好的起点。然后,如果需要,您可以在连续窗口上生成频谱图,以显示随时间变化的频率内容。

【讨论】:

  • 谢谢,我会努力的。那么,你能解释一下我的频谱图吗?我的意思是,我的代码生成的图片是否正确?如果是这样,我应该如何做进一步的过程,这样我才能像报纸上说的那样做?如果不这样做,哪里错了?
  • 你有论文的链接吗?
  • 您的频谱图旋转了 90 度,并且在时间轴上的分辨率非常低,因为您已经对整个文件进行了 FFT,如上所述。如果您使用大小合理的滑动窗口(例如 N = 512 或 1024),那么您将在时间轴上获得更高的分辨率。您可能还应该在 FFT 之前应用一个窗口函数(例如 Hann 窗口)以消除频谱泄漏。
  • 最后一个问题,我把它旋转90度后,它和纸的一样吗?谢谢你的好意
猜你喜欢
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
  • 2011-03-18
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多