ドキュメンテーション

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

resample

均一または不均一なデータを新しい固定レートでリサンプリング

説明

y = resample(x,p,q) は、元のサンプルレートの p/q 倍で入力シーケンス x をリサンプリングします。x が行列の場合、resamplex の各列を独立したチャネルとして扱います。resample はアンチエイリアシング FIR ローパス フィルターを x に適用し、フィルターによって生じる遅延を補正します。

y = resample(x,p,q,n) は、2 × n × max(p,q) 次のアンチエイリアシング フィルターを使用します。

y = resample(x,p,q,n,beta) では、ローパス フィルターの設計に使用するカイザー ウィンドウの形状パラメーターを指定します。

y = resample(x,p,q,b) は、b で指定したフィルター係数を使用して x をフィルター処理します。

[y,b] = resample(x,p,q,___) は、リサンプリングの際に x に適用されるフィルターの係数も返します。

y = resample(x,tx) は、ベクトル tx で指定した時点でサンプリングされた信号の値 x をリサンプリングします。この関数は、tx と同じ端点とサンプル数をもつ、間隔が均一な時点のベクトルに x を線形内挿します。NaN は欠損データとして扱われ、無視されます。

y = resample(x,tx,fs) は、ポリフェーズ アンチエイリアシング フィルターを使用し、fs で指定した一定のサンプルレートで信号をリサンプリングします。

y = resample(x,tx,fs,p,q) は、入力信号を (p/q)/fs のサンプル間隔で中間等間隔グリッドに内挿します。この関数は、次に p によってアップサンプリングするためおよび q によってダウンサンプリングするために結果をフィルター処理します。これにより fs の最終サンプルレートが得られます。最良の結果を得るには、fs × q/p が少なくとも x の最も高い周波数成分の 2 倍の大きさであるようにします。

y = resample(x,tx,___,method) は、内挿法を、このグループの前の構文の任意の引数とともに指定します。内挿法は 'linear''pchip' または 'spline' のいずれかです。

メモ: x がゆるやかに変化しない場合は、'pchip' 内挿法で interp1 を使用することを検討してください。

[y,ty] = resample(x,tx,___) は、リサンプリングされた信号に対応する時点を ty に返します。

[y,ty,b] = resample(x,tx,___) は、アンチエイリアシング フィルターの係数を b に返します。

すべて折りたたむ

単純な線形シーケンスを元のサンプルレート 10 Hz の 3/2 倍でリサンプリングします。同じ Figure 内で元の信号とリサンプリングされた信号をプロットします。

fs = 10;
t1 = 0:1/fs:1;
x = t1;
y = resample(x,3,2);
t2 = (0:(length(y)-1))*2/(3*fs);

plot(t1,x,'*',t2,y,'o')
xlabel('Time (s)')
ylabel('Signal')
legend('Original','Resampled', ...
    'Location','NorthWest')

フィルター処理の際、resample は、この関数に与えられたサンプルの範囲外では、入力シーケンス x をゼロと見なします。x の両端でゼロから大きく逸脱すると、y の値が予期しないものになることがあります。

非ゼロの端点をもつ三角形のシーケンスとそれを垂直シフトしたシーケンスをリサンプリングして、これらの逸脱を表示します。

x = [1:10 9:-1:1;
    10:-1:1 2:10]';
y = resample(x,3,2);

subplot(2,1,1)
plot(1:19,x(:,1),'*',(0:28)*2/3 + 1,y(:,1),'o')
title('Edge Effects Not Noticeable')
legend('Original','Resampled', ...
    'Location','South')

subplot(2,1,2)
plot(1:19,x(:,2),'*',(0:28)*2/3 + 1,y(:,2),'o')
title('Edge Effects Noticeable')
legend('Original','Resampled', ...
    'Location','North')

正弦波信号を作成します。16 サンプルといった、信号のちょうど 1 周期に対応するサンプルレートを指定します。信号のステム プロットを描画します。サンプル アンド ホールドを可視化するために階段状グラフを重ね合わせます。

fs = 16;
t = 0:1/fs:1-1/fs;

x = 0.75*sin(2*pi*t);

