단어로 설명되는 역 단시간 푸리에 변환 알고리즘


20

순방향 및 역 짧은 시간 푸리에 변환 (STFT)이 이산 시간 도메인 신호에 적용될 때 발생하는 상황을 개념적으로 이해하려고합니다. Allen and Rabiner ( 1977 )의 논문과 Wikipedia 기사 ( link )를 찾았습니다 . 또한 찾을 수있는 또 다른 좋은 기사가 있다고 생각 여기 .

Gabors 변환을 계산하는 데 관심이 있습니다. 가우시안 창이있는 STFT에 불과합니다.

이것이 앞으로 STFT 에 대해 이해하는 것 입니다 .

  1. 서브 시퀀스는 시간 영역 요소들로 구성된 신호로부터 선택된다.
  2. 서브 시퀀스에는 시간 영역에서 포인트 단위 곱셈을 사용하는 윈도우 함수가 곱해집니다.
  3. 곱해진 서브 시퀀스는 FFT를 사용하여 주파수 영역으로 취해진 다.
  4. 연속적인 겹치는 하위 시퀀스를 선택하고 위의 절차를 반복하여 m 개의 행과 n 개의 열 이있는 행렬을 얻습니다 . 각 열은 주어진 시간에 계산 된 하위 순서입니다. 스펙트로 그램을 계산하는 데 사용할 수 있습니다.

그러나 STFT의 경우 논문은 중복 분석 섹션에 대한 요약에 대해 이야기합니다. 나는 여기서 실제로 일어나고있는 것을 시각화하는 것이 매우 어렵다는 것을 알게되었습니다. STFT 를 계산하려면 (위와 같이 단계별로) 어떻게해야합니까?

앞으로 STFT

앞으로 STFT에 대해 어떻게 진행되고 있는지 보여주는 그림을 만들었습니다. 내가 이해하지 못하는 것은 원래의 시간 순서를 다시 얻을 수 있도록 각 하위 시퀀스를 조립하는 방법입니다. 누군가이 그림을 수정하거나 하위 시퀀스가 ​​어떻게 추가되는지 보여주는 방정식을 줄 수 있습니까?정방향 변환

역변환

다음은 역변환에 대한 이해입니다. 각 연속 창은 IFFT를 사용하여 시간 도메인으로 다시 가져옵니다. 그런 다음 각 창은 단계 크기만큼 이동하고 이전 이동 결과에 추가됩니다. 다음 다이어그램은이 프로세스를 보여줍니다. 합산 된 출력은 시간 도메인 신호입니다.

역변환

코드 예

다음 Matlab 코드는 합성 시간 도메인 신호를 생성 한 다음 STFT 프로세스를 테스트하여 숫자 반올림 오차 내 에서 역이 순방향 변환 의 이중 임을 나타냅니다. 신호의 시작과 끝은 제로 패딩되어 창의 중심이 시간 영역 신호의 첫 번째 요소와 마지막 요소에 위치 할 수 있습니다.

Allen and Rabiner (1977)에 따르면 주파수 영역에서 주파수 응답을 변경하기 위해 곱셈이 발생하는 경우 분석 창의 길이는 포인트 보다 크거나 같아야합니다 . 여기서 은 필터 응답입니다 . 길이는 제로 패딩으로 연장됩니다. 테스트 코드는 단순히 역수가 순방향 변환의 이중임을 나타냅니다. 원형 컨벌루션을 방지하려면 길이를 연장해야합니다.N 0N+N01N0

% The code computes the STFT (Gabor transform) with step size = 1
% This is most useful when modifications of the signal is required in
% the frequency domain

% The Gabor transform is a STFT with a Gaussian window (w_t in the code)

% written by Nicholas Kinar

% Reference:
% [1] J. B. Allen and L. R. Rabiner, 
% “A unified approach to short-time Fourier analysis and synthesis,” 
% Proceedings of the IEEE, vol. 65, no. 11, pp. 1558 – 1564, Nov. 1977.

