STFT 및 DWT (웨이블릿)


12

STFT는 일부 주파수 영역 수정 (예 : 노이즈 제거)을 수행하기 위해 사운드 데이터 (예 : .wav 사운드 파일)에 성공적으로 사용될 수 있습니다.
하여 N=441000(샘플링 레이트에서 10 초, 즉 fs=44100), windowsize=4096, overlap=4,은 STFT approximatively 생성 430x4096어레이 (제 1 좌표 기간, 두번째 좌표 주파수 빈). 이 어레이에서 수정을 수행 할 수 있으며 겹침 추가 (*)로 재구성을 수행 할 수 있습니다 .

웨이블릿으로 어떻게 비슷한 일을 할 수 있습니까? (DWT), 즉 시간 프레임 및 주파수 빈 과 a x b함께 유사한 모양의 배열을 얻습니다 .이 배열에서 일부 수정을 수행하고 마지막에 신호를 복구하십시오. 어떻게 ? 웨이블릿은 오버랩에 해당하는 것은 무엇입니까 ? 여기에 관련된 파이썬 함수는 무엇입니까 (나는 오디오 수정의 쉬운 예를 찾지 못했습니다 ...)?abpyWavelets

(*) : 사용할 수있는 STFT 프레임 워크는 다음과 같습니다.

signal = stft.Stft(x, 4096, 4)    # x is the input
modified_signal = np.zeros(signal.shape, dtype=np.complex)

for i in xrange(signal.shape[0]):    # Process each STFT frame
    modified_signal[i, :] =  signal[i, :] * .....  # here do something in order to
                                                   # modify the signal in frequency domain !
y = stft.OverlapAdd(modified_signal, 4)   # y is the output

목표는 웨이블릿이있는 유사한 프레임 워크를 찾는 것입니다.


부수적 인 의견 : STFT에서 "필터링"을하는 것은 정말 나쁜 생각입니다. 실제로하고 싶은 대부분의 일을하는 좋은 방법은 아닙니다. 실제로 무엇을 달성하려고합니까?
Peter K.

PyWavelets는 이산 웨이블릿 변환 전용입니다. STFT와 유사한 작업을 수행하려는 경우 가버 변환 인 상수 Q 변환과 같은 연속 웨이블릿 변환을보다 쉽게 ​​이해할 수 있습니다. 이는 본질적으로 복잡한 Morlet 연속 웨이블릿 변환 과 동일하지만 뒤집을 수없는
endolith

1
(이 질문은 "커뮤니티 (Community)"에서 되살아났다.) 웨이블릿은 STFT와 매우 유사한 방식으로 겹쳐지고 추가된다. 그래서 나는 질문의 본질을 얻지 못합니다.
robert bristow-johnson

더 자세한 정보가 필요합니까?
Laurent Duval

답변:


4

단시간 푸리에 변환은 일반적으로 중복 변환이며 일반적으로 모든 주파수에서 동일한 서브 샘플링으로 구현됩니다. 창이 잘 선택되면 완료된 것입니다. 창을 반전시키고 초기 신호를 복구 할 수 있습니다.

중복적이고 완전하기 때문에 많은 역수가 있습니다. 복잡한 필터 뱅크와 같은보다 일반적인 도구를 사용하여 구현하고 이해할 수 있습니다. 창 유형과 길이에 오버랩을 더하면 오버랩 여부를 계산할 수있는 분석 필터 뱅크가 제공됩니다. 그렇다면 자연의 역수를 계산하고 최적화 된 역수 도 계산할 수 있습니다. 오버랩-가산은 많은 잠재적 역에 대한 것 중 하나 일 것입니다. 아마도 가장 일반적인 것인데, 종종 윈도우 선택을 제한합니다.

