主要内容

多级速度转换

多级速度转换是一个分裂率的方法转换成几个阶段。例如,而不是大量毁灭18倍,成千上万的因素,其次是另一大批杀害3,然后2倍。使用多个阶段的计算复杂度降低过滤率转换。此外,如果已经有一个转换器单元不同的主要因素,它们可以被用作构建块更高的利率。这个例子演示了多级速度转换的设计。

单级vs多级转换:成本分析

考虑大量毁灭系统的速度= 8。一个可以通过两种方式实现这样一个系统:

  • 一个杀害多人者= 8。

  • 一连串的三个half-rate杀害多人者(= 2)

多级串联过滤杀害多人者(或插入器)有一个减少单级形式。简化型的过滤器被称为单级相当于过滤器,过滤器的encapsualtes所有的阶段。因此,任何多级串联冷杉杀害多人者都可以表示成一个单级冷杉杀害多人者。更多细节,请参阅[1]。然而,尽管两种选择有效地执行相同的大量毁灭,他们有不同的数值complexites。

评估的成本实现多级杀害多人者使用成本功能,实现单级杀害多人者的成本比较。

firDecim2_1 = dsp.FIRDecimator (2);firDecim2_2 = dsp.FIRDecimator (2);firDecim2_3 = dsp.FIRDecimator (2);firDecim2cascade = dsp.FilterCascade (firDecim2_1 firDecim2_2 firDecim2_3);cost2cascade =成本(firDecim2cascade) firDecim8 = dsp.FIRDecimator (8);cost8 =成本(firDecim8)
cost2cascade =结构体字段:NumCoefficients: 75 NumStates: 138 MultiplicationsPerInputSample: 21.8750 AdditionsPerInputSample: 21 cost8 =结构体字段:NumCoefficients: 169 NumStates: 184 MultiplicationsPerInputSample: 21.1250 AdditionsPerInputSample: 21

级联三杀害多人者= 2将消耗更少的内存(州和系数)与单级杀害多人者= 8,使得多级转换器效率更多的内存。算术负载(操作/样本)的单级和多级实现是等价的。请注意样品的数量下降了一半每次大批杀害后阶段。总之,最好是将大量毁灭分成多个阶段(考虑到速度变化因子不是质数,当然)。

通常有一个以上的因素(非优质)转化率的方法,和更多的自由度多级设计。DSP系统工具箱(TM)提供了一些工具来简化设计过程。我们将在下面检查他们两个。

使用designMultistageDecimatordesignMultistageInterpolator功能

designMultistageInterpolatordesignMultistageDecimator函数自动确定一个最优的配置,包括确定阶段的数量以及它们的安排,低通滤波器参数,等。结果是一个滤波器级联系统对象,encapsualtes所有阶段。为了说明这一点,让我们设计一个杀害多人者的速度= 12。

M = 12;fcDecMulti = designMultistageDecimator (M);disp (cascadeInfoSummary (fcDecMulti))
多级冷杉杀害多人者,M = 12(48.0千赫至4.0千赫)等效低通截止:4.0 khz,过渡宽度:800.0赫兹的阶段:3 Stage1:冷杉杀害多人者,M = 2(48.0千赫至24.0千赫),冷杉长度= 11 Stage2:冷杉杀害多人者,M = 2(24.0千赫至12.0千赫),冷杉长度= 15 Stage3:冷杉杀害多人者,M = 3(12.0千赫至4.0千赫),冷杉长度= 79

这种设计有3个阶段(12美元= 2 \ * 2 \ * 3美元),最后阶段的低通滤波器是最长的。

与单级重复设计。

fcDecSingle = designMultistageDecimator (M,“NumStages”1);disp (cascadeInfoSummary (fcDecSingle))
多级冷杉杀害多人者,M = 12(48.0千赫至4.0千赫)等效低通截止:4.0 khz,过渡宽度:800.0赫兹的阶段:1 Stage1:冷杉杀害多人者,M = 12(48.0千赫至4.0千赫),冷杉长度= 307

比较这两种实现的成本。Obivously,多级方法更有效。