% generate the signal
mm = 8192;                  % signal points
t = linspace(0,1,mm);       % time axis

dt = t(2) - t(1);           % timestep t
wSize = 101;                % window size


% generate time-domain test function
% See pg. 156
% J. S. Walker, A Primer on Wavelets and Their Scientific Applications, 
% 2nd ed., Updated and fully rev. Boca Raton: Chapman & Hall/CRC, 2008.
% http://www.uwec.edu/walkerjs/primer/Ch5extract.pdf
term1 = exp(-400 .* (t - 0.2).^2);
term2 = sin(1024 .* pi .* t);
term3 = exp(-400.*(t- 0.5).^2);
term4 = cos(2048 .* pi .* t);
term5 = exp(-400 .* (t-0.7).^2);
term6 = sin(512.*pi.*t) - cos(3072.*pi.*t);
u = term1.*term2  + term3.*term4 + term5.*term6; % time domain signal
u = u';

figure;
plot(u)

Nmid = (wSize - 1) / 2 + 1;    % midway point in the window
hN = Nmid - 1;                 % number on each side of center point       


% stores the output of the Gabor transform in the frequency domain
% each column is the FFT output
Umat = zeros(wSize, mm);     


% generate the Gaussian window 
% [1] Y. Wang, Seismic inverse Q filtering. Blackwell Pub., 2008.
% pg. 123.
T = dt * hN;                    % half-width
sp = linspace(dt, T, hN); 
targ = [-sp(end:-1:1) 0 sp];    % this is t - tau
term1 = -((2 .* targ) ./ T).^2;
term2 = exp(term1);
term3 = 2 / (T * sqrt(pi));
w_t = term3 .* term2;
wt_sum = sum ( w_t ); % sum of the wavelet


% sliding window code
% NOTE that the beginning and end of the sequence
% are padded with zeros 
for Ntau = 1:mm

    % case #1: pad the beginning with zeros
    if( Ntau <= Nmid )
        diff = Nmid - Ntau;
        u_sub = [zeros(diff,1); u(1:hN+Ntau)];
    end

    % case #2: simply extract the window in the middle
    if (Ntau < mm-hN+1 && Ntau > Nmid)
        u_sub = u(Ntau-hN:Ntau+hN);
    end

    % case #3: less than the end
    if(Ntau >= mm-hN+1)
        diff = mm - Ntau;
        adiff = hN - diff;
        u_sub = [ u(Ntau-hN:Ntau+diff);  zeros(adiff,1)]; 
    end   

    % windowed trace segment
    % multiplication in time domain with
    % Gaussian window  function
    u_tau_omega = u_sub .* w_t';

    % segment in Fourier domain
    % NOTE that this must be padded to prevent
    % circular convolution if some sort of multiplication
    % occurs in the frequency domain
    U = fft( u_tau_omega );

    % make an assignment to each trace
    % in the output matrix
    Umat(:,Ntau) = U;

end

% By here, Umat contains the STFT (Gabor transform)

