PyWavelets CWT 구현

1
OverLordGoldDragon 2020-09-29 03:30.

저는 PyWavelets 의 Continuous Wavelet Transform 구현 을 이해 하고 여기에서 코딩하고 제공 한보다 ' 기본'버전과 비교하는 방법 을 이해하려고합니다 . 특히:

  1. 통합 된 웨이블릿은 int + diff없이 convolving하는 것과 같은 방식으로 post-convolving 차이가 나나요?
  2. 스케일을 변경하는 것과 동일한 해상도로 통합 웨이블릿을 리샘플링하는 방법은 무엇입니까?

순진한 구현 :

def cwt(x, win_len=None, win='morlet', real=False):
    N = len(x)
    win_len = win_len or N // 8

    scales = _scales(N, nv=32)
    coef = np.zeros((len(scales), N), dtype='complex128')
    kernel = morlet_kernel(win_len)
    wl2 = win_len // 2

    for i, scale in enumerate(scales):
        coef[i, :] = np.convolve(x, kernel(scale)[::-1])[wl2:-(wl2 - 1)]
    return coef

PyWavelets (관련 부분으로 잘림) :

def pywt_cwt(data, scales):
    out = np.empty((np.size(scales),) + data.shape)
    int_psi, x = integrate_wavelet(wavelet='morl', precision=10)
    
    for i, scale in enumerate(scales):
        step = x[1] - x[0]
        j = np.arange(scale * (x[-1] - x[0]) + 1) / (scale * step)
        j = j.astype(int)  # floor
        if j[-1] >= int_psi.size:
            j = np.extract(j < int_psi.size, j)
        int_psi_scale = int_psi[j][::-1]

        conv = np.convolve(data, int_psi_scale)
        coef = - np.sqrt(scale) * np.diff(conv, axis=-1)
        
        d = (coef.shape[-1] - data.shape[-1]) / 2.
        coef = coef[..., floor(d):-ceil(d)]
        out[i, ...] = coef
    return out

비교 $f=1, 4$정현파 :

1 answers

0
OverLordGoldDragon 2020-09-29 03:30.

먼저 아래 섹션의 "순진한 분석"을 참조하십시오. PyWavelets에 대해 : 알고리즘은 Github 에서 이전 MATLAB 구현 에서 유래 한 것으로 나타 났지만 웨이블릿 커널 코딩에 대한 세부 정보는 제공하지 않습니다. 그래서 저는 탐험을 시작했습니다. 여기에 다양한 비주얼과 코드 주석이 있습니다 . 주요 결과는 다음과 같습니다. - 모든 코드

아래의 "PyWavelets 분석"을 참조하십시오. 다음을 구현하고 있습니다. 즉, Eq 4입니다.


(1) int + diff없이 convolving과 동등하게 통합 된 웨이블릿과 차이가있는 post-convolving은 어떻게됩니까?

공식은 오른쪽에 있으며 왼쪽에서 파생 된 방정식입니다. 모든 것을 지속적으로 통합하는 대신$\mathcal{R}$, 적분은 다음과 같은 세그먼트로 분할됩니다. $k$. 입력이 일정하다고 가정합니다.$[k, k+1]$ (그럴 수는 없지만 $)$?), 이산 적이므로 잔물결은 연속적으로 유지됩니다. 이는 입력을 적분 외부로 이동할 수있게합니다. 시각적으로 :

그럼 어떻게 코딩할까요? 식 4에서 우리에게 diff어딘가 가 필요하다는 것이 분명 합니다. pywt하지 np.diff(conv), 그것은 기본적으로 np.diff(coef); Naive에서 예상 계수의 차이가 나타나는 이유는 무엇입니까?

식 4에서 우리는 통합 웨이블릿 up-to k + 1, minus up-to k, 웨이블릿을 곱했습니다. 이는 웨이블릿이 각각 및에 있는 제품과 동일 합니다 ( 및 을 연결 하고 대신 연결하는 것과 비교).b - 1bt=k+1t=kb=b-1b=b

