信号包絡線を計算するヒルベルト変換?


27

ヒルベルト変換を使用して信号のエンベロープを計算できると聞いたことがあります。これはどのように作動しますか?そして、この「ヒルベルト包絡線」は、信号を単純に整流することによって得られる包絡線とどのように違いますか?

ダイナミックレンジ圧縮で使用するエンベロープを計算する方法を見つけることに特に興味があります(つまり、オーディオ信号の大きな部分の「音量を下げる」)。


現在、いくつかの作業コードがありますか?ヒルベルト変換または別の方法のいずれかで?
Basj

回答:


18

ヒルベルト変換は、「分析」信号の計算に使用されます。たとえば、http://en.wikipedia.org/wiki/Analytic_signalを参照してください。信号が正弦波または変調された正弦波の場合、分析信号の大きさは実際にエンベロープのように見えます。ただし、ヒルベルト変換の計算は簡単ではありません。技術的には、かなりの長さの非因果的FIRフィルターが必要であるため、かなりの量のMIPS、メモリ、レイテンシが必要になります。

広帯域信号の場合、特定のアプリケーションの「エンベロープ」をどのように定義するかに大きく依存します。ダイナミックレンジ圧縮のアプリケーションでは、時間の経過に伴うラウドネスの知覚とよく相関するメトリックが必要です。ヒルベルト変換はそのための適切なツールではありません。

より良いオプションは、A-weightedフィルター(http://en.wikipedia.org/wiki/A-weighting)を適用してから、損失のあるピークまたは損失のあるRMS検出器を実行することです。これは、時間の経過とともに知覚される音量とかなりよく相関し、比較的安価です。


どちらも因果関係はありませんが、FFT法(スペクトルの半分とIFFTを捨てる)は通常、FIRフィルターよりも高速ですか?
エンドリス

また、ヒルベルト変換を計算するためのFFTメソッドは、非因果性をどのように必要としますか?有用なエンベロープ形状を得るには、かなり大きなウィンドウが必要なだけでしょう。
mavavilj

4

ヒルベルト変換を使用して、次の方法でエンベロープを計算できます。(MATLABコードとして記述します):

envelope = abs(hilbert(yourTimeDomainSignal));

すぐに数学を書き出す時間はありませんが(後で試します)、ごく簡単に言えば、あなたの信号は正弦波であると言います。サインのヒルベルト変換は、-コサインです。(言い換えれば、ヒルベルト変換は常に-90度位相シフトした信号を提供します-言い換えれば、その直角位相)。

信号(正弦波)をjヒルベルト信号(-コサイン波)の時間に加算すると、次のようになります。

sin(wt) - j.*cos(wt)

これはたまたまe ^(j *(wt-pi / 2))でもあります。

したがって、これの絶対値を取得すると、エンベロープである1が得られます。(この場合)。


おっとっと!マイナス記号を忘れてしまった-Dilipに感謝、今修正。
スペイシー

2

私は、信号から振幅エンベロープを取得する少なくとも2つの別々の方法を知っています。

重要な方程式は次のとおりです。

E(t)^2 = S(t)^2 + Q(S(t))^2

Where Q represents a π/2 phase shift (also known as quadrature signal).

私が知っている最も簡単な方法は、Qを取得することです.FFTを使用してS(t)を一連の正弦波成分に分解し、各成分を反時計回りに4分の1回転させます(各成分は複素数になるため、特定の成分x + iy-> -y + ix)そして、再結合します。

このアプローチは非常にうまく機能しますが、少し調整する必要があります(これをより良い方法で説明するのに十分な数学をまだ理解していません)

ここにはいくつかの重要な用語、すなわち「ヒルベルト変換」と「分析信号」があります

私はこれらの用語の使用を避けています。なぜなら、それらの使用にかなりのあいまいさが見られたことは確かだからです。

1つのドキュメントは、元の実信号f(t)の(複雑な)解析信号を次のように説明しています。

Analytic(f(t)) = f(t) + i.H(f(t))

where H(f(t)) represents the 'π/2 phase shift' of f(t)

この場合、振幅エンベロープは単純に| Analytic(f(t))|であり、元のピタゴラス方程式に戻ります

NB:最近、周波数シフトとローパスデジタルフィルターを含むより高度な手法に出会いました。理論は、さまざまな手段で分析信号を構築できるということです。f(t)を正と負の正弦波周波数成分に分解し、負成分を除去して正成分を2倍にします。周波数シフトとローパスフィルタリングの組み合わせにより、この「負の周波数成分の除去」を行うことができます。これは、デジタルフィルターを使用して非常に高速に実行できます。私はまだこのアプローチを検討していないので、これは現時点で言えることです。


1
これらはすべて、同じこと(ヒルベルト変換による分析信号の大きさ)を計算するためのまったく異なる方法です。「高度な」手法は、単純にFFTを実行し、負の周波数をゼロにしてから、逆FFTを実行することです。実数部は元の信号であり、虚数部はそのヒルベルト変換です。悪魔は、フレーミング、ウィンドウイング、オーバーラップ、線形処理と円形処理などの詳細にあります。
ヒルマー

2
一部の個人が、このコミュニティに(上記の投稿を介して)与えた時間とエネルギーにダウン票で報いるのにふさわしいと思うのは残念です。誰かのためになる有益な堅実な情報を含む投稿。
P i

2
@ヒルマー、ヒルベルト変換を達成するための「負の周波数を除去する」より良い方法があります。前述したように、FFTを使用しない方法です。上記に照らして、私は今それを詳述することに特に熱中しているとは感じません。
P私

Hilbert変換に関する詳細な回答に感謝します。これが好評であり、落胆しないことを保証したかったのです。誰による下票も無視してください。

0

したがって、基本的に自動ゲイン制御(AGC)を探しています。デジタルで処理する必要があるかどうかはわかりませんが、そのタスクを非常にうまく実行できる非常に優れた集積回路があります。通常、AGCは他の多くの機能と統合されていますが、JFETトランジスタでいくつかの回路を作成することができますそしていくつかのダイオード。

しかし、デジタル処理でこれを行う非常に簡単に理解できる方法は、5または10ミリ秒を表すのに十分なサンプルの時間ウィンドウを取得し、忘却係数alpha ^ n(alpha <1)を適用するなど、適応分散推定器を設計することです新しいサンプルはそれぞれ、過去のサンプルよりも多く考慮されます。次に、この分散推定に基づいて、各オーディオサンプルに適用するゲインに分散をマッピングする関数である、希望に応じて設計します。これは硬判定境界である可能性がありますが、分散が何らかのしきい値を超えると、何らかの要因でゲインが減少します。

または、より軟判定の境界で、分散からゲインへの非線形変換を作成し、最後の分散推定に基づいてすべてのサンプルに変換を適用することもできます。

これはよりヒューリスティックな方法ですが、少なくともすべての重い数学からあなたを救います。

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