主要内容

任意因子之间的有效抽样率转换

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

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

单阶段多相法

多相结构通常被认为是多速率滤波器的有效实现。然而,在分数采样率转换的情况下,相的数量,因此滤波器的顺序,可以很快变得过高。为了重新采样一个从8 kHz到44.1 kHz的信号,我们插值441,decimate 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.1e3,2048);定义频率范围分析Fs1 = 8e3*147;等效的单级滤波器的时钟为3.53 MHzHFVT = fvtool(filts。Stage1 farrowSampRateConv_3rd,...farrowSampRateConv_4th,“FrequencyRange”'指定频率。vector'...“FrequencyVector”W,“Fs”,[Fs1 3*Fs1 3*Fs1],...“NormalizeMagnitudeto1”“上”“颜色”“白色”);传奇(hfvt“多相采样速率转换器”...“三阶法罗插值器”“四阶法罗插值器”...“位置”“东北”

图1:量级响应(dB)包含一个坐标轴对象。标题为幅度响应(dB)的axis对象包含3个类型为line的对象。这些对象代表多相采样速率转换器,三阶法罗插补器,四阶法罗插补器

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

farrowSampRateConv_4th = dsp。FarrowRateConverter (“InputSampleRate”, 8 e3,...“OutputSampleRate”, 44.1 e3,“PolynomialOrder”4...“OutputRateTolerance”, 0.01);信息(farrowSampRateConv_4th)
ans =12x52字符数组离散时间FIR多速率滤波器(实)' '----------------------------------------- ' '滤波结构:法罗采样率转换器' '插补因子: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. 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)级”)传说(“组合多相法罗采样速率转换器”...“位置”“东北”

图中包含一个axes对象。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))结束

Baidu
map