Hello,
The simplified setup is the following.
I have two superimposed decaying exponents with different but very close time constants. One of the decaying exponent is the result from a cross-talk, the other one is the signal of interest. The cross-talk decay is known. In the end, the goal is to determine the time constant of the signal of interest through curve fitting.
One way to separate the signal of interest is to simply subtract the known cross-talk decay from the combined signal. Easy but one needs to fiddle with counter, RAM where to store the cross-talk and start, stop indices during implementation.
Another approach is to remove the effect of the cross-talk by passing the combined signal through a filter, whose impulse response h(t) is the de-convolution of the known cross-talk.
(xTalk + Signal) * h(t) => Signal,
where * denotes convolution and h(t) = ifft( invert( fft(xtalk) ))
The implementation of the second approach is simple but there is a problem. The output of the above described process is not equal to Signal but to k x Signal, where k is a constant < 1. I really don't understand where k comes from the mathematics and how to ultimately calculate it. It is very important to understand the process so that I could effectively implement it in different circumstances.
Could please help me understand where k comes from and what is it due to?
Or maybe my thinking is not correct and I am doing something completely wrong.
Many thanks!
Fs = 1e6;
Ts = 1/Fs;
tEnd = 200e-6;
t = 0:Ts:tEnd-Ts;
tau1 = 2.9e-6;
tau2 = 3.2e-6;
exp1 = exp(-t/tau1);
exp2 = exp(-t/tau2);
expo = exp1 + exp2;
fftExp1 = fft(exp1);
inv = 1 ./ fftExp1;
deconvExp1 = fftshift(ifft(inv));
sanityCheck = conv(exp1, deconvExp1, 'same');
stem(sanityCheck)
result = conv(expo, deconvExp1(101:102), 'same');
result = result(2:end-1);
stem(result, 'r*'), hold on, stem(exp2(2:end-1), 'bo'), hold off
k = result ./ exp2(2:end-1)