このページ最新ではありませ。をクリックし,英语のの最新版版を参照参照し。
matlabでのフィルター设计设计
この例はローパスのの设计法。。。。。。。。。。。。。。。。。。。。。ののののの最も最も一般的的的に使用されるいくついくつかかのののコマンドラインツールツールをを绍介绍介ますますますここここここここででて実装ことます。その他设计オプションについては,firフィルターフィルター设计设计を参照しください。
はじめに
ローパスフィルターを設計するときは,最初に冷杉フィルターとIIRフィルターのどちらを設計するかを決めます。一般に、位相応答の線形性が重要な場合は FIR フィルターを選択します。FIR フィルターは、一般に量子化の影響に対するロバスト性に優れているため、固定小数点の実装にもよく使用される傾向にあります。また、FIR フィルターはパイプライン化に適しているため、FPGA や ASIC などの多くの高速な実装にも使用されています。IIR フィルター (特に双二次フィルター) は、位相の線形性が問題にならないアプリケーション (オーディオ信号処理など) で使用されます。IIR フィルターは、通常、設計仕様を FIR フィルターよりも少ない係数で満たせるという点で計算効率に優れています。また、IIR フィルターには、過渡応答が短く、群遅延が小さいという傾向もあります。ただし、最小位相のマルチレートの設計を使用すれば、群遅延や計算効率の点で FIR フィルターも IIR フィルターと同等になります。
firローパス -フィルター -フィルター次数指定指定
実際の状況においては、フィルター次数を指定しなければならないことがよくあります。たとえば、ターゲットのハードウェアでフィルター次数が特定の数に制約されている場合があります。また、実装に使用できる計算の割り当て (MIPS) を計算した結果、フィルター次数が制限される場合もよくあります。Signal Processing Toolbox の FIR 設計関数 (FIR1
,firpm
,firls
)では、いずれも指定した次数のローパス フィルターを設計できます。DSP System Toolbox の関数で、指定した次数のローパス FIR フィルターの設計によく使用されるのはfirceqrip
。この,指定さ/阻止帯域帯域た阻止帯域リップルとと指定指定さされれれたたた通过通过通过帯域エッジエッジ周波周波周波数数でで/ハイパス/ハイパス/ハイパス/ハイパスローパス/ハイパスハイパスリップルリップルリップルリップルハイパスます。
48 kHz でサンプリングされるデータに対するローパス FIR フィルターを設計します。通過帯域エッジ周波数は 8 kHz です。通過帯域リップルは 0.01 dB、阻止帯域の減衰量は 80 dB です。フィルター次数を 120 に制約します。
N = 120; Fs = 48e3; Fp = 8e3; Ap = 0.01; Ast = 80;
通过帯域阻止帯域の线形単位最大をを求めます。
rp =(10^(AP/20)-1)/(10^(AP/20) + 1);rst = 10^( - ast/20);
firceqrip
を使用フィルター设计し,振幅応答を表示し。。
num = firceqrip(n,fp/(fs/2),[rp rst],“ passedge');fvtool(num,'Fs',FS)
結果の阻止帯域エッジ周波数は約 9.64 kHz になります。
最小次数设计
最適な等リップル フィルターを設計するためのもう 1 つの関数にfirgr
があります。firgr
では、通過帯域/阻止帯域リップルの制約に加えて指定した遷移幅も満たすフィルターを最小のフィルター次数で設計できます。たとえば、阻止帯域エッジ周波数を 10 kHz と指定すると、結果のフィルターはfirceqrip
で設計される 120 次のフィルターではなく 100 次のフィルターになります。フィルター次数は遷移帯域が大きいほど小さくなります。
10 khzと周波周波数とと指定ますます通过通过リップルリップルリップルリップルががががががががががががががががががががががががががががががががががリップルがリップルリップルリップルリップルリップルリップルでででででででで阻止阻止阻止阻止阻止量量量量量量量量量量量量量量量量量量がががががががががががががが80 dbの
Fst = 10e3; NumMin = firgr('minorder',[0 fp/(fs/2)fst/(fs/2)1],...[1 1 0 0],[rp,rst]);
firgr
で取得た最小のののフィルターfirceqrip
で設計した 120 次フィルターの振幅周波数応答をプロットします。最小次数設計のフィルターの次数は 100 になります。予想どおり、120 次フィルターの遷移領域は次数が 100 のフィルターよりも狭くなります。
hvft = fvtool(num,1,nummin,1,'Fs',fs);传奇(hvft,'n = 120',,,,'n = 100')
データのフィルター处理
フィルターをデータに適用するには、filter
コマンドを使用か,dsp.Firfilter
を使用します。dsp.Firfilter
にはでする际状态をできると利点があります。また,dsp.Firfilter
には小数点机能あり,,,,,,,,,,,,,,,,,,,,,,,,,,,,
120 firローパスを使用して,ゼロと単位偏差もつもつもつもつもつもつもつもつ秒间秒间秒间秒间ホワイトホワイト256サンプルををサンプルサンプルサンプルサンプルのフレームででフィルター处理しし
lp_fir= dsp.FIRFilter('分子',num);sa = dsp.Spectrumanalyalzer('采样率',fs,...“光谱”,5);抽动whiletoc < 10 x = randn(256,1); y = LP_FIR(x); step(SA,y);结尾
dsp.lowpassfilter
の使用
firceqrip
およびfirgr
をdsp.Firfilter
と组み合わせ使用する代わり,,dsp.lowpassfilter
を使用ことできます基本的に,dsp.lowpassfilter
は 2 つのステップのプロセスを 1 つにまとめたものです。dsp.lowpassfilter
には、固定小数点のサポート、C コード生成のサポート、HDL コード生成のサポート、および ARM Cortex コード生成のサポートについて、dsp.Firfilter
と同じ利点があります。
48 kHz でサンプリングされるデータに対するローパス FIR フィルターを設計します。通過帯域エッジ周波数は 8 kHz です。通過帯域リップルは 0.01 dB、阻止帯域の減衰量は 80 dB です。フィルター次数を 120 に制約します。仕様に基づいてdsp.Firfilter
を作成します。
lp_fir = dsp.lowpassfilter('采样率',fs,...“ DesignForminimumorder”,,,,false,“ FilterOrder”,n,,...'PassbandFrequency',fp,...“ Passbandripple”,AP,'StopbandAttenuation',ast);
lp_fir
の系数はNUM
の系数とです。
num_lp = tf(lp_fir);
前のに示した,,lp_fir
を使用してデータを直接フィルター処理できます。また、FVTool を使用してフィルターを解析したり、措施
を使用して応答を測定したりできます。
fvtool(LP_FIR,'Fs',fs);测量(lp_fir)
ANS =样本率:48 kHz Passband边缘:8 kHz 3-dB点:8.5843 kHz 6-dB点:8.7553 kHz stopband边缘:9.64 kHz Passband带纹波:0.01 db stopband atten。:79.9981 DB过渡宽度:1.64 kHz
dsp.lowpassfilterををた最设计设计设计
dsp.lowpassfilter
を使用て小次数を设计し,措施
を使用设计がの仕様をことを确认できます。。フィルターのの次数次数はははここここででででで
lp_fir_minOrd = dsp.LowpassFilter('采样率',fs,...“ DesignForminimumorder”,真的,...'PassbandFrequency',fp,...“ stopbandfquency',fst,...“ Passbandripple”,AP,...'StopbandAttenuation',ast);措施(LP_FIR_minOrd) Nlp = order(LP_FIR_minOrd)
ANS =样本率:48 kHz Passband边缘:8 kHz 3-dB点:8.7136 kHz 6-dB点:8.922 kHz stopband边缘:10 kHz Passband带纹波:0.0098641 db stopband atten。:80.122 DB过渡宽度:2 KHz NLP = 100
IIR フィルターの設計
firフィルターリップルリップルリップルリップルリップルフィルターにするするするののの。。したがってて,,,同じ同じ仕様仕様仕様を使用ししててて楕円楕円フィルターフィルターををはるかに小さくます。
周波数オフ周波数,通过帯域リップル制约,,帯域帯域の减衰减衰减衰量量量量ををををををををををををを次次次次次次次次次次次次次次次次次次次次次次次次次
n = 10;lp_iir = dsp.lowpassfilter('采样率',fs,...'FilterType',,,,'IIR',,,,...“ DesignForminimumorder”,,,,false,...“ FilterOrder”,n,,...'PassbandFrequency',fp,...“ Passbandripple”,AP,...'StopbandAttenuation',ast);
firとiirの设计比较します。。つののコスト计算计算。。
hfvt = fvtool(lp_fir,lp_iir,'Fs',fs);传奇(hfvt,'FIR Equiripple, N = 120',,,,...'iir椭圆形,n = 10');cost_FIR = cost(LP_FIR) cost_IIR = cost(LP_IIR)
cost_fir =带字段的结构:numCoefficients:121个数字:120 MultiplicationsPerinputSample:121 AddadsperInputSample:120 cost_iir = with fields with fields:NumCoefficients:25个数字:20个MulteCationsPerinputSample:25 AddaudeSperInputsample:20
firフィルターフィルターフィルターとフィルターフィルターで同様。コストははははフィルターフィルターフィルターフィルターががが
IIR フィルターの実行
IIR フィルターは双二次フィルターとして設計されています。フィルターをデータに適用するには、FIR の場合と同じコマンドを使用します。
10 iirローパスローパス使用して,ゼロと単位もつもつもつもつもつもつもつもつもつもつ秒间秒间秒间のガウスガウス256サンプルををサンプルサンプルサンプルサンプルサンプルフレームででフィルター处理处理し
sa = dsp.Spectrumanalyalzer('采样率',fs,...“光谱”,5);抽动whiletoc < 10 x = randn(256,1); y = LP_IIR(x); SA(y);结尾
可変帯域幅の FIR フィルターと IIR フィルター
実行時にカットオフ周波数が変更可能なフィルターを設計することもできます。その場合はdsp.variablebandwidthfirfilter
とdsp.variablebandwidthiirfilter
を使用します。