How can I inverse a digital low pass filter?
조회 수: 63 (최근 30일)
이전 댓글 표시
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:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/159444/image.jpeg)
What is wrong with my approach? Thanks!
댓글 수: 0
답변 (2개)
Jayaram Theegala
2017년 1월 9일
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
Thierry Zerozerosept
2021년 7월 6일
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
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!