主要内容

fgoalattainを使用した信号処理

線形位相有限脉冲响应(杉木)フィルターの設計について考えてみます。問題とするのは0と0.1赫兹間の周波数帯域で振幅1,0.15と0.5 Hz間で振幅0となるローパスフィルターの設計です。

このようなフィルタ,の周波数応答H(f)は次のように定義されます。

H f n 0 2 h n e j 2 π f n 一个 f e j 2 π f 一个 f n 0 1 一个 n 因为 2 π f n (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(信号处理工具箱)を使用して,このフィルタ,を設計できることに注意してください。

初期および最終の振幅係数をも振幅応答

随着频率(x轴)的增加,初始响应看起来像一个阻尼正弦信号。最终响应接近于在频率0到0.1处值为1的分段线性函数,当频率从0.1到0.15增加时,从1到0是线性的,当频率高于0.15时保持在接近零的位置。

参考

関連するトピック