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

5 vues (au cours des 30 derniers jours)
先生
先生 le 5 Mar 2024
Modifié(e) : Paul le 5 Mar 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?

Réponses (1)

John D'Errico
John D'Errico le 5 Mar 2024
Modifié(e) : John D'Errico le 5 Mar 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 commentaire
Paul
Paul le 5 Mar 2024
Modifié(e) : Paul le 5 Mar 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).

Connectez-vous pour commenter.

Catégories

En savoir plus sur Single-Rate Filters dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by