データ数の圧縮,リサンプリング,補間について
21 views (last 30 days)
Show older comments
あるデータ数(例:40972)を圧縮してあるデータ数(例:10000個のデータ)にしたい場合はresample関数を使用するのが正しいのでしょうか。しかしresample関数ではリサンプルする周波数は決められると思いますが,その結果何個のデータになるのかは決められないため,指定したデータ数に圧縮することができません。良い方法をご存知の方がいらっしゃいましたら教えていただけないでしょうか。
0 Comments
Accepted Answer
Akira Agata
on 28 Apr 2022
時系列信号のリサンプリングに関するご質問と想定して回答します。
ご理解のとおり、resample 関数を使ってこの課題を解決するには、目標のサンプル点数に対応するサンプリング周波数を求める必要があります。
以下に例を示します(簡単のため、以下の例ではサンプル数100の元データを、サンプル数30に圧縮する場合を想定しています)。
% データ数100の元データ
x = linspace(0, 2*pi, 100);
y = sin(x);
% min(x) ~ max(x) 区間内の 30点で内挿
xq = linspace(0, 2*pi, 30);
yq = interp1(x, y, xq, 'spline');
% 確認
figure
plot(x, y, '.')
hold on
plot(xq, yq, 'o-')
legend({'元の100点', '内挿した30点'},...
'FontSize', 12)
3 Comments
Akira Agata
on 30 Apr 2022
直観的にそう思ってしまいがちですが、厳密には少し違います。
上記の例で、元のサンプリング周波数を
、内挿後のサンプリング周波数を
とします。
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/983785/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/983790/image.png)
まず、内挿前は100個のサンプル点によって 0 ~
の区間を 99 個の小区間に分割しているので、
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/983795/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/983800/image.png)
となります。同様に、内挿後は 0 ~
の区間を 29 個の小区間に分割しているので、
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/983805/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/983810/image.png)
となります。
つまり、内挿後は元の
倍のサンプリング周波数でリンサンプリングしたことになります。
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/983815/image.png)
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!