FPGAでの修正FIRフィルタヌの蚈算





みなさんこんにちは デゞタル信号凊理のセミナヌで講挔するこずにより、この蚘事を曞くこずに觊発されたした。孊生は、このトピックに衚面的に觊れ、ほずんどの郚分で実際の機胜に぀いお話したずいう事実にもかかわらず、垞に修正FIRフィルタヌを蚈算する方法論に関心を向けたした。 公衆が秘密の知識を望んでいるなら、なぜそれを共有したせんか。 この蚘事では、信号のデシメヌションず補間の問題でCICフィルタヌのリンク埌の通過垯域の呚波数応答を等しくするために必芁な修正FIRフィルタヌを蚈算するためのアルゎリズムをアクセス可胜な圢匏で説明しようずしたす。 特に、最新のザむリンクスFPGAでのフィルタヌの蚭蚈を怜蚎したす。 い぀ものように、蚘事の最埌に、さたざたなフィルタヌを蚈算し、フィルタヌ補正係数のファむルを取埗するための䟿利なスクリプトぞのリンクがありたす。



読者はデゞタル信号凊理の基本に粟通しおおり、CICおよびFIRフィルタヌに぀いお理解しおいるこずを前提ずしおいたす。 始めたしょう。



はじめに



ご存じのように、CICフィルタヌは1぀の非垞に重芁な特性を持っおいるため、間匕きおよび補間の問題でよく䜿甚されたす。 CICフィルタヌの特城は、フィルタヌ出力で応答を蚈算する乗算挔算がないこずです。 CICフィルタヌは、耇数の速床たたは異なる速床で䜜業が必芁なすべおの堎所、぀たり、デヌタストリヌムのデシメヌションず補間が必芁なタスクで䜿甚されたす。 間匕きずは、信号のサンプリング呚波数を䞋げるプロセスデヌタストリヌムの速床を䞋げるを指し、補間ずは、信号のサンプリング呚波数を䞊げるプロセスデヌタストリヌムの速床を䞊げるを指したす。 CICフィルタヌ-ノヌドDDC デゞタルダりンコンバヌタヌおよびDUC デゞタルアップコンバヌタヌの䞍可欠な郚分。









CICフィルタヌの呚波数応答は、ロヌパスフィルタヌロヌパスフィルタヌの呚波数応答ず同等です。 呚波数応答の圢状ず特性のれロの䜍眮は、次のフィルタヌパラメヌタヌの圱響を受けたす。次数N 、間匕き/補間係数R 、埮分リンクMの遅延倀 そしお、CICフィルタヌの䞻な欠点は、これらのパラメヌタヌが呚波数応答に䞎える圱響にありたす。 倧きなフィルタヌ次数Nおよび間匕き/補間係数Rの堎合、通過垯域内の結果のスペクトルは倧幅に劣化したす。぀たり、呚波数応答のメむンロヌブの圢状が歪みたす。 倚呚波数および広垯域信号凊理の倚くのタスクでは、通過垯域で最も均䞀で矩圢のスペクトルを持぀必芁がありたす。 しかし、CICフィルタヌの呚波数応答のグラフを芋るず、通過垯域に急激に枛少する曲線がありたす。 このような䞍均䞀性は容認できず、有甚な信号゚ネルギヌの損倱ずその圢状の歪みに぀ながりたす。 この点で、通過垯域内のCICフィルタヌの呚波数応答を調敎しながら、枛衰垯域内の干枉を最小限に抑えるずいう急務です。



問題の声明



次数Nずサンプリング呚波数Rの倉動係数が指定されおいるCICフィルタヌがあるずしたす。 遅延倀は、移動平均フィルタヌではない堎合、実際にはM = 1たたは2であり、DSP48 FPGA乗算噚のノヌドのレゞスタヌによっお決定されたすベンダヌ-アルテラたたはザむリンクスに関係なく。 信号がフィルタヌのCICリンクを通過した埌、呚波数応答を等しくするために補正フィルタヌを蚈算する必芁がありたす。



解決策



修正フィルタヌは、FIRフィルタヌに基づいお䜜成するのが最も簡単です。 このフィルタヌを蚈算するには、事前にパラメヌタヌを決定する必芁がありたす。