costMulti =成本(fcDecMulti) costSingle =成本(fcDecSingle)
costMulti =结构体字段:NumCoefficients: 69 NumStates: 102 MultiplicationsPerInputSample: 10.1667 AdditionsPerInputSample: 9.3333 costSingle =结构体字段:NumCoefficients: 283 NumStates: 300 MultiplicationsPerInputSample: 23.5833 AdditionsPerInputSample: 23.5000

现在,让我们对比结合大量毁灭过滤器的频率响应。虽然这两种实现不同的过滤器在阻带,通带和过渡带是几乎相同的。

hfv = fvtool (fcDecMulti fcDecSingle);传奇(hfv“多级组合响应”,“单级响应”);

同样的方法也适用designMultistageInterpolator。创建两个插入器(单级和多级)和比较他们的输出。注意,输出几乎是相同的,除了一个稍长一些的多级插入器的延迟。

n = (1:20)”;x = (abs(存在)< = 5)。* (5-abs(存在));L = 12;fcIntrMulti = designMultistageInterpolator (L);fcIntrSingle = designMultistageInterpolator (L,“NumStages”1);xInterpSingle = fcIntrSingle (x);xInterpMulti = fcIntrMulti (x);释放(fcIntrMulti);释放(fcIntrSingle);次要情节(1,1);茎(x);xlim ([20]);标题(输入序列的);次要情节(3、1、2);茎(xInterpSingle);标题(“单级插值”)次要情节(3、1,3);茎(xInterpMulti);标题(“多级内插”)

额外的设计参数designMultistageDecimatordesignMultistageInterpolator功能

您可以指定滤波器设计参数如过渡宽度和阻带衰减designMultistageDecimatordesignMultistageInterpolator功能。这种额外的参数允许更好地控制滤波器的特性。输入采样率Fs默认为1,但这个值也可以定制。

设计一个滤波器,减少了输入速度从48 MHz 1 MHz,一大批杀害48倍。以下是典型的规范相应的低通滤波器,减少了带宽。

Fs = 48 e6;TW = 100年e3;Astop = 80;%最小阻带衰减M = 48;%大量毁灭的因素

这是一个简单的多级设计这些规格。

multiDecim = designMultistageDecimator (M, Fs, TW Astop);disp (cascadeInfoSummary (multiDecim))
多级冷杉杀害多人者,M = 48 (48.0 mhz至1.0 mhz)等效低通截止:1.0 mhz,过渡宽度:100.0 khz的阶段:5 Stage1:冷杉杀害多人者,M = 2 (48.0 mhz至24.0 mhz),冷杉长度= 7 Stage2:冷杉杀害多人者,M = 2 (24.0 mhz至12.0 mhz),冷杉长度= 7 Stage3:冷杉杀害多人者,M = 2 (12.0 mhz至6.0 mhz),冷杉长度= 11 Stage4:冷杉杀害多人者,M = 3 (6.0 mhz至2.0 mhz),冷杉长度= 33 Stage5:冷杉杀害多人者,M = 2 (2.0 mhz至1.0 mhz),冷杉长度= 95

这是一个5级杀害多人者级联的因素2美元\ rightarrow 2 \ rightarrow 2 \ 3 rightarrow \ rightarrow 2美元是谁的产品2 ^ 4美元\ * 3 ~ = ~ 48美元像预期的那样。

设计一个类似的过滤器使用默认过渡宽度和衰减。整体转化率是相似的,但过渡宽度(和可能的顺序阶段)可以是不同的。

multiDecim_default = designMultistageDecimator (M, Fs);disp (cascadeInfoSummary (multiDecim_default))
多级冷杉杀害多人者,M = 48 (48.0 mhz至1.0 mhz)等效低通截止:1.0 mhz,过渡宽度:200.0 khz的阶段:5 Stage1:冷杉杀害多人者,M = 2 (48.0 mhz至24.0 mhz),冷杉长度= 7 Stage2:冷杉杀害多人者,M = 2 (24.0 mhz至12.0 mhz),冷杉长度= 7 Stage3:冷杉杀害多人者,M = 2 (12.0 mhz至6.0 mhz),冷杉长度= 11 Stage4:冷杉杀害多人者,M = 2 (6.0 mhz至3.0 mhz),冷杉长度= 15 Stage5:冷杉杀害多人者,M = 3 (3.0 mhz至1.0 mhz),冷杉长度= 79

