2015-08-24 3 views
1

Je travaille avec un signal ECG et je souhaite supprimer le bruit de dérive. En Matlab il fonctionne très bien ce code:Signal ECG filtre avec ondel

[c, l]=wavedec(ecgsignal,8,'coif5'); 
a9=wrcoef('a',c,l,'coif5',8); 

où ecgsignal est le signal original avec le bruit et a9 est le signal filtré. Je suis en train de faire la même en python avec ce code:

coeffs=pywt.wavedec(ecgsignal,'coif5', level=8) 
renc=pywt.waverec(coeffs, 'coif5') 

mais le signal reconstruit, renc, a le bruit. Quelqu'un peut-il m'aider à comprendre ce qui ne va pas? J'utilise les mauvaises commandes de la bibliothèque PyWavelet?

+0

On dirait que vous nourrissez tous les coefficients décomposées dans la fonction de reconstruction. –

+1

J'allais commenter la même chose. Je ne suis pas habitué à travailler avec des ondelettes, seulement avec FFT, mais il semble que vous devriez reconstruire le signal avec seulement ** quelques coefficients sélectionnés **, pas tous. –

+0

Comme l'exemple de la documentation de PyWavelet: coeffs = pywt.wavedec ([1,2,3,4,5,6,7,8], 'db2', niveau = 2) print pywt.waverec (coeffs, 'db2') c'est tous les coefficients. –

Répondre

2

Vous déconstruisez simplement le signal puis reconstruisez le signal. Vous n'avez pas effectué l'étape de seuillage de clé qui effectue réellement le filtrage de signal que vous recherchez.

Un aperçu de base des étapes nécessaires esquissa en python:

// DWT 
coeffs = pywt.wavedec(ecgsignal,'coif5', level=8); 
// Compute threshold something like this. You need an estimate 
// of the noise sigma. 
threshold=noiseSigma*sqrt(2*log2(ecgsignal.size)); 
// Apply the threshold. Pseudocode here. 
newcoeffs = pywt.thresholding.soft(coeffs , threshold); 
// IDWT 
renc = pywt.wavedec(newcoeffs , 'coif5');    
0

Actuellement, pywt n'a pas mis en œuvre wrcoef fonction équivalente encore. Mais vous pouvez toujours décomposer le signal multiniveau 1-D puis reconstruire ses composants séparément.

https://stackoverflow.com/a/47591523/2845274