Why my mel filters do not overlap on each other?

6 views (last 30 days)
The 26 filters should overlap on each other. Could someone help me with this?
  1 Comment
Star Strider
Star Strider on 18 Mar 2016
I’ve never used or designed MEL filters. I refer you to: Mel Frequency Cepstral Coefficient (MFCC) tutorial since it seems to be a comprehensive discussion. Compare your code with that discussion.

Sign in to comment.

Accepted Answer

Rick Rosson
Rick Rosson on 20 Mar 2016
Edited: Rick Rosson on 21 Mar 2016
I think the problem is in the second elseif statement:
elseif (k>=f_range(m+1) && k<=f_range(m))
These two sub-conditions are mutually exclusive, so this condition is always false. As a result, the line after this condition, which creates the right half of the triangle, is never executed.
Please try:
elseif (k>f_range(m) && k<=f_range(m+1))
That being said, there are much easier and more efficient ways to create the filter bank in MATLAB, for example:
  • logical indexing
  • the tripuls function
  2 Comments
Rick Rosson
Rick Rosson on 21 Mar 2016
You need to create 2 extra points in f_range. So replace the following two lines:
%Need 26 points spaced linearly between minfreq and maxfreq
f_range = linspace(minMel, maxMel, nfilts);
with these two:
%Need 28 points spaced linearly between minfreq and maxfreq
f_range = linspace(minMel, maxMel, nfilts+2);

Sign in to comment.

More Answers (1)

Rick Rosson
Rick Rosson on 20 Mar 2016
Edited: Rick Rosson on 20 Mar 2016
Please review the tripuls function.
  2 Comments
Rick Rosson
Rick Rosson on 20 Mar 2016
It will work. I've used it successfully.

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!