MATLAB——IIR デジタル フィルターの設計

1. 基礎知識
1.1. デジタル フィルター設計の基本手順
アナログ フィルターの設計がデジタル フィルター設計の基礎であることはわかっています。デジタル信号処理を学習する過程で、IIR デジタル フィルターの設計手順は次のとおりです。
(1) サンプリング間隔 Ts またはサンプリング周波数 fs を決定します。
(2) アナログ周波数とデジタル周波数の関係に従って、指定されたデジタル フィルターのインデックスをアナログ フィルターのインデックスに変換します。(Ω=ω/Ts)
(3) アナログフィルタの指数に従ってアナログフィルタを設計します。
(4) インパルス応答不変法と双一次変換法に従って、H(s) を H(z) に変換します。

1.2. z = es T z=e^{sT}
に基づくインパルス応答不変法z=eTは、S 平面を Z 平面にマッピングしますが、1 対 1 のマッピングではありません。インパルス応答不変法は、帯域幅が制限されたフィルター設計にのみ適しています。

1.3. 双一次変換法
S 平面を圧縮することで、スペクトルの折り返し現象を除去します。ただし、この過程で非線形歪みが発生するため、それを補正する必要があります。この手法の S 平面と Z 平面のマッピング関係は、
s = 2 T ∗ 1 − z − 1 1 + z − 1 s=\frac{2}{T}*\frac{1-z^{- 1}} {1+z^{-1}}s=T21 + z11 z 1
プリディストーション補正の式は、
Ω = 2 T ∗ Tan ( ω 2 ) Ω=\frac{2}{T}*tan(\frac{ω}{2})です。おお=T2(2おお)
2. 特定のトピック
2.1、トピック 1 (インパルス応答不変法)
インパルス応答不変法を使用してバターワース ローパス デジタル フィルターを設計します。通過帯域周波数が必要です。通過帯域リップルは 1dB 未満で、阻止帯域周波数は です。振幅減衰は 15dB より大きく、サンプリング周波数は Fs=2000Hz です。
MATLAB にはいくつかの関数が付属しており、説明する必要があります。
アナログ フィルター設計で
[n,wn]=buttord(fp,fs,rp,as,'s') を
この関数は使用されていますバターワース フィルターの次数とカットオフ周波数を計算します。入力パラメータには、通過帯域カットオフ周波数 (fp)、阻止帯域カットオフ周波数 (fs)、通過帯域最大減衰 (rp)、阻止帯域最小減衰 (as)、およびフィルタのタイプ (アナログ フィルタの場合は「s」、「z」はフィルタを示します) が含まれます。デジタルフィルター)。この関数の出力には、次数 (n) とカットオフ周波数 (wn) が含まれます。
[z,p,k]=buttap(n);
この関数は、バターワース フィルターの極と零点を生成するために使用されます。入力パラメータは次数 (n)、出力パラメータは極 (p) と零点 (z)、およびフィルタのゲインを正規化するために使用される係数 (k) です。
[b,a]=zp2tf(z,p,k);
zp2tf: この関数は、極と零点を伝達関数の分子と分母の形式に変換するために使用されます。入力パラメータは極 (p)、零点 (z)、係数 (k) で、出力は分子係数 (b) と分母係数 (a) です。
デジタル フィルター関数への変換
[b,a]=lp2lp(B,A,Wn)
ローパス プロトタイプは、異なるカットオフ周波数を持つローパス フィルターに変換されます。ここで、カットオフ周波数 Wn が指定され、入力はアナログ フィルターです。分子と分母の係数、および前に取得したカットオフ周波数です。
[bz,az]=impinvar(b,a,fs);
関数 impinvar は、インパルス応答の不変性を使用して、アナログ フィルターをデジタル フィルターに変換します。具体的には、impinvar 関数はまずアナログ フィルターを離散化し、次に離散化されたインパルス応答をデジタル フィルターのインパルス応答として使用します。freqz と freqs に
注意してください。 freqz と freqs は、フィルターの周波数応答をプロットするために MATLAB で使用される関数です。(j の略、1 つは離散、1 つは連続)関数 freqz は、次の構文でデジタル フィルターの離散時間周波数応答をプロットします。freqz(b,a,n,fs)ここで、b と a はそれぞれデジタル フィルターです。の分母係数、n は離散時間周波数応答を計算するための点の数、fs はサンプリング周波数です。