设计一个单级杀害多人者使用相同的参数。

singleDecim = designMultistageDecimator (M, Fs、TW Astop,“NumStages”1);disp (cascadeInfoSummary (singleDecim))
多级冷杉杀害多人者,M = 48 (48.0 mhz至1.0 mhz)等效低通截止:1.0 mhz,过渡宽度:100.0 khz的阶段:1 Stage1:冷杉杀害多人者,M = 48 (48.0 mhz至1.0 mhz),冷杉长度= 2411

比较了单级和多级过滤成本实现。多级的每个输入样本的乘法数方法是7,和大约49单级实现。换句话说,使用多级实现减少乘法7倍的数量,这使得一个显著差异。也可以观察到类似的差异数量的coefficints (89 vs 2361), (146 vs 2400)的状态数,每个输入样本和添加(6 vs。49)。

costMultiDecim =成本(multiDecim) costSingleDecim =成本(singleDecim)
costMultiDecim =结构体字段:NumCoefficients: 89 NumStates: 146 MultiplicationsPerInputSample: 6.6042 AdditionsPerInputSample: 5.6667 costSingleDecim =结构体字段:NumCoefficients: 2361 NumStates: 2400 MultiplicationsPerInputSample: 49.1875 AdditionsPerInputSample: 49.1667

比较单级实现的频率响应和两个多级设计的单级等价物。获得响应的三个实现通带和过渡带很相似,和阻带的差异可以忽略不计。尽管显著的成本差异,低通滤波在所有三个设计几乎是相同的。

hfv = fvtool (multiDecim multiDecim_default singleDecim);传奇(hfv“多级(自定义参数)”,“多级(默认参数)”,“单级”)

默认的宽度设计有一个略大的转变。

hfv = fvtool (multiDecim multiDecim_default singleDecim);传奇(hfv“多级(自定义参数)”,“多级(默认参数)”,“单级”0.8)xlim ([0])

最优化设计Minimimal系数的总数

默认情况下,每个输入样本的设计最大限度地减少乘法。还可以降低系数的数量。设置属性MinTotalCoeffs = true使用后者的成本。

