# Deconvolution with unknown impulse response

This is not a duplicate of Filter secondary bounces of a pulse signal because in that question, a convolution model is finally not appropriate, whereas here, the question is about convolution.

Given the signal y below, is there a way to recover the original signal x (before convolution), without knowing the impulse response h?

Of course, additional hypotheses are required to avoid having an infinity of solutions. In the example below, we could reasonably assume that:

• a) x is just one Gaussian

• b) or, weaker assumption: x has only one local maximum (for the case x is a bell curve, but not Gaussian)

• c) or another possibility: h[i] != 0 only if i = 20, 40, 60, 80, 100, ... (reasonable here by looking at the y plot and the period of the bounces)

Can we conclude with an algorithmic solution, in one of these 3 cases?

import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import norm
x = np.zeros(200)
x[:50] = norm.pdf(np.linspace(-5, 5, 50))
h = np.zeros(120)
h[0] = 1
h[20] = 0.2
h[40] = 0.1
h[60] = 0.05
h[80] = 0.02
h[100] = 0.01
y = np.convolve(x, h)
plt.subplot(211)
plt.plot(x)
plt.subplot(212)
plt.plot(y)
plt.show()


What methods are there for such deconvolution problems,

None for the general case (without additional information). We can easily see this by looking at the frequency domain

$$y(t) = h(t)*x(t) \leftrightarrow Y(\omega) = H(\omega) \cdot X(\omega)$$

This is equivalent the the question "I know that $$a\cdot b = 23.78$$ what are $$a$$ and $$b$$?" There is an infinite amount of possible solutions.

and which additional assumptions would be needed to get a solution

There is no general answer here either. You can always try some heuristics but how far that gets you will depend a lot in your specific.

In your example you could probably squint at the signal and identify "this looks like a repeated Gaussian with a decay on the repeats". But there are infinite ways to generate the same output. A few examples

1. One Gaussian with a six tap sparse FIR
2. A once repeated Gaussian with a three tap FIR
3. A twice repeated Gaussian with a two tap FIR
4. The output signal as is with a unit impulse FIR

You have no way of telling which one it is, so you need some way to resolve the ambiguity.

• Thanks for stating what I've been trying to explain so nicely + kindly! +1. I'll add that your 1-4 are results of models (or models themselves), just for OP to reconcile my terminology with yours. Commented Mar 28 at 13:20
• Thank you Hilmar. Yes of course, there is an infinity of solutions, I totally agree with your examples, The question is: are there any "reasonable" assumptions that allow us to conclude? Example: would there be an algorithmic solution if we assume that a) x is just one Gaussian, how would you do in this case? b) weaker assumption x has only one local maximum? Commented Mar 29 at 9:39
• I edited the question @Hilmar to make the necessity of these assumptions clearer. Commented Mar 29 at 9:50

The problem you raised is called Blind Deconvolution.

In the general case indeed it is an ill posed problem.
Yet with a strong prior (Model for the signals / filters) you can get a good results.

If you model the signal as a linear combination of shifted Gaussians it can be solved iteratively (Though not globally) by solving 2 sub problems:

1. Given h estimate x.
2. Given x estimate h.

You can solve them for different k where k is the number of combinations.
The problem for x will be non convex problem as we need to estimate the shifts.

You may have a look at a similar problem very well known in the field of Image Processing: How to Solve Blind Image Deblurring with Total Variation (TV) Prior Using ADMM.

• Thank you for your answer @Royi. More precisely, would you have a method in mind, in a few steps, for the example signal of my question, if we assume x is just one gaussian? Then I'll try to turn it into an algorithm and I'll post it. Commented Mar 29 at 17:38
• @g6kxjv1ozn, If it is a single Gaussian and unknown filter then the parameters of the problem are: Kernel, Shift, Scale. Just build the problem is least squares and solve for each parameter iteratively assuming the other 2 are known: Kernel -> Deconvolution, Shift -> Matched Filter, Scaling -> Single Variable LS.
– Royi
Commented Mar 30 at 6:49