Main Content

fillgaps

自己回帰モデリングを使用してギャップを埋める

説明

y = fillgaps(x) は、信号 x に存在するすべての NaN を、残りのサンプルの順方向および逆方向の自己回帰近似から外挿される推定値で置き換えます。x が行列の場合、この関数は各列を独立チャネルとして扱います。

y = fillgaps(x,maxlen) は、推定に使用する最大サンプル数を指定します。単一の自己回帰過程では信号範囲全体を通しての信号の特徴付けに十分でない場合には、この引数を使用します。

y = fillgaps(x,maxlen,order) はギャップの復元に使用される自己回帰モデルの次数を指定します。

出力引数なしで fillgaps(___) を使用すると、元のサンプルと再構成された信号がプロットされます。この構文は、前の構文の任意の入力引数を受け入れます。

すべて折りたたむ

Fs=7418Hz でサンプリングされた音声信号を読み込みます。ファイルには、"MATLAB®" という単語を発声している女性の録音音声が含まれています。音声を再生します。

load mtlb

% To hear, type soundsc(mtlb,Fs)

ノイズの多い送信チャネルによって、信号の一部が修復できないほど破損した状況をシミュレートします。およそ 500 サンプルごとにランダムな長さのギャップを発生させます。再現可能な結果が必要な場合は、乱数発生器をリセットします。

rng default

gn = 3;

mt = mtlb;

gl = randi([300 600],gn,1);

for kj = 1:gn
    mt(kj*1000+randi(100)+(1:gl(kj))) = NaN;
end

元の信号と破損した信号をプロットします。表示しやすいように、破損した信号をオフセットします。ギャップのある信号を再生します。

plot([mtlb mt+4])
legend('Original','Corrupted')

% To hear, type soundsc(mt,Fs)

自己回帰過程を使用して信号を再構成します。既定の設定で fillgaps を使用します。再度オフセットを使用して、元の信号と再構成された信号をプロットします。再構成後の信号を再生します。

lb = fillgaps(mt);

plot([mtlb lb+4])
legend('Original','Reconstructed')

% To hear, type soundsc(lb,Fs)

米国の 1 セント銅貨を鋳造するために使用される型の深さの測定値を含むファイルを読み込みます。米国国立標準技術研究所で取得されたこのデータは、128 行 128 列のグリッド上でサンプリングされています。

load penny

25 の赤銅色 (copper) で色付けされた等高線を使って等高線図を描画します。

nc = 25;

contour(P,nc)
colormap copper
axis ij square

データに 10 行 10 列のギャップを 4 つ発生させます。破損した信号の等高線図を描画します。

P(50:60,80:90) = NaN;
P(100:110,20:30) = NaN;
P(100:110,100:110) = NaN;
P(20:30,110:120) = NaN;

contour(P,nc)
colormap copper
axis ij square

fillgaps を使用し、各列を独立したチャネルとして扱いながらデータを再構成します。各端点で、30 サンプルから外挿される 8 次の自己回帰モデルを指定します。再構成した結果の等高線図を描画します。

q = fillgaps(P,30,8);

contour(q,nc)
colormap copper
axis ij square

2 つの正弦波とローレンツ曲線の和で構成される関数を生成します。関数は 200 Hz で 2 秒間サンプリングされます。結果をプロットします。

x = -1:0.005:1;

f = 1./(1+10*x.^2)+sin(2*pi*3*x)/10+cos(25*pi*x)/10;

plot(x,f)

区間 (-0.8,-0.6)、(-0.2,0.1) および (0.4,0.7) にギャップを挿入します。

h = f;

h(x>-0.8 & x<-0.6) = NaN;
h(x>-0.2 & x< 0.1) = NaN;
h(x> 0.4 & x< 0.7) = NaN;

fillgaps の既定の設定を使用してギャップを埋めます。元の関数と再構成した関数をプロットします。

y = fillgaps(h);

plot(x,f,'.',x,y)
legend('Original','Reconstructed')