freqs 関数はアナログ フィルターの周波数応答を描画でき、その構文は次のとおりです:
freqs(b,a,w)
ここで、b と a はそれぞれアナログ フィルターの分子係数と分母係数、w は周波数ポイントです。周波数応答を計算します。freqs 関数はアナログ フィルターの周波数応答を計算するため、入力周波数パラメーター w の単位はラジアンであることに注意してください。
コード

clc;
%写出已知条件,设置采样点数
wp=0.25*pi;ws=0.4*pi;
rp=1;as=15;
fs=2000;Nn=128;
%由数字指标映射到模拟滤波器指标
WP=wp*fs;WS=ws*fs;
%利用巴特沃斯滤波器的设计方法,设计一个模拟滤波器
[N,Wn]=buttord(WP,WS,rp,as,'s');
[z,p,k]=buttap(N);
[B,A]=zp2tf(z,p,k);
%转换到数字滤波器
[b,a]=lp2lp(B,A,Wn);%从一个低通原型变换为具有不同截止频率的低通滤波器
[bz,az]=impinvar(b,a,fs);%根据冲激响应不变法得到数字滤波器
freqz(bz,az,Nn,fs);

実行結果
ここに画像の説明を挿入
2.2 トピック 2 (双一次変換法)
双一次変換法を使用してバターワース ローパス デジタル フィルターを設計します。通過帯域周波数が必要です。通過帯域リップルは 1dB 未満、阻止帯域周波数は 、振幅減衰は 15dB より大きく、サンプリング周波数はFs=100Hzです。
上記の基礎を踏まえて、類推して学んでいきましょう。

WS=2*fs*tan(ws/2);
WP=2*fs*tan(wp/2);

歪みを補正する処理を追加しました。

[bz,az]=bilinear(b,a,fs);

双一次不変法への変更

freqz(bz,az,Nn,fs);

[H,w]=freqz(bz,az);
figure;
subplot(211);
plot(w/pi,abs(H));
subplot(212);
plot(w/pi,angle(H));

最後の描画パートでは比較を行いました。
1 つ目は、freqz によって直接プロットされた振幅-周波数および位相-周波数のイメージです。
関数 freqz は、デジタル フィルターの周波数応答を計算し、周波数応答の振幅と位相の情報を返します。ここで、w は周波数、H は周波数応答の複素数値です。なぜなら、通常、私たちは0 0の周波数をより重視するからです。0ppπ 間の変化なので、plot(w/pi,abs(H)) と Lot(w/pi,angle(H)) を使用して、単位円上の周波数をラジアンから比率に変更しますこれは 2 番目の描画ウィンドウのファイルです。

完全なコード

wp=0.25*pi;ws=0.4*pi;
rp=1;as=15;
fs=100;
Ts=1/fs;
Nn=128;

WS=2*fs*tan(ws/2);
WP=2*fs*tan(wp/2);

[N,Wn]=buttord(WP,WS,rp,as,'s');
[z,p,k]  =buttap(N);
[B,A]=zp2tf(z,p,k);
[b,a]=lp2lp(B,A,Wn);
[bz,az]=bilinear(b,a,fs);

freqz(bz,az,Nn,fs);

[H,w]=freqz(bz,az);
figure;
subplot(211);
plot(w/pi,abs(H));
subplot(212);
plot(w/pi,angle(H));

演算結果
ここに画像の説明を挿入
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/m0_46155417/article/details/129496442