신호 엔벨로프를 계산하는 힐버트 변환?


27

힐버트 변환을 사용하여 신호의 엔벨로프를 계산할 수 있다고 들었습니다. 이것은 어떻게 작동합니까? 그리고이 "Hilbert envelope"는 단순히 신호를 수정함으로써 얻는 봉투와 어떻게 다릅니 까?

동적 범위 압축에 사용할 엔벨로프를 계산하는 방법 (예 : 오디오 신호의 큰 부분의 "볼륨 낮추기")을 찾는 데 특히 관심이 있습니다.


작업 코드가 있습니까? 힐버트 변형 또는 다른 방법으로?
Basj

답변:


18

힐버트 변환은 "분석"신호를 계산하는 데 사용됩니다. 예를 들어 http://en.wikipedia.org/wiki/Analytic_signal을 참조하십시오 . 신호가 사인파 또는 변조 된 사인파 인 경우 분석 신호의 크기는 실제로 엔벨로프처럼 보입니다. 그러나 힐버트 변환의 ​​계산은 사소한 것이 아닙니다. 기술적으로 상당한 길이의 인과 관계가 아닌 FIR 필터가 필요하므로 상당한 양의 MIPS, 메모리 및 대기 시간이 필요합니다.

광대역 신호의 경우 실제로는 특정 응용 프로그램에 대해 "봉투"를 정의하는 방법에 따라 다릅니다. 다이나믹 레인지 압축을 적용하려면 시간 경과에 따른 음량 인식과 관련이있는 메트릭이 필요합니다. 힐버트 변환은 올바른 도구가 아닙니다.

더 나은 옵션은 A- 가중 필터 ( http://en.wikipedia.org/wiki/A-weighting ) 를 적용한 후 손실 피크 또는 손실 RMS 검출기를 수행하는 것입니다. 이것은 시간이 지남에 따라 인식되는 음량과 상당히 관련이 있으며 상대적으로 저렴합니다.


둘 다 원인이 아니지만 FFT 방법 (스펙트럼의 절반과 IFFT를 버림)이 일반적으로 FIR 필터보다 빠릅니까?
endolith

또한 힐버트 변환을 계산하기위한 FFT 방법에 인과 관계가 필요하지 않은 방법 유용한 봉투 모양을 얻으려면 상당히 큰 창이 필요할 것입니다.
mavavilj

4

Hilbert 변환을 사용하여 다음과 같은 방식으로 봉투를 계산할 수 있습니다. (MATLAB 코드로 작성합니다) :

envelope = abs(hilbert(yourTimeDomainSignal));

나는 지금 수학을 쓸 시간이 없지만 (나중에 시도 할 것입니다) 매우 간단하게 신호가 사인파라고 말하십시오. 사인의 힐버트 변환은-코사인입니다. 다시 말해, 힐버트 변환은 항상 -90도 위상만큼 신호를 이동시킵니다 (즉, 직교 위상).

신호 (사인파)를 j힐버트 된 신호 (코사인 파)의 시간에 더하면 다음과 같은 결과가 나타납니다.

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

또한 e ^ (j * (wt-pi / 2))입니다.

따라서이 값의 절대 값을 취하면 봉투 인 1이됩니다. (이 경우).


죄송합니다! 마이너스 부호를 잊어 버렸습니다. Dilip 덕분에 고쳐졌습니다.
Spacey

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)를 여러 정현파 구성 요소로 분해하고 각 구성 요소를 반 시계 방향으로 1/4 바퀴 회전시키는 것입니다 (각 구성 요소는 복잡한 숫자이므로 특정 구성 요소 x + iy-> -y + ix)를 다시 결합하십시오.

이 접근법은 약간의 조정이 필요하지만 꽤 잘 작동합니다 (아직 더 나은 방법으로 이것을 설명하기에 충분히 수학을 이해하지 못합니다)

여기에는 '힐버트 변환'과 '분석 신호'라는 두 가지 핵심 용어가 있습니다.

나는 그들이 사용하는 데 상당한 모호함을 보았 기 때문에이 용어를 사용하지 않는 것입니다.

한 문서는 원래 실제 신호 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)를 양과 음의 정현파 주파수 성분으로 분해 한 다음 단순히 음의 성분을 제거하고 양의 성분을 두 배로 만듭니다. 주파수 편이와 저역 통과 필터링의 조합으로이 '음수 주파수 성분 제거'를 수행 할 수 있습니다. 이것은 디지털 필터를 사용하여 매우 빠르게 수행 할 수 있습니다. 아직이 방법을 탐색하지 않았으므로 지금 당장 말할 수있는만큼입니다.


1
이것들은 모두 같은 것을 계산하는 다른 방법입니다 (힐버트 변환을 통한 분석 신호의 크기). "고급"기술은 단순히 FFT를 수행하고 음의 주파수를 제로화 한 다음 역 FFT를 수행하는 것입니다. 실수 부분은 원래 신호이며 허버트 부분이 힐버트 변환입니다. 악마는 프레임, 창, 겹침 및 선형 대 원형 처리와 같은 세부 사항에 있습니다.
Hilmar

2
일부 개인이 위의 게시물을 통해 내가이 커뮤니티에 부여한 시간과 에너지를 공감 비로 보상하는 데 적합하다는 것을 아는 것은 마음이 아 is니다. 좋은 정보가 담긴 게시물로 누군가에게 도움이 될 것입니다.
P i

2
@Hilmar, 힐버트 변환을 달성하기 위해 '음수 주파수를 제거하는'더 나은 방법이 있습니다. 내가 말했듯이, FFT를 포함하지 않는 방법. 위의 관점에서, 나는 지금 그것을 자세히 설명하기를 열망하지 않습니다.
P i

힐버트 변환에 대한 자세한 답변을 부탁드립니다. 이것이 잘 받아 들여 졌음을 확신하고 싶었으므로 낙담하지 마십시오. 누구든지 공감대를 무시하십시오.

0

기본적으로 자동 게인 컨트롤 (AGC)을 찾고 있습니다. 디지털 방식으로 처리해야하는지 확실하지 않지만, 해당 작업을 매우 잘 수행 할 수있는 매우 우수한 집적 회로가 있습니다. 일반적으로 AGC는 많은 다른 기능과 통합되어 있지만 일부 회로는 JFET 트랜지스터로 만들 수 있습니다 그리고 일부 다이오드.

그러나 디지털 처리를 통해이 작업을 수행하는 매우 쉽게 이해할 수있는 방법은 5 또는 10msec를 나타내기에 충분한 샘플의 시간 창을 가져와 잊어 버리는 요소 alpha ^ n (alpha <1)을 적용하는 것과 같이 적응 형 분산 추정기를 설계하는 것입니다. 각각의 새로운 샘플은 과거 샘플보다 더 많이 고려됩니다. 그런 다음이 편차 추정을 기반으로 원하는대로 오디오를 디자인합니다.이 함수는 각 오디오 샘플에 적용되는 게인에 차이를 매핑하는 기능입니다. 분산이 임계 값을 초과 할 경우 게인이 일부 요인만큼 감소하는 반면, 이는 어려운 결정 경계 일 수 있습니다.

또는 분산에서 이득으로의 비선형 변환을 생성하고 마지막 분산 추정을 기반으로 모든 샘플에 변환을 적용하는 더 부드러운 결정 경계 일 수 있습니다.

이것은 휴리스틱 방법이지만 적어도 모든 무거운 수학에서 제외됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.