MATLAB Answers

kotetu
0

バターワースのバンドバスフィルタ 

Asked by kotetu
on 25 Oct 2018
Latest activity Commented on by kotetu
on 28 Oct 2018
Fc1=0.5;
Fc2=50;
N = 30;
バターワースでローカット周波数0.5Hz ハイカット周波数60Hzの バンドパスフィルタですが、フィルタの遅延を補正すう方法を教えていただきたいです。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Hd = butter(Fc1,Fc2,N);
freqz(Hd);
filt_data = filter(Hd, buttLoop); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
filt_data = filter(Hd, buttLoop);
filterの関数を
filt_data = filtfilt(Hd, buttLoop);
に変更すればよいのでしょうか。
ノッチフィルタではfiltfiltで上手く補正できたのですが。
このようなエラーが出ます。
エラー: filtfilt (line 78)
入力引数が不足しています。
エラー: tougou3 (line 84)
filt_data = filtfilt(Hd, buttLoop);
もし、ご存知の方がいたら教えてください。

  0 Comments

Sign in to comment.

1 Answer

Answer by Hirokazu Tanaka on 25 Oct 2018
 Accepted Answer

Fc1=0.5;
Fc2=50;
N = 30;
Hd = butter(Fc1,Fc2,N);
は、実行すると
エラー: butter (line 62)
カットオフ周波数は (0,1) の区間内になければなりません。
とのエラーになりますが、
Hd = butter(Fc1,Fc2,N);
は自作の関数でしょうか?それとも https://jp.mathworks.com/help/signal/ref/butter.html ?

  3 Comments

kotetu
on 26 Oct 2018
ありがとうございます。
回答になっているかわかりませんが。
Hd = butter(Fc1,Fc2,N); は、tdatoolで作った関数です。 function Hd = butte と作成された関数に引数(Fc1,Fc2,N) を与えて自作関数にしています。
以下のコードがfdatoolで作成された関数で、 引数を(Fc1,Fc2,N)を入れてカットオフ周波数を呼び出しもとで、 変更できるようにしています。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function Hd = butter(Fc1,Fc2,N)
%BUTTER 離散時間フィルター オブジェクトを返します。
% MATLAB Code
% Generated by MATLAB® 9.4 and Signal Processing Toolbox 8.0.
% Generated on: 23-Oct-2018 14:50:10
% Butterworth Bandpass filter designed using FDESIGN.BANDPASS.
% All frequency values are in Hz.
Fs = 200; % Sampling Frequency
% N = 10; % Order
% Fc1 = 0.5; % First Cutoff Frequency
%Fc2 = 60; % Second Cutoff Frequency
% Construct an FDESIGN object and call its BUTTER method. h = fdesign.bandpass('N,F3dB1,F3dB2', N, Fc1, Fc2, Fs); Hd = design(h, 'butter');
% [EOF]
Hirokazu Tanaka on 28 Oct 2018
filtfilt 関数のページ https://jp.mathworks.com/help/signal/ref/filtfilt.html を見ると、いくつか呼び出し方がありますが、
y = filtfilt(d,x)
を使う場合は d は digitalFilter オブジェクト である必要があるみたいです。エラーの原因はここかと思います。
見せて頂いた butter 関数を使うと
>> whos Hd
Name Size Bytes Class Attributes
Hd 1x1 dfilt.df2sos
と、digitalFilterオブジェクトではありません。
ちょうど filtfilt関数ページにあるサンプルコードでもバターワースフィルターの例がありますし、
も参考になると思います。
kotetu
on 28 Oct 2018
ありがとうございます。 参考にさせて頂きます。

Sign in to comment.