% Notice how the Fourier transform is symmetrical 
% (we only need the first N/2+1
% points, but I've plotted the full transform here
figure;
imagesc( (abs(Umat)).^2 )


% now let's try to get back the original signal from the transformed
% signal

% use IFFT on matrix along the cols
us = zeros(wSize,mm);
for i = 1:mm 
    us(:,i) = ifft(Umat(:,i));
end

figure;
imagesc( us );

% create a vector that is the same size as the original signal,
% but allows for the zero padding at the beginning and the end of the time
% domain sequence
Nuu = hN + mm + hN;
uu = zeros(1, Nuu);

% add each one of the windows to each other, progressively shifting the
% sequence forward 
cc = 1; 
for i = 1:mm
   uu(cc:cc+wSize-1) = us(:,i) + uu(cc:cc+wSize-1)';
   cc = cc + 1;
end

% trim the beginning and end of uu 
% NOTE that this could probably be done in a more efficient manner
% but it is easiest to do here

% Divide by the sum of the window 
% see Equation 4.4 of paper by Allen and Rabiner (1977)
% We don't need to divide by L, the FFT transform size since 
% Matlab has already taken care of it 
uu2 = uu(hN+1:end-hN) ./ (wt_sum); 

figure;
plot(uu2)

% Compare the differences bewteen the original and the reconstructed
% signals.  There will be some small difference due to round-off error
% since floating point numbers are not exact
dd = u - uu2';

figure;
plot(dd);

2
좋은 질문입니다. 그러나 어떻게 이러한 다이어그램을 즉석에서 빠르게 만들었습니까?
Spacey

2
그리스어 문자에는 다이어그램과 Mathtype에 Adobe Illustrator를 사용했습니다.
Nicholas Kinar

1
"Gassian 창이있는 STFT에 불과한 Gabor 변환 계산에 관심이 있습니다." 가보 변환은 연속 적분이며 가우시안 윈도우는 무한대로 확장됩니다. STFT의 일반적인 구현은 불연속 중첩 청크를 사용하며 유한 길이 창을 사용해야합니다.
endolith

그것을 지적 해 주셔서 감사합니다. 신호 처리를 할 때 매우 이산적인 방식으로 생각하는 경향이 있습니다.
Nicholas Kinar 2016 년

답변:


11

STFT 변환 쌍은 4 가지 다른 매개 변수로 특성화 할 수 있습니다.

  1. FFT 크기 (N)
  2. 스텝 사이즈 (M)
  3. 분석 창 (크기 N)
  4. 합성 창 (크기 N)

과정은 다음과 같습니다.

  1. 현재 입력 위치에서 N (fft 크기) 샘플을 가져옵니다.
  2. 분석 창 적용
  3. FFT를하십시오
  4. 주파수 영역에서하고 싶은 일을하십시오
  5. 역 FFT
  6. 합성 창 적용
  7. 현재 출력 위치에서 출력에 추가
  8. M (스텝 크기) 샘플에 의한 사전 입력 및 출력 위치

오버랩 추가 알고리즘이 그 좋은 예입니다. 이 경우 스텝 크기는 N이고, FFT 크기는 2 * N이며, 분석 윈도우는 직사각형이며 N은 1이고 N은 0이며 합성 윈도우는 모두 1입니다.

그것에 대한 다른 많은 선택이 있으며 특정 조건에서 순방향 / 역방향 전송이 완전히 재구성됩니다 (즉, 원래 신호를 다시 얻을 수 있음).

여기서 중요한 점은 각 출력 샘플이 일반적으로 하나 이상의 역 FFT로부터 추가 기여를받는 것입니다. 출력은 여러 프레임에 걸쳐 누적되어야합니다. 기여하는 프레임의 수는 FFT 크기를 단계 크기 (필요한 경우 반올림)로 나눈 값으로 간단히 제공됩니다.


통찰력있는 답변에 감사드립니다. 겹침 추가 방법을 이해합니다. 합성 창에 무엇을 사용합니까? 방정식이 있습니까? 가우스 창과 같은 분석 창 기능을 알고 있다면 합성 창을 어떻게 계산합니까? 중첩 추가 방법이 회선에 사용되는 방법을 이해하지만 STFT에 사용되는 방법을 이해하지 못합니다. 단계 크기가 단계 = 1 인 경우 프레임을 어떻게 함께 추가합니까? 방정식이 있습니까?
Nicholas Kinar

단계 크기 단계가 1 인 분석 윈도우 함수가 각 샘플의 중심에있는 경우, 시간 영역 시퀀스의 시작과 끝을 0으로 채 웁니다. 시간 영역 순서의 샘플)?
Nicholas Kinar

