文档

IIR滤波器设计规定的群延迟

这个例子展示了如何设计任意群延迟使用fdesign过滤器。arbgrpdelay过滤器设计师。这个设计师使用least-Pth约束优化算法设计allpass IIR滤波器群延迟满足规定。

fdesign。arbgrpdelay可以用于群延迟均衡。

任意的群延迟滤波器设计

您可以使用fdesign。arbgrpdelay设计一个allpass过滤器与所需的群延迟响应。所需的群延迟在相对意义上指定。实际的群延迟取决于过滤器订单(订单越高,越高延迟)。然而,如果你减去由于滤波器群时延的抵消订单,设计滤波器的群时延匹配所需的群延迟。下面的代码提供了一个示例使用两种不同的过滤器订单。

N = 8;%过滤器订单N2 = 10;%替代过滤订单0.1 F = [0 1);%频率向量Gd = (1 2 3);%的群延迟R = 0.99;% Pole-radius约束

注意,在一个allpass过滤器,分子总是分母的反向版本。出于这个原因,你不能指定不同的分子和分母fdesign.arbgrpdelay订单。

下面的代码显示了一个带任意群延迟设计所需的群时延值,在指定的频率点,f Gd,单一乐队设计指定的群延迟覆盖整个奈奎斯特频率值区间[0 1]*πrad /样品。

arbGrpSpec = fdesign.arbgrpdelay (“N、F Gd”N、F Gd)% #好吧
arbGrpSpec = arbgrpdelay属性:回应:“任意群延迟”规范:N、F Gd的描述:{3 x1细胞}NormalizedFrequency: 1 FilterOrder: 8频率:[0 0.1000 - 1]GroupDelay: (1 2 3)
arbGrpDelFilter1 =设计(arbGrpSpec,“MaxPoleRadius”R“SystemObject”,真正的);%总群时延测量一组频率点从0到1。%的名义群时延测量过滤器使用测量方法。Fpoints = 0:0.001:1;M1 =测量(arbGrpSpec arbGrpDelFilter1 Fpoints);%设计另一个过滤器订单等于N2。arbGrpSpec。FilterOrder = N2;arbGrpDelFilter2 =设计(arbGrpSpec,“MaxPoleRadius”R“SystemObject”,真正的);M2 =测量(arbGrpSpec arbGrpDelFilter2 Fpoints);%绘制测量总群延迟减去名义群延迟。情节(Fpoints M1.TotalGroupDelay-M1.NomGrpDelay,“b”,Fpoints M2.TotalGroupDelay-M2.NomGrpDelay,‘g’,[0 0.1 - 1],[2 3 1],“r”);包含(的归一化频率(\乘以π\ rad /样本));ylabel (的群时延(样本));网格;传奇(“八阶设计”,“第十阶设计”,“期望的反应”)

下面的情节显示实际的群延迟的两个设计是不同的。这个结果的意义是,我们必须找到一个折衷更好的适合所需的相对群延迟(连锁)和一个更大的整体延迟滤波器。

fvt = fvtool (arbGrpDelFilter1 arbGrpDelFilter2,“分析”,“grpdelay”);传奇(fvt“八阶设计”,“第十阶设计”)

通频带群延迟均衡

fdesign的主要用途。arbgrpdelay是补偿非线性相位IIR滤波器的响应。allpass自补偿滤波器,它可以与滤波器级联补偿而不影响其大小的反应。自级联两个过滤器是一种IIR滤波器本身,它不能有线性相位(稳定时)。然而,它是可能有大约一个线性相位响应在整个滤波器的通带。

低通均衡

下面的例子使用fdesign。arbgrpdelay来平衡通椭圆滤波器的群时延响应而不影响其大小的反应。

你使用多波段设计指定所需的群延迟的值在一个或多个乐队感兴趣的同时让所有其他频段的群延迟不明(不在乎地区)。在本例中只有一个乐队感兴趣的等于低通滤波器的通带。你想要补偿这个乐队的群延迟,和不关心结果群时延值之外的。

%设计一个椭圆滤波器通带频率为0.2 *π% rad /样品。通频带测量总群延迟。ellipFilter =设计(fdesign.lowpass (“N, Fp,美联社,Ast”4、0.2、1、40),“ellip”,“SystemObject”,真正的);wncomp = 0:0.001:0.2;g = grpdelay (ellipFilter wncomp 2);%样本g1 = max (g) - g;%设计一个八阶任意群延迟allpass过滤器。使用一个%多波段设计和指定一个乐队。allpassSpec = fdesign.arbgrpdelay (“N, B, F Gd”8 1 wncomp g1)% #好吧allpassFilter =设计(allpassSpec,“iirlpnorm”,“SystemObject”,真正的);
allpassSpec = arbgrpdelay属性:回应:“任意群延迟”规范:N, B, F Gd的描述:{4 x1细胞}NormalizedFrequency: 1 FilterOrder: 8 NBands: 1 B1Frequencies: [1 x201双]B1GroupDelay: [1 x201双]

级联原滤波器的补偿滤波器来实现所需的群延迟均衡。验证通过处理白噪声和群时延估计的两个输出阶段

