2

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?

enter image description here

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()
g6kxjv1ozn
  • 529
  • 1
  • 3
  • 13

2 Answers2

3

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.

Hilmar
  • 44,604
  • 1
  • 32
  • 63
  • 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. – Marcus Müller Mar 28 '24 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? – g6kxjv1ozn Mar 29 '24 at 09:39
  • I edited the question @Hilmar to make the necessity of these assumptions clearer. – g6kxjv1ozn Mar 29 '24 at 09:50
0

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.

Royi
  • 19,608
  • 4
  • 197
  • 238
  • 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. – g6kxjv1ozn Mar 29 '24 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 Mar 30 '24 at 06:49