대답은 다음 안에 있습니다 conv. 웨이블릿이 적어도 신호 내부의 중간에있을 때만 해당되도록 이미 트리밍되었다고 가정합니다. 그런 다음 모든 지점은 conv다른 tau(또는 오히려 b) 에서 입력의 일부와 웨이블릿의 곱입니다 . 따라서의 인접한 두 지점은 및에 conv웨이블릿이있는 제품입니다 .bb + 1

$$ \begin{align} \text{conv} &= [s \cdot \psi_{\text{int}}(t - 0),\ s \cdot \psi_{\text{int}}(t - 1),\ ...] \\ \Rightarrow \text{DIFF}(\text{conv}) &= [s \cdot (\psi_{\text{int}}(t - 1) - \psi_{\text{int}}(t - 0)),\ ...] \end{align} $$

그러나 사이 마이너스 추구 t=k+1하고 t, 또는 더 t낮출 t따라서 PW 고장 7 단계를 설명하기 위의 네가티브이다.


(2) 스케일을 변경하는 것과 동일한 해상도로 통합 웨이블릿을 리샘플링하는 방법은 무엇입니까?

PW 분석의 (5) 아래 그림을 참조하십시오. pywt확장 된 인수로 웨이블릿을 재 계산하는 대신 웨이블릿을 정의하는 샘플 수를 통해 "규모"하는 것처럼 보입니다. ... 비록 시각이 명확 리샘플링하여 수행 입력하는 것이 상대적으로 스트레칭 웨이블릿 팽창.

그래서 그것은 실제로 확장의 한 형태입니다. 그러나 그것은 순진한 것과 어떻게 비교됩니까? Naive는 고정 된 웨이블릿 길이를 사용하고 스케일링 된 인수를 전달하여 방정식별로 더 직관적으로 다시 계산됩니다. 그렇다면 어느 것이 더 낫습니까? 정반대의 질문이 더 명확합니다. 더 높고 낮은 규모에서 일어나는 일을 고려하십시오.

  1. 더 높은 순진함 : 잔물결이 너무 많이 확장되어 제로 테일보다 훨씬 앞서 샘플링 프레임을 빠져 나갑니다.
  2. pywt 더 높음 : 잔물결은 괜찮습니다. 문제는 conv. 웨이브 렛 길이는 1024로 고정되어 있으므로 입력이 더 짧으면 더 높은 스케일의 웨이브 렛이 신호를 완전히 곱할 수 없습니다. 불일치가 클수록 신호에 의해 "Naive high"와 유사한 웨이블릿이 더 많이 "보여집니다". 이것은 수직 이동에 따라 다른 질문의 히트 맵에서 볼 수 있습니다.
    • 잔물결의 최대 규모도 무제한입니다. len(j)규모에 비례하여 증가합니다 (하지만 정규화 문제가 있습니다. 여기 참조 ).
  3. Naive Lower : 모두 좋습니다.
  4. pywt lower : 잔물결의 해상도가 작습니다.
  5. 고정 대 가변 창 길이 : 더 높은 스케일은 입력에 비해 웨이블릿의 더 큰 확장 또는 0이 아닌 것에 해당해야합니다 . Naive가 더 높은 스케일에서 갑자기 제로화를 중단하는 것을 제외하고는 둘 다이를 수행합니다.

두 가지 모두에서 더 높은 척도 문제는 최대 척도를 제한하여 해결됩니다. 둘 다 완전히 안전한 영역에 있다면 Naive 구현이 더 높은 해상도로 인해 선호되는 것 같습니다. 그러나 "안전"을 꼬리에서 0으로 점프하지 않는 것으로 간주한다면 Naive의 "안전 영역"은 엄청나게 작습니다.

