主要内容

极大极小优化

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

设置有限精度参数

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

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

连续设计第一

这是一个连续的过滤器设计;我们用Cheby1.,但我们也可以使用ellip养奖雷梅斯在这里:

[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;%Rescale其他滤波器系数xorig = x;xmask = 1:2 * n;%删除控制D.C.增益的最大值和元素从可更改的值列表中选择。xmask(mix)= [];nx = 2 * n;

设置优化标准

使用优化选择,将终止标准调整到合理的高值,以促进较短的运行时间。还可以在每次迭代时打开结果显示:

选择= optimoptions (“fminimax”......'steptolerance',0.1,......'OptimalalcaltalTolerance',1e-4,......'约束专利',1e-6,......“显示”'iter');

最小化绝对最大值

我们需要最小化绝对最大值,所以我们设置选项。MinAbsMax为频率点数:

如果长度(w)== 1选项= Optimoptions(选项,'absolutemaxobjectivecount',w);别的选项= Optimoptions(选项,'absolutemaxobjectivecount'、长度(w));结尾

消除优化的第一个值

通过调用fminimax来离散和消除第一个值并执行优化:

[X,XMASK] = ELPONE(X,XMASK,H,W,N,MAXBIN)
X =1×8.0.5441 1.6323 1.6323 0.5441 57.1653 -127.0000 108.0000 -33.8267
xmask =1×6.1 2 3 4 5 8
硝石=长度(xmask);DISP(SPRINTF('执行优化的%g阶段。\ n \ n',niters)));
执行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),......陈列赛,选择);[x,xmask] =消除(x,xmask,h,w,n,maxbin);结尾
阶段:1
目标最大线路搜索定向磨损器F计值约束STEPLENCTENT衍生过程0 8 0 0.0001845 3.34E-07 3.34E-07 1 0.0143局部最低。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长的值的量,但是满足约束公差的值满足。
阶段:2
目标Max Line搜索方向Iter F-count值约束步长导数约束满足。Fminimax停止,因为当前搜索方向的大小小于步长的值的量,但是满足约束公差的值满足。
第三阶段:
目标MAX线路搜索定向磨损器F计值约束STEPLENCTENT衍生步骤0 6 0 0.05943 -1.156E-11 1 0.776局部最低可能。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长的值的量,但是满足约束公差的值满足。
第四阶段:
目标最大线搜索方向Iter F-count值约束步长导数约束满足。Fminimax停止,因为当前搜索方向的大小小于步长的值的量,但是满足约束公差的值满足。
第五阶段:
目标最大线搜索方向Iter F-count值约束步长导数约束满足。Fminimax停止,因为当前搜索方向的大小小于步长的值的量,但是满足约束公差的值满足。
第六阶段:
目标最大线搜索方向Iter F-count值约束步长导数约束满足。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×8.12 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个类型为line的对象。带有标题的轴2圆角过滤器与原始包含2个类型为line的对象。

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

也可以看看

相关的话题