分数延迟FIR滤波器的设计
分数延迟滤波器由noninteger旨在将一个数字序列值,通过插值和重采样结合成一个单一的卷积过滤器。这个例子演示了分数延迟FIR滤波器的设计和实现DSP系统中使用工具的工具箱™。
作为一个卷积系统延迟
整数延迟延误
考虑数字信号的延迟, 在哪里D是一个整数。这个操作可以被表示成卷积过滤器 有限脉冲响应 。相应的传递函数 ,frequeny响应 。编程,可以实现这样一个整数延迟滤波器使用下面的MATLAB®代码。
%创建冷杉D = 3;%延迟值h = [0 (1 D) 1]
h =1×40 0 0 1
转变一个序列通过过滤通过冷杉h
。注意开始的前导零的输出,这些意味着固有的这些过滤器的初始条件。
x = (1:10)”;dfir = dsp.FIRFilter (h);y = dfir (x)的
y =1×100 0 0 1 2 3 4 5 6 7
非整数延迟通过D / A插值
推迟一个序列 没有定义当D不是整数。这样明智的分数延迟,需要添加一个中间D / A插值阶段以连续的输出示例。也就是说, 在哪里 表示输入顺列的D / A插值 。D / A插值函数 可以依靠n,可以想到作为一个潜在的模拟信号的表示模型的序列 是采样。这种策略是用于其他重采样率转换等问题。
这个例子将分数延迟滤波器使用两种插值模型,两者都是作为DSP系统工具箱的一部分。
sinc-based插值模型,它使用的带宽受限的重建 。
Lagrange-based插值模型,它使用一个多项式重建 。
带宽受限的分数延迟滤波器
的Shannon-Whittaker插值公式 带宽受限的信号模型。也就是说,中间D / A转换 是一个带宽受限的输入序列的重建。延迟值D,分数延迟 使用相同的 每n,可以表示成一个卷积过滤器。这个过滤器被称为理想的带宽受限的分数延迟滤波器,它的脉冲响应是
。
相应的频率响应(即DTFT)是由 。
因果冷杉近似理想的滤波器带宽受限的转变
理想的sinc改变滤波器前一节中描述的是一个全通滤波器(即。 ),但它有一个无限脉冲响应和非因果 。在MATLAB中,它不能被表示为一个向量,而是作为一个索引的函数k。
%理想滤波器序列D = 0.4;hIdeal = @ (k) sinc (k);
对于实际的和计算的目的来说,理想的滤波器可以在有限指标窗被截断,在一些带宽成本损失。延迟的价值目标 和所需的长度N,窗口的指数 令人满意的 是对称的 ,抓住了理想滤波器的主瓣。为 在哪里 和一个整数 ,明确窗口指标 。整数 被称为整数的延迟,可以任意选择。冷杉因果,集 ,所以指数窗口 。下面的代码描述了背后的因果冷杉近似。
%冷杉近似与因果转变N = 6;idxWindow =(地板((N - 1) / 2):地板(N / 2) ';i0 = -idxWindow (1);%因果延迟hApprox = hIdeal (idxWindow);plot_causal_fir (“sinc”D N,钱数,hApprox hIdeal);
截断sinc过滤引起脉动的频率响应,这可以通过应用权重来解决 (如皇帝或汉明)冷杉系数。
最后,由此产生的冷杉理想带宽受限的分数延迟滤波器的近似模型如下所示。
你可以设计这样一个过滤器使用designFracDelayFIR
函数和dsp.VariableFractionalDelay
系统对象™“杉”
模式,这两种使用Kaiser窗权重。
Lagrange-based分数延迟滤波器
Lagrange-based分数延迟滤波器使用polynmial拟合在一个移动窗口的输入样本。也就是说, 多项式的一些固定的学位K。像sinc-based延迟过滤器,Lagrange-based延迟过滤器可以作为因果冷杉卷积(即制定。 )的长度N = K + 1,和金宝app支持该指数窗 。类似于sinc-based模型,应用因果延迟 。给定一个分数延迟 ,冷杉系数 (因果转移)的拉格朗日延迟滤波器可以通过求解一个线性equaions系统,如下书面。这些方程描述标准的拉格朗日多项式拟合问题。
在这里, 的枚举指数样本窗口。实现比较简单。
%滤波器参数FD = 0.4;K = 7;%多项式程度N = K + 1;%冷杉长度idxWindow =(地板((N - 1) / 2):地板(N / 2) ';%定义和求解拉格朗日插值方程V = idxWindow。^ (0: K);%范德蒙结构C = FD。^ (0: K);hLagrange = C / V;%求出系数i0 = -idxWindow (1);%因果延迟plot_causal_fir (“拉格朗日”FD, N,钱数,hLagrange);
这个模型可以被实现为一个直接形式冷杉过滤器如果延迟值FD是固定的,或者使用一个法罗结构如果延迟值是不同的。有一个章节专门用来implementaiton拉格朗日插值使用dsp.VariableFractionalDelay
在“法罗”
模式。
设计和实现sinc-Based分数延迟FIR滤波器
以下部分是重点设计和实现sinc-based分数延迟滤波器。
这个函数designFracDelayFIR
在Length-based设计模式
这个函数designFracDelayFIR
提供了一个简单的界面设计的分数延迟滤波器延时值FD
和长度N
。
FD = 0.32381;N = 10;h = designFracDelayFIR (FD, N)
h =1×100.0046 -0.0221 0.0635 -0.1664 0.8198 0.3926 -0.1314 0.0552 -0.0200 0.0042
滤波器的实现可以通过使用任何标准滤波器等dsp.FIRFilter
系统对象。
%创建一个冷杉过滤器对象fdfir = dsp.FIRFilter (h);
延迟的信号通过设计过滤器过滤它。
%生成一些输入n = (1:10 0) ';x = gen_input_signal (n);%滤波器的输入信号y = fdfir (x);plot_sequences (x, n, y);传奇(滤波器输出的,原始序列的)标题(“原始输入序列滤波器输出vs。”)
请注意,延迟并不是实际的过滤器
,而是
因为因果整数延迟
。
返回的延迟designFracDelayFIR
函数作为第二个输出参数。
[h, i0] = designFracDelayFIR (FD, N);
整体延迟仅仅是理想的分数的总和延迟和整数发生延迟。
Dtotal = i0 + FD
Dtotal = 4.3238
这个总延迟也是冷杉滤波器的群时延较低频率。验证通过outputDelay
函数。
[Doutput, ~, ~] = fdfir.outputDelay (Fc = 0)
Doutput = 4.3238
转变的情节总输入序列的延迟 使滤波器的输出与预期的结果。
plot_sequences (n n + Dtotal, x,, y);传奇(滤波器输出的,输入序列的转移(FD + i0)”)标题(滤波器输出vs。时间调整输入序列的)
请注意,输入标记位于转移 通常不配合输出样本标记 ,因为 落在noninteger值在x轴上,而n是整数。相反,将输入样本约落在一条线连接每个连续两个输出样本。
plot_sequences (n + i0 + FD, x,, y,“线”);传奇(滤波器输出的,输入序列的转移(FD + i0)”)标题(输出样本vs。改变输入样本的)xlim ((20、30))
的dsp.VariableFractionalDelay
系统对象“杉”
模式
类似于designFracDelayFIR
,dsp.VariableFractionalDelay
对象也可以设计sinc-based延迟过滤器一起使用时的冷杉的
inteprolation模式。首先创建一个实例系统的对象。冷杉的长度总是甚至,被指定为一个半身的参数。
vfd_fir = dsp.VariableFractionalDelay (“InterpolationMethod”,“杉”,“FilterHalfLength”、N / 2);i0_vfd_fir = vfd_fir.FilterHalfLength;%延迟浮点数值用
通过所需的分数延迟对象调用第二个输入参数。确保您所指定的延迟值包括整数延迟。
y = vfd_fir (x, i0 + FD);发行版(vfd_fir) plot_sequences (n + i0 + FD, x, n, y);传奇(滤波器输出的,输入序列的转移(FD + i0)”)标题(dsp。在冷杉VariableFractionalDelay模式”)
的比较designFracDelayFIR
和dsp.VariableFractionalDelay
“杉”模式
这两个designFracDelayFIR
和dsp.VariableFractionalDelay
在“杉”
模式提供sinc-based分数延迟滤波器,但它们的实现是不同的。
的
dsp.VariableFractionalDelay
由一个有理数接近延迟的值 宽容一些,然后分数延迟作为样品kth阶段(长)插值滤波器的长度l。这需要增加内存使用,延迟和收益率的不准确。相比之下,
designFracDelayFIR
直接生成冷杉系数,而不是抽样更长的冷杉。这给精确的分数延迟价值,成本更少的内存。的
designFracDelayFIR
有一个简单的函数接口返回冷杉系数,使得滤波器实现的用户。的dsp.VariableFractionalDelay
系统对象是完全encapsualte过滤器的设计和实现。
的使用designFractionalDelayFIR
是首选dsp.VariableFractionalDelay
在“杉”
模式因其简单性、更好的性能和效率。在下面的图中,滤波器设计dsp.VariableFractionalDelay
更短的带宽,和群延迟了~ 0.02的名义价值。
%获得dsp的冷杉系数。VariableFractionalDelay对象h_vfd_fir = vfd_fir ([1, 0 (31,1)], i0_vfd_fir + FD);释放(vfd_fir);plot_freq_and_gd (h,钱数,[],“designFracDelayFIR”h_vfd_fir i0_vfd_fir, [],“dsp。VariableFractionalDelay冷杉模式”);持有在;yline (FD,“DisplayName的”,目标分数延迟的);ylim ([-0.1, 0.4])
设计和实现Lagrange-based延迟过滤器
Lagrange-based分数延迟滤波器计算便宜并使用法罗结构可以有效地实现。法罗过滤器是一种特殊类型的冷杉,实现利用初等代数操作,如标量增加和乘法。与sinc-based设计,法罗过滤器(如不需要专门的功能sinc或贝塞尔)计算延迟冷杉系数。这使得法罗分数延迟滤波器特别简单的一个基本的硬件上实现。
缺点是,Lagrange-based延迟过滤器是局限于低订单,由于高度的高度不稳定多项式近似的性质。这通常结果带宽较低,相比与sinc-based过滤器。
系统对象dsp.VariableFractionalDelay
在“法罗”
模式
使用系统对象dsp.VariableFractionalDelay
在“法罗”
模式创建和实现法罗延迟过滤器。首先创建一个实例系统的对象:
= dsp.VariableFractionalDelay(变频“InterpolationMethod”,“法罗”,“FilterLength”8);i0var =地板(vfd.FilterLength / 2)%的延迟浮点数值用过滤器
i0var = 4
应用创建的对象的输入信号,绘制结果。
y = (x, i0var + FD)变频;plot_sequences (n n + i0var + FD, x, y);传奇(“法罗分数延迟输出”,输入序列的转移(FD + i0)”)标题(dsp。VariableFractionalDelay Farrow模式”)
你也可以改变分数延迟值。下面的代码操作20帧样本,同时增加每一帧的延迟值。注意延迟输出图的增加,相应的延迟的变化值。
释放(vfd) FDs = i0var + 5 * (0:0.2:0.8);%分数延迟向量xsource = dsp.SignalSource (x, 20);ysink = dsp.AsyncBuffer;为FD = FDs xk = xsource ();yk =变频(xk, FD);写(ysink yk);结束y =阅读(ysink);plot_sequences (n n + i0var, x,, y);传奇(“分数延迟输出变量”,“原始序列(由i0转移)”)标题(dsp。VariableFractionalDelay在产模式下,不同延迟的)
冷杉分数延迟滤波器的带宽:分析和设计
长过滤器给更好的近似理想延迟滤波器。实际上,原始的二次规范的情况。然而,我们需要一个度量实际上更有意义,比如带宽。这个函数designFracDelayFIR
措施相结合的带宽,它被定义为的频率范围内获得和群延迟在标称值的1%。测量带宽相结合可以得到的返回值designFracDelayFIR
函数。比较一个过滤器长度16(蓝色)的滤波器长度256下面的图(红色)。正如预期的那样,时间越长滤波器结合带宽要高得多得多。
FD = 0.3;N1 = 16;N2 = 256;[h1, i1, bw1] = designFracDelayFIR (FD, N1);[h2、i2 bw2] = designFracDelayFIR (FD, N2);plot_freq_and_gd (h1, i1, bw1“N = "+ num2str (N1), h2、i2 bw2,“N = "+ num2str (N2));ylim ([-0.2, 0.6])
这个函数designFracDelayFIR
在带宽设计模式
带宽的设计模式designFracDelayFIR
可以确定所需的长度对于一个给定的带宽。指定延迟价值和期望的目标函数带宽作为输入,和函数将找到合适的长度。
FD = 0.3;bwLower = 0.9;%的目标带宽下限(h, i0fixed, bw) = designFracDelayFIR (FD, bwLower);fdfir = dsp.FIRFilter (h);信息(fdfir)
ans =6 x35 char数组离散时间冷杉过滤器(真正的)“- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -“滤波器结构:直接形式冷杉的滤波器长度:52“稳定:是的“线性相位:不”
请注意,bwLower
只是一个下界的总带宽。这个函数返回一个过滤器,它的总带宽至少在指定的值bwLow
。
高带宽的信号失真
在本节中,我们比较两个设计点的性能(长sinc v.s.短拉格朗日),高带宽输入。的dsp.VariableFractionalDelay
在前一节中是一个8度法罗结构,有效长度的冷杉9。筛选得到的designFracDelayFIR (FD, 0.9)
有52个样品的长度。把两个冷杉频率响应在同一图演示了带宽这两个的区别。
释放(vfd);赫瓦尔=变频([1,0 (31,1)],i0var + FD);plot_freq_and_gd (h, i0fixed bw,“Sinc-based”赫瓦尔i0var, [],“法罗”);ylim ([-0.2, 0.6])
在一个高带宽信号,应用这两个过滤器如下图相比。Sinc左边列,法罗在右边。时域上一行,频率在底部。结果如预期:
时间越长sinc滤波器具有更高的带宽。较短的法罗滤波器有较低的带宽。
信号失真是几乎不存在的使用时间越长sinc过滤器,但容易明显短法罗的过滤器。
更高的精度为代价的时间延迟:约25样品v.s.只有4短过滤器。
n =(接触);x = high_bw_signal (n);日元= fdfir (x);y2 = (x, i0var + FD)变频;plot_signal_comparison (n, x, y1, y2, h,赫瓦尔,i0fixed, i0var, FD);
应该使用:dsp.VariableFractionalDelay
或designFracDelayFIR
吗?
这个决定在很大程度上是基于滤波器的需求和目标平台。
高带宽和准确的群延迟响应,使用
designFracDelayFIR
函数。请记住,这个设计过程是更多的计算量。因此,它更适合部署在一个高端的硬件,特别是实时调整的延迟值。它也适合低端硬件部署,如果延迟值是固定的,和设计可以离线完成。时变延迟过滤器针对低档次计算装置,使用
dsp.VariableFractionalDelay
与“法罗”
模式。