MATLAB :


11

MATLAB에서 fft및 / 또는 ifft함수 의 출력에는 종종 분석을 고려하기 전에 추가 처리가 필요합니다.

나는 무엇이 옳은가에 대한 많은 다른 의견을 들었습니다.

  • 스케일링

    매스 웍스 상태 fftifft다음 수학 식에 기반 함수 :

    X[k]=11n=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=1Nk=1NX[k]e+j2π(k1)(n1)N,where1nN
  • 신호 길이에 따른 스케일링

    동료들은 일반적으로 데이터를 1 씩 확장합니다.1 상기 처리 직후fft.
    (fft스케일하기 전에원시데이터는고려하지 않습니다.)

    %% fft 수행
    X_f = fft (x, n_sample, 1) / n_sample; % fft는 데이터의 샘플 수로 정규화해야합니다. %이 규칙은 소프트웨어 개발자 (Mathworks)가 설정했습니다.

    이 올바른지?

    1. 그렇다면 왜 MATLAB ifft함수가 스케일되지 않았을 것으로 예상 1/N합니까?
    2. 1 / Nifft 씩 자동 스케일되지 않는 MATLAB 기능 또는 기능 옵션이 있습니까?1/N

    또는 을 배치 할 때 사용해야하는 더 나은 규칙이 1/N있습니까? 예를 들어, 1/Nfft대신에 ifft배치하거나 1 / √를 배치하십시오.1/N 대신 두 방정식에서,1/N?

  • 샘플링 기간에 따른 스케일링

    I는 것을 들었 fftifft기능한다고 가정 샘플링주기 , 및 기능에 해당되기 위해서는 다음이 필요 것과 대다:Tsampling=1/fsampling=1

X[k]=1Tsamplingn=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=TsamplingNk=1NX[k]e+j2π(k1)(n1)N,where1n

