歪み補償フィルターの作成方法


11

複雑なミキサー、CICデシメーター、およびFIR補償/デシメーションフィルターで構成されるチャネライザーを作成しています。最終的なFIRフィルターは、必要に応じて、複数のフィルターとして実装できます。

私の質問は、CICフィルターの非常に平坦でない周波数応答を補償するようにフィルターを設計するにはどうすればよいですか?CICの応答の逆数を計算して必要な周波数応答を作成し、それを逆FFTに通してインパルス応答を取得しますか?

ご覧のとおり、私の特定の問題はCICフィルターに関連していますが、私の質問は、どのような種類の歪み補償フィルターを作成するかということです。

御時間ありがとうございます。


3
通信システムの早い段階で歪みを補償することを目的とするフィルターは、しばしばイコライザーと呼ばれます。それまでの間に読むべきいくつかの情報を提供するかもしれません。一般的なタイプは、ゼロ強制イコライザー(補償しているシステムの周波数応答にゼロがある場合は必要ありません)と最小平均二乗誤差(MMSE)イコライザーです。
Jason R

@JasonR私は、チャネル補償型決定指向イコライザーのコンテキストでMMSE適応イコライザーに精通していますが、それがあなたの意図したものであるとは思えません。どういうわけかイコライザーを訓練しますか?重要なのは、エラーを特定する方法だと思います。
ジムクレイ

MMSEは、イコライザーが追求する基準のみを参照します。アダプティブまたは非アダプティブにすることができます。補償するシステムの伝達関数と、加法性ノイズの自己相関関数がわかっていて、両方が時間不変である場合、MMSEイコライザーを導出できます。これは、時間とともに固定されます。アダプティブソリューションは、その情報が正確にわかっていない場合や、時間の経過とともに変化する場合(かなり一般的です)に使用できます。
Jason R

適応フィルターには、多くの既知のシンボルがシステムを介して送信されるトレーニングモードが含まれることが多く、レシーバーはフィルターを適切な係数のセットに収束させることができます。トレーニング後、追跡フェーズに入るのも一般的です。このフェーズでは、意思決定指向の操作を使用して、フィルタータップを継続的に更新します。別の方法として、SNRとISIが「十分に良い」状況下では、意思決定指向モードを最初からブラインド取得スキームとして使用し、トレーニングフェーズをスキップできます。
ジェイソンR

数学的にアクセス可能なこの主題に関する読み物を見つけることは、やや困難です。私はヘイキンの適応フィルター理論が好きですが、数学を切り抜けるにはいくらかの努力が必要です(そして、いくつかの固体線形代数背景が必要です)。複雑すぎて、定期的に使用しない場合は、まず統計信号処理のトピックに目を通す必要があります。
Jason R

回答:


9

以下は、CIC補償に対処するものであり、一般的な「歪み」手法ではありません。しかし、それは変化しない「歪み」を「補償」するための簡単な方法です。周波数応答がわかっている場合は、周波数の逆数を使用して補正できます。CICフィルターのような例では、複雑さが軽減されたために貧弱なフィルターが使用される可能性があり、後でシグナルチェーンで補正されます。この例では、周波数応答は既知であり、その逆を使用できます。マルチレートフィルターでは、デシメーション後に「使用可能な」スペクトルのみを使用することに注意してください。

一般に、CICフィルターを補償するには、CICフィルター応答の逆を使用して、補償フィルターを生成できます。CICの応答(参照[r2]または[r3]を参照)

H(ω)=|sin(ωD/2)sin(ωM/2)|N

ここで、Dは微分遅延、Mは間引き率、Nはフィルター次数(カスケードフィルターの数)です。逆は次のように指定できます

H(ω)=|sin(ωM/2)sin(ωD/2)|N

補償フィルターの周波数応答が得られたら、必要なFIRフィルターの長さを選択するだけです。FIRの長さはアプリケーション固有です。明らかに、FIRフィルターが長ければ長いほど、より良い補償になります。

以下は、この単純な補正のプロットです。

以下は、周波数応答とプロットを作成するPythonコードです。

import numpy as np
from numpy import sin, abs, pi
import pylab

D = 1; M = 7; N = 3