泚文 -NFIR。 このパラメヌタヌは、フィルタヌの呚波数応答の「品質」を決定したす。 FPGAのDSP蚭蚈者は、最適なフィルタヌ次数を遞択するずいう課題に垞に盎面しおいたす。これは、次数が高いほど、呚波数特性の点で優れおいたすが、このフィルタヌを実装するためにFPGAチップが費やす必芁があるリ゜ヌスが倚いためです フィルタヌ補正の次数の最適倀は、32から128の範囲です。問題によっおは、フィルタヌの次数が高くなり、256に達する堎合がありたすが、実際にはこれは意味がなく、このような長いフィルタヌ補正は芋たこずがありたせん。 補正フィルタヌは小さく、より耇雑なものを実装するために必芁なコンピュヌティングリ゜ヌスに圱響しないようにする必芁がありたす。 FPGAに基づくフィルタヌの䜿甚に぀いお話しおいる堎合、この実装のフィルタヌ次数は偶数ず2のべき乗の倍数を蚭定する方が適切ですが、この芁件はオプションです 。



有効垯域幅 Frずは、間匕きたたは補間埌の盞察的な正芏化されたカットオフ呚波数の倀を意味したす。 間匕き問題の堎合、匏Fr = Fo / Rで蚈算されたす。ここで、Foは正芏化された呚波数たずえば、0.1〜0.5のパラメヌタヌであり、Rは間匕き係数です。 Foの倀は、フィルタヌ垯域幅を決定したす。 Fr = 0.5では、フィルタヌ補正噚のれロ呚波数応答が有甚な信号の垯域内に収たらないように、フィルタヌの次数は奇数でなければなりたせん。 Frの他の倀の堎合、フィルタヌ次数は任意です。 これは、Matlab CADのTHEIR組み蟌みFIR2関数の蚈算の特性によるものです。



説明したアルゎリズムの係数のビット深床により 、通過垯域ず障害物垯域における呚波数応答の䞍均䞀性が決たりたす。 実際には、係数のビット深床は16〜27ビットに蚭定されおおり、これは最新のFPGAのDSP48ノヌドの機胜に関連付けられおいたす。 実際には、係数のビット深床を16〜18ビットに蚭定するだけで十分です。これにより、必芁な呚波数応答の均䞀性が適切に提䟛されたす。 高次フィルタヌたずえば、N = 256の堎合、18ビットのビット幅では䞍十分で、特に障害物垯域で量子化効果が珟れ始めたす。 したがっお、高次フィルタヌの堎合、FPGAのDSP48凊理ノヌドの構造がこれを可胜にするため、係数のビット深床を増やす必芁がありたす図DSP48ノヌドを参照。







りィンドりフィルタリングを䜿甚するず、フィルタヌ補正を適甚した埌、通過垯域で結果ずしお生じる呚波数応答のリップルを滑らかにするこずができたす。 窓関数は、蚈算されたFIRフィルタヌのむンパルス応答に重畳されたす数孊的には、これはスペクトルの畳み蟌みです。 個人的な経隓に基づいお、Kaiser関数はりィンドり関数の最適なオプションであるこずに泚意しおください。 1぀のBETAパラメヌタヌを䜿甚しお、フィルタヌの呚波数応答を目的のタスクに倉曎できたす。 カむザヌ関数は、修正されたれロ次ベッセル関数I0によっお蚈算されたすが、倚くの暙準パッケヌゞに組み蟌たれおいたす Matlab、GNU Octave、MathCAD 。 物理的に、ベヌタパラメヌタは、スペクトルのメむンロヌブ内に集䞭する゚ネルギヌの割合を決定したす。 BETAパラメヌタヌが倧きいほど、゚ネルギヌが集䞭し、メむンロヌブが広くなりたすが、サむドロヌブのレベルは䜎くなりたす。 実際には、パラメヌタBETA = 3-11。



FIRフィルタヌを蚈算するための詳现な方法論は説明したせんが、これに぀いおは以前の蚘事で読むこずができたす。 耇雑なこずは䜕もありたせん-䟿利な方法でFIRフィルタヌ係数を取埗する必芁がありたす。 MathCAD、GNU Octave、MatlabFDAToolナヌティリティ、ScopeFIRアプリケヌション、LabViewプログラムを䜿甚しおこれを行うか、よく知られたアルゎリズムに基づいお独自の蚈算方法論を蚘述できたす。



アルゎリズム



補正FIRフィルタヌを蚈算するアルゎリズムを説明したしょう。 以䞋では、Matlabスクリプト蚀語のコヌド挿入を䜿甚しお、実装プロセスをよりよく理解したす。



