-1

EMGサンプリング レート 1000Hz で、2 つの筋肉に対して3 つの記録があります。つまり、3 つのEMGデータ マトリックスがあります。それぞれに 2 つの行があります (2 つの筋肉の場合)。

ただし、それぞれのサンプル (列) の数は同じではありません。最初のサンプルには 2600 のサンプルがあり、2 番目には 2500 のサンプルがあり、3 番目には 2550 のサンプルがあります。

行と列の数が同じ3つの行列を取得するために、それらの長さを互いに同じにしたい。大きなものを切り取って 2500 列だけを使用するのはばかげていると思います。とはいえ、やりたいと思ったら、最初から切るか最後から切るか迷っています。

MATLAB でデータを補間して、それぞれのサイズが 3 x 2600 の 3 つの行列を取得する方法はありますか?

3 つのマトリックスはすべて同じ動きに属しており、サンプルを一致させたいと考えています。

4

1 に答える 1

0

この状況では、おそらく interp1 の使用を検討する必要があります。これにより、ポイント間の補間が実行されるため、x 軸上の任意の位置でサンプリングできます。

http://www.mathworks.com/help/matlab/ref/interp1.html

次の例には、ランダムなサンプル データsample1と がsample2ありsample3ます。これらの変数の長さは、それぞれ 2600、2500、および 2550 です。

sample1 = exp(2*linspace(0,1,2600)+rand(1, 2600));
sample2 = exp(linspace(0,1,2500)+rand(1, 2500));
sample3 = exp(3*linspace(0,1,2550)+rand(1, 2550));

私は希望の長さを持っています (私はあなたの最短のサンプルサイズに対応する長さを使用しています)

desiredlength = 2500;

次に、次のコードを使用してデータを補間できます (デフォルトは線形補間であることに注意してください)。

adjusted = zeros(3, desiredlength);

adjusted(1, :) = interp1(linspace(0,1,length(sample1)), sample1, linspace(0,1,desiredlength));
adjusted(2, :) = interp1(linspace(0,1,length(sample2)), sample2, linspace(0,1,desiredlength));
adjusted(3, :) = interp1(linspace(0,1,length(sample3)), sample3, linspace(0,1,desiredlength));

plot(adjusted')

ここに画像の説明を入力

linspace(a, b, n)nと の間の点のベクトルを与える関数でありabからsample1に変換しlinspace(0, 1, 2600)ていますlinspace(0, 1, 2500)

これが役立つことを願っています。

于 2013-05-30T09:03:34.120 に答える