stem(t,x)
hold on
stairs(t,x)
hold off

resample を使用して信号を係数 4 でアップサンプリングします。既定の設定を使用します。結果を元の信号とともにプロットします。

ups = 4;
dns = 1;

fu = fs*ups;
tu = 0:1/fu:1-1/fu;

y = resample(x,ups,dns);

stem(tu,y)
hold on
stairs(t,x)
hold off
legend('Resampled','Original')

計算を繰り返します。アンチエイリアシング フィルターの次数が 2×1×4=8 となるように n = 1 を指定します。カイザー ウィンドウに形状パラメーター β=0 を指定します。リサンプリングした信号と同様にフィルターも出力します。

n = 1;
beta = 0;

[y,b] = resample(x,ups,dns,n,beta);

fo = filtord(b)
fo = 8
stem(tu,y)
hold on
stairs(t,x,'--')
hold off
legend('n = 1, \beta = 0')

リサンプリングした信号は、ウィンドウの相対的に広いメインローブおよび低いサイドローブ減衰量から生じるエイリアシングの影響を示します。

n は 5 に増やし、β=0 はそのままにします。フィルターの次数が 40 であることを確認します。リサンプリングした信号をプロットします。

n = 5;

[y,b] = resample(x,ups,dns,n,beta);

fo = filtord(b)
fo = 40
stem(tu,y)
hold on
stairs(t,x,'--')
hold off
legend('n = 5, \beta = 0')

長いウィンドウはより狭いメインローブをもち、エイリアシングの影響をより適切に減衰させます。さらに信号も減衰させます。

フィルターの次数は 2×5×4=40 のままにして、形状パラメーターを β=20 に増やします。

beta = 20;

y = resample(x,ups,dns,n,beta);

stem(tu,y)
hold on
stairs(t,x,'--')
hold off
legend('n = 5, \beta = 20')

高いサイドローブの減衰量は、適切なリサンプリングにつながります。

フィルター次数を減らして 2×1×4=8 に戻し、β=20 はそのままにします。

n = 1;

[y,b] = resample(x,ups,dns,n,beta);

stem(tu,y)
hold on
stairs(t,x,'--')
hold off
legend('n = 1, \beta = 20')

メインローブが広い場合、リサンプリング時にかなりのアーチファクトが発生します。

正弦波のサンプルを 60 個生成し、元のレートの 3/2 のレートでリサンプリングします。元の信号とリサンプリングした信号を表示します。

tx = 0:6:360-3;
x = sin(2*pi*tx/120);

ty = 0:4:360-2;
[y,by] = resample(x,3,2);

plot(tx,x,'+-',ty,y,'o:')
legend('original','resampled')

アンチエイリアシング フィルターの周波数応答をプロットします。

freqz(by)

元のレートの 2/3 のレートで信号をリサンプリングします。元の信号とリサンプリングした信号を表示します。

tz = 0:9:360-9;
[z,bz] = resample(x,2,3);

plot(tx,x,'+-',tz,z,'o:')
legend('original','resampled')

新しいローパス フィルターのインパルス応答をプロットします。

impz(bz)

ガリレオ・ガリレイが 1610 年に記録したデータを使用して、木星の最も大きい衛星 4 つのうち最外部にあるカリストの軌道周期を求めます。

ガリレオは、この衛星の動きを 1 月 15 日から 6 週間観測しました。曇りの夜には木星を見られなかったため、観測結果にはいくつかの欠落部分があります。観測時間の datetime 配列を生成します。

t = [0 2 3 7 8 9 10 11 12 17 18 19 20 24 25 26 27 28 29 31 32 33 35 37 ...
    41 42 43 44 45]'+1;

yg = [10.5 11.5 10.5 -5.5 -10.0 -12.0 -11.5 -12.0 -7.5 8.5 12.5 12.5 ...
    10.5 -6.0 -11.5 -12.5 -12.5 -10.5 -6.5 2.0 8.5 10.5 13.5 10.5 -8.5 ...
    -10.5 -10.5 -10.0 -8.0]';

obsv = datetime(1610,1,15+t);

