fgoalattain
を使用した信号処理
線形位相有限脉冲响应(杉木)フィルターの設計について考えてみます。問題とするのは0と0.1赫兹間の周波数帯域で振幅1,0.15と0.5 Hz間で振幅0となるローパスフィルターの設計です。
このようなフィルタ,の周波数応答H(f)は次のように定義されます。
(1) |
ここで,A(f)は周波数応答の大きさです。1つの解法は、ゴール到達法を周波数応答の大きさに適用するものです。大きさを計算する関数が与えられると、fgoalattain
は大きさの応答がある許容誤差内で希望する応答と一致するまで大きさの係数a(n)を変化させます。大きさの応答を計算する関数はfiltmin.m
で用意されています。この関数は,一个
(大きさの関数係数)とw
(興味のある周波数領域の離散値)を使用します。
ゴ,ル到達問題を設定するには,問題の目标
と权重
を指定しなければなりません。0および 0.1 間の周波数に対して、ゴールは 1 です。0.15 および 0.5 間の周波数に対して、ゴールは 0 です。0.1 および 0.15 間の周波数に対しては、この範囲でゴールまたは重みを必要としないので指定しません。
この情報は変数目标
に保存され,fgoalattain
に渡されます。目标
の長さは関数filtmin
により戻される長さと同じです。複数のゴ,ルが等価に満足されるためには,通常は重量
をabs(目标)
に設定します。しかし,ゴ,ルのいく,かはゼロなので,重量= abs(目标)
を使用することによって,重量
0をも目的関数に厳しい制約を課すものになり,そして重量
1をも目的関数がゴル値に到達しない可能性があります(ゴ,ル到達法を参照)。すべてのゴ,ルは同じくらいの大きさであるので,すべてのゴ,ルに重量
を使用すると,ゴ,ルに等しい優先順位を与えます。(重みに)abs(目标)
を使用すると,目标
の大きさがより有意に異なるとき,重要性を増します.)また,以下のように設定すると
选项= optimoptions(“fgoalattain”,“EqualityGoalCount”长度(目标));
各目的が可能な限りゴ,ル値に近づく(超えることも小さくなることもない)ようになります。
手順1:ファルfiltmin。Mを記述する
函数Y = filtmin(a,w) n = length(a);Y = cos(w'*(0:n-1)*2*)*a;
手順2:最適化ル,チンを呼び出す
用初始系数绘制A0 = ones(15,1);Incr = 50;W = linspace(0,0.5,incr);Y0 = filtmin(a0,w);clf、情节(w, y0,“。b”);drawnow;设定目标达成问题W1 = linspace(0,0.1,incr);W2 = linspace(0.15,0.5,incr);W0 = [w1 w2];目标=[1.0 * 1(1,长度(w1)) 0(1,长度(w2)));体重= ones(大小(目标));打电话给goalattain选项= optimoptions(“fgoalattain”,“EqualityGoalCount”长度(目标));[a fval attainfactor, exitflag] = fgoalattain (@ (x) filtmin (x, w0),...a0,目标,重量 ,[],[],[],[],[],[],[], 选项);用优化的(最终的)系数绘制Y = filtmin(a,w);持有在、情节(w, y,“r”xlabel([0 0.5 -3])的频率(赫兹)) ylabel (“震级响应(dB)”)传说(“初始”,“最后一次”网格)在
初期係数と最終的な係数で計算した振幅応答を比較してみてください(初期および最終の振幅係数をも振幅応答)。信号处理工具箱™内の関数firpm
(信号处理工具箱)を使用して,このフィルタ,を設計できることに注意してください。
初期および最終の振幅係数をも振幅応答