Clear Filters
Clear Filters

デジタルフィルタのボード線図

15 views (last 30 days)
Isao Okada
Isao Okada on 23 Aug 2017
Edited: michio on 24 Aug 2017
デジタルフィルタモデルのボード線図をM-ファイルで記述したコマンドで求めたい。 周波数はHzとしたい。 合わせてExcelでも描画するために、freq.dat、gain.dat、phase.datデータを発生したい。

Answers (1)

Akira Agata
Akira Agata on 24 Aug 2017
Edited: Akira Agata on 24 Aug 2017
ボード線図の元となるデジタルフィルターの周波数応答は、関数 freqz で出力することができます。横軸を周波数とするには、サンプリング周波数を指定する必要があります。
以下の例は、サンプリング周波数を 1kHz として、Kaiserウィンドウを用いた80次のFIRローパスフィルタの周波数応答をテーブル型変数 Output に保存のうえExcelファイルとして出力します。
fs = 1000;
b = fir1(80,0.5,kaiser(81,8));
[h, f] = freqz(b,1,[],fs)
Output = table(f,abs(h),rad2deg(unwrap(angle(h))),...
'VariableNames',{'freq','response','phase'});
writetable(Output,'bodePlot.xls');
  3 Comments
Akira Agata
Akira Agata on 24 Aug 2017
fdatoolで設計したフィルタから周波数応答を求める場合は、設計後にツールバーから[ファイル] ⇒ [MATLABコードを生成] ⇒ [フィルタ設計関数] を選択して関数を生成して下さい(この関数を呼び出すことで、設計したフィルタのdfiltオブジェクトが生成されます)。
例えばfdatoolでフィルタを設計後、フィルタ設計関数を生成して 'myFiltDesign.m' というファイル名で保存したとします。このフィルタの周波数応答を求めるには、以下のようにすれば求めることができます。
% fdatoolで設定したサンプリング周波数
fs = 1000;
% 設計したフィルタのdfiltオブジェクトを生成
b = myFiltDesign();
% 生成する評価点の数
n = 1024;
[h, f] = freqz(b,n,fs);
Output = table(f,abs(h),rad2deg(unwrap(angle(h))),...
'VariableNames',{'freq','response','phase'});
writetable(Output,'bodePlot.xls');
Isao Okada
Isao Okada on 24 Aug 2017
Edited: michio on 24 Aug 2017
回答ありがとうございます。
Fdatool設計の場合、
%%Coef Load
load f430.dat f430 -ascii;
num=zeros(1,65);
for i=1:65
num(i)=f430(i);
end
den = 1; k=f430(66);
Ts = 1/5512.5;
%%Transfer Function
sys = tf( num, den,Ts)/k;
f = logspace(0,5,4000); w= 2*pi*f;
h = bodeplot(sys,w),grid on;
setoptions(h,'FreqUnits','Hz','PhaseVisible','on');
のようにFigure1描画が欲しいです。これができれば、Fdatool設計はとりあえずOKのようです。
また、例えばEqualizerなどを最適化する場合、batchで処理したいので、Fdatoolなどが使えないと思いますので、Digital Filter F(z)をどのようなコマンドで処理すればよいかの問題に帰着するかもしれません。求めたいのは、周波数Hzでゲイン・位相特性、MatlabのFigureとExcel移植可能なデータです。

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!