主要内容gydF4y2Ba

cfirpmgydF4y2Ba

复杂非线性相位等纹波FIR滤波器设计gydF4y2Ba

描述gydF4y2Ba

例子gydF4y2Ba

bgydF4y2Ba= cfirpm (gydF4y2BangydF4y2Ba,gydF4y2BafgydF4y2Ba,gydF4y2BafrespgydF4y2Ba)gydF4y2Ba返回一个长度gydF4y2BangydF4y2Ba+1 FIR滤波器与所期望的频率响应的最佳近似gydF4y2BafrespgydF4y2Ba函数,该函数由其函数句柄(gydF4y2Ba@frespgydF4y2Ba).gydF4y2Ba

bgydF4y2Ba= cfirpm (gydF4y2BangydF4y2Ba,gydF4y2BafgydF4y2Ba,gydF4y2BafrespgydF4y2Ba,gydF4y2BawgydF4y2Ba)gydF4y2Ba所指定的权重gydF4y2BawgydF4y2Ba对每个频带的拟合进行加权。gydF4y2Ba

bgydF4y2Ba= cfirpm (gydF4y2BangydF4y2Ba,gydF4y2BafgydF4y2Ba,gydF4y2Ba一个gydF4y2Ba)gydF4y2Ba指定振幅gydF4y2Ba一个gydF4y2Ba在带的边缘gydF4y2BafgydF4y2Ba.此语法返回的结果与gydF4y2BaB = cfirpm(n,f,{@multiband,a})gydF4y2Ba.gydF4y2Ba

bgydF4y2Ba= cfirpm (gydF4y2BangydF4y2Ba,gydF4y2BafgydF4y2Ba,gydF4y2Ba一个gydF4y2Ba,gydF4y2BawgydF4y2Ba)gydF4y2Ba应用一组可选的正权重,每个波段一个,以供优化期间使用。如果您没有指定gydF4y2BawgydF4y2Ba时,函数将权重设置为单位。gydF4y2Ba

例子gydF4y2Ba

bgydF4y2Ba= cfirpm (gydF4y2Ba___gydF4y2Ba,gydF4y2Ba信谊gydF4y2Ba)gydF4y2Ba对设计的脉冲响应施加对称性约束。除了指定gydF4y2Ba信谊gydF4y2Ba,从前面的语法中指定一个输入组合。gydF4y2Ba

bgydF4y2Ba= cfirpm (gydF4y2Ba___gydF4y2Ba,gydF4y2Ba调试gydF4y2Ba)gydF4y2Ba在筛选器设计期间显示或隐藏中间结果。gydF4y2Ba

bgydF4y2Ba= cfirpm (gydF4y2Ba___gydF4y2Ba,gydF4y2BalgridgydF4y2Ba)gydF4y2Ba控制频率网格的密度。gydF4y2Ba

bgydF4y2Ba= cfirpm (gydF4y2Ba___gydF4y2Ba, ' skip_stage2 ')gydF4y2Ba禁用第二阶段优化算法,该算法仅在gydF4y2BacfirpmgydF4y2Ba函数确定一个最优解没有达到标准gydF4y2BafirpmgydF4y2Baerror-exchange。禁用该算法可以提高计算速度,但会降低精度。缺省情况下,启用第二阶段优化。gydF4y2Ba

例子gydF4y2Ba

