主要内容

信号处理应用fgoalattain

考虑设计一个线性相位有限脉冲响应(FIR)滤波器。问题是设计一个低通滤波器,在0到0.1 Hz之间的所有频率上震级为1,在0.15到0.5 Hz之间震级为0。

频率响应Hf),因为这样的过滤器是由

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)

在哪里一个f)为频率响应的大小。一种解决方法是对频率响应的大小应用目标实现方法。给定一个计算大小的函数,fgoalattain会尝试改变大小系数吗一个n)直到震级响应与期望响应在一定公差范围内匹配为止。文中给出了计算震级响应的函数filtmin.m.此函数使用一个,大小函数系数,和w,所关注频域的离散化。

要设置目标实现问题,必须指定目标而且权重为了这个问题。对于0到0.1之间的频率,目标是1。对于介于0.15和0.5之间的频率,目标是零。频率在0.1到0.15之间没有指定,所以在这个范围内不需要目标或权重。

该信息存储在变量中目标传递给fgoalattain.的长度目标与函数返回的长度相同吗filtmin.这样目标通常都能得到同样的满足重量将被设置为abs(目标).但是,由于有些目标为零,使用效果不佳重量= abs(目标)将力的目标与重量0以满足为硬约束,与目标配合重量1可能未达到(见目标实现方法).因为所有目标的大小都很接近,使用a重量对所有目标的统一将给予它们同等的优先。(使用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时保持在接近零的位置。

另请参阅

相关的话题