高效的采样率转换任意因素的关系

这个例子说明了如何有效地将任意的因素之间的采样率。

通过任意因子需要采样速率转换出现在许多应用中(在数字接收机例如符号同步,语音编码和合成,计算机模拟连续时间系统的,等等)。在这个例子中,我们将研究一个例子,其中当期望的信号的采样率从8kHz转换为44.1kHz的多项式为基础的和多相滤波器级联形成一个有效的解决方案。

单级多相方法

多相结构通常被认为是多速率滤波器的有效实现。然而,在分数采样率转换的情况下,相数,因此滤波器的阶数,能够迅速变得过高。为了从8kHz重新取样信号以44.1kHz的,我们通过内插441和抽取由80(8×八十零分之四百四十一= 44.1)。

sampRateConv = dsp.SampleRateConverter('带宽',6E3,...'InputSampleRate',8E3,'OutputSampleRate',44.1e3,...'StopbandAttenuation',50);

这可以相对有效的方式分两个阶段进行:

信息(sampRateConv)成本(sampRateConv)
ANS =“总体插值因子:441总体抽取因子:80号过滤器的:每个输入样品2个乘法:系数95.175000数:1774个过滤器:滤波器1:dsp.FIRRateConverter  - 插值因子:147  - 抽取因子:80过滤器2:dsp.FIRInterpolator  - 插值因子:3'ANS =结构与字段:NumCoefficients:1774个NumStates:30 MultiplicationsPerInputSample:95.1750 AdditionsPerInputSample:89.6750

虽然每个输入样本操作的数目是合理的(大约95次乘法 - 牢记的是,第一阶段后的速率增加至14.7千赫),1774倍的系数将必须被存储在存储器中在这种情况下。

提供输出率范围

减轻大量系数的方法之一可能是允许在输出采样率的误差,如果准确率并不重要。例如,指定的1%时,导致44千赫兹的输出速率的公差而不是44.1千赫。现在,这需要通过11和抽取的2,能有效地与一个单一的阶段进行插值。

sampRateConvWithTol = dsp.SampleRateConverter('带宽',6E3,...'InputSampleRate',8E3,'OutputSampleRate',44.1e3,...'StopbandAttenuation'50,'OutputRateTolerance',0.01);成本(sampRateConvWithTol)
ANS =结构与字段:NumCoefficients:120个NumStates:12 MultiplicationsPerInputSample:60个AdditionsPerInputSample:55

在这种情况下,需要120点的系数和每个输入样本的乘法的数量是60。

单级法罗法

基于多项式的滤波器是另一种方式来克服需要大量系数的问题进行存储。法罗结构是这样的过滤器的有效实现。

farrowSampRateConv_3rd = dsp.FarrowRateConverter('InputSampleRate',8E3,...'OutputSampleRate',44.1e3,'PolynomialOrder',3);farrowSampRateConv_4th = dsp.FarrowRateConverter('InputSampleRate',8E3,...'OutputSampleRate',44.1e3,'PolynomialOrder',4);成本(farrowSampRateConv_3rd)成本(farrowSampRateConv_4th)
ANS =结构与字段:NumCoefficients:16个NumStates:3 MultiplicationsPerInputSample:66.1500 AdditionsPerInputSample:60.6375 ANS =结构与字段:NumCoefficients:25个NumStates:4 MultiplicationsPerInputSample:121.2750 AdditionsPerInputSample:99.2250

与第三次多项式,需要大约每输入采样66次乘法16个系数。四阶多项式提供以更高的成本稍好低通响应:25个系数和每个输入样本121次的乘法。

