DSP System Toolbox

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

胎児心電図への適応ノイズ キャンセリング (ANC) の適用

この例では、適応ノイズ キャンセルを使用する適応フィルターにより、ノイズを除去する方法を示します。

Author(s): Scott C. Douglas

適応ノイズ キャンセリングにおいて、測定信号 d(n) には次の 2 つの信号が含まれます。目的の不明な信号 v(n) と干渉信号 u(n)。ここでの目的は、干渉信号と高い相関関係のある基準信号 x(n) を使用して、測定信号から干渉信号を除去することです。ここで取り上げる例は、胎児心電図への適応フィルターの適用です。この場合、母体の心拍信号が胎児の心拍センサー信号から除去されます。この例は、Widrow らによる『Adaptive noise canceling:Principles and applications』(Proc.IEEE、vol. 63、no. 12、pp.1692 ~ 1716、1975 年 12 月) を基にしています。

母体心拍信号の作成

この例では、母体と胎児の両方の心電図の形状をシミュレーションします。以下のコマンドは、4000 Hz のサンプルレートで母体の心拍が生成する心電図信号を作成します。この信号の心拍は毎分約 89 回で、信号のピーク電圧は 3.5 ミリボルトです。

x1 = 3.5*ecg(2700).';
y1 = sgolayfilt(repmat(x1,69,1),0,21);
Hmhb = dsp.SignalSource(y1,'SamplesPerFrame',100,...
    'SignalEndAction','Cyclic repetition');

胎児心拍信号の作成

胎児の心拍は母体の心拍よりも顕著に速く、毎分 120 ~ 160 回の範囲です。胎児心電図の振幅も母体心電図の振幅よりも弱くなります。以下の一連のコマンドは、毎分 139 回の心拍と 0.25 ミリボルトのピーク電圧に相当する心電図信号を作成します。

x2 = 0.25*ecg(1725).';
y2 = sgolayfilt(repmat(x2,108,1),0,17);
Hfhb = dsp.SignalSource(y2,'SamplesPerFrame',100,...
    'SignalEndAction','Cyclic repetition');

測定された母体心電図

母体の心電図信号は、母体の胸部から取得されます。このタスクにおける適応ノイズ キャンセラーの目的は、胎児の心電図信号から母体の心拍信号を除去することです。このタスクを実行するには、母体の心電図から生成された基準信号が必要です。胎児の心電図信号と同様に、母体の心電図信号には加法性広帯域ノイズが含まれます。

mnoise = 0.02*randn(size(y1));
Hmn = dsp.SignalSource(mnoise,'SamplesPerFrame',100);

Hts = dsp.TimeScope('SampleRate',4000,'YLimits',[-4,4],'TimeSpan',2.5);
for k = 1:length(y1)/Hmhb.SamplesPerFrame
    x = step(Hmhb) + step(Hmn);
    step(Hts,x);
end

測定された胎児心電図

母体の腹部で測定された胎児心電図信号は、通常、腹部の胸腔から伝播する母体の心拍信号よりも弱いものです。この伝播パスを 10 のランダムな係数で線形 FIR フィルターとして記述します。さらに、少量の無相関ガウス ノイズを追加して、測定内の広帯域ノイズ発生源をシミュレーションします。この測定信号を見て、胎児の心拍を判定できるでしょうか。

Wopt = [0 1.0 -0.5 -0.8 1.0 -0.1 0.2 -0.3 0.6 0.1];
Hd = dsp.FIRFilter('Numerator',Wopt);
fnoise = 0.02*randn(size(y2));
Hfn = dsp.SignalSource(fnoise,'SamplesPerFrame',100);

release(Hts);
for k = 1:length(y2)/Hfhb.SamplesPerFrame
    d = step(Hd,step(Hmhb)) + step(Hfhb) + step(Hfn);
    step(Hts,d);
end

適応ノイズ キャンセラーの適用

このタスクを実行するために、適応ノイズ キャンセラーでは、ほとんどの適応アルゴリズムを使用できます。例をシンプルにするために、15 の係数と 0.00007 のステップ サイズを含む最小平均二乗 (LMS) 適応フィルターを使用します。これらの設定で、適応ノイズ キャンセラーは、適用後数秒で適切に収束します。これは、この特定の診断アプリケーションにおいて適切な期間といえます。

Hlms = dsp.LMSFilter('Length',15,'StepSize',0.00007);

胎児心拍信号の復元

適応フィルターの出力信号 y(n) には、ここでの最終的な目的信号ではない母体の推定心拍信号が含まれます。システムが収束した後に誤差信号 e(n) に残っているのは、胎児の心拍信号の推定と残差測定ノイズです。誤差信号を使用して胎児の心拍を推定できるでしょうか。

release(Hts); release(Hmn); release(Hfn); reset(Hd);
Hts.YLimits = [-0.5,0.5];
for k = 1:length(y2)/Hfhb.SamplesPerFrame
    mhb = step(Hmhb);
    d = step(Hd,mhb) + step(Hfhb) + step(Hfn);
    x = mhb + step(Hmn);
    [~,e] = step(Hlms,x,d);
    step(Hts,e);
end