Deconvolution of a polynomial and exponential function

Hello,
Its been a while since I've been using matlab so I am having trouble with the input parameters of deconv() function.
I would like to deconvolute a function I have gained with polyfit from set of data with a function W=exp(x-exp(x)). If the inputs for deconv() should be coefficients of polynomials, then how am I to input W(x)?
The other function D(x) is already in that format.
Polyfit function is not making much sense for the exponential function.

3 Comments

Jon
Jon on 30 Sep 2020
Edited: Jon on 30 Sep 2020
In general the process of deconvolution can be thought of as an inverse problem in which we wish to recover some original input signal, from the output signal of a system where we have a model of how the input is transformed into the output
The MATLAB decconv function is useful for linear discrete time filtering problems (Please see details below) It sounds like you are trying to perform some other type of inverse problem, which can not be handled using deconv. If you further describe exactly what problem you are trying solve what is your input signal, how is it transformed to an output and how do you propose to "invert" this process then you may be able to get further suggestion for how to proceed.
The MATLAB deconv function (I think this is what you are referring to by "deconvolute") simply does polynomial long division. It can be applied in the above sense to solve an inverse problem in the case of FIR (finite impulse response) discrete time filters. The response of the FIR filter to a finite length input signal can be found in the time domain by convolving the signal with the FIR filter's impulse response. Equivalently we can find the z-transforms of the input signal and the filter impulse response. These are both polynomials in z. Since multiplication in the z-domain is equivalent to convolution in the time domain the filter response, in the z domain can be found by multiplying the inputs signal's z transform polynomial representation and the filter's z-transform polynomial representation. The inverse, deconvolution, problem can then be solved by dividing the z-transform polynomial representation of the output by the z-transform of the filters impulse response. Thus we use MATLAB's deconv function to perform the necessary polynomial long division.
Thank you Jon.
I am trying to analyze temperature data set that I have measured according to a research paper that describes how to gain structure of a material from its thermal step excitation response. In the paper the derivative of this response is deconvoluted with a "smoothing function" W. The idea is to gain time-constant spectra for the response.
In the paper the actual method for deconvolution is not described however. I was hoping that it would be simple matlab function that could do this for me. I dont remember much of my Fourier analysis but I remember that convolution could be considered by two signals slid ontop of each other. So deconvolution would be just the opposite function.
The paper just ends up in a solution that the response function can be described with a convolution-type integral. Then from that it gets the convolution equation
D(x)=R(x) * W(x),
where D(x) and W(x) are known and R(x) is the wanted time-constant spectra.
Do you have ideas on how I could achieve this time-constant spectra using matlab?
have you finished this problem? I met this as well as I have no idea of determining the baysian deconvolution iterative form? If YOU finished this, could you help me cuz I would like to pay for this help.

Sign in to comment.

Answers (3)

Here are the figures I'm trying to deconvolve.

1 Comment

Your attachments should probably be moved to a comment as they are not yet an answer

Sign in to comment.

Your overview of what you are trying to do is helpful, but I think a lot more details are needed to help with the MATLAB implementation.
I poked around a little just to learn more about this problem. The problem looks quite involved. In case it helpful here is reference which I think addresses your problem
Manueal Carmona et al, A Time-Domain Method for the Analysis of Thermal Impedance Response Preserving the Convolution Form, IEEE Transactions on Components and Packaging Technology, Vol 22 No. 2. pp 238-244, June 1999
It further references specific discrete time algorithms in:
S. Marco, et al,Improved multi-exponential transient spectroscopy by iterative deconvolution, Proc. IMTC98 Instrum Meas. Tech. Conf, St Paul MN, MAy 1998, pp. 670-674
S.Marco, et al,A novel time-domain method to analyze multicomponent exponential transients meas Sci Technol, vol 6, pp 135-142, 1995
Using these references or some others if you find something (perhaps more recent) that is better,I would suggest you try implementing the algorithm in MATLAB. If you get stuck, then please post what you have tried and what problems your are having (error messages, how to implement a specific step)

6 Comments

Thank you again Jon. I actually found that there are atleast a few ways to do this step in the analysis. I found that the Bayes iteration which is based on probability theory is the most resilient to noise and Im going to try and implement that.
This method iterates the time constant spectrum many times using convolution and correlation integral with the response and the smoothing functions.
This method is described here:
Enhancing reliability with thermal transient testing, V.Székely, 2002
I hope the implementation wont take too much time and I can move on with the analysis. If I have problems I continue with this thread. Thanks again!
I tried implementing this Bayesian iteration solution for the deconvolution but I'm getting problems with matrix dimensions. I know why they happen but I dont know how the program should be implemented.
I got the data for input matrices that I know to be correct and from them I know what I should be getting as an output of the iteration. But with every iteration the matrix size doubles. There should be around 1000 iterations so this is a problem.
I have the data file and plots of what I should be getting in the attachment.
I also tried deconvolution with fft to Fourier plane then division of the signals and ifft back to time domain. This gave some kind of spectrum but I think it is clearly wrong... I think the Bayesian approach would be better if I understood how to use it.
I've tried the following with Bayes:
T=csvread('FittedDeriv.csv');
D=T(:,2);
t=T(:,1);
W=exp(t-exp(t));
q=D./W;
q(isnan(q))=0;
[R,i]=xcorr(W,D./W);
R(isnan(R))=0;
f=1000;
for i=1:f;
R=R.*(xcorr(W,(D./(conv(W,R)))));
end
Bayesian iteration should work so that:
R_n+1=R_n*(xcorr(W, D / conv(W,R_n))
where
R_0=xcorr(W,D/W)
I'm not quite clear on why you use both xcorr and conv. They are closely related, but is there a reason why you mix them?
Also, your code above does not run at all. There is a matrix dimension mismatch on the line
R=R.*(xcorr(W,(D./(conv(W,R)))));
There is at least a problem on that line because D is a length 101 vector and conv(W,R) is a length 301 vector, so it is not possible to do the element by element division
D./(conv(W,R))
as the numerator has 101 elements and the denominator has 301
By the way, to format your code nicely you can use the CODE button on the MATLAB answers toolbar
I got the same trouble as you, have you solved it?
Aku, Jon and Larry,
Did you ever get a solution/closure on this deconvolution problem?
We are also dealing with the exact same problem and our 1D Richardson deconvolution cannot resolve the expected peaks. I do get the 3 peaks on both real space and Transform approaches, but neither the two approaches agree (they should) nor the peaks are on right places (should have three peaks at ln(10) = 2.3026, ln(1)=,0 and ln(0.1)=-2.3026.
Any ideas and feedback are welcome.
for my MAtlab code and other useful bits see my comemnt below:
https://www.mathworks.com/matlabcentral/answers/1669824-fast-fourier-transform-to-perform-deconvolution-with-log-time#comment_2772489
Sorry, I think the thread above is as far as I got with this.

Sign in to comment.

I got the same trouble as you, have you solved it?

1 Comment

I think you accidently posted a question as an answer.

Sign in to comment.

Categories

Asked:

on 30 Sep 2020

Commented:

on 6 Sep 2024

Community Treasure Hunt

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

Start Hunting!