Qual è il miglior filtro da utilizzare per rimuovere il rumore da un segnale ECG con matlab?MATLAB: filtro segnale ECG rumoroso
risposta
Se si ha accesso al Signal Processing Toolbox, quindi controllare la Savitzky-Golay filter, vale a dire la funzione sgolay
. C'è una demo di accompagnamento, basta eseguire sgolaydemo
.
Il seguente è un esempio per mostrare i vari modi in cui è possibile applicare il filtro e il de-noising a un segnale. Nota alcune di queste funzioni richiede alcune caselle degli strumenti per essere presenti:
% load ecg: simulate noisy ECG
Fs=500;
x = repmat(ecg(Fs), 1, 8);
x = x + randn(1,length(x)).*0.18;
% plot noisy signal
figure
subplot(911), plot(x), set(gca, 'YLim', [-1 1], 'xtick',[])
title('noisy')
% sgolay filter
frame = 15;
degree = 0;
y = sgolayfilt(x, degree, frame);
subplot(912), plot(y), set(gca, 'YLim', [-1 1], 'xtick',[])
title('sgolayfilt')
% smooth
window = 30;
%y = smooth(x, window, 'moving');
%y = smooth(x, window/length(x), 'sgolay', 2);
y = smooth(x, window/length(x), 'rloess');
subplot(913), plot(y), set(gca, 'YLim', [-1 1], 'xtick',[])
title('smooth')
% moving average filter
window = 15;
h = ones(window,1)/window;
y = filter(h, 1, x);
subplot(914), plot(y), set(gca, 'YLim', [-1 1], 'xtick',[])
title('moving average')
% moving weighted window
window = 7;
h = gausswin(2*window+1)./window;
y = zeros(size(x));
for i=1:length(x)
for j=-window:window;
if j>-i && j<(length(x)-i+1)
%y(i) = y(i) + x(i+j) * (1-(j/window)^2)/window;
y(i) = y(i) + x(i+j) * h(j+window+1);
end
end
end
subplot(915), plot(y), set(gca, 'YLim', [-1 1], 'xtick',[])
title('weighted window')
% gaussian
window = 7;
h = normpdf(-window:window, 0, fix((2*window+1)/6));
y = filter(h, 1, x);
subplot(916), plot(y), set(gca, 'YLim', [-1 1], 'xtick',[])
title('gaussian')
% median filter
window = 15;
y = medfilt1(x, window);
subplot(917), plot(y), set(gca, 'YLim', [-1 1], 'xtick',[])
title('median')
% filter
order = 15;
h = fir1(order, 0.1, rectwin(order+1));
y = filter(h, 1, x);
subplot(918), plot(y), set(gca, 'YLim', [-1 1], 'xtick',[])
title('fir1')
% lowpass Butterworth filter
fNorm = 25/(Fs/2); % normalized cutoff frequency
[b,a] = butter(10, fNorm, 'low'); % 10th order filter
y = filtfilt(b, a, x);
subplot(919), plot(y), set(gca, 'YLim', [-1 1])
title('butterworth')
So che questa è una vecchia risposta, ma tieni presente che esistono intervalli di frequenza molto specifici che devono essere preservati per l'accuratezza diagnostica di un ECG di superficie. In particolare, 0,05-1 Hz deve essere preservato per i segmenti ST a massima fedeltà e forse un passa-basso di 40 Hz per gli adulti e 150 Hz per i pedali nel resto dell'ECG (È consigliabile anche un filtro a intaglio appropriato per la frequenza di linea) . Non ho familiarità con il FIR di Savitzky-Golay, ma è necessario fare attenzione per garantire che conservi frequenze importanti nell'ECG. – user7116
+1 grazie per l'informazione. Vorrei sottolineare che non ho molta conoscenza del dominio dei segnali ECG, la risposta di cui sopra era semplicemente da una prospettiva di elaborazione del segnale pura (elencando varie funzioni che si potrebbero usare per filtrare un segnale in generale). La verità è che non sono così familiare con il filtro SG, l'ho menzionato perché l'ho visto spesso nella letteratura relativa all'ECG: http://www.uap-bd.edu/jcit_papers/vol-1_no- 2/IJCIT-110126.pdf – Amro
Carta pulita, grazie per il riferimento! Un confronto morfologico dell'ECG risultante è il fattore più importante quando si considerano i filtri. Tuttavia, per il semplice monitoraggio ambulatorio (che molti chiamerebbero "interpretazione del ritmo") si ha un'ampia latitudine nella selezione del filtro come si è in Ok con qualche distorsione del segnale. – user7116
Due filtro strumenti di progettazione/demo che si consiglia di controllare:
FDATool nel Signal Processing Toolbox (se hai accesso ad esso).
Analog Filter Design Toolbox da James Squire su MathWorks File Exchange. Sembrano esserci delle simulazioni per i dati ECG relativi ai fencing inclusi nella toolbox.
Questi dovrebbero darvi la possibilità di provare diversi filtri e parametri di filtro per vedere come si comportano con i dati ECG/ECG.
Quando si scelgono i filtri, è in genere necessario un passa-alto non superiore a 0,05 Hz per garantire l'alta fedeltà dei segmenti ST per gli usi diagnostici dell'ECG. I filtri passa-basso intorno a 40 Hz sono Ok per gli adulti, 150 Hz per i peds e se desideri vedere gli impulsi del pacemaker, 150-200Hz è bello avere a disposizione. – user7116
Che cos'è un "heart.wav"? E 'un ECG? – gnovice
sì. voglio analizzare i suoni del cuore – kristia
se per "suono del cuore" intendevi il segnale ECG, quindi dovresti probabilmente ripetere la domanda in quanto tale .. – Amro