표준 이산 웨이블릿 변환도 필터 뱅크이며, 서브 샘플링이 각 주파수 대역에서 동일하지 않다 (또는보다 적절한 스케일)한다는 차이점이 있습니다. 이것은 각 스케일마다 고르지 않은 길이로 변합니다. 그러나 작업 할 수있는 계수의 "사각형 배열"을 생성하는 중복 웨이블릿 구현이 있습니다. 가장 잘 알려진 체계는 다른 이름으로 불립니다. 시프트 불변 또는 시간 불변 웨이블릿 , 미정의 웨이블릿, 고정 웨이블릿 변환(SWT), 때로는 사이클 회전. 표준 재구성에는 스케일에 따라 다른 샘플링 요소로 인해 더 "임베디드"된 점을 제외하고 오버랩 추가와 유사한 단계가 포함됩니다. 라이브러리에서 별도의 웨이블릿으로 사용하거나 자신의 웨이블릿을 디자인하여 사용할 수도 있습니다. 그 이유는 표준 이산 웨이블릿이 비 이중화를 염두에두고 설계 되었기 때문에 웨이블릿의 선택이 제한됩니다. 이중화를 사용하면 충족해야 할 제약 조건이 덜 엄격하므로 웨이블릿 선택이 증가합니다. "궁극적 인"아바타는 연속 웨이블릿 변환으로, 모든 역 합성 웨이블릿을 "거의"인정합니다. 내 마지막 문장은 상당히 거칠고 의미가 있기를 바랍니다. 제곱 행렬이 뒤집을 수 없으면 역수가 하나뿐입니다. "직사각형"매트릭스가 일반화 된 방식으로 반전 될 수있는 경우

고정 웨이블릿 변환 의 파이썬 구현이있는 것 같습니다 . 2.3.4 에서 몇 가지 참조를 찾을 수 있습니다 . 링크 된 논문의 변하지 않는 웨이블릿 장 번역 .

일반적으로 실제 응용 분야 (지리 물리학, 비파괴 테스트, 초음파, 진동)의 감지, 노이즈 제거 또는 복원에 훨씬 강력합니다.


"중복"은 "입력을 재현하는 데 필요한 것보다 더 많은 정보가 출력에 있습니까?"를 의미합니까?
endolith

1
NM>N

3

단시간 푸리에 변환으로 필터링하기 위해 오버랩 추가 / 오버랩 저장이 필요한 이유는 기본적으로 사용자가 얻는 계수와 관련된 기본 함수가 특정 시간 범위에 대해 정의되기 때문입니다 (단일 시점과 반대). 확장 계수를 계산하는 데 사용하는 푸리에 변환은 신호 프레임 길이로 정의 된 원형 도메인에서 회선을 구현합니다. 즉, 프레임의 두 끝 점이 실제로 식별되고 원 안에 닫힙니다. 그렇기 때문에 편집 한 계수의 기본 함수가 둘러 싸서 프레임의 양쪽 끝에 영향을 미치지 않도록해야합니다.

웨이블릿은 시간 변환 고유 벡터가 아니며 순환 컨볼 루션을 사용하여 계산되지도 않습니다. 즉, 중첩 컨볼 루션의 부작용을 처리하는 오버랩 추가 또는 저장이나 다른 방법이 필요하지 않습니다. 대신, 웨이블릿 기본 벡터는 신호를 설명하기위한 가능한 기초입니다. 그러므로 (완전하고 불연속 적이거나 직교 인) 웨이블릿 변환은 시간 도메인 기반에서 웨이블릿 도메인 기반으로의 기본 변경 일 뿐이다. 기본 변경 사항은 (기본 변경 매트릭스의 역수를 적용하여) 뒤집을 수 있으며 시간 도메인으로 다시 전환 할 수 있습니다.

창 크기, 오버랩, 샘플링 속도로 지정한 매개 변수는 모두 웨이블릿 변환에 적용 할 수 없습니다. 필요한 것은 어머니 웨이블릿입니다. 결과를 STFT 출력과 비교하려는 경우 STFT 기본 벡터 (예 : 복잡한 지수 캐리어를 곱한 창)를 웨이블릿 프로토 타입으로 선택할 수 있습니다. 그런 다음 고속 웨이블릿 변환을 적용하면 신호가 고역 및 저역 통과 필터링 및 소멸 된 신호의 트리로 분해되어 궁극적으로 계수가됩니다. 각 계수는 웨이블릿 기본 벡터 및 해당 매개 변수 (스케일, 시간) 또는 (주파수, 시간)와 연관됩니다. 계수를 조작 한 다음 역 이산 웨이블릿 변환을 적용 할 수 있습니다. 신호를 다시 생성하기 위해 계수를 다시 합성 필터 뱅크를 통해 실행합니다.

이 과정은 사소하지 않으며 초보자에게는 소화하기 어려울 수 있습니다. 그러나 빠른 웨이블릿 변환과 그 역을 구현하는 플랫폼에 맞는 라이브러리 / 도구 상자를 찾을 수 있어야합니다. 그러나 자신의 웨이블릿 기반을 실현하려면 분해 및 합성 필터 뱅크에 대한 필터 계수를 도출해야합니다. 이를 위해서는 몇 가지 깊은 이론이 필요하며 아마도 먼저 공부해야 할 것입니다.

