主要内容

极大极小优化

这个例子展示了如何解决非线性滤波器使用极大极小优化算法设计问题,fminimax在优化工具箱™。注意,运行这个例子中你必须有信号处理工具箱™安装。

设置有限精度参数

考虑一个例子为有限的精密过滤器的设计。为此,你不仅需要指定过滤器的截止频率和数量等设计参数的系数,也有多少位可用自设计是在有限精度。

nbits = 8;%有多少位我们意识到过滤器maxbin = 2 ^ nbits-1;%最大数量expressable nbits比特n = 4;%的系数(过滤+ 1的顺序)Wn = 0.2;%滤波器的截止频率Rp = 1.5;%分贝通带波纹的w = 128;%的频率点

连续设计第一

这是一个连续的滤波器设计;我们使用cheby1,但我们也可以使用ellip,yulewalk雷米在这里:

(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 *的(1、2 * n) 1;vub = maxbin * 1 (1,2 * n);其他的%,否则,都是正面的长春花碱= 0 (1、2 * n);vub = maxbin * 1 (1,2 * n);结束

比例系数

规模最大的价值等于maxbin和其他适当的滤波器系数。

[m]混合= 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 = optimoptions(选项,选项“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 8
硝石=长度(xmask);disp (sprintf (“执行% g阶段优化。\ n \ n”硝酸钠));
执行优化的6个阶段。
m = 1:硝石有趣= @ (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价值约束steplength导数过程0 8 0 0.0001845 3.34 e-07 1 0.0143 0.00329174 - 1 17局部最小值。约束满足。fminimax停止,因为当前的搜索方向的大小小于两倍的价值内一步满足尺寸公差和约束约束宽容的价值。
阶段:2
马克斯线搜索目标定向Iter F-count价值约束steplength导数过程15 0 7 0 0.0414182 1 0.261 0.01649 0.0002558 1 2 23日0.01544 - 6.124 e-07 1 -0.0282黑森当地最低可能的修改。约束满足。fminimax停止,因为当前的搜索方向的大小小于两倍的价值内一步满足尺寸公差和约束约束宽容的价值。
第三阶段:
马克斯线搜索目标定向Iter F-count价值约束steplength导数过程0 6 0 0.05943 5.145 e-11 1 0.776 0.0716961 1 13局部最小值。约束满足。fminimax停止,因为当前的搜索方向的大小小于两倍的价值内一步满足尺寸公差和约束约束宽容的价值。
第四阶段:
马克斯线搜索目标定向Iter F-count价值约束steplength导数过程0 5 0 0.04278 3.353 e-11 1 0.183 0.129938 1 11局部最小值。约束满足。fminimax停止,因为当前的搜索方向的大小小于两倍的价值内一步满足尺寸公差和约束约束宽容的价值。
第五阶段:
马克斯线搜索目标定向Iter F-count价值约束steplength导数过程0 4 0 0.03867 -1.659平台以及1 0.256 0.0901749 1 9局部最小值。约束满足。fminimax停止,因为当前的搜索方向的大小小于两倍的价值内一步满足尺寸公差和约束约束宽容的价值。
第六阶段:
马克斯线搜索目标定向Iter F-count值约束steplength导数过程0 3 0 9.714 0.05033 0.11283 1 7 e-17 1 0.197局部最小值。约束满足。fminimax停止,因为当前的搜索方向的大小小于两倍的价值内一步满足尺寸公差和约束约束宽容的价值。

检查最近的整数值

看看附近的值产生一个更好的过滤。

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

频率响应的比较

我们第一次情节滤波器的频率响应,我们把它比作一个过滤器系数只是圆向上或向下的地方:

次要情节(211)薄熙来= x (1: n);ao = x (n + 1:2 * n);h2 = abs (freqz (bo, ao, 128));情节(w h, w, h2,“o”)标题(优化滤波器对原始的)xround =圆(xorig)
xround =1×81 2 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,“+”)标题(圆形的滤波器对原始的)

图包含2轴对象。坐标轴对象1标题优化滤波器对原始包含2线类型的对象。坐标轴对象与原有标题的过滤器和2包含2线类型的对象。

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

另请参阅

相关的话题