主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

任意の係数による効率的なサンプルレート変換

この例では,任意の係数間で効率的にサンプルレートを変換する方法を示します。

任意の係数によるサンプルレート変換は,数多くのアプリケーション(デジタル受信器のシンボルの同期,音声処理符号化および合成,連続時間システムのコンピューターシミュレーションなど)で必要になります。この例では,信号のサンプリングレートを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);

これは2つのステージにより,比較的高い効率で実行できます。

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

入力サンプルあたりの演算数(第1ステージ終了後に周波数が14.7 kHzに増加することを考慮して,約95の乗算と加算)は妥当な数ですが,この場合には1774の係数をメモリに格納しなければなりません。

出力レートの許容誤差の設定

多数の係数を軽減する方法の1つは,出力サンプルの正確なレートが重要でない場合にはレートの許容誤差を設けることです。たとえば,許容誤差1%を設定すると,出力レートは44.1 kHzではなく44 kHzになります。これは11で内挿して2で間引きする必要があります。これは単一ステージで効率的に実行できます。

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

この場合120係数が必要で,入力サンプルあたりの乗算の数は60です。

単一ステージの法罗アプローチ

多数の係数を保存しなければならないという問題を克服するもう1つの方法は,多項式ベースのフィルターです。法罗構造は,このようなフィルターの効率的な実装です。

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)成本(farrowSampRateConv_4th)
struct with fields: NumCoefficients: 16 NumStates: 3 MultiplicationsPerInputSample: 71.6625 AdditionsPerInputSample: 60.6375 ans = struct with fields: NumCoefficients: 25 NumStates: 4 MultiplicationsPerInputSample: 121.2750 AdditionsPerInputSample: 99.2250

3次多項式では16の係数と入力サンプルあたり約66の乗算が必要です。4次多項式は,より高コストでわずかに優れたローパス応答を提供します。係数は25日入力サンプルあたりの乗算は121です。

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

出力レートの許容誤差を設定しても,法罗フィルターの実装コストには大きな影響はありません。しかし,dsp。SampleRateConverterと同様に,内挿係数と間引き係数は変わります。

farrowSampRateConv_4th = dsp。FarrowRateConverter (“InputSampleRate”, 8 e3,...“OutputSampleRate”, 44.1 e3,“PolynomialOrder”4...“OutputRateTolerance”, 0.01);信息(farrowSampRateConv_4th)成本(farrowSampRateConv_4th)
ans = 12x52 char array 'Discrete-Time FIR Multirate Filter (real)' '----------------------------------------- ' ' 滤波器结构:法罗采样率转换器“插值因素:11“大量毁灭因素:2“滤波器长度:5“稳定:是的“线性相位:没有‘‘算术:双重“输出率公差:1.000000%“调整输出率:44000.000000“ans =结构体字段:NumCoefficients: 25 NumStates: 4 MultiplicationsPerInputSample: 121 AdditionsPerInputSample: 99

法罗および冷杉ポリフェーズ構造のカスケード

次に,これまでに見てきた2種類のフィルターを利用した複合ソリューションを設計してみましょう。ポリフェーズフィルターは,整数ファクターによる内挿または間引きと,内挿係数および間引き係数が低い非整数レート変換に特に適しています。法罗フィルターは任意の(無理数を含む)レート変換ファクターを効果的に実装できます。まず、冷杉ハーフバンドフィルターのカスケードを使用して,元の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のサンプリング周波数を取得します。この目的には3次ラグランジュ多項式ベースフィルターを使用します。

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

全体的なフィルターは,単に2つのフィルターをカスケードすることで求めます。

成本(intSampRateConv)成本(farrowSampRateConv)
ans = struct with fields: NumCoefficients: 16 NumStates: 3 MultiplicationsPerInputSample: 17.9156 AdditionsPerInputSample: 15.1594

このハイブリッド設計の係数の数は比較的低く(36),入力サンプルあたりの乗算の数も比較的低くなります28 + 16 * 4 = 92。これら2つの設計の周波数応答の結合は,farrowSampRateConv_3rdまたはfarrowSampRateConv_4thより優れています。

[Hsrc f] = freqz (intSampRateConv);Fsfar = 32 e3 * 441;Hfsrc = freqz (farrowSampRateConv f Fsfar);Hhybrid = Hsrc。* Hfsrc;Hhybrid_norm = Hhybrid /规范(Hhybrid正);%标准化幅度为0分贝情节(f, 20 * log10 (abs (Hhybrid_norm)));包含(的频率(赫兹)) ylabel (“(dB)级”)传说(“多相和法罗采样率转换器”...“位置”“东北”

次に,単一ステージ設計と多段設計の周波数応答を重ねます。応答は,明らかに非常に近いものとなっています。

= dsp范围。简介(“SpectralAverages”, 50岁,...“SampleRate”, 44.1 e3,“PlotAsTwoSidedSpectrum”假的,...“YLimits”20 [-80],“ShowLegend”,真的,...“ChannelNames”, {“单级设计”“多阶段设计”});抽搐,toc < 20%运行20秒x = randn (8000 1);%转化率使用多级FIR滤波器日元= sampRateConv (x);%转换率使用多级FIR和Farrow滤波器级联ytemp = intSampRateConv (x);y2 = farrowSampRateConv (ytemp);比较两种方法的输出范围((y1, y2))结束