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.
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