「fecg.mat」という名前のファイルに格納されたdoubleの1行10000列の行列があります。マトリックスは、記録されたFECG信号の大きさを表します。
時間に対してプロットしました(0から9999):
ベースラインを削除するには、ハイパスフィルターを使用できるかどうか疑問に思います。適切なフィルターを設計するにはどうすればよいですか?
PS信号処理は私の専門分野ではありません。離散時間領域信号をフィルタリングする方法がわかりません。
「fecg.mat」という名前のファイルに格納されたdoubleの1行10000列の行列があります。マトリックスは、記録されたFECG信号の大きさを表します。
時間に対してプロットしました(0から9999):
ベースラインを削除するには、ハイパスフィルターを使用できるかどうか疑問に思います。適切なフィルターを設計するにはどうすればよいですか?
PS信号処理は私の専門分野ではありません。離散時間領域信号をフィルタリングする方法がわかりません。
回答:
目的の信号の周波数成分がわかっている場合は、その周波数よりいくらか低くハイパスできます。2 Hzを超える信号にのみ関心があり、サンプルレートが100 Hzであるとすると、次のように実行できます。
[b,a] = butter(3,2/(100/2),'high');
outputData = filter(b,a,inputData);
これは、3次バターワースハイパスを使用する特定の例です。
使用するフィルターは、実際には特定のアプリケーションによって異なります。-フィルタが粗すぎると、探している情報が削除される可能性があります。
広く使用されているPan-Tompkinsアルゴリズム(QRS検出用)は、ECGデータのベースライン除去用のフィルターを指定します。ただし、このフィルターがアプリケーションに適しているかどうかを、提供された限られた情報から判断するのは困難です。より正確な回答について詳しく説明してください。
LPF
ように私は信号を通過させた。しかし、私が得たベースラインは遅れました。ベースラインと元の信号を一致させるためにそれらを減算するには、それらの1つをシフトする必要がありますか、それともより良い方法がありますか?
50Hzのベースラインノイズを除去するために、適応フィルターを使用することをお勧めします。lms適応フィルターはうまくいくでしょう:
xk = sin(2*pi*50*t1);
dk = ecg1;
bk = [0 0 0]; %Gewichteter Vektor (FIR Koefizienten mit Anfangswert 0)
%Die Werte ändern sich ständig bis sich
%das System adaptiert hat
mu = .1; %Konvergenzgeschwindigkeit des Algorithmes.
%( 0 < mu < 1/(20*(L+1)*Potenz_xk); L Filterorder)
Pot_x=mean(xk.*xk);
%mu=1/(100*(L+1)*Pot_x); % Konvergenzgeschwindigkeit des Algorithmus.
% Bei den Prädiktiven Adaptiven filter
% gilt die Potenz nicht
yk=zeros(size(xk)); % Ausgangssignal zum Zeitpunkt t=0 von der FIR.
ek=zeros(size(xk)); % Fehlersignal zum ZEitpunkt t=0.
%Algorithmus für FIR Adaptiven Filter:
for n = 3:(punkte - 1) %Arranca en 3 porque tiene que almacenar las dos muestras anteriores y la actual (FIR de 2 coeficientes)
xkn = [xk( n ) xk( n - 1 ) xk( n - 2 )]; %Vector niésimo (2 posiciones porque son dos coeficientes).
yk(n) = xkn * bk'; %Resultado parcial de la salida por el vector bk traspuesto.
ek(n) = dk(n) - yk(n); %Señal de error parcial.
bk = bk + 2*mu*ek(n)*xkn; %Actualización instante a instante del vector de pesos.
end %Ende des adaptiven Algorithmes.
Eje1 = figure(1);
set(Eje1,'name','Übung 1: FIR Adaptive Filter','position',[10 10 900 650]);
subplot( 2, 1, 1 );
plot( t1, xk, 'r');
xlabel('n');
ylabel('EKG mit Rauschen');
title('Eingangssignal: Bewegungsartifakt zu filtern');
subplot( 2, 1, 2 );
plot( t1, ek, '-k');
xlabel('n');
ylabel('d[k] - y[k]');
title('Ausgangssignal: EKG ohne Rauschen');