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 wignerVilleDistribution;
if((res = wignerVilleDistribution.SetSourceImage(fliSrcImage)).IsFail())
break;
if((res = wignerVilleDistribution.SetDestinationImage(fliDstImage)).IsFail())
break;
if((res = wignerVilleDistribution.SetScale(0.00004)).IsFail())
break;
if((res = wignerVilleDistribution.SetSelfCorrelationHalfSize(511)).IsFail())
break;
if((res = wignerVilleDistribution.SetSelfCorrelationWindow(CWignerVilleDistribution::ESelfCorrelationWindow_Gaussian)).IsFail())
break;
if((res = wignerVilleDistribution.SetSigma(0.3)).IsFail())
break;
if((res = wignerVilleDistribution.SetOutputMode(CWignerVilleDistribution::EOutputMode_L2Norm)).IsFail())
break;
if((res = wignerVilleDistribution.SetOutputDirection(CWignerVilleDistribution::EOutputDirection_Horizontal)).IsFail())
break;
if((res = wignerVilleDistribution.Execute()).IsFail())
break;