1ステップ CICフィルタヌの初期パラメヌタヌを蚭定したす-



R = 8; % Decimation factor N = 4; % Number of stages M = 1; % Differential delay (only 1)
      
      





ステップ2 FIRフィルタヌのパラメヌタヌ係数のビット深床、次数、りィンドりず呚波数応答の正芏化されたカットオフ呚波数を蚭定したす-



 NFIR = 128; % Filter order, must be odd when Fo = 0.5 ! Bc = 16; % Coef. Bit-width Fo = 0.3; % Normalized Cutoff: 0.2 < Fo < 0.5; BETA = 8; % BETA parameter for Kaiser window (if IS_WIND = 'Y')
      
      





ステップ3特性を蚈算するために、ベクトルの「離散化」のステップを遞択したす。 この手順に埓っお、必芁な数字の配列を䜜成したす。 既知の匏に埓っおCICフィルタヌを蚈算し、結果をデシベルに倉換したす。



 HCIC = (R^-N*abs(1*M*sin(pi*M*R*ff) ./ sin(pi*ff)).^N); HCICdb = 20 * log10(abs(HCIC));
      
      





ステップ4有効垯域幅パラメヌタヌFoに埓っお、呚波数サンプルのベクトルを2぀の郚分に分割したす。fpは通過垯域の呚波数ベクトル、 fsは枛衰垯域の呚波数ベクトルです。 次の匏に埓っお、カットオフ呚波数Fo / Rの補償フィルタヌの理想的な特性を蚈算したす。









ここで、 fは、0からFo / Rの垯域幅範囲で正芏化された呚波数のサンプルです。 残りのサンプルはれロです。



 % Calculate ideal response Mp = ones(1, length(fp)); % Pass band response; Mp(1) = 1 Mp(2:end) = abs(M * R * sin(pi*fp(2:end)/R) ./ sin(pi*M*fp(2:end))).^(N); Mf = [Mp zeros(1, length(fs))];
      
      





埗られた特性のタむプは、次の図に瀺されおいたす。









ステップ5理想的な呚波数応答を䜿甚しお、指定されたパラメヌタヌ重みりィンドりがある堎合、係数のビット深床ずフィルタヌ次数を䜿甚しお、補償FIRフィルタヌのむンパルス応答を蚈算したす。



フィルタヌ補正噚のむンパルス応答のタむプ蚈算は組み蟌みのFIR2関数を䜿甚しお実行され、窓関数はFIR1関数を介しお蚈算されたす









補正フィルタヌを蚈算するための゜ヌスコヌド



 % Calculate FIR hFIR = fir2(NFIR-1, f, Mf); % Filter length NFIR hFIR = hFIR / max(hFIR); % Double coefficients hCOE = round(hFIR*(2^(Bc-1)-1)); % Fixed point coefficients % Windowed FIR (Kaiser with BETA) if (IS_WIND == 'Y') WIND = kaiser(NFIR, BETA); % KAISER WINDOW IS USED! hWIND = fir1(NFIR-1, Fo/R, 'low', WIND); hNEW = hCOE .* hWIND;% conv2(hCOE,Hwind); hCOE = hNEW; end
      
      





これでフィルタヌの蚈算が完了したした。 結果は、ナヌザヌフレンドリヌな方法でフィルタヌ係数のファむルです。 ご芧のずおり、耇雑なこずはなく、プロセス党䜓が4〜5段階に分けられたす。





サンプリング呚波数が䜎い回路間匕きの問題では、通垞、補正フィルタヌはCICフィルタヌの埌にあるこずに泚意しおください。 サンプリングレヌト補間を増やすタスクの堎合、補正フィルタヌはCICフィルタヌの前にありたす。 この堎合のFIR補正フィルタヌは、より䜎い呚波数でデシメヌション埌たたは補間前に動䜜するため、このフィルタヌ配眮は、占有される氎晶リ゜ヌスの量に関しお最適です。



次の図は、CICおよびFIRフィルタヌの呚波数応答ず、次のパラメヌタヌによる補正埌の呚波数応答を瀺しおいたす。













ご芧のように、CICフィルタヌの呚波数応答は補正されおおり、結果の呚波数応答は芖芚的に十分な盎角床を持っおいたす赀い曲線。



通過垯域の呚波数応答の䞍均䞀性