링크 참조 :

  • 링크 1 (Dr Seis의 Matt Szelistowski의 의견 참조)
  • 링크 2 (Rick Rosson의 답변과 Dr Seis의 답변 참조)
  • 링크 3 (Matt의 의견 (메시지 : 7/16) 및 Poorya의 의견 (14/16)
  • 링크 4 (10 페이지, 슬라이드 [1,1] 참조)
  • 링크 5 (8 + 9 페이지 참조) [그가 fft와 ifft에 대해 역 협약을 사용하고있는 것 같습니다].

이것이 사실입니까?

샘플링 기간을 포함하는 Wikipedia에서 DFT 또는 DTFT 방정식을 찾을 수 없기 때문에 특히 piqued입니다.


2
BTW, 칸도는 그대로 (MATLAB 사용) : 이지만 DC를 bin # 1 (또는 주파수 성분k의 진폭을 bink+1로)에 넣는 MATLAB 의이 유선 연결 방식은나를 망할 nutz !!!!
X[k]=n=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=1Nk=1NX[k]e+j2π(k1)(n1)N,where1nN
kk+1
robert bristow-johnson

답변:


6

순방향 FFT를 1 / N으로 스케일할지 여부는 추가 분석을 원하는 결과 (에너지 (파서 발의 동일성 유지) 또는 진폭 (높이 또는 볼트 측정 등))에 따라 다릅니다.

에너지를 측정하거나 분석하려면 1 / N으로 스케일링하지 마십시오. 같은 진폭의 더 긴 정현파는 더 긴 신호의 더 큰 에너지에 비례하여 더 큰 FFT 결과를 생성합니다.

약간 더 일반적으로, 진폭을 측정하거나 분석하려는 경우 더 긴 정현파를 가져 와서 더 짧은 신호와 동일한 FFT 결과를 생성하려면 더 긴 정현파를 얻습니다. 길이에 비례하는 비율에 의한 FFT 합계. 비율은 reference_length / N 일 수 있으며, 시간 간격 차원을 포함하여 추가 분석에 사용하기로 선택한 차원 또는 단위에 대해 시스템 입력 게인이 1.0 인 경우 때때로 1 / N입니다. DFT는 요약이므로 비례 적으로 축소해야합니다. 유사한 항목을 더 많이 요약하면 결과가 더 커집니다.

그래서. 에너지 또는 진폭. 어느 쪽을 원하세요?

앞으로 FFT를 축소하면 IFFT (FFT (x)) == x가되도록 반비례를 조정해서는 안됩니다. 또는 그 반대의 경우도 마찬가지입니다.

스케일링을위한 1 / sqrt (N)는 어떤 증거를 위해 공식적인 대칭이 필요하거나 DFT 및 IDFT가 동일해야합니다. 그러나 일반적인 유형의 엔지니어링 분석에서 에너지 나 진폭을 직접 측정 할 수는 없습니다.


"에너지를 측정하려면 1 / N으로 스케일하지 마십시오.1/N ... 1 / 로 스케일 할 필요가 없습니다.변환이 단일하고 에너지를 보존하도록 N ? 아니면1/N을 산출하는 에너지를 얻기 위해 전체 신호를 제곱해야하기 때문입니까?1/N1/N 효과적으로 입니까? 그게 사실이라면, 그러나 무엇 에 의해 확장 스펙트럼 실제로 나에게 보여? 1/N
LCsa

또한 "정확히 동일한 진폭에서 더 많은 에너지로"라고 말할 때 "주파수"를 의미하지 않습니까?
LCsa

7

Matlab에서 사용하는 스케일링 규칙은 DSP에서 일반적입니다. 당신은 또한 사용할 수 있습니다DFT와 IDFT가 모두 1 / 의 비율로 조정되는 단일 DFT를 . DFT에는 요소1/N을, IDFT에는 요소1을사용할 수도 있습니다. 일관성있는 한 실제로 중요하지 않습니다 (특히 고정 소수점 구현을 사용할 때 수치 고려 사항 제외). 따라서 "더 나은"규약이없고 "수녀원"만 있으며 어떤 것을 사용하는지에 동의해야합니다.1/N1/N1

코멘트

% fft는 데이터의 샘플 수로 정규화해야합니다.
%이 규칙은 소프트웨어 개발자 (Mathworks)가 설정했습니다.

잘못되었습니다. FFT 결과를 정상화 해야 한다고 아무도 말하지 않습니다 . 원하는 경우 자유롭게 할 수 있습니다.

또한 FFT는 샘플링주기 에 대해 아무 것도 가정하지 않습니다 . DFT는 샘플링을 거치지 않고 본질적으로 불연속적인 데이터에 사용할 수 있습니다. 데이터와 결과로 수행하려는 작업 에 따라 T 를 고려해야합니다. 예를 들어, 연속 시간 푸리에 변환에 근사하기 위해 DFT (FFT로 구현 됨)를 사용하려는 경우 다음과 같은 표현이 나타납니다.TT

(1)X(2πkNT)Tn=0N1x(nT)ej2πkn/N,0k<N

여기서 는 샘플링주기이고, N 은 DFT 길이이며, x ( t ) 는 연속 시간 신호이며, X ( ω ) 는 연속 시간 푸리에 변환입니다. ( 1 ) 의 오른쪽 은 x ( t )N 샘플의 DFT이며 T로 스케일링됩니다 . 여기서 x ( t ) 의 관련 부분이 t [ 0 , N 범위에 있다고 가정합니다TNx(t)X(ω)(1)Nx(t)Tx(t)t[0,NT]. 연속 시간 푸리에 변환을 근사화하기 위해 DFT를 사용하는 방법에 대한 자세한 내용은 이 답변 에서 찾을 수 있습니다 .


2
공감 비란 무엇입니까? 의견을 부탁합니다.
Matt L.

1
나는 보통 비밀 투표로 투표하지만 이번에는 예외를 만들 것입니다. DFT로 무엇을하고 있는지에 따라 다른 규칙보다 "더 나은" 규칙이 있습니다. (그러나 모든 상황 에서 다른 대회보다 더 나은 협약은 없습니다 .)
robert bristow-johnson

5

특히 이것은 컨벤션에 대한 질문이므로 MATLAB의 어리석은 컨벤션을 강화하지 않으며 옳고 적절한 컨벤션 또는 컨벤션으로 만 답변 할 것 입니다. 즉, DFT에 대한 MATLAB의 인덱싱이 옳고 적절하지는 않지만 세 가지 일반적인 스케일링 규칙 중 어느 것에 대해서는 거의 무관심합니다.

또한, 나는 하지 제한 0 K < N은 내가 이산 푸리에의 기본 의미 변환에 대한 거의 파시스트이기 때문에, 그들은 어떤 정수가 될 수 있습니다 이산 푸리에 변환 및 이산 푸리에 시리즈 하나는이다를 같은. 이산 푸리에 변환이 주기적 시퀀스 맵 X [ N ] 주기 N을 다른주기 계열에 X [ K ] 또한주기 N 과 IDFT는 다시 매핑한다.0n<N0k<Nx[n]NX[k]N

따라서 X [ k + N ] = X [ k ]

x[n+N]=x[n] nZ
X[k+N]=X[k] kZ

또한 "시간 도메인" ( x [ n ] ) 또는 "주파수 도메인" ( X [ k ] )의 순환 컨벌루션은 모든 규칙과 일관되게 정의됩니다.x[n]X[k]

W [ k ] X [ k ] N 1 i 0

h[n]x[n]i=0N1h[i]x[ni]=i=0N1x[i]h[ni]
W[k]X[k]i=0N1W[i]X[ki]=i=0N1X[i]W[ki]

따라서 하나의 규칙이 다른 규칙에 비해 유일한 장점 (두 규칙이 모두 유효하다고 가정)은 일부 이론 표현의 단순성에 관한 것일 수 있습니다.


DFT의 가장 일반적인 스케일링 규칙 :

DFT{x[n]}X[k]n=0N1x[n]ej2πkn/NiDFT{X[k]}x[n]=1Nk=0N1X[k]e+j2πkn/N

has the advantage of simplicity regarding circular convolution in the "time domain"

DFT{h[n]x[n]}=H[k]X[k]

but there is a scaling factor you have to worry about if you're convolving in the "frequency domain":

iDFT{W[k]X[k]}=1Nw[n]x[n]

Parseval's theorem has a scaling factor to worry about too.

n=0N1|x[n]|2=1Nk=0N1|X[k]|2

and the Duality theorem:

DFT{X[n]}=Nx[k]
iDFT{x[k]}=1NX[n]

the other common scaling convention for the DFT:

iDFT{X[k]}x[n]k=0N1X[k]e+j2πkn/NDFT{x[n]}X[k]=1Nn=0N1x[n]ej2πkn/N

has the advantage of being a tiny bit closer, conceptually, to the Fourier series, where ejωknej(2πk/N)n are the Fourier basis functions and X[k] are the Fourier coefficients. so if you're looking at raw time-domain data, x[n], and see a sinusoid with k cycles in the buffer of N samples and with (zero-to-peak) amplitude A, that would mean that |X[k]|=|X[k]|=|X[Nk]|=A2.

it also has more simplicity regarding circular convolution in the frequency domain

iDFT{W[k]X[k]}=w[n]x[n]

but there is a scaling factor you have to worry about if you're convolving in the time domain:

DFT{h[n]x[n]}=1NH[k]X[k]

Parseval's theorem has a scaling factor to worry about too.

1Nn=0N1|x[n]|2=k=0N1|X[k]|2

and the Duality theorem:

DFT{X[n]}=1Nx[k]
iDFT{x[k]}=NX[n]

the unitary scaling convention for the DFT is identical in scaling with its inverse and preserves energy across the transform or inverse transform:

DFT{x[n]}X[k]1Nn=0N1x[n]ej2πkn/NiDFT{X[k]}x[n]=1Nk=0N1X[k]e+j2πkn/N

convolution in either time domain or frequency domain has the same scaling factor to worry about:

DFT{h[n]x[n]}=1NH[k]X[k]

iDFT{W[k]X[k]}=1Nw[n]x[n]

but Parseval's theorem has no scaling factor to worry about.

n=0N1|x[n]|2=k=0N1|X[k]|2

nor does the Duality theorem:

DFT{X[n]}=x[k]
iDFT{x[k]}=X[n]


When talking about DFT conventions, it's usually only about the scaling factors, not about the non-issue of indexing. If you thought that I was referring to the indexing when I said that that's the common DSP convention, then it was a misunderstanding. Of course I referred to the scaling; the indexing is totally irrelevant, because it has nothing to do with the definition of the DFT (and the scaling has).
Matt L.

it's not a fucking "non-issue" when, in MATLAB, you use the max(abs(X)) function to find where a spectral peak is and you forget to subtract 1 from the returned index and you're gonna do math on it. it's an issue. and a sad one at that. the indexing origin has as much to do with the "definition of the DFT" as does scaling. it has to do with what bookkeeping is required or not.
robert bristow-johnson

could've been me, but this time it ain't :) But still, I don't agree with the importance you attach to the indexing, but I appreciate that that's personal. Again, no downvote because I appreciate the time you put into the answer.
Matt L.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.