主要内容

信号处理使用fgoalattain

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

频率响应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 =长度(a);Y = cos(w'*(0:n-1)*2*)*a;

步骤2:调用优化例程

用初始系数绘图a0 = 1(15日1);增加= 50;w = linspace(0、0.5、增加);y0 = filtmin (a0, w);clf、情节(w, y0,“。b”);drawnow;设定实现目标的问题W1 = linspace(0,0.1,incr);w2 = linspace(0.15, 0.5,增加);W0 = [w1 w2];目标=[1.0 * 1(1,长度(w1)) 0(1,长度(w2)));重量= 1(大小(目标));%叫fgoalattain选择= optimoptions (“fgoalattain”“EqualityGoalCount”长度(目标));[a fval attainfactor, exitflag] = fgoalattain (@ (x) filtmin (x, w0),...a0,目标,重量 ,[],[],[],[],[],[],[], 选项);用优化的(最终)系数绘图y = filtmin (w);持有、情节(w, y,“r”([0 0.5 -3 3]) xlabel(的频率(赫兹)) ylabel (“级响应(dB)”)传说(“初始”“最后一次”网格)

比较计算的震级响应与初始系数和最终系数(具有初始和最终震级系数的震级响应).注意,您可以使用firpm(信号处理工具箱)函数来设计该滤波器。

具有初始和最终震级系数的震级响应

当频率(x轴)增加时,初始响应看起来像一个阻尼正弦信号。最终的响应接近于一个分段线性函数,在频率为0到0.1时值为1,当频率从0.1增加到0.15时从1到0为线性,当频率高于0.15时保持在接近零。

另请参阅

相关的话题

Baidu
map