Wigner Ville Distribution
1 개요
1D 이미지에 Wigner Ville Distribution 을 수행하는 알고리즘입니다.
2 알고리즘 상세 설명
일차적으로 소스 이미지 x(t) 를 아날리틱(analytic) 신호로 변환합니다.
입력 받은 Self Correlation Half Length(L) 을 기반으로, 각 픽셀을 중심으로 한 tau = [-L, L] 범위의 self correlation 을 계산합니다. L 값이 클수록 주파수 해상도가 올라가지만 시간 분해능은 감소하는 트레이드 오프 관계에 있습니다.
이렇게 얻어진 2D 이미지에 대하여 tau 축을 따라 Window 적용 및 FFT 를 수행함으로써, 시간 정보가 내재된 주파수 정보를 추출합니다.
Output Mode 설정을 통해 2채널 복소수 또는 1채널 L2 Norm 으로 출력 모드 설정이 가능하며, Output Direction 으로 출력 이미지 상 시간 축(소스 이미지 x 축에 대응)의 방향 또한 Horizontal 및 Vertical 로 설정 할 수 있습니다.
FFT 수행 시, frequency domain 에서 radix 가 과도하게 크지 않은 최적의 길이로 증가될 수 있으며, 따라서 2*L + 1 이상의 주파수 축 길이를 가집니다.
Source Wave Plot | Destination Image |
---|---|
![]() |
![]() |
Fig. Chirp 신호의 Wigner Ville Distribution 실행 결과
3 파라미터 설정 및 사용 방법
멤버함수 | 파라미터 | 설 명 | ||
---|---|---|---|---|
SetScale | double | f64Scale | IN | 소스 데이터에 적용 될 Scale 값 |
`f64Scale` - **Default Value**: 1.0
멤버함수 | 파라미터 | 설 명 | ||
---|---|---|---|---|
SetSelfCorrelationHalfSize | int64_t | i64SelfCorrelationHalfSize | IN | self correlation half size 값 |
`i64SelfCorrelationHalfSize` - **Default Value**: 1
멤버함수 | 파라미터 | 설 명 | ||
---|---|---|---|---|
SetSelfCorrelationWindow | CWignerVilleDistribution::ESelfCorrelationWindow | eSelfCorrelationWindow | IN | self correlation window 값 |
- None (rectangle)
- Hann (a0 = 0.5, a1 = 0.5)
- Hamming (a0 = 0.53836, a1 = 0.46164)
- Blackman (a0 = 0.42659, a1 = 0.49656, a2 = 0.076849)
- BlackmanNuttall (a0 = 0.3635819, a1 = 0.4891775, a2 = 0.1365995, a3 = 0.0106411)
- BlackmanHarris (a0 = 0.35875, a1 = 0.48829, a2 = 0.14128, a3 = 0.01168)
- Gaussian (sigma used)
`eSelfCorrelationWindow` - **Default Value**: CWignerVilleDistribution::ESelfCorrelationWindow_None
멤버함수 | 파라미터 | 설 명 | ||
---|---|---|---|---|
SetSigma | double | f64Sigma | IN | Gaussian window 의 Sigma 값 |
`f64Sigma` - **Default Value**: 0.1, (0, 0.5]
멤버함수 | 파라미터 | 설 명 | ||
---|---|---|---|---|
SetOutputMode | CWignerVilleDistribution::EOutputMode | eOutputMode | IN | output mode 값 |
- L2Norm
- Complex
`eOutputMode` - **Default Value**: CWignerVilleDistribution::EOutputMode_L2Norm
멤버함수 | 파라미터 | 설 명 | ||
---|---|---|---|---|
SetOutputDirection | CWignerVilleDistribution::EOutputDirection | eOutputDirection | IN | output direction 값 |
- Horizontal
- Vertical
`eOutputDirection` - **Default Value**: CWignerVilleDistribution::EOutputDirection_Horizontal
4 예제 코드
CWignerVilleDistribution wvd;
if((res = wvd.SetSourceImage(fliISrcImage)).IsFail())
break;
if((res = wvd.SetDestinationImage(fliIDstImage)).IsFail())
break;
if((res = wvd.SetScale(0.00004)).IsFail())
break;
if((res = wvd.SetSelfCorrelationHalfSize(511)).IsFail())
break;
if((res = wvd.SetSelfCorrelationWindow(CWignerVilleDistribution::ESelfCorrelationWindow_Gaussian)).IsFail())
break;
if((res = wvd.SetSigma(0.3)).IsFail())
break;
if((res = wvd.SetOutputMode(CWignerVilleDistribution::EOutputMode_L2Norm)).IsFail())
break;
if((res = wvd.SetOutputDirection(CWignerVilleDistribution::EOutputDirection_Horizontal)).IsFail())
break;
if((res = wvd.Execute()).IsFail())
break;