사인파의 FFT가 예상과 같이 오지 않습니다 (예 : 단일 지점)


14

청록색 플롯은 50Hz의 스펙트럼이며 자홍색은 50.1Hz 사인파 (진폭 0.7)입니다. 둘 다 1024 샘플 / 초로 샘플링됩니다. 이 스펙트럼을 얻기 위해 1024 포인트 FFT를 수행했습니다.

왜 50Hz 스펙트럼 만 단일 값입니까? 50.1Hz 사인이 50.1Hz 이외의 다른 주파수로 구성되는 이유는 무엇입니까? 이 새로운 주파수는 어디에서 오는가?

50.1 Hz 신호에서 비선형 처리를 수행하지 않았습니다! 또한 50.1Hz는 실제로 생성 된 사인파의 진폭이 0.7 일 때 최대 진폭이 더 작은 것처럼 보입니다. 즉 0.7이 아닙니다.

왜 이런거야?

각각 50Hz 및 50.1Hz에 대한 2 개의 스펙트럼 MATALB 명령으로 획득 fft ();


이 플롯을 생성하는 데 사용한 코드를 게시 해 주시겠습니까? 가장 좋은 추측은 신호가 너무 가깝기 때문에 fft가 제대로 해결할 수 없다는 것입니다. 샘플이 주파수와 일치하지 않기 때문에 스펙트럼 스미어가 발생합니다.
Tom Kealy

4
아래 답변이 맞습니다. 관찰하고있는 용어를 스펙트럼 누설 이라고하며 , 주파수가 DFT 출력 빈 중 하나의 중앙에 정확하게 위치하지 않은 정현파를 분석 할 때 관찰됩니다.
Jason R

50Hz 마크에서 스파이크를 얻을 수있는 것에 대해 U가 무엇을 플롯했는지 알 수
있습니까

문제에 대한 자세한 설명과 해결 방법 은 이 답변 을 참조하십시오 .
Dilip Sarwate

답변:


14

Acually Matt의 답변은 이미 여기서 문제에 대한 하나의 견해를 제시합니다. DFT는 시간과 주파수 영역에서 암시 적으로 주기적입니다 ( 이 질문 ). 귀하의 매개 변수에서 관측 기간이 1 초임을 계산할 수 있습니다. 즉, 50Hz 톤의 50주기를 관찰 할 수 있습니다. 관측 간격을 주기적으로 연장하면 항상 사인파가 보이지 않습니다. 50.1 Hz 톤을 취하면 50.1주기의 진동이 변환됩니다. 신호를 주기적으로 연장 하면 위상차가 발생하여 추가 스펙트럼 지류가 발생합니다.

에프에스/에프=1024Hz/1024=1Hz

위에서 설명한 두 가지 효과 모두 관찰중인 스펙트럼에 영향을줍니다.


1
말이 되네요 그러나 당신이 묘사 한 더 명확한 스펙트럼 누출은 스펙트럼을 관찰하기위한 툴 (FFT)의 문제입니다. 신호의 결함이 아닙니다. 의미 50.1 Hz의 오디오 신호를 '듣게'되면 어떤 종류의 '잡음'이 아닌 단일 톤으로 귀에 나타납니다. 내가 맞아?
gpuguy

1
당신 말이 맞아요 DFT가 올바르게 해석하기 위해 실제로 DFT가하는 일을 이해하는 것이 얼마나 중요한지를 보여줍니다. 참고 사항 : 실제 구현에서 "듣는"것은 또한 이산 소자를 아날로그 신호로 변환하는 방법에 따라 다릅니다.
Deve

11

이는 사인 신호를 자르거나 윈도 잉하는 효과입니다. 시프트 된 신호를 절단 된 신호에 추가하는 경우 여전히 원래 사인파가되는 방식으로 잘라야합니다.


6

FFT 조리개 또는 너비에서 정확히 정수인 순수 변조되지 않은 정현파 주파수에 대해 단일 결과 FFT 포인트 만 얻을 수 있습니다. 다른 정현파 주파수는 기본 윈도우 (사각형)의 변환 (주기적인 Sinc)과 관련하여 나타납니다.

50.1 Hz는 FFT의 1 초 창에서 정확히 주기적이 아닙니다.

다른 "누설"FFT 결과 빈 또는 주파수는 FFT 폭에서 정확히 정수가 아닌 임의의 신호에 의해 윈도우 경계 사이에서 생성 된 불연속성을 나타 내기 위해 필요하다. 이는 DFT의 모든 기본 벡터가 DFT의 너비 내에서 정확히 정수주기이기 때문에 기본 벡터의 끝과 시작 사이에 급격한 불연속이 없기 때문입니다. 따라서 이러한 특성이없는 신호는 단 하나의 DFT 기본 벡터 (및 복소수 복소수)로 표현할 수 없으므로 나머지 신호에 대한 정보는 어딘가에 가야합니다.

총 에너지는 FFT 변환 (Parseval'a theorem)에 의해 보존되므로 "누설"빈의 에너지는 피크 빈에서 제거됩니다. 따라서 피크 빈의 크기는 작아야합니다.


5

첫 번째 샘플과 마지막 샘플에서 사인파가 0 인 것 같습니까? 해서는 안됩니다. 마지막 샘플 이후 의 다음 샘플이 0이 되도록 정렬해야하므로 신호의 사본을 하나씩 복사하여 붙여 넣을 수 있으며 샘플이 복제되지 않고 연속적으로 보입니다. 어쩌면 타일을 붙일 때 한쪽 가장자리가 반대쪽 가장자리와 매끄럽게 만나야하는 타 일식 바탕 화면 배경 무늬처럼 생각할 수도 있습니다. :)

파이썬 예제는 https://gist.github.com/endolith/236567 을 참조 하십시오 .

# Sampling rate
fs = 128 # Hz

# Time is from 0 to 1 seconds, but leave off the endpoint, so that 1.0 seconds is the first sample of the *next* chunk
length = 1 # second
N = fs * length
t = linspace(0, length, num = N, endpoint = False)

# Generate a sinusoid at frequency f
f = 10 # Hz
a = cos(2 * pi * f * t)

# Use FFT to get the amplitude of the spectrum
ampl = 1/N * abs(fft(a))

연속적인 파형을 만들기 위해 두 개의 신호 사본이 엔드-투-엔드로 어떻게 결합되는지 확인하십시오.

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

이 경우 FFT 에너지는 전적으로 단일 빈에 포함됩니다.

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


1
OP와 같은 문제가있었습니다. endpoint = False 플래그를 설정하여 해결되었습니다. 줄 공간이 기본적으로 (닫힌, 열린) 줄 알았지 만 (닫힌, 닫힌) 것으로 나타났습니다. 코드 덕분에 버그를 발견했습니다.
Trismegistos

-1

이것은 스펙트럼 누출 및 창으로 인해 발생합니다. 이상적인 응답 즉, 임펄스 기능은 연속 시간 사인파에 대한 것입니다. 디지털 컴퓨터에서 불연속 사인파의 DFT를 취하면 기본적으로 창 및 샘플링 된 사인의 푸리에 변환을 수행 한 다음 주파수 영역에서 샘플링합니다. 이로 인해 스펙트럼 누출이 발생합니다. 참조 : http://w.astro.berkeley.edu/~jrg/ngst/fft/leakage.html

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.