filtfiltの動作する方向について

10 vues (au cours des 30 derniers jours)
Sho
Sho le 15 Août 2023
Modifié(e) : Hernia Baby le 20 Août 2023
filtfiltの動作する方向について質問です.
data.matのように各列ごと,時系列データが保存されています.
このデータを各列ごとにフィルタ処理したいと考えております.質問は下記2点です.
・filtfiltでのフィルター処理は行方向,列方向,どちらの方向に動作してますでしょうか?
・もし行方向に動作しているとしたら,列方向に動作させる方法はございますでしょうか?
ご回答どうぞよろしくお願いいたします.
load data.mat
sampling_rate = 200;
cutoff_frequency = 12;
filter_order = 4;
[b, a] = butter(filter_order, cutoff_frequency / (0.5.*sampling_rate), 'low');
filt_data = [data(:,1:2) filtfilt(b, a, data(:,3:end))]
filt_data = 1049×155
1.0e+03 * 0.0010 0 -0.3698 1.2958 0.1429 -0.3810 1.2850 -0.1730 -0.3066 0.8857 0.1010 -0.2512 0.8425 0.0766 -0.3297 0.7808 0.1221 -0.2978 0.8054 0.1134 -0.3281 0.6877 0.1396 -0.3339 0.5977 0.1380 -0.3439 0.5118 0.1294 -0.2394 0.0020 0.0000 -0.3700 1.2958 0.1429 -0.3811 1.2850 -0.1731 -0.3066 0.8856 0.1010 -0.2512 0.8425 0.0766 -0.3297 0.7808 0.1221 -0.2978 0.8054 0.1134 -0.3280 0.6877 0.1397 -0.3339 0.5977 0.1380 -0.3438 0.5118 0.1295 -0.2394 0.0030 0.0000 -0.3701 1.2959 0.1429 -0.3812 1.2851 -0.1731 -0.3067 0.8856 0.1009 -0.2511 0.8425 0.0766 -0.3297 0.7808 0.1221 -0.2978 0.8054 0.1135 -0.3278 0.6878 0.1397 -0.3339 0.5977 0.1380 -0.3437 0.5118 0.1295 -0.2394 0.0040 0.0000 -0.3702 1.2959 0.1429 -0.3814 1.2851 -0.1732 -0.3067 0.8856 0.1008 -0.2511 0.8425 0.0766 -0.3297 0.7808 0.1221 -0.2978 0.8054 0.1135 -0.3277 0.6878 0.1397 -0.3339 0.5977 0.1380 -0.3436 0.5117 0.1295 -0.2393 0.0050 0.0000 -0.3703 1.2959 0.1429 -0.3815 1.2851 -0.1732 -0.3068 0.8856 0.1008 -0.2511 0.8425 0.0766 -0.3296 0.7808 0.1221 -0.2977 0.8054 0.1135 -0.3276 0.6878 0.1397 -0.3338 0.5978 0.1380 -0.3436 0.5117 0.1296 -0.2393 0.0060 0.0000 -0.3704 1.2959 0.1429 -0.3816 1.2851 -0.1733 -0.3069 0.8856 0.1008 -0.2511 0.8425 0.0766 -0.3296 0.7808 0.1221 -0.2977 0.8054 0.1135 -0.3275 0.6879 0.1398 -0.3338 0.5978 0.1380 -0.3435 0.5117 0.1297 -0.2393 0.0070 0.0000 -0.3705 1.2959 0.1428 -0.3817 1.2852 -0.1734 -0.3069 0.8856 0.1007 -0.2511 0.8425 0.0766 -0.3296 0.7808 0.1221 -0.2977 0.8054 0.1135 -0.3274 0.6879 0.1398 -0.3338 0.5978 0.1380 -0.3434 0.5117 0.1297 -0.2393 0.0080 0.0000 -0.3706 1.2959 0.1428 -0.3818 1.2852 -0.1734 -0.3070 0.8856 0.1007 -0.2511 0.8425 0.0766 -0.3296 0.7808 0.1221 -0.2977 0.8054 0.1135 -0.3273 0.6879 0.1398 -0.3337 0.5978 0.1380 -0.3434 0.5117 0.1298 -0.2392 0.0090 0.0000 -0.3706 1.2959 0.1427 -0.3819 1.2853 -0.1735 -0.3071 0.8856 0.1007 -0.2511 0.8425 0.0766 -0.3296 0.7808 0.1221 -0.2977 0.8054 0.1135 -0.3273 0.6879 0.1398 -0.3337 0.5978 0.1380 -0.3433 0.5117 0.1298 -0.2392 0.0100 0.0000 -0.3707 1.2959 0.1427 -0.3820 1.2853 -0.1735 -0.3072 0.8856 0.1007 -0.2512 0.8425 0.0765 -0.3296 0.7808 0.1221 -0.2978 0.8054 0.1135 -0.3272 0.6880 0.1398 -0.3336 0.5978 0.1380 -0.3433 0.5117 0.1298 -0.2392

Réponse acceptée

Hernia Baby
Hernia Baby le 20 Août 2023
海外でも同じような質問来てましたね
動作する方向について
ドキュメントにもあるように
関数は、x が行ベクトルでなければ、x の最初の配列次元に沿って動作します。x が行ベクトルである場合は、2 番目の次元に沿って動作します。
つまり、行方向にフィルタがかかっています。
列方向に動作させる方法
これは転置を使えば解決します。
transpose, .' をご参考ください。
a = [1,2;3,4]
a = 2×2
1 2 3 4
b = a'
b = 2×2
1 3 2 4
  2 commentaires
Sho
Sho le 20 Août 2023
ご回答いただきありがとうございます.
反応頂けなさそうかと思い英語でも質問させていただいておりました.
最初の配列次元に沿っての意味が理解できておりませんでしたが,
行ベクトルの場合は列方向に,行列の場合は各列ごとに行方向にかかる
という風に理解いたしました.
転置についても情報頂きありがとうございました.
Hernia Baby
Hernia Baby le 20 Août 2023
Modifié(e) : Hernia Baby le 20 Août 2023
よく見たらご本人様でしたね。
ご理解の通り、基本は各列ベクトルにかかってるみたいです。
行ベクトルのときのみ、列方向にフィルタがかかります。
他の関数であればオプションに方向を決めるものがあるのですが、この関数にはありません。ですので転置などで入力値を変換する必要があります。

Connectez-vous pour commenter.

Plus de réponses (0)

Tags

Produits


Version

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!