View License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from

Be the first to rate this file! 18 Downloads (last 30 days) File Size: 1.94 KB File ID: #23179 Version: 1.2




04 Mar 2009 (Updated )

generates a mel filter bank for a given frequency vector

| Watch this File

File Information

% melfilter Create a mel frequency filterbank
% [Filter,MelFrequencyVector] = melfilter(N,FrequencyVector,hWindow)
% Generates a filter bank matrix with N lineary spaced filter banks,
% in the Mel frequency domain, that are overlapped by 50%.
% `N` the number of filter banks to construct.
% `FrequencyVector` a vector indicating the frequencies at which to
% evaluate the filter bank coeffiecents.
% `hWindow` a handle to the windowing function that determines the shape
% of the filterbank. The default is hWindow = @triang
% `Filter` is sparse matrix of size [N numel(FrequencyVector)].
% `MelFrequencyVector` is a vector containing the Mel frequency values
% Example
% N = 50;
% Fs = 10000;
% x = sin(2*pi*110*(0:(1/Fs):5));
% [Pxx,F] = periodogram(x,[],512,Fs);
% Filter = melfilter(N,F);
% Filter = melfilter(N,F,@rectwin);
% [Filter,MF] = melfilter(N,F,@blackmanharris);
% FPxx = Filter*Pxx;
% plot(1:N,FPxx)
% See also
% melfilter melbankm mfcceps hz2mel

Required Products Signal Processing Toolbox
MATLAB release MATLAB 7.5 (R2007b)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (5)
21 Feb 2014 Pierce Brady

I updated the example code,
you should be plotting this


or in your case


MF is used to plot the Filterbank

Comment only
20 Feb 2014 pricky

pricky (view profile)

Hi Pierce Brady

Why did you choose f= 512 in
[Pxx,F] = periodogram(x,[],512,Fs);

i am getting

Error using plot
Vectors must be the same lengths.

Error in speechtrial (line 116)

please help me . How can i resolve this error

Thank you

Comment only
17 Mar 2012 Pawel

Pawel (view profile)

Sorry Pierce, but I can't plot the signal in the way you exampled it. The dimensions of matrices aren't equal. After filtering my signal with mel bank I get a new signal with length set by the number of filters in the bank, however frequencies vector is much bigger. Do I make something wrong or shall the filtration be done differently? Thanks a lot. Pawel.

Comment only
15 Mar 2010 Pierce Brady

Hi gokan,
I have just uploaded a new version with an example. it should be availble in a day or two.

Example of how to use code

File = 'yourfile.wav'
N = 50; % 50 mel filter banks
% Read file
[X,Fs] = wavread(File);
% Compute power spectrum
[Pxx,F] = periodogram(x,[],512,Fs);
% Create Mel filter bank
[fbMel,MF] = melfilter(N,F);
mPxx = fbMel*Pxx;
figure; plot(MF,mPxxl);

MFCC = dct(log10(mPxx))

hope this helps

Comment only
27 Feb 2010 Gökhan Vural

Hi Pierce.
I wanna use this filter for a wav file.. Could you write an example to show how to use your code ?
ie. melfilter (X , Y); ..

Comment only
15 Mar 2010 1.1

1) A third optional input to allow different window shapes.
2) Mel frequency vector can be returned.
3) Example added to help section

21 Feb 2014 1.2

Changed the example code

Contact us