Deconvolution using FFT - a classical problem

129 views (last 30 days)
Vijayananda
Vijayananda on 19 Feb 2026 at 17:06
Commented: Vijayananda 42 minuter ago
Hello friends, I am new to signal processing and I am trying to achive deconvolution using FFT. I have an input step function u(t) applied to an impulse response given by . The output function is . I am trying to convolve g and u to get y as well as deconvolve y and g to get u. However, I quite cannot get the right answers. I understand that the deconvolution process is ill-posed and I have to use some kind of normalization process but I am lost. I also apply zero padding to twice the length of the input signals. Any sort of guidance will be appreciated.
After using deconvolution in the fourier domain:
Y = fft(y)
G = fft(g)
X = Y./G
x = ifft(X)
I am getting an output shown below:
Which is not the expected outcome. Can someone shead light on what is happening here? Thank you.

Answers (2)

Matt J
Matt J on 19 Feb 2026 at 20:20
Edited: Matt J on 19 Feb 2026 at 20:49
dt=0.001;
N=20/dt;
t= ( (0:N-1)-ceil((N-1)/2) )*dt; %t-axis
u=(t>=0);
g=3*exp(-t).*u;
y=conv(g,u,'same')*dt;
Y = fft(y);
G = fft(g);
X = Y./G;
x = fftshift(ifft(X,'symmetric')/dt);
figure;
sub=1:0.3/dt:N;
plot(t,3*(1-exp(-t)).*u,'r.' , t(sub), y(sub),'-bo');
xlabel t
legend Theoretical Numeric Location northwest
title 'Output y(t)'
figure;
plot(t, u,'r.' , t(sub), x(sub),'-bo'); ylim([-1,4])
title Deconvolution
xlabel t
legend Theoretical Numeric Location northwest
  14 Comments
Matt J
Matt J on 21 Feb 2026 at 20:45
Edited: Matt J on 21 Feb 2026 at 21:16
But the time domain signals of both Z1 and T looks the same.
No, they do not. If you apply the inverse FFT to Z1 without truncating to the interval , you will see that the convolution result has a decaying part in . For good measure, I also demonstrate the agreement of this with time-domain convolution in the code below.
I understand that the interval is not of physical interest for you, but unfortunately you are not free to ignore or change to zero the values that reside there if you still want the Fourier convolution duality theorem to hold. Those values contribute to the Fourier transform of conv(g,q).
To put it another way, recall that the Fourier Transform is originally an integral from to . It only reduces to an integral on a finite interval when the values of the signal are zero outside that interval, but conv(g,q) is not zero outside of . Ultimately, i think you will need to consider non-Fourier deconvolution methods, like I proposed in my other answer.
clc
clearvars
dt = 1e-6;%sampling period
df = 1/dt;%sampling frequency
t = 0:dt:1-dt;%Time vector
qmax = 1e5;%W/m2 maximum step heat flux
alpha = 3.56E-6;%m2/s diffusivity
k = 15; %W/m-k thermal conductivity
x = 1e-5;%m junction depth
DeltaT = (((2*qmax)/k).*sqrt((alpha*t)/pi).*exp((-x*x)./(4*alpha*t)))-(((qmax*x)/k).*(1-erf(x./(2*sqrt(alpha*t)))));
g = sqrt(alpha./(pi*k*k.*t)).*exp((-x*x)./(4*alpha.*t));
g(1) = 1e-9;%to replace NaN at t = 0
q = qmax*ones(length(t),1)';
n = length(DeltaT);
m = length(g);
%Zero padding to get linear convolution from circular convolution
qpad = paddata(q,n+m-1);%padded heat flux
gpad = paddata(g,n+m-1);%padded impulse response
temppad = paddata(DeltaT,n+m-1);%padded temperature
% Perform fourier transform
G = fft(gpad);
T = fft(temppad);
Q = fft(qpad);
% Convolve heat flux and impulse response
Z1 = dt.* G.*Q;
% Back to time domain
z = (ifft(Z1));
%znew = z(1:length(t));
tlong=(0:numel(z)-1) *dt;
convgq=conv(g,q,'full')*dt;
skip=round(numel(z)/30);
plot( tlong , z, 'b-', tlong(1:skip:end),convgq(1:skip:end),'ro')
legend('Fourier Convolution','Time Domain Convolution',Location="northeast")
Vijayananda
Vijayananda on 21 Feb 2026 at 21:24
@Matt J Yes true Matt. Thank you. Yes there is a decay in temperature outside the interval [0 1] for the analytical temperature i used. However, I do not have any measured temperature data outside the interval [0 1] which means I have to use the measured temperature data with zero padding. Even if I take data beyond 1, the temperature keeps going up.
So does this mean, I have to use another method for finding the heat flux ?

Sign in to comment.


Matt J
Matt J on 21 Feb 2026 at 0:38
Edited: Matt J on 21 Feb 2026 at 0:40
Since you are trying to deconvolve in the presence of noise, it would make sense to use a regularized deconvolver like deconvreg or deconvwnr. These are from the Image Processing Toolbox, but there is no reason they wouldn't apply to one-dimensional signals as well.
  13 Comments
Matt J
Matt J ungefär 3 timmar ago
Edited: Matt J ungefär 3 timmar ago
If the heat flux is typically a rapid spike, then the temperature response will also be short and rapid. It doesn't make sense to be slaving over the case of a step input, which is completely different from that.
The approach I've already given you should work well for a short 1 millisecond input pulse, even with dt=1e-6, because you don't need more than N=1000 sample points to cover a 1 millisecond heat flux pulse with dt=1e-6. You also don't need to use the full duration of acquired temperature response data if you only want to reconstruct 1000 points. You just need the first millisecond.
Vijayananda
Vijayananda 42 minuter ago
Hello @Matt J. Yes you are right. The refence case of step heat input leading to an ever increasing temperature increase is an unbounded signal. DFT requires a bound signal which is why I was not able to deconvolve the heat flux back. It all makes sense now. Thank you.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!