主要内容

信号处理使用fgoalattain

考虑设计一个线性相位有限脉冲响应滤波器(杉木)。问题是设计一个低通滤波器和一个级频率介于0和0.1赫兹和零级0.15和0.5赫兹之间。

频率响应H(f)被定义为这样一个过滤器

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之间的频率,目标就是其中之一。频率在0.15和0.5之间,我们的目标是零。没有指定频率在0.1和0.15之间,所以不需要任何目标或重量在这个范围内。

这些信息存储在变量中目标传递给fgoalattain。的长度目标函数返回的是一样的长度吗filtmin。所以同样满意的目标,通常重量将被设置为abs(目标)。然而,由于一些目标是零,使用的效果重量= abs(目标)将迫使目标重量0是满足硬约束和目标重量1可能underattained(参见目标实现方法)。因为所有的目标是密切在大小,使用重量统一的目标会给他们平等的优先级。(使用abs(目标)的权重的大小更重要目标更重要的是不同的。)同时,设置

选择= optimoptions (“fgoalattain”,“EqualityGoalCount”长度(目标));

指定每个目标应该尽可能接近其目标价值(无论是大还是不到)。

步骤1:filtmin.m写一个文件

函数y = filtmin (w) n =长度(a);y = cos (w * (0: n - 1) * 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、增加);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])包含(的频率(赫兹))ylabel (“级响应(dB)”)传说(“初始”,“最后一次”网格)

比较级响应计算初始系数和最终系数(大小与初始和最终级响应系数)。请注意,您可以使用firpm(信号处理工具箱)函数信号处理工具箱™软件设计这种滤波器。

大小与初始和最终级响应系数

最初的反应看起来像一个阻尼正弦信号频率(轴)增加。最后的反应是接近分段线性函数与频率值1 0到0.1,线性从1到0随着频率的增加从0.1到0.15,和保持接近零的频率高于0.15。

另请参阅

相关的话题