How to recover original raw signal from filtered results given filter coefficiencies?

5 visualizaciones (últimos 30 días)

Editada: Paul el 5 de Mzo. de 2024
Currently we've got some filtered ECG signal and we got the filters' parameter when it's been collected, including low pass, notch filter, FIR and IIR. Now we want to recover the 500Hz-sample-rate-ECG raw data. Is it possible and is there any efficient way of doing this, math is ok, and Python or MATLAB tool is better. Thanks.
Sliding window averaging filter is quite easy but as for IIR and Other FIR filters, what should we do?
0 comentariosMostrar -2 comentarios más antiguosOcultar -2 comentarios más antiguos

Iniciar sesión para comentar.

Respuestas (1)

John D'Errico el 5 de Mzo. de 2024
Editada: John D'Errico el 5 de Mzo. de 2024
Is it possible? NO. Sorry. Mathematics does not give you a trash can, where this operation can be undone. Information content was effectively discarded in the filtering process. You cannot recover what was thrown out.
The extent where you could recover any information, using what is effectively a deconvolution, you should expect that deconvolution is a noise amplifying process. as such, in double precision arithmetic you can never recover the original data. You would need infinite precision results, as well as infinite precision arithmetic.
1 comentarioMostrar -1 comentarios más antiguosOcultar -1 comentarios más antiguos
Paul el 5 de Mzo. de 2024
Editada: Paul el 5 de Mzo. de 2024
Sometimes, it is possible to exactly recover the input, even with double precision limitations.
b = conv([1 -0.5],[1 -0.3]);
a = 1;
x = [1:5 zeros(1,5)].';
y = filter(b,a,x);
[x filter(a,b,y)]
ans = 10×2
1 1 2 2 3 3 4 4 5 5 0 0 0 0 0 0 0 0 0 0
any(x - filter(a,b,y))
ans = logical
0
To the extent that floating point precision limits the accuracy of an inverse filtering operation for a case where one might reasonably expect that operation to work, such issues are true with any inverse operation. Here, ifft/fft doesn't exactly recover the original signal
rng(100);
x = rand(1,1000) + 1j*rand(1,1000);
norm(x - ifft(fft(x)))
ans = 6.7769e-15
but that's non an indictment of the ifft/fft functions.
Of course, in any realistic problem inverse filtering with floating point math won't exactly recover the original signal (no different than any forward/inverse operation in general). But that doesn't mean inverse filtering will always be a fruitless task (though in some cases it will).

Iniciar sesión para comentar.

Categorías

Más información sobre Single-Rate Filters en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by