主要内容

任意因素之间的有效采样率转换

这个例子展示了如何有效地转换任意因素之间的抽样率。

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

单阶段多相法

多相结构通常被认为是多速率滤波器的有效实现。然而,在分数采样率转换的情况下,相的数量,因此滤波器的顺序,可以很快变得过高。要将信号从8 kHz重新采样到44.1 kHz,我们需要插值441并抽取80(8*441/80=44.1)。

sampRateConv = dsp。SampleRateConverter (“带宽”, 6 e3,...“InputSampleRate”, 8 e3,“OutputSampleRate”, 44.1 e3,...“StopbandAttenuation”, 50);

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

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

尽管每个输入样本的运算次数是合理的(大约95次乘法-记住,速率在第一阶段后增加到14.7 kHz),在这种情况下,1774个系数必须存储在内存中。

提供输出速率公差

减轻大量系数的一种方法是,如果准确的抽样率不是关键,则允许输出抽样率的容差。例如,指定1%的公差会导致输出率为44 kHz而不是44.1 kHz。这现在需要插值11和decimate 2。它可以用一个阶段有效地完成。

sampRateConvWithTol = dsp。SampleRateConverter (“带宽”, 6 e3,...“InputSampleRate”, 8 e3,“OutputSampleRate”, 44.1 e3,...“StopbandAttenuation”, 50岁,“OutputRateTolerance”, 0.01);成本(sampRateConvWithTol)
ans =带字段的结构:NumCoefficients: 120 NumStates: 12 MultiplicationsPerInputSample: 60 AdditionsPerInputSample: 55

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

单级法罗方法

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

farrowSampRateConv_3rd = dsp。FarrowRateConverter (“InputSampleRate”, 8 e3,...“OutputSampleRate”, 44.1 e3,“PolynomialOrder”3);farrowSampRateConv_4th = dsp。FarrowRateConverter (“InputSampleRate”, 8 e3,...“OutputSampleRate”, 44.1 e3,“PolynomialOrder”4);成本(farrowSampRateConv_3rd)
ans =带字段的结构:NumCoefficients: 16 NumStates: 3 MultiplicationsPerInputSample: 66.1500 AdditionsPerInputSample: 60.6375
成本(farrowSampRateConv_4th)
ans =带字段的结构:NumCoefficients: 25 NumStates: 4 MultiplicationsPerInputSample: 121.2750 AdditionsPerInputSample: 99.2250

对于三阶多项式,需要16个系数,每个输入样本大约需要66次乘法。四阶多项式以较高的代价提供略好的低通响应:每个输入样本有25个系数和121次乘法。

filts = getFilters(sampRateConv);W = linspace(0, 44.11 e3,2048);定义频率范围分析Fs1 = 8e3*147;等效的单级滤波器时钟为3.53 MHzHFVT = fvtool(filts。Stage1 farrowSampRateConv_3rd,...farrowSampRateConv_4th,“FrequencyRange”'指定频率矢量'...“FrequencyVector”W,“Fs”,[Fs1 3*Fs1 3*Fs1],...“NormalizeMagnitudeto1”“上”“颜色”“白色”);传奇(hfvt“多相采样速率转换器”...三阶法罗插值器四阶法罗插值器...“位置”“东北”

{

提供输出速率公差不会显著影响Farrow滤波器的实现成本。但是,它确实改变了插值和抽取因子,其方式与对sps . samplerateconverter相同。

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

Farrow和FIR多相结构的级联

我们现在尝试设计一种混合解决方案,将利用我们之前看到的两种类型的过滤器。多相滤波器特别适合于用整数因子进行插补或抽取,以及当插补和抽取因子较低时用于分数阶速率转换。法罗滤波器可以有效地实现任意(包括不合理)速率变化因子。首先,我们用FIR半带滤波器级联插值原始8 kHz信号4。

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

然后,我们用44.1/32 = 1.378125对中间的32 kHz信号进行插值,以得到所需的44.1 kHz最终采样频率。为此,我们使用了基于三次拉格朗日多项式的滤波器。

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

通过级联两个过滤器可以简单地获得整个过滤器。

成本(intSampRateConv)
ans =带字段的结构:NumCoefficients: 34 NumStates: 11 MultiplicationsPerInputSample: 34 AdditionsPerInputSample: 31
成本(farrowSampRateConv)
ans =带字段的结构:NumCoefficients: 16 NumStates: 3 MultiplicationsPerInputSample: 16.5375 AdditionsPerInputSample: 15.1594

这种混合设计的系数数量相对较低(36),每个输入样本的乘法次数也相对较低:28 + 16*4 = 92。这两种设计的组合频响优于常规设计farrowSampRateConv_3rdfarrowSampRateConv_4th

[Hsrc,f] = freqz(intSampRateConv);Fsfar = 32e3*441;Hfsrc = freqz(farrowSampRateConv,f,Fsfar);Hhybrid = Hsrc.*Hfsrc;Hhybrid_norm = Hhybrid/norm(Hhybrid,inf);将幅度归一至0分贝情节(f, 20 * log10 (abs (Hhybrid_norm)));包含(的频率(赫兹)) ylabel (“(dB)级”)传说(组合多相和法罗采样率转换器...“位置”“东北”

图中包含一个轴对象。axis对象包含一个line类型的对象。该对象代表组合多相和法罗采样率转换器。

我们现在把单级和多级设计的频率响应叠加起来。显然,这些回答是非常具有可比性的。

范围=光谱分析仪(“SampleRate”, 44.1 e3,“PlotAsTwoSidedSpectrum”假的,...“YLimits”20 [-80],“ShowLegend”,真的,...“ChannelNames”,{“单级设计”“多阶段设计”});抽搐,Toc < 20运行20秒X = randn(8000,1);%转化率使用多级FIR滤波器y1 = sampRateConv(x);%转化率使用级联多级FIR和法罗滤波器ytemp = intSampRateConv(x);y2 = farrowSampRateConv(ytemp);比较两种方法的输出范围((y1, y2))结束