minCoeffDecim = designMultistageDecimator (M, Fs、TW Astop,“MinTotalCoeffs”,真正的);disp (cascadeInfoSummary (minCoeffDecim)成本(minCoeffDecim)
多级冷杉杀害多人者,M = 48 (48.0 mhz至1.0 mhz)等效低通截止:1.0 mhz,过渡宽度:100.0 khz的阶段:5 Stage1:冷杉杀害多人者,M = 2 (48.0 mhz至24.0 mhz),冷杉长度= 7 Stage2:冷杉杀害多人者,M = 3 (24.0 mhz至8.0 mhz),冷杉长度= 17 Stage3:冷杉杀害多人者,M = 2 (8.0 mhz至4.0 mhz),冷杉长度= 11 Stage4:冷杉杀害多人者,M = 2 (4.0 mhz至2.0 mhz),冷杉长度= 23 Stage5:冷杉杀害多人者,M = 2 (2.0 mhz至1.0 mhz),冷杉和字段长度= 95 ans =结构:NumCoefficients: 87 NumStates: 147 MultiplicationsPerInputSample: 6.8125 AdditionsPerInputSample: 6

相比multiDecim系数的数量minCoeffDecim低,但每个输入样本的乘法数较高。

估计与设计来确定成本

优化设计的目标函数(系数的数量或乘法)designMultistageDecimator函数使用取决于冷杉每个阶段的长度。默认情况下,这个函数计算使用成本估计的冷杉长度而不是真正的长度,有时导致次优滤波器设计。

较慢,但更精确的方法是使用基于真正的冷杉的成本通过实际设计的滤波器长度的候选人。使用属性CostMethod = '设计'准确的成本优化。设置这个属性确保设计成本确实是最小的。

trueMinCostDecim = designMultistageDecimator (M, Fs、TW Astop,“CostMethod”,“设计”);disp (cascadeInfoSummary (trueMinCostDecim))
多级冷杉杀害多人者,M = 48 (48.0 mhz至1.0 mhz)等效低通截止:1.0 mhz,过渡宽度:100.0 khz的阶段:5 Stage1:冷杉杀害多人者,M = 2 (48.0 mhz至24.0 mhz),冷杉长度= 7 Stage2:冷杉杀害多人者,M = 2 (24.0 mhz至12.0 mhz),冷杉长度= 7 Stage3:冷杉杀害多人者,M = 3 (12.0 mhz至4.0 mhz),冷杉长度= 21 Stage4:冷杉杀害多人者,M = 2 (4.0 mhz至2.0 mhz),冷杉长度= 23 Stage5:冷杉杀害多人者,M = 2 (2.0 mhz至1.0 mhz),冷杉长度= 95

在许多情况下,估计成本执行很好(在这个例子中)。

成本(trueMinCostDecim) hfv = fvtool (minCoeffDecim trueMinCostDecim);传奇(hfv“估计冷杉长度优化”,“真正的冷杉长度优化”)
ans =结构体字段:NumCoefficients: 87 NumStates: 146 MultiplicationsPerInputSample: 6.5625 AdditionsPerInputSample: 5.6667

dsp.SampleRateConverter系统对象

dsp.SampleRateConverter系统对象提供了一个方便的界面任意转换,结合插值和大量毁灭。

src = dsp.SampleRateConverter (“InputSampleRate”,18岁,“OutputSampleRate”,16岁,“带宽”13);信息(src)
ans = '整体插值因素:8整体力量的因素:9的过滤器:1乘法/输入样本:24.333333的系数:219过滤器:过滤器1:dsp。FIRRateConverter -插值因子:8 -大量毁灭因素:9”

的不同阶段可以提取getFilters功能:

冷杉= getFilters (src)
冷杉= dsp。FilterCascade属性:Stage1: [1 x1 dsp。FIRRateConverter] CloneStages:真的

我们还可以指定绝对频率(而不是比率)。例如,dsp.SampleRateConverter对象可以将音频数据采样率从48千赫至44.1千赫。

src = dsp.SampleRateConverter (“InputSampleRate”,48000,“OutputSampleRate”,44100);[L, M] = getRateChangeFactors (src);冷杉= getFilters (src);读者= dsp.AudioFileReader (“audio48kHz.wav”,“SamplesPerFrame”4 *米);x =读者();xr = src (x);%获得率转换冷杉b = firs.Stage1.Numerator;%计算重采样延迟i0 =地板(长度(b) / 2) / L;图;持有;茎((1:长度(x)) +钱数,x);茎(linspace(1、长度(x)长度(xr)), xr,“r”);持有;传奇(输入音频的,重新取样音频的);xlim([150200])释放(读者);

简化的松弛率转换

转换率等48 k / 44.1 k美元(在前一节中使用)需要一个大型upsample和downsample比率,即使其简化形式L / M = 160/147美元。这样的转换所需的过滤器是相当长,引入显著延迟除了内存和计算负载。

成本(src)
ans =结构体字段:NumCoefficients: 8587 NumStates: 58 MultiplicationsPerInputSample: 53.6688 AdditionsPerInputSample: 52.7500

我们可以减少昂贵的近似转换的转换因子。例如,

$ $ 48千赫/ 44.1 khz \大约48千赫/ 44 khz = 12/11。$ $

100赫兹的偏差很小,只有0.23%的绝对频率。的dsp.SampleRateConverter可以自动近似速率转换因子通过允许输出频率摄动。通过指定的微扰宽容是“OutputRateTolerance”财产。默认的公差是0,也就是说,没有缺口。换句话说,松弛意味着偏离指定的输出率值。显然,近似率转换规模小得多的计算成本,和它能够满足许多应用程序,如标准定义音频处理。

src_approx = dsp.SampleRateConverter (“InputSampleRate”,48000,“OutputSampleRate”,44100,“带宽”13岁的“OutputRateTolerance”,0.01);[L_approx, M_approx] = getRateChangeFactors (src_approx)成本(src_approx)
L_approx = 11 M_approx = 12 ans =结构体字段:NumCoefficients: 61 NumStates: 5 MultiplicationsPerInputSample: 5.0833 AdditionsPerInputSample: 4.1667

引用

[1]奥本海姆前任所长A.V.以R.W.谢弗,离散时间信号处理,普伦蒂斯·霍尔出版社,1989年。