1 日あたり 1 回の観測というサンプルレートを使用し、規則的なグリッドにデータをリサンプリングします。過剰適合を防ぐため、中程度のアップサンプリング係数 3 を使用します。

fs = 1;

[y,ty] = resample(yg,t,fs,3,1);

データとリサンプリングされた信号をプロットします。

plot(t,yg,'o',ty,y,'.-')
xlabel('Day')

スプライン内挿を使用してこの手順を繰り返し、観測日を表示します。サンプルレートを 1 日の秒数の逆数で表します。

fs = 1/86400;

[ys,tys] = resample(yg,obsv,fs,3,1,'spline');

plot(t,yg,'o')
hold on
plot(ys,'.-')
hold off

ax = gca;
ax.XTick = t(1:9:end);
ax.XTickLabel = char(obsv(1:9:end));

等間隔の線形内挿データのピリオドグラム パワー スペクトル推定を計算します。1024 の DFT 長を選択します。信号は軌道周期の逆数で最大になります。

[pxx,f] = periodogram(ys,[],1024,1,'power');
[pk,i0] = max(pxx);

f0 = f(i0);
T0 = 1/f0
T0 = 16.7869
plot(f,pxx,f0,pk,'o')
xlabel('Frequency (day^{-1})')

入力引数

すべて折りたたむ

ベクトルまたは行列として指定される入力信号。x が行列の場合、その列は独立したチャネルとして扱われます。x には NaN が含まれることがあります。NaN は欠損データとして扱われ、リサンプリングから除外されます。

例: cos(pi/4*(0:159))+randn(1,160) は単一チャネルの行ベクトル信号です。

例: cos(pi./[4;2]*(0:159))'+randn(160,2) は 2 チャネル信号です。

データ型: double

リサンプリング係数。正の整数として指定します。

データ型: double

近傍項の数。正の整数として指定します。n = 0 の場合、resample は最近傍内挿を実行します。アンチエイリアシング FIR フィルターの長さは n に比例します。n の値を大きくすると計算時間が長くなりますが、精度は高くなります。

データ型: double

カイザー ウィンドウの形状パラメーター。正の実数スカラーとして指定します。beta を大きくすると、アンチエイリアシング フィルターの設計に使用するウィンドウのメインローブが広くなり、ウィンドウのサイドローブの振幅が小さくなります。

データ型: double

FIR フィルター係数。ベクトルとして指定します。既定では、resample は、カイザー ウィンドウを使用した firls でフィルターを設計します。遅延を補正する場合、resampleb の長さが奇数長で、線形位相をもっていると仮定します。

例: fir1(4,0.5) は、正規化されたカットオフ周波数 0.5π ラジアン/サンプルをもつ 4 次のローパス フィルターを指定します。

データ型: double

時点。非負の実数ベクトルまたは datetime 配列として指定します。tx は単調増加しなければなりませんが、その間隔は均一である必要はありません。tx には NaN または NaT が含まれることがあります。これらの値は欠損データとして扱われ、リサンプリングからは除外されます。

データ型: double | datetime

サンプルレート。正のスカラーで指定します。サンプルレートは単位時間あたりのサンプル数です。時間の単位が秒の場合、サンプルレートの単位は Hz です。

データ型: double

内挿法。'linear''pchip' または 'spline' のいずれかで指定します。

  • 'linear' — 線形内挿。

  • 'pchip' — 形状維持区分的 3 次内挿。

  • 'spline' — 節点なしの端点条件を使用したスプライン内挿。

詳細は、interp1 のリファレンス ページを参照してください。

出力引数

すべて折りたたむ

リサンプリングされた信号。ベクトルまたは行列として返されます。x が長さ N の信号であり、pq を指定している場合、y の長さは ⌈N × p/q⌉ になります。

FIR フィルター係数。ベクトルとして返されます。

出力瞬時。非負の実数ベクトルとして返されます。

アルゴリズム

resample は、firls を使用して FIR 設計を行い、ウィンドウの処理ゲインを考慮して結果を正規化した後に upfirdn を使用してレート変更を実行します。

拡張機能

R2006a より前に導入