반대로, pywt의 문제는 지퍼와 같은 인공물을 제거하기 위해 제안 된 최대 웨이블릿 길이를 늘림으로써 더 쉽게 해결됩니다 (질문의 플롯에서 볼 수 있음). 그러나 이는 짧은 입력에 대해 더 높은 규모의 성능을 악화 시키지만 실제로는 1024보다 짧을 것 같지 않습니다.


PyWavelets 분석 :

  1. 통합 전에 Wavelet은 표시된 코드 blob과 정확히 일치하며, 이는 전체 실제 Morlet (Naive에서 사용)의 근사치입니다. $\sigma > 5$에서 위키 .
  2. pywt를 통해 실제 Morlet을 통합 np.cumsum(psi) * step하여 차동 단계 크기를 설명합니다.
  3. 통합 웨이블릿 int_psi은 모두에게 재사용됩니다.scales
  4. 각각 scale에 대해 동일한 값 int_psi이 증가하는 해상도 로 리샘플링 되며 j정수는 동일한 최소값과 최대 값 (거의) 사이에서 선형으로 변합니다 scales.
  1. 순진함 scale과 나란히 증가하는 웨이블릿 (나중을 위해) :
  1. 컨볼 루션 결과 첫 번째 diff'd,
  2. 부정,
  3. 곱하기 sqrt(scale),
  4. 그런 다음 (a) 웨이블릿이 "신호 내부"의 절반 이상인 부분 만 포함하거나 (b) 길이를 len(x).

Naive Breakdown : CWT / STFT에 익숙하지 않은 경우 여기에서 1-3 부를 강력히 권장 합니다 .

우리는 (1) 잔물결 유형이 필요합니다. (2) 잔물결 길이; (3) 웨이블릿 증가 / 중첩. 실제 Morlet , 96 개 샘플을 사용하고 20 씩 증가합니다.

win_len = 96  # "win" == window == wavelet
win_inc = 20
n_wins = (len(x) - win_len) // win_inc + 1

coef = np.zeros((n_wins, len(scales)), dtype='complex128')
kernel = morlet_kernel(win_len)

for tau in range(n_wins):
    start = tau * win_inc
    end   = start + win_len
    coef[tau, :] = _transform(x[start:end], kernel, scales)
def _transform(x, kernel, scales):
    coef = np.zeros(len(scales), dtype='complex128')
    for i, scale in enumerate(scales):
        psi = np.conj(kernel(scale))
        coef[i] = np.sum(x * psi / np.sqrt(scale))
    return coef

시각화 scale=2:

질문에서이 구현과 순진한 구현의 차이점은 후자는 win_inc=1뒤집힌 웨이블릿으로 컨 볼빙하고 웨이블릿이 완전히 "신호 내부"인 부분 만 포함하도록 결과를 트리밍하는 것과 동일합니다. 또한 여기 tau바깥 쪽 루프에 ( "증가") 스케일이 있지만 둘은 동일합니다.

마지막으로, 타임 시프트 희미한 모양이 다릅니다. 질문의 구현은 웨이블릿이 적어도 "입력 내부"의 중간에있는 컨볼 루션의 일부만 포함되도록 트리밍됩니다. 이것은 전체 잔물결이 포함 된 곳으로 더 잘 립니다.


미해결 :

  1. * sqrt(scale)(8 단계 pywt)? 식 4는 1 / sqrt(scale). * scale우리가 웨이블릿을 수치 적으로 통합 한 것을 제외하고는 체인 규칙을 고려했습니다 . 스케일별로 처리하는 것이 합리적입니다. 스케일 별 웨이블릿이 ... 동일한 리샘플링 된 웨이블릿이기 때문에 스케일 별 웨이블릿을 통합 하지 않는 것에서 벗어날 수 있습니까? 해결 .

Related questions

MORE COOL STUFF

Jana Duggar: 사랑에 대해 그녀가 말한 모든 것과 '하나'를 찾기 위한 5년의 창

Jana Duggar: 사랑에 대해 그녀가 말한 모든 것과 '하나'를 찾기 위한 5년의 창

