主要内容

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

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

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

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

単一ステ,ジのFarrowアプロ,チ

多数の係数を保存しなければならないという問題を克服するもう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)
ans = 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.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“多相采样速率转换器”...三阶法罗插值器四阶法罗插值器...“位置”“东北”

出力レートの許容誤差を設定しても,法罗フィルターの実装コストには大きな影響はありません。しかし,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数组的离散时间FIR多速率滤波器(实)' '----------------------------------------- ' ' 滤波器结构:法罗采样率转换器“插值因素:11“大量毁灭因素:2“滤波器长度:5“稳定:是的“线性相位:没有‘‘算术:双重“输出率公差:1.000000%“调整输出率:44000.000000“ans =结构体字段:NumCoefficients: 25 NumStates: 4 MultiplicationsPerInputSample: 121 AdditionsPerInputSample: 99

法罗およびFIRポリフェ,ズ構造のカスケ,ド

次に,これまでに見てきた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: 34 NumStates: 11 MultiplicationsPerInputSample: 34 AdditionsPerInputSample: 31 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 = 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)级”)传说(组合多相和法罗采样率转换器...“位置”“东北”

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

Scope = dsp。简介(“SpectralAverages”, 50岁,...“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))结束