[gydF4y2BabgydF4y2Ba,gydF4y2BaδgydF4y2Ba= cfirpm(gydF4y2Ba___gydF4y2Ba)gydF4y2Ba返回最大纹波高度gydF4y2BaδgydF4y2Ba.gydF4y2Ba

[gydF4y2BabgydF4y2Ba,gydF4y2BaδgydF4y2Ba,gydF4y2Ba选择gydF4y2Ba= cfirpm(gydF4y2Ba___gydF4y2Ba)gydF4y2Ba方法计算的可选结果gydF4y2BacfirpmgydF4y2Ba函数。gydF4y2Ba

例子gydF4y2Ba

全部折叠gydF4y2Ba

设计了一个31抽头线性相位低通滤波器。显示它的幅度和相位响应。gydF4y2Ba

b = cfirpm(30日[1 -0.5 -0.4 0.7 0.8 1],@lowpass);fvtool (b, 1gydF4y2Ba“OverlayedAnalysis”gydF4y2Ba,gydF4y2Ba“阶段”gydF4y2Ba)gydF4y2Ba

{

使用gydF4y2BacfirpmgydF4y2Ba设计了一个有序FIR滤波器gydF4y2BaNgydF4y2Ba= 22,在归一化频率区间近似非线性相位全通系统gydF4y2Ba wgydF4y2Ba ∈gydF4y2Ba [gydF4y2Ba -gydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba 1gydF4y2Ba ]gydF4y2Ba .计算滤波器的频率响应。gydF4y2Ba

N = 22;W = [-1 1];B = cfirpm(n,w,gydF4y2Ba“allpass”gydF4y2Ba);[h,f] = freqz(b,1,[],gydF4y2Ba“整体”gydF4y2Ba);gydF4y2Ba

的gydF4y2BacfirpmgydF4y2Ba算法近似于给定的滤波器响应gydF4y2Ba 经验值gydF4y2Ba (gydF4y2Ba -gydF4y2Ba jgydF4y2Ba πgydF4y2Ba wgydF4y2Ba NgydF4y2Ba /gydF4y2Ba 2gydF4y2Ba +gydF4y2Ba jgydF4y2Ba 4gydF4y2Ba πgydF4y2Ba wgydF4y2Ba |gydF4y2Ba wgydF4y2Ba |gydF4y2Ba )gydF4y2Ba .绘制频率响应的实部和虚部,并叠加目标响应。gydF4y2Ba

Gf = linspace(-1,1,256);D = exp(-1j*pi*gf*n/2 + 4j*pi*gf.*abs(gf));图subplot(2,1,1) plot(f/,real(h),gydF4y2Ba...gydF4y2Bagf + 1, fftshift(真正的(d)),gydF4y2Ba“。”gydF4y2Ba) ylabel (gydF4y2Ba“真正的”gydF4y2Ba) ylim(1.1 *[1])次要情节(2,1,2)情节(f /π,图像放大(h),gydF4y2Ba...gydF4y2Bagf + 1, fftshift(图像放大(d)),gydF4y2Ba“。”gydF4y2Ba) ylabel (gydF4y2Ba“虚”gydF4y2Baylim(1.1*[-1 1])gydF4y2Ba

图中包含2个轴对象。坐标轴对象1包含2个line类型的对象。坐标轴对象2包含2个line类型的对象。gydF4y2Ba

绘制FIR滤波器的幅值和相位响应。以分贝表示震级响应,以度表示相位响应。gydF4y2Ba

freqz (b 1 [],gydF4y2Ba“整体”gydF4y2Ba)gydF4y2Ba

图中包含2个轴对象。标题为Phase的Axes对象1包含一个类型为line的对象。标题为Magnitude的Axes对象2包含一个类型为line的对象。gydF4y2Ba

使用自定义频率响应函数设计一个30阶的低通滤波器gydF4y2BafrespgydF4y2Ba.的代码。gydF4y2BafrespgydF4y2Ba函数在示例的末尾可用。gydF4y2Ba

[b,三角洲]= cfirpm(30日linspace (1, 1, 32), @fresp);gydF4y2Ba

使用gydF4y2BaFVToolgydF4y2Ba为了可视化滤波器的幅值响应。gydF4y2Ba

fvtool (b, 1)gydF4y2Ba

{

用户定义的gydF4y2BafrespgydF4y2Ba功能:设计一个低通滤波器gydF4y2Ba

的gydF4y2BafrespgydF4y2Ba函数可以让您选择设计低通滤波器、高通滤波器或微分器。过滤器顺序gydF4y2BaNgydF4y2Ba和频率阵列gydF4y2BaFgydF4y2Ba必须指定。如果频率网格gydF4y2Ba女朋友gydF4y2Ba和权重gydF4y2BaWgydF4y2Ba未指定时,函数自动确定这些值。gydF4y2Ba

函数gydF4y2Ba[dh,dw] = fresp(N,F,GF,W) W = [1;1]*(W(:).');W = W(:);类型=gydF4y2Ba低通滤波器的gydF4y2Ba;mags = 0 (size(W));gydF4y2Ba开关gydF4y2Ba类型gydF4y2Ba情况下gydF4y2Ba低通滤波器的gydF4y2BaMags (10:end-10) = 1;gydF4y2Ba情况下gydF4y2Ba“高反差保留”gydF4y2BaMags (1:10) = 1;Mags (end-10:end) = 1;gydF4y2Ba情况下gydF4y2Ba“区别”gydF4y2BaMags = abs(linspace(-pi,pi,length(Mags)));gydF4y2Ba结束gydF4y2Badh = interp1(F(:),mags,GF).*exp(-1j*pi*GF*N/2);dw = interp1(F(:),W,GF);gydF4y2Ba结束gydF4y2Ba

输入参数gydF4y2Ba

全部折叠gydF4y2Ba

过滤器顺序,指定为实正标量。gydF4y2Ba

归一化频率点,指定为具有范围为[- 1,1]的元素的实值向量,其中1对应归一化奈奎斯特频率。频率必须是递增的,并且gydF4y2BafgydF4y2Ba长度必须相等。频带的跨度gydF4y2Baf (gydF4y2BakgydF4y2Ba)gydF4y2Ba来gydF4y2BafgydF4y2Ba(gydF4y2BakgydF4y2Ba+ 1)gydF4y2BakgydF4y2Ba奇数。的时间间隔gydF4y2BafgydF4y2Ba(gydF4y2BakgydF4y2Ba+ 1)gydF4y2BafgydF4y2Ba(gydF4y2BakgydF4y2Ba+ 2)gydF4y2BakgydF4y2Ba奇怪的是gydF4y2Ba过渡的乐队gydF4y2Ba或gydF4y2Ba不关心gydF4y2Ba优化期间的区域。gydF4y2Ba

频率响应,指定为函数句柄。有关更多信息,请参见gydF4y2Ba预定义频率响应函数gydF4y2Ba而且gydF4y2Ba用户自定义频率响应函数gydF4y2Ba.gydF4y2Ba

中指定的点的期望振幅gydF4y2BafgydF4y2Ba,指定为一个向量。点对之间频率处的期望振幅gydF4y2BafgydF4y2Ba(gydF4y2BakgydF4y2Ba),gydF4y2BafgydF4y2Ba(gydF4y2BakgydF4y2Ba+ 1)gydF4y2BakgydF4y2Ba奇数是连接这两个点(gydF4y2BafgydF4y2Ba(gydF4y2BakgydF4y2Ba),gydF4y2Ba一个gydF4y2Ba(gydF4y2BakgydF4y2Ba)及(gydF4y2BafgydF4y2Ba(gydF4y2BakgydF4y2Ba+ 1),gydF4y2Ba一个gydF4y2Ba(gydF4y2BakgydF4y2Ba+ 1)。gydF4y2Ba

用于在每个频带中调整适合度的权重,指定为实值向量。的长度gydF4y2BawgydF4y2Ba长度的一半是gydF4y2BafgydF4y2Ba,所以每个波段只存在一个权重。如果您没有指定gydF4y2BawgydF4y2Ba时,函数将权重设置为单位。gydF4y2Ba

对滤波器设计的脉冲响应施加的对称约束,指定为以下值之一:gydF4y2Ba

  • “没有”gydF4y2Ba-不施加对称约束。如果将任何负频带频率传递给函数或如果gydF4y2BafrespgydF4y2Ba不提供默认值。gydF4y2Ba

  • “甚至”gydF4y2Ba-施加真实而均匀的冲动反应。此选项是高通、低通、全通、带通、带阻、逆sinc和多带设计的默认选项。gydF4y2Ba

  • “奇怪”gydF4y2Ba-施加一个真实而奇怪的冲动反应。此选项是希尔伯特和微分器设计的默认选项。gydF4y2Ba

  • “真实”的gydF4y2Ba-对频率响应施加共轭对称性。gydF4y2Ba

如果指定的值不是gydF4y2Ba“没有”gydF4y2Ba,您必须只指定正频率的带边(负频率区域从对称性填充)。如果您没有指定gydF4y2Ba信谊gydF4y2Ba,函数查询gydF4y2BafrespgydF4y2Ba用于默认设置。任何用户提供的gydF4y2BafrespgydF4y2Ba函数必须返回有效的gydF4y2Ba信谊gydF4y2Ba选项gydF4y2Ba“违约”gydF4y2Ba作为过滤器的顺序gydF4y2BangydF4y2Ba.gydF4y2Ba

在过滤器设计期间显示中间结果,指定为gydF4y2Ba“关闭”gydF4y2Ba,gydF4y2Ba“跟踪”gydF4y2Ba,gydF4y2Ba“阴谋”gydF4y2Ba,或gydF4y2Ba“两个”gydF4y2Ba.gydF4y2Ba

频率网格的密度,指定为整数的单元格数组。频率网格大致有gydF4y2Ba2 ^ nextpow2 (lgrid * n)gydF4y2Ba频率点。gydF4y2Ba

输出参数gydF4y2Ba

全部折叠gydF4y2Ba

过滤器系数,作为长度的行向量返回gydF4y2BangydF4y2Ba+ 1。gydF4y2Ba

最大纹波高度,作为标量返回。gydF4y2Ba

方法计算的可选结果gydF4y2BacfirpmgydF4y2Ba函数,返回为包含这些字段的结构。gydF4y2Ba

场gydF4y2Ba

描述gydF4y2Ba

opt.fgridgydF4y2Ba

频率网格矢量用于滤波器的优化设计gydF4y2Ba

opt.desgydF4y2Ba

每个点的期望频率响应gydF4y2Baopt.fgridgydF4y2Ba

opt.wtgydF4y2Ba

加权的每个点gydF4y2Baopt.fgridgydF4y2Ba

opt.HgydF4y2Ba

每个点的实际频率响应gydF4y2Baopt.fgridgydF4y2Ba

opt.errorgydF4y2Ba

每一点的误差gydF4y2Baopt.fgridgydF4y2Ba

opt.iextrgydF4y2Ba

指数向量gydF4y2Baopt.fgridgydF4y2Ba对于极值频率gydF4y2Ba

opt.fextrgydF4y2Ba

极值频率的向量gydF4y2Ba

更多关于gydF4y2Ba

全部折叠gydF4y2Ba

预定义频率响应函数gydF4y2Ba

预定义的gydF4y2BafrespgydF4y2Ba频率响应函数包括在本节中一些常见的滤波器设计。有关如何创建自定义的详细信息gydF4y2BafrespgydF4y2Ba功能,请参阅gydF4y2Ba创建函数句柄gydF4y2Ba.gydF4y2Ba

对于所有预定义的频响函数,对称选项gydF4y2Ba信谊gydF4y2Ba默认为gydF4y2Ba“甚至”gydF4y2Ba如果gydF4y2BafgydF4y2Ba不包含负频率和gydF4y2BadgydF4y2Ba=gydF4y2Ba0gydF4y2Ba.否则gydF4y2Ba信谊gydF4y2Ba默认为gydF4y2Ba“没有”gydF4y2Ba.详细信息请参见gydF4y2Ba信谊gydF4y2Ba.对于所有预定义的频响函数,gydF4y2BadgydF4y2Ba指定组延迟偏移量,以便筛选器响应的组延迟为gydF4y2BangydF4y2Ba/ 2 +gydF4y2BadgydF4y2Ba以样本间隔为单位。负值产生更少的延迟,而正值产生更多的延迟。默认情况下,gydF4y2BadgydF4y2Ba=gydF4y2Ba0gydF4y2Ba.gydF4y2Ba

  • @lowpassgydF4y2Ba,gydF4y2Ba@highpassgydF4y2Ba,gydF4y2Ba@allpassgydF4y2Ba,gydF4y2Ba@bandpassgydF4y2Ba,gydF4y2Ba@bandstopgydF4y2Ba

    这些函数具有相同的语法,例如gydF4y2Ba@lowpassgydF4y2Ba.gydF4y2Ba

    B = cfirpm(n,f,@lowpass,…)gydF4y2Ba而且gydF4y2Ba

    B = cfirpm(n,f,{@lowpass,d},…)gydF4y2Ba设计线性相位(gydF4y2BangydF4y2Ba/ 2 +gydF4y2BadgydF4y2Ba延迟)过滤器。gydF4y2Ba

    请注意gydF4y2Ba

    为gydF4y2Ba@bandpassgydF4y2Ba滤波器,频率向量中的第一个元素必须小于或等于零,最后一个元素必须大于或等于零。gydF4y2Ba

  • @multibandgydF4y2Ba设计了一种任意带幅的线性相位频响滤波器。gydF4y2Ba

    B = cfirpm(n,f,{@multiband,a},…)gydF4y2Ba而且gydF4y2Ba

    B = cfirpm(n,f,{@multiband,a,d},…)gydF4y2Ba指定向量gydF4y2Ba一个gydF4y2Ba在带边处包含所需的振幅gydF4y2BafgydF4y2Ba.点对之间频率处的期望振幅gydF4y2BafgydF4y2Ba(gydF4y2BakgydF4y2Ba),gydF4y2BafgydF4y2Ba(gydF4y2BakgydF4y2Ba+ 1)gydF4y2BakgydF4y2Ba奇数是连接这两个点(gydF4y2BafgydF4y2Ba(gydF4y2BakgydF4y2Ba),gydF4y2Ba一个gydF4y2Ba(gydF4y2BakgydF4y2Ba)及(gydF4y2BafgydF4y2Ba(gydF4y2BakgydF4y2Ba+ 1),gydF4y2Ba一个gydF4y2Ba(gydF4y2BakgydF4y2Ba+ 1)。gydF4y2Ba

  • @differentiatorgydF4y2Ba设计一种线性相位微分器。对于这些设计,零频率必须在过渡波段,波段权重设置为与频率成反比。gydF4y2Ba

    B = cfirpm(n,f,{@微分器,fs},…)gydF4y2Ba而且gydF4y2Ba

    B = cfirpm(n,f,{@微分器,fs,d},…)gydF4y2Ba指定抽样率gydF4y2BafsgydF4y2Ba用于确定微分器响应的斜率。如果省略了,gydF4y2BafsgydF4y2Ba默认值为1。gydF4y2Ba

  • @hilbfiltgydF4y2Ba设计了线性相位希尔伯特变换滤波器响应。对于希尔伯特设计,零频率必须在过渡波段。gydF4y2Ba

    B = cfirpm(n,f,@hilbfilt,…)gydF4y2Ba而且gydF4y2Ba

    b = cfirpm(N,F,{@hilbfilt,d},…)gydF4y2Ba设计线性相位(gydF4y2BangydF4y2Ba/ 2 +gydF4y2BadgydF4y2BaHilbert变换滤波器。gydF4y2Ba

  • @invsincgydF4y2Ba设计了一种线性相位逆正弦滤波器响应。gydF4y2Ba

    B = cfirpm(n,f,{@invsinc,a},…)gydF4y2Ba而且gydF4y2Ba

    B = cfirpm(n,f,{@invsinc,a,d},…)gydF4y2Ba指定增益gydF4y2Ba一个gydF4y2Ba对于sinc函数,计算为sinc(gydF4y2Ba一个gydF4y2Ba*gydF4y2BaggydF4y2Ba),gydF4y2BaggydF4y2Ba包含归一化到范围[- 1,1]的优化网格频率。默认情况下,gydF4y2Ba一个gydF4y2Ba= 1。组延迟偏移量为gydF4y2BadgydF4y2Ba使过滤器响应具有的组延迟gydF4y2BangydF4y2Ba/ 2 +gydF4y2BadgydF4y2Ba以样本间隔为单位,其中gydF4y2BangydF4y2Ba是过滤器的顺序。负值产生更少的延迟,而正值产生更多的延迟。默认情况下,gydF4y2BadgydF4y2Ba= 0。gydF4y2Ba

用户自定义频率响应函数gydF4y2Ba

而不是预先定义的频响函数gydF4y2BafrespgydF4y2Ba,可以使用自定义函数。gydF4y2Ba

的gydF4y2BacfirpmgydF4y2Ba函数使用此语法调用此用户定义函数。gydF4y2Ba

(dh, dw) =gydF4y2BafrespgydF4y2Ba(n、f gf, w, p1, p2,…)gydF4y2Ba

  • ngydF4y2Ba是过滤器的顺序。gydF4y2Ba

  • fgydF4y2Ba为单调出现在-1到1之间的频带边向量,其中1对应奈奎斯特频率。gydF4y2Ba

  • 女朋友gydF4y2Ba是网格点的向量,已线性插值在每个指定的频带由gydF4y2BacfirpmgydF4y2Ba.输入gydF4y2Ba女朋友gydF4y2Ba确定响应函数必须在其上计算的频率网格。的gydF4y2BacfirpmgydF4y2Ba函数中返回此数据gydF4y2BafgridgydF4y2Ba字段gydF4y2Ba选择gydF4y2Ba结构。gydF4y2Ba

  • wgydF4y2Ba是一个真实的正权重向量,每波段一个,在优化期间使用。gydF4y2BawgydF4y2Ba是可选的调用gydF4y2BacfirpmgydF4y2Ba.如果不指定此输入,gydF4y2BacfirpmgydF4y2Ba在将其传递给之前,将其设置为统一权重gydF4y2BafrespgydF4y2Ba.gydF4y2Ba

  • dhgydF4y2Ba而且gydF4y2BadwgydF4y2Ba所期望的复频率响应和频带权重向量,分别在网格中的每个频率上进行评估gydF4y2Ba女朋友gydF4y2Ba.gydF4y2Ba

  • p1, p2,……gydF4y2Ba是否可以传递给可选参数gydF4y2BafrespgydF4y2Ba.gydF4y2Ba

此外,gydF4y2BacfirpmgydF4y2Ba函数的初始调用gydF4y2BafrespgydF4y2Ba来确定默认的对称性gydF4y2Ba信谊gydF4y2Ba.gydF4y2BacfirpmgydF4y2Ba使用此语法进行此调用。gydF4y2Ba

信谊=gydF4y2BafrespgydF4y2Ba(“违约”,{n, f, [], w, p1, p2,…})gydF4y2Ba
这些参数可以在必要时用于确定适当的对称默认值。您可以使用本地功能gydF4y2Ba低通滤波器gydF4y2Ba作为生成新的频响函数的模板。要找到gydF4y2Ba低通滤波器gydF4y2Ba函数,输入gydF4y2Ba编辑cfirpmgydF4y2Ba在命令行中搜索gydF4y2Ba低通滤波器gydF4y2Ba在gydF4y2BacfirpmgydF4y2Ba函数的代码。您可以复制该函数、修改它、重命名它并将其保存在您的路径中。gydF4y2Ba

算法gydF4y2Ba

的gydF4y2BacfirpmgydF4y2Ba函数使您能够为可能复杂的设计指定任意频域约束gydF4y2Ba冷杉过滤器。切比雪夫(或极小极大)滤波器误差被优化,产生等纹波FIR滤波器设计。gydF4y2Ba

对于复杂的情况,实现了Remez交换方法的扩展版本。这种交换方法在滤波器的等纹波特性限制为时,可以得到最优滤波器gydF4y2BangydF4y2Ba+ 2极值。当滤波器不收敛时,算法切换到上升-下降算法,由上升-下降算法接管,完成对最优解的收敛。欲了解更多细节,请参阅参考文献。gydF4y2Ba

参考文献gydF4y2Ba

[1]德米扬约夫,V. F.和V. N.马洛泽莫夫。gydF4y2BaMinimax简介gydF4y2Ba.纽约:John Wiley & Sons出版社,1974年。gydF4y2Ba

卡拉姆,L.J.gydF4y2Ba切比雪夫感复杂数字FIR滤波器的设计gydF4y2Ba.佐治亚理工学院博士论文,1995年3月。gydF4y2Ba

卡拉姆,l·j·和j·h·麦克莱伦。FIR滤波器设计的复切比雪夫近似gydF4y2BaIEEEgydF4y2Ba®gydF4y2Ba电路与系统汇刊2:模拟与数字信号处理gydF4y2Ba42岁的没有。3(1995年3月):207-216。gydF4y2Ba

扩展功能gydF4y2Ba

版本历史gydF4y2Ba

R2006a之前介绍gydF4y2Ba

另请参阅gydF4y2Ba

|gydF4y2Ba|gydF4y2Ba|gydF4y2Ba