Hfunc = lambda w : abs( (sin((w*M)/2)) / (sin((w*D)/2.)) )**N
HfuncC = lambda w : abs( (sin((w*D)/2.)) / (sin((w*M)/2.)) )**N

w = np.arange(1024) * pi/1024

G = (M*D)**N
H = np.array(map(Hfunc, w))
Hc = np.array(map(HfuncC, w))
# only use the inverse (compensation) roughly to the first null.
Hc[int(1024*pi/M/2):] = 1e-8
plot(w, 20*log10(H/G))
plot(w, 20*log10(Hc*G))
grid('on')

sinc1

[r1] アルテラ、「CIC補正フィルターについて」

[r2] R.ライオンズ、「Understanding Digital Signal Processing」、第2版、Prentice Hall、アッパーサドルリバー、ニュージャージー、2004

[r3] R.ライオンズ、「カスケード型積分器の櫛形フィルターについて」


Ref 1は素晴らしいですが、異なる用語を使用しています(M =ステージ遅延、Dを使用したところR =削減率、Mを使用したところ)、エラーが表示されるまでに時間がかかりました:WM / 2を使用すると、アルテラはpiを指定しますF / R。簡単なExcelプロットの後、アルテラのバージョンが正しいと思います。
アランキャンベル

@AlanCampbell上記の方程式(コードスニペットで実行したもの)をプロットすると、エラーは発生しません。方程式で明示的に呼び出さなかったのはゲインです。コードスニップでゲインを削除していることに注意してください。あなたは、コードスニップを実行して、変更した場合M=8N=9、それは私が参照2に近い用語を使用した参照1と同じプロットを作成します
クリストファー・フェルトンの

2

クリストファーの答えは良いものだと思います。私は怠惰な/詐欺師のタイプのために1つ追加するつもりでした。

Matlabのfdatool(フィルター設計と分析ツール)を調べていると、CICフィルターと逆sincフィルターの両方を設計およびモデル化できることがわかりました。逆sincフィルターはCICの歪み補償フィルターです。

CICフィルターを生成するには、[マルチレートフィルターの作成]ページ(バージョンR2011bの左側にあるボタン)に直接移動し、CICフィルターを指定します。その後、補間/間引き率、カスケード数(Matlabでは「セクション」と呼びます)など、必要なすべてのパラメーターを設定できます。

逆sincフィルターを作成するには、[デザインフィルター]ページ(ツールの起動時にデフォルトで表示されるページ)に移動し、[ローパス]ドロップダウンメニューから[逆sincローパス]を指定します。その後、さまざまなパラメータを設定できます。ダイアログのオプション部分には、カスケード(sinc指数)の数に対応する "p"を含む、いくつかの固有のパラメーターがあります。

しかし、逆sincフィルターの設計は完全に満足のいくものではありませんでした。なぜなら、それを正しくすることは、私の通過帯域がどこにあるのか、その時点でのCICの垂れ下がりが何であるかを理解し、大まかにキャンセルするフィルターを設計することよりも、計算のインスタンスのように思えなかったからです。その垂れ下がり。私のCICフィルターには4つのカスケードがあったので、 "p"を4に設定する必要があると思っていましたが、これを行った場合は、過度に補正されました。「p」をデフォルト値の1のままにしました。

セッションで両方のフィルターを保存し、フィルターマネージャーを使用してそれらをカスケード接続し、全体的な周波数応答を確認すると、ツールは本当に輝きました。これは非常に役に立ち、簡単に実行できました。


0

ここで回答を複製せずに、

CIC補正フィルターの作り方

これは、CIC補償のための非常にシンプルな3タップソリューションを示しています。

これはCICに固有であり、逆Sincが必要なアプリケーション(D / A変換の前など)にも当てはまります。

一般的なトランスバーサル歪み(動的ノイズ歪みとは対照的にトランスバーサルフィルターで複製できるもの)を補正するには、理想的には、最小二乗誤差アプローチを使用して、Wiener Hopf方程式を使用して補正フィルターを作成します。可能であればトレーニングシーケンスを使用して、望ましい応答と実際の応答を比較し、イコライザーをトレーニングします。ソースコードを使用してこれを示すアプリケーションについては、以下を参照してください。

オーディオ信号のスピーカー周波数応答を補償する

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.