Jana Duggar는 사랑에 대한 그녀의 검색에 대해 공개했습니다. 다음은 그녀가 결혼을 위한 5년 창구와 주제에 대해 말한 모든 것입니다.

Sam Heughan은 자신이 '아웃랜더' 세트에서 무엇을 취할지 정확히 알고 있습니다.

Sam Heughan은 자신이 '아웃랜더' 세트에서 무엇을 취할지 정확히 알고 있습니다.

'아웃랜더'의 스타 샘 흑한은 최근 자신을 스타로 만든 역할인 제이미 프레이저를 기억하기 위해 세트장에서 무엇을 할 것인지를 밝혔다.

Fab Four 내부자에 따르면 밴드의 '가장 신나는 공연' 중 하나였던 초기 비틀즈 노래

Fab Four 내부자에 따르면 밴드의 '가장 신나는 공연' 중 하나였던 초기 비틀즈 노래

'She Loves You'는 한 시간 만에 작곡되고 하루 만에 녹음되었으며, 비틀즈의 경력 중 최고의 공연 중 하나인 비틀즈의 노래였습니다.

Dolly Parton은 다른 손자들이 아무도 하지 않을 때 그녀의 '병약한' 할머니를 도왔습니다. 그녀는 또한 그녀에게 장난을 쳤습니다

Dolly Parton은 다른 손자들이 아무도 하지 않을 때 그녀의 '병약한' 할머니를 도왔습니다. 그녀는 또한 그녀에게 장난을 쳤습니다

Dolly Parton과 그녀의 할머니 Bessie는 특별한 관계를 가졌습니다. Parton 할머니는 매우 아팠지만 Dolly는 그녀에게 장난을 쳤습니다.

타누키가 어떻게 실제 존재이면서 신화 속 존재일 수 있을까?

타누키가 어떻게 실제 존재이면서 신화 속 존재일 수 있을까?

통통한 배, 장난기 어린 눈, 일본 정원에 돌 조각상으로 나타나는 습관을 가진 타누키는 신화와 현실의 경계를 모호하게 만듭니다.

세상에서 가장 단단한 나무는 무엇인가?

세상에서 가장 단단한 나무는 무엇인가?

참나무나 히코리는 튼튼하다고 생각할 수도 있지만, 세상에서 가장 단단한 나무에 비하면 그 근처에도 못 미칩니다.

바다 깊은 곳에 숨어 있는 가장 무서운 바다 생물 10종

바다 깊은 곳에 숨어 있는 가장 무서운 바다 생물 10종

바다는 아름다움으로 가득하지만, 지구상에서 가장 무서운 바다 생물들도 숨어 있습니다. 이 동물들 중 다수는 해수면 아래, 어둡고 압력이 높은 심해에 숨어 있습니다.

마인크래프트 최고의 검 마법 부여 10가지

마인크래프트 최고의 검 마법 부여 10가지

적대적인 몹과 싸우거나 PvP 시나리오에 대비하고 있다면, 마인크래프트에서 제공하는 최고의 검 마법 부여를 아는 것이 큰 도움이 될 수 있습니다. 검에 마법을 부여하면 더 큰 피해를 입히고, 몹 드랍률을 높이고, 검의 내구도를 연장할 수 있습니다.

곰 요약: 마커스는 시카고에서 가장 친절하고, 부드럽고, 성실한 사람인가요?

곰 요약: 마커스는 시카고에서 가장 친절하고, 부드럽고, 성실한 사람인가요?

“Children”은 유명인의 카메오와 충격적인 소식을 전합니다.

9,800달러로 이 7인승 2008 Toyota RAV4를 타고 싶으신가요?

9,800달러로 이 7인승 2008 Toyota RAV4를 타고 싶으신가요?

이 RAV4는 상태가 매우 양호하며 의자 게임에 적합하다고 주장됩니다.

휴스턴의 여름 더위 속에서 Amazon 배달 밴이 불타 폭발

휴스턴의 여름 더위 속에서 Amazon 배달 밴이 불타 폭발