samplesPerFrame = 2048;wn = (2 / samplesPerFrame) * (0: samplesPerFrame-1);numRealPoints = samplesPerFrame / 2 + 1;tfEstimator = dsp.TransferFunctionEstimator (“FrequencyRange”,“单向的”,“SpectralAverages”,64);范围= dsp.ArrayPlot (“PlotType”,“行”,“YLimits”,40 [0],“YLabel”,的群时延(样本),“包含”,的归一化频率(xπrad /样本),“SampleIncrement”2 / samplesPerFrame,“标题”,(“原(1),(2)补偿,”,“预期补偿(3)”),“ShowLegend”,真正的);gdOrig = grpdelay (ellipFilter numRealPoints);gdComp = grpdelay (allpassFilter numRealPoints);范围= wn < wncomp(结束);gdExp =南(numRealPoints, 1);gdExp(范围)= gdOrig(范围)+ gdComp(范围);%通过滤波器级联流随机抽样Nframes = 300;k = 1: Nframes x = randn (samplesPerFrame, 1);% =高斯白噪声输入信号y_orig = ellipFilter (x);%与原IIR滤波器过滤噪音y_corr = allpassFilter (y_orig);%补偿滤波器Txy = tfEstimator ([x, x]、[y_orig y_corr]);gdMeas = HelperMeasureGroupDelay (Txy [] 20);范围([gdMeas gdExp]);结束

带通均衡

设计一个通带群时延均衡器的带通切比雪夫滤波器的通带地区(0.3 - 0.4)*πrad /取样间隔。与前面的示例中,只有一个乐队感兴趣的对应滤波器的通带。因为你想要补偿这个乐队的群延迟和不关心结果群时延值外,您使用多波段设计和指定一个乐队。

%设计带通切比雪夫ⅰ型滤波器和测量其总组%在通频带延迟。bandpassFilter =设计(fdesign.bandpass (“N Fp1 Fp2,美联社”4、0.3、0.4,1),“cheby1”,“SystemObject”,真正的);wncomp = 0.3:0.001:0.4;g = grpdelay (bandpassFilter wncomp 2);g1 = max (g) - g;%设计一个八阶任意群延迟滤波器。极半径是%的限制不超过0.95。allpassSpec = fdesign.arbgrpdelay (“N, B, F Gd”8 1 wncomp g1);allpassFilter =设计(allpassSpec,“iirlpnorm”,“MaxPoleRadius”,0.95,“SystemObject”,真正的);%与补偿滤波器级联原滤波器来实现的%想要的群延迟均衡。%验证通过处理白噪声和群延迟的估计%两个输出阶段gdOrig = grpdelay (bandpassFilter numRealPoints);gdComp = grpdelay (allpassFilter numRealPoints);范围= wn > wncomp (1) & wn < wncomp(结束);gdExp =南(numRealPoints, 1);gdExp(范围)= gdOrig(范围)+ gdComp(范围);释放(范围),范围。55 YLimits = [0];发行版(tfEstimator)%通过滤波器级联流随机抽样k = 1: Nframes x = randn (samplesPerFrame, 1);% =高斯白噪声输入信号y_orig = bandpassFilter (x);%与原IIR滤波器过滤噪音y_corr = allpassFilter (y_orig);%补偿滤波器Txy = tfEstimator ([x, x]、[y_orig y_corr]);gdMeas = HelperMeasureGroupDelay (Txy [] 20);范围([gdMeas gdExp]);结束

由此产生的过滤器有一个受限的波兰人。通频带的群延迟变异((0.3 - 0.4)*πrad /样本)小于0.2样本。

Bandstop均衡

设计一个通频带的群时延均衡器bandstop切比雪夫滤波器操作1 KHz的采样频率。bandstop过滤器有两个通带地区在150年[0]赫兹和200 500 Hz的间隔。你想弥补这些乐队的群延迟你使用多波段设计和指定两个乐队。

%设计bandstop切比雪夫2型滤波器和测量其总组%在通频带延迟。群时延测量转换为秒因为fdesign %。在几秒钟内arbgrpdelay预计群延迟规范当你指定一个采样频率%。Fs = 1 e3;bandstopFilter =设计(fdesign.bandstop (“N Fst1 Fst2 Ast、“,6150400年1Fs),“cheby2”,“SystemObject”,真正的);f1 = 0.0:0.5:150;%赫兹g1 = grpdelay (bandstopFilter f1, Fs)。/ Fs;%秒f2 = 400:0.5: Fs / 2;%赫兹g2 = grpdelay (bandstopFilter f2, Fs)。/ Fs;%秒(g1 g2) maxg = max ();%设计14日订单任意群延迟allpass过滤器。北极%半径限制不超过0.95。群时延规范%在几秒钟内,规范给出了赫兹频率。allpassSpec = fdesign.arbgrpdelay (“N, B, F Gd”maxg-g1 14 2 f1, f2,maxg-g2, Fs);allpassFilter =设计(allpassSpec,“iirlpnorm”,“MaxPoleRadius”,0.95,“SystemObject”,真正的);%与补偿滤波器级联原来的过滤过程%白噪声和估计的群延迟两个输出阶段gdOrig = grpdelay (bandstopFilter numRealPoints);gdComp = grpdelay (allpassFilter numRealPoints);fcomp = (Fs / samplesPerFrame) * (0: samplesPerFrame-1);= (fcomp > f1 (1) & fcomp < f1(结束))| (fcomp > f2 (1) & fcomp < f2(结束));gdExp =南(numRealPoints, 1);gdExp(范围)= gdOrig(范围)+ gdComp(范围);释放(范围),范围。YLimits = 40 [0];范围。SampleIncrement = Fs / samplesPerFrame;范围。YLabel =的群时延(样本);范围。包含=的频率(赫兹);发行版(tfEstimator)%通过滤波器级联流随机抽样Nframes = 300;k = 1: Nframes x = randn (samplesPerFrame, 1);% =高斯白噪声输入信号y_orig = bandstopFilter (x);%与原IIR滤波器过滤噪音y_corr = allpassFilter (y_orig);%补偿滤波器Txy = tfEstimator ([x, x]、[y_orig y_corr]);gdMeas = HelperMeasureGroupDelay (Txy [] 12);范围([gdMeas gdExp]);结束

由此产生的过滤器有一个受限的波兰人。通频带的群延迟的变化小于3样本。

这个主题有帮助吗?