filts = getFilters(sampRateConv);W = linspace(0,44.1e3,2048);%定义的频率范围内分析FS1 = 8E3 * 147;%的等效单级过滤器的时钟频率为3.53兆赫hfvt = fvtool(filts.Stage1,farrowSampRateConv_3rd,...farrowSampRateConv_4th,'频率范围'“指定频率。向量'...'FrequencyVector',W,'FS'[Fs1的3 * 3 Fs1的* Fs1的],...'NormalizeMagnitudeto1''上''颜色''白色');传说(hfvt,“多相采样率转换器”...“3阶法罗插补”“四阶法罗插补”...'位置''东北'

提供输出率范围并不显著影响的Farrow滤波器的实现成本。但是,它确实改变了插值和抽取因素在里面做了dsp.SampleRateConverter以同样的方式。

farrowSampRateConv_4th = dsp.FarrowRateConverter('InputSampleRate',8E3,...'OutputSampleRate',44.1e3,'PolynomialOrder'4,...'OutputRateTolerance',0.01);信息(farrowSampRateConv_4th)成本(farrowSampRateConv_4th)
ANS = 12x52字符数组“离散时间FIR多速率滤波器(真实)”“-----------------------------------------“‘过滤器结构:法罗采样率转换器’‘插因子:11’‘抽取因子:2’‘过滤器长度:5’'稳定:是的‘线性相位:没有’”''算术:双''输出速率公差:1.000000% '调整输出速率:44000.000000' ANS =结构与字段:NumCoefficients:25个NumStates:4 MultiplicationsPerInputSample:121个AdditionsPerInputSample:99

和法罗的级联FIR多相结构

现在,我们尝试设计我们之前已经看到,会充分利用这两种类型的过滤器的混合解决方案。多相滤波器特别适用于内插或抽取一个整数因子和分数速率转换时的内插和抽取因素是低的。法罗过滤器可以有效地实现任意的(包括无理)速率变化的因素。首先,我们通过使用4 FIR半带滤波器的级联插值原来8 kHz的信号。

intSampRateConv = dsp.SampleRateConverter('带宽',6E3,...'InputSampleRate',8E3,'OutputSampleRate',32e3,...'StopbandAttenuation',50);信息(intSampRateConv)
ANS =“总体插值因子:4总体抽取因子:1的过滤器的数量:每输入采样1个乘法:系数34.000000数:34个过滤器:滤波器1:dsp.FIRInterpolator  - 插值因子:4”

然后,我们通过44.1 / 32 = 1.378125内插中间32KHz的信号,以获得所需44.1kHz的最终采样频率。我们使用立方基于多项式拉格朗日滤波器用于这一目的。

farrowSampRateConv = dsp.FarrowRateConverter('InputSampleRate',32e3,...'OutputSampleRate',44.1e3,'PolynomialOrder',3);

整个滤波器简单地通过级联两个滤波器获得的。

成本(intSampRateConv)成本(farrowSampRateConv)
ANS =结构与字段:NumCoefficients:34个NumStates:11 MultiplicationsPerInputSample:34个AdditionsPerInputSample:31 ANS =结构与字段:NumCoefficients:16个NumStates:3 MultiplicationsPerInputSample:16.5375 AdditionsPerInputSample:15.1594

这种混合设计的系数的数量是相对低的(36)和每个输入样本的乘法的数量也相对低:28 + 16×4 = 92这两种设计的组合频率响应优于farrowSampRateConv_3rd的或farrowSampRateConv_4th。

[HSRC中,f] = freqz(intSampRateConv);Fsfar = 32e3 * 441;Hfsrc = freqz(farrowSampRateConv,F,Fsfar);Hhybrid = HSRC * Hfsrc。Hhybrid_norm = Hhybrid /规范(Hhybrid,INF);%规格化大小为0 dB情节(F,20 *日志10(ABS(Hhybrid_norm)));xlabel('频率(Hz)')ylabel('大小(dB)')图例(“组合的多相和法罗采样率转换器的...'位置''东北'

我们现在覆盖了单级的频率响应和多级设计。显然,反应都非常具有可比性。

范围= dsp.SpectrumAnalyzer('SpectralAverages'50,...'采样率',44.1e3,'PlotAsTwoSidedSpectrum',假,...'YLimits',[ -  80 20],'ShowLegend',真正,...'ChannelNames'{“单级设计”“多级设计”});抽动,TOC <20%,持续20秒,运行X = randn(8000,1);使用多级FIR滤波器%转换率Y1 = sampRateConv(X);使用多级FIR和的Farrow滤波器的级联%转换率ytemp = intSampRateConv(X);Y2 = farrowSampRateConv(ytemp);%从比较这两种方法的输出范围([Y1,Y2])结束