웨이블릿 변환의 다른 특징, 즉 과도하게 작동하는 연속 웨이블릿 변환이 있습니다. 계산 속도가 느려지고 반전하기가 훨씬 어려워 현재 원하는 작업에 대한 옵션이 아닙니다.


1
답변 주셔서 감사합니다. 코드 프레임 워크를 사용하려고하는 주된 이유는 (어린 시절부터 몇 년 전 박사 학위를 마쳤을 때 (DSP 관련이 아님), 항상 묻지 않을 것입니다. 그래서 초보자 질문!))은 실제 자료 (예 : DSP의 오디오 신호 )를 조작 하면 심도 이론을 이해하는 데 많은 도움이됩니다. 내가 코딩하고 싶은 것은 : Audio sound -> Wavelet transform -> (do something on the array) -> Inversion -> Audio output. (배열에서 무언가를 수행하면) 웨이블릿이 어떻게 작동하는지 조금 더 이해할 것입니다.
Basj

1
@Basj, 내가 말한 것처럼하십시오. 빠른 웨이블릿 변환과 그 역을 모두 지원하는 파이썬 라이브러리를 찾은 다음 생성 된 계수 트리로 재생하십시오. 행운을 빌고 재미있게 보내!
Jazzmaniac

"웨이 브릿 변환에 모두 적용되지는 않습니다"CWT에도 적용 가능합니까?
endolith

1

웨이블릿 기준을 정의하는 방법에는 여러 가지가 있습니다. 일반적으로 웨이블릿은 다음과 같습니다.

wx0,k0(x)=Aexp(ik0x)e(k0(xx0))

x0k0eAk

(x0,k0)(x0,k0)

변환 된 데이터의 차원이 신호의 차원을 초과하므로 웨이블릿 기준이 직교하지 않습니다. 즉, 다음은 거짓입니다.

wk0,x0|wk0,x0=δ(x0,x0)δ(k0,k0)

Aw

x0,k0|wx0,k01k0wx0,k0|=identity

다시 말해, 구성 웨이블릿을 추가하여 신호를 완벽하게 재구성 할 수 있습니다.

"수정"은 위의 합계에 간단히 삽입 할 수 있습니다.

my_filter=x0,k0|wx0,k0f(x0,k0)wx0,k0|

2013-11-19 업데이트 : 요청에 따라 아래에 구현 세부 정보 추가

f(x)

cx0,k0=wx0,k0|f

k0cx0,k0x0ffw0,k0cx0,k0

  • ff^
  • k01/4
    • f^w^0,k0
    • [kl,kr)w^0,k0
    • 역 푸리에 변환을 적용하십시오.
    • 이를 곱하십시오exp(ixkl+kr2)cx0,k0x0

k0x0w0,k0k0k0

cx0,k0k0

FFT 정의 방법에 따라 절단 스펙트럼에서 정규화 문제가 발생하는 경우가 있습니다. 나는 여기서 모든 가능성을 다루려고하지 않을 것이다. 정규화는 기본적으로 쉬운 문제입니다. ;-)

w^x0,k0(k)wx0,k0(x)

w^x0,k0=Aexp(i(kk0)x0)exp((Qlog(k/k0))2)

QAk0


1
웨이블릿 이론에 대한 중요한 점을 상기시켜주십시오. 실제로 이것이 어떻게 작동하는지 이해하는 데 필요합니다. 그러나 여기서 질문은 예를 들어 오디오 신호에서 작동하는 프레임 워크 코드를 작성하는 것에 관한 것입니다. 질문 :이 무한한 합계를 다루는 방법, 창 (또는 오히려 어머니-잔물결 ) 을 선택하는 방법, 파이썬에서 pyWavelets를 사용하여 수행하는 방법 (또는 다른 동등한 언어, 파이썬으로 번역 할 것), 방법 매개 변수를 선택하십시오 (오디오의 예제와 같이 : 샘플링 속도 = 44100, fft 창 = 4096, 오버랩 = 4 등)
Basj

akk|kakk|=Id

K

akakf

1
그것이 작동하는지 아닌지를 확인하는 가장 좋은 방법은 최소한의 코드 예제를 제공하는 것입니다 (예를 들어 pyWavelet을 사용하면 상상할 수있는 몇 줄로 가능해야합니다) (내가 이해하면 잘 할 것입니다. 웨이블릿에 대해 읽는 데 몇 일이 더 필요합니다!)
Basj
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.