드론 영상에는 화재를 진압하기 위해 애쓰는 소방관들의 모습이 포착됐다.

Marvel의 Black Panther 쇼는 지금까지 가장 중요한 애니메이션 쇼가 될 것입니다

Marvel의 Black Panther 쇼는 지금까지 가장 중요한 애니메이션 쇼가 될 것입니다

Eyes of Wakanda는 MCU에 직접 연결되며 X-Men '97, What If..., Daredevil 등에 대한 업데이트도 제공됩니다.

안나 윈투어, 37년간의 보그 편집장직에서 물러나다 - 그리고 그녀는 사람을 채용합니다!

안나 윈투어, 37년간의 보그 편집장직에서 물러나다 - 그리고 그녀는 사람을 채용합니다!

1988년부터 미국판 보그에 합류한 오랜 편집장은 6월 26일 목요일 아침 직원 회의에서 이 소식을 발표했습니다.

케이트 미들턴의 아름다운 사파이어 약혼 반지에 대한 모든 것 (그리고 반지에서 영감을 얻은 왕실 전래품!)

케이트 미들턴의 아름다운 사파이어 약혼 반지에 대한 모든 것 (그리고 반지에서 영감을 얻은 왕실 전래품!)

케이트 미들턴의 약혼 반지는 윌리엄 왕자가 프로포즈하기 전에 다이애나 공주의 소유였던 것으로 유명합니다. 이 역사적인 작품에 대한 모든 정보를 여기에서 확인하세요.

라구나 비치 출연진: 그들은 지금 어디에 있나요?

라구나 비치 출연진: 그들은 지금 어디에 있나요?

'라구나 비치'는 2000년대 중반 고등학생 Lauren Conrad, Kristin Cavallari, Stephen Colletti 등의 삶을 따라갔습니다. MTV 리얼리티 시리즈의 출연진이 현재 있는 곳은 다음과 같습니다.

Dog the Bounty Hunter의 아내는 누구인가? Francie Frane에 대한 모든 것

Dog the Bounty Hunter의 아내는 누구인가? Francie Frane에 대한 모든 것

전직 목장주이자 현상금 사냥꾼인 도그와 결혼한 프랜시 프랜에 대한 모든 정보를 소개합니다.

대명사는 정말 무섭다

너무 자주 그렇듯 갑자기 와닿는다 다시 중간쯤이야 <아니, 태평양에 있는 사람 말고 마룬, 카니발에 있는 사람> 모든 헤드라인이 시끄러워…..

작문 실력을 향상시키는 3가지 입증된 방법

글쓰기의 이점과 그렇게 하는 데 도움이 되는 전략

작문 실력을 향상시키는 3가지 입증된 방법

2022년에는 GPT-3가 출시되면서 글쓰기 능력이 덜 중요해진 것 같습니다. AI를 사용하면 글이 서투른 사람들도 양질의 직원을 생성할 수 있습니다.

느린 침식: 사람들이 경력을 낭비하는 방식 공개

느린 침식: 사람들이 경력을 낭비하는 방식 공개

오늘날과 같이 급변하고 경쟁이 치열한 세상에서 경력은 개인의 성장, 재정적 안정 및 전반적인 삶의 만족도에 중요한 역할을 합니다. 그러나 많은 사람들은 침체와 불만족의 끊임없는 순환에 휩싸여 직업 생활에서 점차 쇠퇴하고 있습니다.

팟캐스트가 영향력 있는 이유는 무엇입니까?

팟캐스트가 영향력 있는 이유는 무엇입니까?

지난 주에 저는 PressGazette(영국 언론 뉴스 웹사이트)를 통해 발송된 보도 자료를 보았습니다. 이 기사는 Scandi 팟캐스트 호스팅 및 광고 회사인 Acast가 팟캐스팅에서 "아마도 가장 영향력 있는" 게시자 컨소시엄을 이끌 것이라고 발표했습니다.

Language