How can I inverse a digital low pass filter?
60 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hello,
in Matlab it's easy to implement low pass filter. But how can I create another filter, which reverses the first filter, i.e. overall gain of 1 for all frequencies.
My idea is just to use the feedback function, i.e. put the low pass transfer function in the negative feedback. This means:
if true
num = 1;
den = [1/3000 1];
tf1 = tf(num,den);
bode(tf1)
tf_neg_feed = feedback(1,tf1);
bode(tf_neg_feed)
end
I would expect a frequency response of gain 1 up to a certain frequency, and a linear increase for higher frequencies. What I get however looks like this:
What is wrong with my approach? Thanks!
0 comentarios
Respuestas (2)
Jayaram Theegala
el 9 de En. de 2017
You can create the inverse of the original filter by exchanging the numerator and denominator of the filter transfer function, in other words:
if true
num = 1;
den = [1/3000 1];
tf1 = tf(num,den);
bode(tf1);
figure;
tf_inverse = tf(den,num);
bode(tf_inverse);
end
However, the inverse filter designed by the above approach may become unstable at higher frequencies. To design a inverse filter that is stable at higher frequencies you can refer to the following stackoverflow post:
0 comentarios
Thierry Zerozerosept
el 6 de Jul. de 2021
Like already answered, many techniques are unstable.
What I do is making a pulse signal of the length of the filtered signal [1,0,0,0,0,0 ... ]
I pass it through the filter to have the impulse response of the filter.
I do a deconvolution of the signal with the impulse response of the filter like that: real(ifft(fft( signal )./fft( impulseresponse )))
This strongly amplifies the high frequency noise but it is not unstable.
0 comentarios
Ver también
Categorías
Más información sobre Filter Design en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!