How to implement a "nonlinear" convolution?

11 ビュー (過去 30 日間)
Felix
Felix 2012 年 11 月 22 日
This is a more general mathematical question, but I am asking this here since it may be a frequent problem and perhaps matlab implementations already exist...
I have a certain impulse response, and a vector of onset times. When I convolve these two, for closely spaced onset times, the amplitudes of the individual impulse responses just add up linearly, which is, however, not the case in the real world.
There are two nonlinear effects, which I would like to add to the simple convolution model:
1. There is an upper limit of signal amplitude, which cannot be exceeded by summing up more and more impulse responses.
2. During the repetition of many impulse responses, a signal "undershoot" is building up, which causes a very long slowly recovering negative signal, that becomes apparent after the positive impulse responses are finished.
I hope this was clear, I would appreciate any ideas, references or pseudo code. Thanks!

回答 (1 件)

Image Analyst
Image Analyst 2012 年 11 月 22 日
You can convolve and then clip:
filteredImage = conv2(inputIMage, kernel);
clippedImage = filteredImage; % Initialize
clippedImage(filteredImage > clippingValue) = clippingValue; % Clip
Or you can write whatever kind of complicated filter you want and call it with nlfilter().
  2 件のコメント
Felix
Felix 2012 年 11 月 22 日
Thanks, I'll look into this. I assume this works just as well for the 1D case, which is what I am talking about.
Image Analyst
Image Analyst 2012 年 11 月 22 日
編集済み: Image Analyst 2012 年 11 月 22 日
Yes. There is a conv() function for 1D in base MATLAB. And nlfilter() is in the Image Processing Toolbox and 1D vectors/signals are also valid images.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeDigital Filter Analysis についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by