No BSD License  

Highlights from
inverse FIR filter

image thumbnail
from inverse FIR filter by Matthes
design inverse filter (FIR) from mono or stereo impulse response

[Hoct]=cmplxsmooth(H,Noct)
function [Hoct]=cmplxsmooth(H,Noct)

fs=44100;
freq=(0:fs/(length(H)-1):fs/2)';
Noct=2*Noct;
H=H(1:end/2,:);

Noct=2*Noct;
% octave center frequencies
f1=1;
i=0;
while f1 < 22050
    f1=f1*10^(3/(10*Noct));
    i=i+1;
    fc(i,:)=f1;
end

% octave edge frequencies
for i=0:length(fc)-1
    i=i+1;
    f1=10^(3/(20*Noct))*fc(i);
    fe(i,:)=f1;
end

% find nearest frequency edges
for i=1:length(fe)
    fe_p=find(freq>fe(i),1,'first');
    fe_m=find(freq<fe(i),1,'last');
    fe_0=find(freq==fe(i));
    if isempty(fe_0)==0
        fe(i)=fe_0;
    else
        p=fe_p-fe(i);
        m=fe(i)-fe_m;
        if p<m
            fe(i)=fe_p;
        else
           fe(i)=fe_m;
        end
    end
end

for i=1:length(fe)-1
    H_i=H(fe(i):fe(i+1),:);
    Hoct(i,1:size(H,2))=mean(H_i);
end

Habs=abs(H);
for i=1:length(fe)-1
    absHoct_i=Habs(fe(i):fe(i+1),:);
    absHoct(i,1:size(H,2))=mean(absHoct_i);
end
fc=fc(2:end);
Hoct=Hoct.*absHoct./abs(Hoct);
Hoct=interp1(fc,Hoct,freq,'spline');
Hoct=[Hoct;Hoct(end:-1:1,:)];



Contact us at files@mathworks.com