| Signal Processing Toolbox |
resample
表示
y=resample(x,p,q) y=resample(x,p,q,n) y=resample(x,p,q,n,beta) y=resample(x,p,q,b) [y,b]=resample(x,p,q)
詳細
yは、ポリフェーズフィルタを使って、オリジナルのサンプリングレートの = resample(x,p,q) p/q倍で、ベクトルxのデータ列をリサンプリングします。yは、xの長さのceil(length(x)*p/q)倍になります。pおよびqは、正の整数でなければなりません。xが行列の場合、resampleはxの列方向の処理を行います。
resampleは、リサンプリングプロセスでxにアンチエイリアス(ローパス)FIRフィルタを適用します。これは、Kaiserウィンドウを使ったfirlsで設計します。
yは、カレントサンプル = resample(x,p,q,n) x(k)のデータ列の一方向のn項を使用してリサンプリングを実行します。resampleが使用するFIRフィルタの長さはnに比例し、nの値を大きくすると精度は高くなりますが計算時間が必要になります。nのデフォルト値は10です。
n = 0にすると、resampleは最近傍近似を使用します。
y(k) = x(round((k-1)*q/p)+1)
ここで、x のインデックスがlength(x)よりも大きい場合、y(k) = 0です。
yは、 = resample(x,p,q,n,beta) resampleがローパスフィルタを設計するのに使用するKaiserウィンドウの設計パラメータとしてbetaを使用します。betaのデフォルト値は5です。
yは、フィルタ係数ベクトル = resample(x,p,q,b) bでxをフィルタ処理します。
[y,b]は、リサンプリング過程で = resample(x,p,q) xに適用されるフィルタの係数を含んだベクトルbを出力します。
例題
単純な線形列をオリジナルのサンプリングレートの3/2倍でリサンプリングします。
fs1=10; % オリジナルのサンプリング周波数(Hz) t1=0:1/fs1:1; % 時間ベクトル x=t1; % 線形列を定義 y=resample(x,3,2); % リサンプリングを実行 t2=(0:(length(y)-1))*2/(3*fs1); % 新しい時間ベクトル plot(t1,x,'*',t2,y,'o',-0.5:0.01:1.5,-0.5:0.01:1.5,':') legend('original','resampled'); xlabel('Time')
出力yの最後の数点が不正確になっていることに注目してください。そのフィルタリング過程で、resampleは、xで与えられたサンプルの範囲外では、サンプルをゼロと見なします。したがって、データ列xの終点でゼロから大きく偏るとyの終点で不正確になる可能性があります。つぎの2つのプロットに、resampleのこの一方向適用による影響を示します。
x=[1:10 9:-1:1]; y=resample(x,3,2); subplot(2,1,1); plot(1:19,x,'*',(0:28)*2/3 + 1,y,'o'); title('Edge Effects Not Noticeable'); legend('original','resampled'); x=[10:-1:1 2:10]; y=resample(x,3,2); subplot(2,1,2); plot(1:19,x,'*',(0:28)*2/3 + 1,y,'o') title('Edge Effects Very Noticeable'); legend('original','resampled');
参考
|
データ列に対するサンプリングレートの低減(間引き)
|
|
条件付き最小2乗線形位相FIRフィルタの設計 |
|
整数要素によるサンプリングレートの増加(補間) |
|
1次元データ補間(MATLAB Function Referenceを参照)
|
|
補間FIRフィルタの設計 |
|
Kaiserウィンドウ |
|
キュービックスプライン補間(MATLAB Function
Referenceを参照) |
|
FIRフィルタの適用とサンプリングレート変換 |
| remezord | residuez |