主要内容

最低限度优化

此示例显示了如何使用Minimax优化算法来解决非线性滤波器设计问题,fminimax.,在优化工具箱™中。请注意,要运行此示例,必须安装信号处理工具箱™。

设置有限精度参数

考虑一个有限精度滤波器设计的例子。为此,您不仅需要指定滤波器设计参数,如截止频率和系数的数量,而且还需要指定有多少位可用,因为设计是有限精度的。

nbits = 8;%我们有多少位来实现过滤器maxbin = 2 ^ nbits-1;nbits位中可比的最大数量%n = 4;%系数数量(滤波器加1的顺序)Wn = 0.2;滤波器的截止频率Rp = 1.5;通频带波纹的分贝w = 128;%要取的频率点数

连续设计第一

这是一个连续的过滤器设计;我们使用cheby1,但我们也可以用椭圆形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);vlb = -maxbin * vlb(1,2 * n)-1;vub = maxbin *那些(1,2 * n);其他的%否则,所有积极的VLB =零(1,2 * N);vub = maxbin *那些(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...'展示'“通路”);

最小化绝对最大值

我们需要最大限度地减少绝对最大值,因此我们将Options.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
niters =长度(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),[],[],[],[],VLB(XMASK),VUB(XMASK),...confun选项);[x, xmask] = elimone(x, xmask, h, w, n, maxbin);结束
阶段1
目标最大线搜索方向Iter F-count值约束步长导数约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,且约束条件满足在约束公差值内。
阶段:2
目标最大线路搜索定向磨损器F计值约束STEPLENCTENT衍生物步骤0 7 0 0.0121182 1 15 0.01649 0.01544 6.124E-07 0.01544 6.124E-07 1 -0.0282 Hessian改性本地最低可能。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,且约束条件满足在约束公差值内。
阶段:3
目标最大线搜索方向Iter f计数值约束步长导数步骤0 0 0.0716961 1 13 0.05943 2.787e-11 1 0.776局部最小可能。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,且约束条件满足在约束公差值内。
阶段:4
目标最大线搜索方向Iter F-count值约束步长导数约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,且约束条件满足在约束公差值内。
阶段:5
目标最大线路搜索定向磨损器F计值约束步骤Steplength衍生过程0 4 0 0.0901749 1 9 0.03867 -1.671E-10 1 0.256局部最低。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,且约束条件满足在约束公差值内。
阶段:6
目标最大线路搜索定向磨损器F计值约束Steplength衍生过程0 3 0 0.11283 1 7 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] = fimume(x,xmask,h,w,n,maxbin);结束xmask = 1:2 * n;Xmask ([n+1, mix]) = [];X = X - 0.5;i = xmask [x,xmask] = fimume(x,xmask,h,w,n,maxbin);结束如果任何(abs(x)> maxbin)x = xold;结束

频率响应比较

我们首先绘制过滤器的频率响应,我们将其与滤波器进行比较,其中系数刚刚向上或向下舍入:

子图(211)BO = 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);a = xround(n + 1:2 * n);h3 = abs(freqz(b,a,128));子图(212)绘图(W,H,W,H3,'+') 标题('圆形过滤器与原创'

图中包含2个轴对象。轴对象1与标题优化过滤器与原始包含2个对象的类型行。带有标题的轴对象2圆角过滤器与原始包含2个类型为line的对象。

图= GCF;fig.nextplot =.'代替'

另请参阅

相关的话题