主要内容

信号处理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

函数n = length(a);Y = cos(w'*(0:n-1)*2*pi)*a;

步骤2:调用优化例程

%具有初始系数的图A0 = 1 (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)));体重= 1(尺寸(目标));叫我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时保持接近于零。

另请参阅

相关的话题