0

バターワース IIR を使用して 4 つのフィルターを設計するコードを作成しました。ロー、ハイ、バンドパス、バンドストップ。入力ダイアログ ウィンドウが開き、ユーザー入力を取り込みます。デフォルト値を次のように設定します。

def = {'5','200','40','50','3','30'}; for Low and High pass
AND
def = {'5','500','60', '200','50','250','3','30'}; for bandpass and bandstop
Order of Filter
Fsampling (Hz)
Fpass (Fpass 1 and 2) (Hz)
Fstop (Fstop 1 and 2) (Hz)
Ripple factors (dB)
Stop attenuation (dB)

とりあえず、 for ループ (1-->4) を使用して B および A コンポーネントを計算します。

   [n Fn] = buttord(Fpass,Fstop,Rp,Rs);
   [B,A] = butter(N,Fn,str);
   B_Comp{i} = B;
   A_Comp{i} = A;

今..各フィルターの周波数応答をプロットする必要があるので、

for i=1:4
   freqz(B_Comp(i),A_Comp(i));
   figure;
end

しかし、このエラーが発生します:

 ??? Function 'fft' is not defined for values of class 'cell'.
Error in ==> fft at 36
   [varargout{1:nargout}] = builtin('fft', varargin{:});

Error in ==> freqz at 94
    h = dividenowarn(fft(b,s.*nfft),fft(a,s.*nfft)).';

Error in ==> dsp1 at 62
    freqz(B_Comp(i),A_Comp(i));

この問題を解決するにはどうすればよいですか..どんな助けでも大歓迎です

4

1 に答える 1

3

セルを使用したい場合は使用しないでください。fft使用する前に試してくださいcell2mat。例えば:

 freqz(cell2mat(B_Comp(i)),cell2mat(A_Comp(i)));
于 2012-12-19T00:13:57.923 に答える