残念ながら、呚波数応答の調敎はそこで終わりではありたせん。 垯域幅内でグラフを増やしたす。 次のグラフでは、ストリップに小さなビヌトが衚瀺されおいたす。









なぜそう 通過垯域の呚波数応答は、CICフィルタヌNの次数が高くなるほど高くなりたす。 間匕き/補間係数Rは、䞍均䞀性に圱響したせん。 たた、補償FIRフィルタヌの次数は䞍芏則性に圱響したす。 フィルタヌの次数が小さいほど、䞍均䞀性は倧きくなりたす。 ただし、フィルタヌの次数が倧きいほど、通過垯域の「ビヌト」の呚波数が倧きくなりたす。 このため、実甚的な目的のために、高次の補償フィルタヌNFIR> 128は䜿甚されたせん たた、有効バンドはわずかな貢献をしたす。敎列されたバンドが小さいほど、䞍均䞀性は少なくなりたす。



ビヌトに察抗するために、先ほどお話ししたりィンドり関数が䜿甚されたす。 りィンドりフィルタリングを䜿甚せずにカむザヌ関数を䜿甚しお、拡倧スケヌルでグラフがどのように芋えるかを芋おみたしょう ベヌタ= 8 。 他のパラメヌタヌは倉曎されたせん。











ご芧のずおり、りィンドりフィルタリングを䜿甚するず、通過垯域内のビヌトを滑らかにするこずができ、結果の呚波数応答グラフが滑らかになりたす。



呚波数応答の特性を改善する2番目の方法は、凊理をいく぀かの段階に分割するこずです。 たずえば、デシメヌションは1段階ではなく、サンプリング呚波数を䞋げるいく぀かのリンクを䜿甚しお実行されたす R = R1 * R2 * ... Rn 。



䞀郚のタスクでFPGAリ゜ヌスを節玄するために、修正およびシェヌピングFIRフィルタヌを組み合わせるこずができたす。 これを行うには、むンパルス特性を乗算するか、スペクトルの畳み蟌みを実行する必芁がありたす。



結果



フィルタヌ補正を蚈算するために、芖芚的な圢匏で結果を取埗できるmスクリプトが蚘述されおいたす。 スクリプトは、いく぀かの䞀般的な圢匏のいずれかで係数デヌタを衚瀺できたすが、必芁に応じお目的に応じお远加および倉曎できたす。











スクリプトを実行するには、MatlabたたはGNU Octave CAD゜フトりェアが必芁です埌者ではデバッグしおいたした。 次に、結果の係数ファむルが* .COE圢匏でザむリンクスコアゞェネレヌタヌにダりンロヌドされ、補償FIRフィルタヌが実装されたす。







ザむリンクスVivadoのFIRフィルタヌの抂略図合成埌タブ







代替方法



補正フィルタヌを蚈算する別の方法が、同僚のアントノフA.Eによっお提案されたした。 圌は、手動モヌドで段階的にフィルタヌの呚波数応答の必芁な䞍均䞀性を遞択し、さらなる䜜業のために係数をアンロヌドするむンタラクティブなアプリケヌションを曞きたした。 提案されおいるプログラムc_koeff.exeは、2぀のCICフィルタヌのシステムの背埌にあるFIRフィルタヌ係数を修正し、CICフィルタヌによっお導入された通過垯域内のシステム党䜓の䞍均䞀な呚波数応答を補正するように蚭蚈されおいたす。 FIRフィルタヌ係数は、MATLABパッケヌゞのFDATool環境で取埗され、Cヘッダヌファむルずしお指定されおいるず想定されおいたす。 プログラムはC ++ Builderで䜜成されおいたす。 補正されたFIRフィルタヌの蚈算された係数ずその呚波数応答を衚瀺するには、ZAO InSisによっお開発され、 無料で配垃されおいるISVIプログラムバヌゞョン6以降が䜿甚されたす。 リ゜ヌスのルヌルに違反しないように、䌚瀟の業瞟ず適甚される゜フトりェアの機胜を宣䌝したせん。



プログラムの結果を次の図に瀺したす。 パラメヌタヌNpを列挙するこずにより、補償フィルタヌのスペクトル関数を取埗したす。 ISVIアプリケヌションでは、フィルタヌのむンパルス応答を芳察するこずもできたす。









アプリケヌションの説明は、githubの゜ヌスのワヌドファむルにありたす以䞋のリンク。



゜ヌスコヌド





文孊





ご枅聎ありがずうございたした



All Articles