主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

ミニマックス最適化

この例では、优化工具箱™のミニマックス最適化アルゴリズムfminimaxを使用して非線形フィルターの設計問題を解く方法を説明します。この例を実行するには,信号处理工具箱™がインストールされていなければなりません。

有限精度パラメーターの設定

有限精度フィルターの設計の例を考えます。そのためには,フィルター設計パラメーター(カットオフ周波数や係数の数など)を指定するだけでは不十分です。設計が有限精度であるため,使用可能なビット数も指定しなければなりません。

nbits = 8;我们有多少位来实现过滤器maxbin = 2 ^ nbits-1;%以nbits位表示的最大数目n = 4;%系数个数(滤波器阶数+ 1)Wn = 0.2;%滤波器截止频率Rp = 1.5;通频带波纹的分贝w = 128;%要取的频率点数

まず連続設計

これは連続フィルター設計です。cheby1を使用しますが,ellipyulewalk,または雷米を使用することもできます。

(b1, a1] = cheby1 (n - 1、Rp Wn);[h, w] = freqz (b1, a1, w);%的频率响应h = abs (h);%级响应情节(w h)标题(“使用非整数变量的频率响应”

x = (b1, a1);%设计变量

フィルター係数の範囲の設定

最大値と最小値に範囲を設定します。

如果(任何(x < 0))%如果有负数-必须节省空间使用符号位%,因此减少maxbinmaxbin =地板(maxbin / 2);负载均衡= -maxbin * ones(1, 2*n)-1;wub = maxbin * ones(1, 2*n);其他的%否则,全部为正数长春花碱= 0(1、2 * n);wub = maxbin * ones(1, 2*n);结束

係数のスケーリング

maxbinに等しい最大値を設定し,他のフィルター係数を適切にスケーリングします。

[m, mix] = max(abs(x));因素= maxbin / m;X =因子* X;重新调整其他过滤系数xorig = x;xmask = 1:2 * n;%去掉控制直流增益的最大值和元素从可更改的值列表中选择。xmask(混合)= [];nx = 2 * n;

最適化基準の設定

optimoptionsを使用して,実行時間を短縮するために終了基準を適度に高い値に調整します。また,反復ごとに結果の表示をオンにします。

选择= optimoptions (“fminimax”...“StepTolerance”, 0.1,...“OptimalityTolerance”1的军医,...“ConstraintTolerance”1 e-6...“显示”“通路”);

最大絶対値の最小化

最大絶対値を最小にしなければならないため,选项。MinAbsMaxを周波数点の数に設定します。

如果长度(w) == 1 options = options(options,“AbsoluteMaxObjectiveCount”, w);其他的选择= optimoptions(选项,“AbsoluteMaxObjectiveCount”、长度(w));结束

最適化のための最初の値の削除

FMINIMAXを呼び出すことで,最初の値の離散化と削除を行い,最適化を実行します。

[x, xmask] = elimone(x, xmask, h, w, n, maxbin)
x =1×80.5441 1.6323 1.6323 0.5441 57.1653 -127.0000 108.0000 -33.8267
xmask =1×61 2 3 4 5 5
硝石=长度(xmask);disp (sprintf ('执行%g阶段的优化。\n\n'硝酸钠));
执行6个优化阶段。
M = 1:niters fun = @(xfree)filtobj(xfree,x,xmask,n,h,maxbin);%的目标confun = @ (xfree) filtcon (xfree x, xmask n、h、maxbin);%非线性约束disp (sprintf (“阶段:% g \ n”, m));x (xmask) = fminimax(有趣,x (xmask ),[],[],[],[], 长春花碱(xmask) vub (xmask),...confun选项);[x, xmask] = elimone(x, xmask, h, w, n, maxbin);结束
阶段:1
目标最大线搜索方向Iter F-count值约束步长导数约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,且约束条件满足在约束公差值内。
阶段:2
目标Max Line搜索方向Iter F-count值约束步长导数约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,且约束条件满足在约束公差值内。
第三阶段:
目标最大线搜索方向Iter f计数值约束步长导数过程0 6 0 0.0716961 1 13 0.05943 2.6e-10 1 0.776局部最小可能。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,且约束条件满足在约束公差值内。
第四阶段:
目标最大线搜索方向Iter F-count值约束步长导数约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,且约束条件满足在约束公差值内。
第五阶段:
目标最大线搜索方向Iter F-count值约束步长导数约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,且约束条件满足在约束公差值内。
第六阶段:
目标最大线搜索方向Iter f计数值约束步长导数程序03 0 0.11283 17 0.05033 9.714e-17 1 0.197局部最小可能。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,且约束条件满足在约束公差值内。

最も近い整数値のチェック

最も近い値によってフィルターの機能が向上するかどうか確認します。

xold = x;xmask = 1:2 * n;Xmask ([n+1, mix]) = [];X = X + 0.5;I = xmask [x, xmask] = elimone(x, xmask, h, w, n, maxbin);结束xmask = 1:2 * n;Xmask ([n+1, mix]) = [];X = X - 0.5;I = xmask [x, xmask] = elimone(x, xmask, h, w, n, maxbin);结束如果任何(abs(x) > maxbin) x = xold;结束

周波数応答の比較

まず,フィルターの周波数応答をプロットし,そのフィルターを,係数が切り上げまたは切り捨てられるフィルターと比較します。

Subplot (211) bo = x(1:n);ao = x (n + 1:2 * n);h2 = abs (freqz (bo, ao, 128));情节(w h, w, h2,“o”)标题(“优化滤镜vs原创”xround =圆(xorig)
xround =1×812 2 1 57 -127 108 -34
b = xround (1: n);一个= xround (n + 1:2 * n);h3 = abs (freqz (b, a, 128));次要情节(212)情节(w h, w, h3,“+”)标题(“圆形滤镜与原始滤镜”

无花果= gcf;fig.NextPlot =“替换”

参考

関連するトピック