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

1 次查看(过去 30 天)
Sho
Sho 2023-8-15
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

采纳的回答

Hernia Baby
Hernia Baby 2023-8-20
海外でも同じような質問来てましたね
動作する方向について
ドキュメントにもあるように
関数は、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 个评论
Sho
Sho 2023-8-20
ご回答いただきありがとうございます.
反応頂けなさそうかと思い英語でも質問させていただいておりました.
最初の配列次元に沿っての意味が理解できておりませんでしたが,
行ベクトルの場合は列方向に,行列の場合は各列ごとに行方向にかかる
という風に理解いたしました.
転置についても情報頂きありがとうございました.
Hernia Baby
Hernia Baby 2023-8-20
编辑:Hernia Baby 2023-8-20
よく見たらご本人様でしたね。
ご理解の通り、基本は各列ベクトルにかかってるみたいです。
行ベクトルのときのみ、列方向にフィルタがかかります。
他の関数であればオプションに方向を決めるものがあるのですが、この関数にはありません。ですので転置などで入力値を変換する必要があります。

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 平滑化とノイズ除去 的更多信息

标签

产品


版本

R2020b

Community Treasure Hunt

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

Start Hunting!