어플리케이션의 특정 요구에 따라 단계 크기, fft 크기, 분석 및 합성 창을 선택할 수 있습니다. 하나의 예는 단계 크기 N, FFT 크기 2 * N, 분석 해닝, 모든 것을 합성하는 것입니다. sqrt (hanning) 및 합성 sqrt (hanning)을 분석하도록 수정할 수 있습니다. 어느 쪽이든 작동합니다. 주파수 도메인에서 수행 한 작업과 시간 도메인 앨리어싱과 같은 유형의 아티팩트 유형으로 요약합니다.
Hilmar

@ Hilmar : 신호에 주파수 도메인을 수정 한 다음 IFFT를 사용하여 시간 도메인 신호를 얻을 수 있어야합니다. 시간 도메인 별칭을 최소화하고 싶습니다. 여전히 각 하위 시퀀스를 시간 도메인으로 다시 가져 와서 함께 추가하는 방법을 이해하지 못합니다.
Nicholas Kinar

테스트 코드를 작성한 다음 원래 질문을 업데이트했습니다.
Nicholas Kinar

2

이 질문이 처음 제기 된 지 7 년 후, @Nicholas Kinar와 비슷한 혼란에 빠졌습니다. 여기서 저는 개인적으로 지각하는 아이디어와 설명을 "비공식적"및 "완전히 보장되지 않는 올바른"내용을 제공하고자합니다.

다음 문장의 제목은보다 명료하게 표현하기 위해 과장되었습니다.

  1. STFT의 순방향 프로세스는 실제로 원래 신호를 보존하기위한 것이 아닙니다.
    • 단순하지 않은 창에서 STFT를 사용하는 경우 (모두가 아님) FFT에 대한 입력 신호는 원본 신호 조각의 왜곡 된 / 확장 된 버전입니다.
    • 이는 불필요한 / 중복 데이터가 필터링되는 기능 추출에 좋습니다. 음절 감지와 마찬가지로 음성에서 일부 특정 톤을 감지하기 위해 모든 시간 데이터가 필요한 것은 아닙니다.
    • 윈도우 벡터의 피크는 알고리즘이주의를 기울여야하는 오디오 신호의 위치의 소수를 나타냅니다.
  2. 따라서 역 STFT의 결과는 직관적으로 기대할 수없는 것일 수 있습니다.
    • STFT 기능의 ifft가 보이는 윈도우 신호 조각이어야합니다.
  3. 원래의 비 윈도우 신호 조각을 얻기 위해 ifft의 원시 출력에 역창을 적용 할 수 있습니다.
    • hann / hamming window 효과를 취소 할 수있는 매핑 기능을 쉽게 디자인 할 수 있습니다.
  4. 그런 다음 합성 윈도우는 시간적 단편화 겹침을 다루기 위해 관여된다
    • 원래의 윈도 잉되지 않은 신호 단편은 이미 획득 된 것으로 볼 수 있기 때문에, 임의의 "전이 가중치"를 사용하여 중첩 된 부분을 보간 할 수있다.
  5. 윈도우 드 스피치의 fft가 약한 신호를 덜 존중하지만 강력한 신호를 좋아한다고 생각하고 싶다면 해당 합성 윈도우를 설계하는 방법이있을 수 있습니다.
  6. 또한 다음과 같은 원리를 적용하여 간단한 합성 창 생성 알고리즘을 제공 할 수 있습니다.
    • 이 위치에 대한 분석 창 값이 높으면이 위치와 겹치는 다른 조각과 비교할 때 합성 창에서 위치가 더 높아집니다.
    • 이 위치에 대한 분석 창 값이 낮은 경우 합성 창에서 위치를 가중시키고 다른 중첩 단편이 더 큰 분석 창 값으로이 위치를 더 존중합니다.

1
이것은 STFT에 대한 사고를 장려하는 데 도움이 될만한 흥미로운 진술입니다.
Nicholas Kinar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.