計算を繰り返しますが、今度は最大予測シーケンス長 3 サンプルとモデル次数 1 を指定します。元の関数と再構成した関数をプロットします。最もシンプルな場合、fillgaps は線形近似を実行します。

y = fillgaps(h,3,1);

plot(x,f,'.',x,y)
legend('Original','Reconstructed')

最大予測シーケンス長 80 サンプルとモデル次数 40 を指定します。元の関数と再構成した関数をプロットします。

y = fillgaps(h,80,40);

plot(x,f,'.',x,y)
legend('Original','Reconstructed')

モデル次数を 70 に変更します。元の関数と再構成した関数をプロットします。

y = fillgaps(h,80,70);

plot(x,f,'.',x,y)
legend('Original','Reconstructed')

非常に高いモデル次数では、有限精度に問題が生じることが多いため、再構成は不完全になります。

1 kHz で 1 秒間サンプリングされたチャープの 2 つのインスタンスで構成されるマルチチャネル信号を生成します。チャープの周波数は 0.3 秒の時点ではゼロで、線形に増加して最終的な値 40 Hz に達します。各インスタンスの DC 値は異なります。

Fs = 1000;
t = 0:1/Fs:1-1/Fs;
r = chirp(t-0.3,0,0.7,40);
f = 1.1;
q = [r-f;r+f]';

信号にギャップを発生させます。1 つのギャップは低周波領域を対象とし、もう 1 つのギャップは高周波数領域を対象とします。

gap = (460:720);
q(gap-300,1) = NaN;
q(gap+200,2) = NaN;

既定のパラメーターを使用してギャップを埋めます。再構成後の信号をプロットします。

y = fillgaps(q);

plot(t,y)

14 次の自己回帰モデルを信号に当てはめることによりギャップを埋めます。モデルを特定して各ギャップの端点に 15 サンプルを組み込みます。fillgaps の機能を使用して、再構成の結果をプロットします。

fillgaps(q,15,14)

推定に使用するサンプル数を 150 に増やします。モデル次数を 140 に増やします。

fillgaps(q,150,140)

入力引数

すべて折りたたむ

ベクトルまたは行列として指定される入力信号。x が行列の場合、その各列は独立チャネルとして扱われます。x には欠損サンプルを表す NaN が含まれます。

例: cos(pi/4*(0:159))+reshape(ones(32,1)*[0 NaN 0 NaN 0],1,160) は、サンプルの 40% を欠損した単一チャネルの行ベクトル信号です。

例: cos(pi./[4;2]*(0:159))'+reshape(ones(64,1)*[0 NaN 0 NaN 0],160,2) は、大きなギャップを含む 2 チャネル信号です。

データ型: single | double
複素数のサポート: あり

予測シーケンスの最大長。正の整数で指定します。maxlen を未指定のままにした場合、fillgaps は、これまでの順方向推定用の点と今後の逆方向推定用の点のすべてを使用して、自己回帰モデルを繰り返し当てはめます。

データ型: single | double

自己回帰モデル次数。'aic' または正の整数で指定します。order が無限の場合、または利用できるサンプルが十分にない場合、次数は切り捨てられます。order'aic' に指定するか、または未指定のままとした場合、fillgaps は赤池情報量基準を最小化する次数を選択します。

データ型: single | double | char | string

出力引数

すべて折りたたむ

再構成後の信号。ベクトルまたは行列として返されます。

参照

[1] Akaike, Hirotugu. "Fitting Autoregressive Models for Prediction." Annals of the Institute of Statistical Mathematics. Vol. 21, 1969, pp. 243–247.

[2] Kay, Steven M. Modern Spectral Estimation: Theory and Application. Englewood Cliffs, NJ: Prentice Hall, 1988.

[3] Orfanidis, Sophocles J. Optimum Signal Processing: An Introduction. 2nd Edition. New York: McGraw-Hill, 1996.

拡張機能

バージョン履歴

R2016a で導入