FFT에서 스펙트럼 누출이 발생하는 이유는 무엇입니까?


18

인터넷 검색 및 Wikipedia-ing을 시도했지만 '입력 신호의 주파수가 두 개의 빈 사이에 있기 때문에'라는 것 이상의 대답을 얻지 못했습니다.

나는 이것이 이유라는 것을 이해하지만, 이해할 수없는 것은 누수가 하나의 인접한 용기가 아닌 여러 개의 인접한 용기로 확장되는 것처럼 보이는 이유입니다.

내가 말하고있는 것을 설명하기 위해 시뮬레이션 된 데이터 (포스트 끝에 코드)가 있습니다. Freq_10

위는 주파수 10의 사인파의 FFT 스펙트럼 (로그 ​​스케일로 표시)입니다. 샘플링 속도는 1이고 샘플 수는 100입니다. 그래프는 FFT- 시프트되었습니다. 빈 10에는 피크가 분명히 있으며 나머지는 수치 오류 정도입니다.

Freq_10_1

생성 된 주파수 10.1의 주파수 스펙트럼입니다. 분명히 바로 인접한 쓰레기통보다 더 많은 쓰레기통에 '누설'이 있습니다.

freq_10_5

이것은 10.5의 빈도에 대한 도표입니다.

질문 : 이 누출이 발생하는 이유는 무엇입니까? 왜 인접한 빈이 아닌 다른 모든 빈으로 확장됩니까?


관심있는 사람을위한 코드 (Python 코드)

import numpy as np
import matplotlib.pyplot as plt

xFreq = 10.5
xSize = 100.0
xPeriod = xSize/xFreq
x = np.linspace(1,xSize,xSize)

data = np.sin(2*np.pi*x/xPeriod)
fft = np.fft.fft(data)
fft = np.fft.fftshift(fft)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(abs(fft), "o")
ax.set_yscale('log')
plt.show()

xFreq10.010.5에서 등으로 변경했습니다 .


FFT의 창 길이에 정확히 맞지 않는 신호는 주위를 감쌀 때 불연속을 만듭니다. 임펄스 또는 스텝 기능과 같은 불연속에는 모든 주파수 중 일부가 포함됩니다.
endolith

답변:


12

FFT는 길이가 한정되어 있으므로 데이터 스트림에서 기본 직사각형 창을 구성합니다. 시간 영역의 창은 창의 변환과 함께 주파수 영역에서 컨볼 루션을 발생시킵니다. 사각형 창의 변환은 무한 너비를 가진 Sinc 함수 (sin (x) / x)입니다. 너비가 2 칸이 아닙니다. 따라서 Sinc 함수의 리플은 FFT 길이에서 완벽하게 주기적이지 않은 스펙트럼 피크와는 거리가 "누설"로 나타납니다.

아래 그림은 sinc 함수의 주파수 응답의 일부를 보여줍니다. 톤이 빈 중 하나의 중앙에 오면 다른 모든 포인트는 주파수 응답에서 널과 정렬됩니다. 빈이 중앙에 있지 않으면 전체 주파수 응답을 이동하는 것과 같으므로 다른 빈이 주파수 응답의 널이 아닌 부분에 떨어집니다.

여기에 이미지 설명을 입력하십시오

FFT는 필터 뱅크 일뿐입니다. 각 필터 스톱 밴드 바닥에는 많은 리플이 있으며 중심 주파수에서 1 빈 이상 떨어진 감쇠에는 무한정이 아닙니다. 직사각형 이외의 일부 창 (von Hann 등)에는 저지대가 낮기 때문에 널리 사용됩니다.


1
소위 스펙트럼 "누설"은 정확히 빈 중심의주기적인 입력의 FFT에 나타나지 않습니다. 왜냐하면 Sinc 함수는 다른 모든 빈 중심 주파수에서 (필터 변화 커널과 완전히 직교하는) FFT 기본 벡터).
hotpaw2

편집 내용이 마음에 들지 않기를 바랍니다. 마음에 들지 않으면 자유롭게 던지십시오.
Jim Clay

@Jim Clay : 추가 된 그래프에 감사드립니다. iPhone에서 제출하는 방법을 알 수 없었습니다.
hotpaw2

1
감사합니다 감사합니다 주셔서 감사합니다 하지 말에 의해 누설을 설명는 "FFT는 입력 순서가 정기적으로 가정합니다." '가정 된 주기성'이라는 어리석은 개념은 슬프게도 DSP 문헌에서 너무 자주 반복된다. [-Rick-]

예를 들어, FFT 프레임 길이의 샤프트 회전 동기 샘플링 (또는 교실 합성 예제 생성)을 수행 할 때 입력 주기성을 가정하는 것이 유용한 경우가 있습니다. 그러나 오디오 등의 경우주기 길이와 관련이없는 섹션 및 윈도우 데이터 프레임이 더 일반적이므로 해당 영역에서의 작업에는 일반적으로 가정이 적용되지 않습니다.
hotpaw2

0

hotpaw2의 답변은 좋지만 user5133의 의견 에 대해 조금 더 설명하고 싶습니다 .

"FFT는 입력 시퀀스가 ​​주기적이라고 가정합니다." '가정 된 주기성'이라는 어리석은 개념은 슬프게도 DSP 문헌에서 너무 자주 반복된다

동시에 질문에도 대답하십시오. 이 분야의 전문가라는 점에 유의하십시오.

{1,2,,}

엑스(ω)==엑스[]이자형나는ω.

엑스케이 =데프 =01엑스이자형2π나는케이/,케이
엑스(2π케이/){1,2,,}엑스[][]{1,,}

그러나 제품의 푸리에 변환은 푸리에 변환의 컨볼 루션입니다.

에프{에프}=에프{에프}에프{}

sinc

(에프)이자형제이ω=ττ이자형제이ω=2τsinc(ωτ)

sinc


@ user5133이 더 이상 매달려 있지 않은 것 같습니다. 그러나 Rick의 감사는 잘못되었다. "FFT는 입력 시퀀스가 ​​주기적이라고 가정하여 누출을 설명하지 말아 주셔서 감사합니다." '가정 된 주기성'이라는 어리석은 개념은 슬프게도 DSP 문헌에서 너무 자주 반복된다. " 그는 착각 했어 DFT는 전달 된 유한 길이 데이터를 가장 주기적으로 확장합니다. DFT 전달 된 데이터가 주기적 시퀀스 의 한주기 라고 가정합니다.
robert bristow-johnson 2012
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.