MATLAB:


10

Trong MATLAB, các đầu ra của hàm fftvà / hoặc iffthàm thường yêu cầu xử lý bổ sung trước khi được xem xét để phân tích.

Tôi đã nghe nhiều ý kiến ​​khác nhau về những gì là chính xác:

  • Thu nhỏ

    Mathworks nói rằng fftvà các iffthàm dựa trên các phương trình sau:

    X[k]=11n=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=1Nk=1NX[k]e+j2π(k1)(n1)N,where1nN
  • Chia tỷ lệ theo chiều dài tín hiệu

    Các đồng nghiệp của tôi thường chia tỷ lệ dữ liệu theo 1N ngay sau khi xử lýfft.
    (Chúng tôi không xem xétfftdữ liệuthôtrước khi chia tỷ lệ.)

    %% Thực hiện fft
    X_f = fft (x, n_sample, 1) / n_sample; % fft phải được chuẩn hóa theo số lượng mẫu trong dữ liệu. % Quy ước này được đặt bởi nhà phát triển phần mềm (Mathworks).

    Điều này có đúng không?

    1. Nếu vậy, tại sao iffthàm MATLAB mong đợi rằng chúng ta chưa tăng tỷ lệ ?1/N
    2. ifftchức năng MATLAB hoặc tùy chọn chức năng không tự động chia tỷ lệ không?1/N

    Ngoài ra, có một quy ước tốt hơn mà chúng ta nên sử dụng để đặt không? Ví dụ, đặt 1 / N trong chứ không phải là , hoặc đặt một 1 / 1/N1/Nfftifft trong cả hai phương trình, thay vì1/N?1/N1/N

  • Thu nhỏ theo thời gian lấy mẫu

    Tôi đã nghe nói rằng fftvà các iffthàm giả định rằng thời gian lấy mẫu , và để các hàm là đúng, thì những điều sau đây cần phải ứng dụng:Tsampling=1/fsampling=1

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

Xem liên kết:

  • Liên kết 1 (xem bình luận cho Matt Szelistowski của Tiến sĩ Seis)
  • Liên kết 2 (xem câu trả lời của Rick Rosson so với của Dr Seis)
  • Liên kết 3 (xem bình luận của Matt (Tin nhắn: 7/16) và bình luận của Poorya (14/16)
  • Liên kết 4 (xem trang 10, slide [1,1])
  • Liên kết 5 (xem trang 8 + 9) [có vẻ như anh ta đang sử dụng quy ước nghịch đảo cho fft và ifft].

Điều này có đúng không?

Tôi đặc biệt thích thú vì tôi không thể tìm thấy bất kỳ phương trình DFT hoặc DTFT nào trên Wikipedia bao gồm thời gian lấy mẫu.


2
BTW, kando chỉ nói rõ như vậy (với MATLAB): nhưng tôi phải nói rằng quy ước MATLAB khó khăn này để đưa DC vào thùng số 1 (hoặc biên độ của thành phần tần sốkvào bink+1)khiến tôi phát điên !!!!
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

Câu trả lời:


6

Việc có nên chia tỷ lệ FFT chuyển tiếp lên 1 / N hay không tùy thuộc vào kết quả mà bạn muốn phân tích thêm: năng lượng (bảo toàn danh tính của Parseval) hoặc biên độ (đo chiều cao hoặc vôn, v.v.).

Nếu bạn muốn đo hoặc phân tích năng lượng, thì đừng chia tỷ lệ 1 / N và một hình sin dài hơn có cùng biên độ sẽ tạo ra kết quả FFT lớn hơn, tỷ lệ với năng lượng lớn hơn của tín hiệu dài hơn.

Thông thường hơn, nếu bạn muốn đo hoặc phân tích biên độ, sau đó để có được một hình sin dài hơn (do đó có tổng năng lượng nhiều hơn ở cùng biên độ) để tạo ra kết quả FFT tương tự như một tín hiệu ngắn hơn, bạn sẽ cần phải giảm quy mô Tổng kết FFT theo tỷ lệ tỷ lệ thuận với chiều dài. Tỷ lệ có thể là Reference_length / N, đôi khi là 1 / N nếu mức tăng đầu vào hệ thống là 1.0 cho bất kỳ kích thước hoặc đơn vị nào, bao gồm cả kích thước khoảng thời gian, mà bạn chọn sử dụng trong phân tích thêm của mình. Bạn cần giảm tỷ lệ theo tỷ lệ vì DFT là tổng kết: bạn càng tổng hợp các mục tương tự, kết quả càng lớn.

Vì thế. Năng lượng hoặc biên độ. Bạn muốn cái nào

Bây giờ nếu bạn thu nhỏ FFT chuyển tiếp, thì bạn không nên chia tỷ lệ nghịch để IFFT (FFT (x)) == x. Hoặc làm ngược lại.

Theo tôi, tỷ lệ 1 / sqrt (N) đối với tỷ lệ có thể là đối xứng khi một người cần đối xứng chính thức cho một số bằng chứng hoặc khi xây dựng một loại đường ống phần cứng trong đó độ trễ và / hoặc số đơn vị / cổng số học cho DFT và đối với IDFT cần phải giống hệt nhau. Nhưng bạn không nhận được một phép đo trực tiếp nào về năng lượng hoặc biên độ cho bất kỳ loại phân tích kỹ thuật điển hình nào.


Khi bạn nói "nếu bạn muốn để đo năng lượng, sau đó không quy mô bằng " ... tôi sẽ không cần đến quy mô bằng 1 / 1/N sao cho biến đổi là đơn nhất và bảo toàn năng lượng? Hoặc là bởi vì tôi cần bình phương toàn bộ tín hiệu để có được năng lượng mang lạihiệu quả1/N? Nếu đó là sự thật, tuy nhiên, những gìquang phổ thu nhỏ lại bởi1/1/N1/N thực sự chỉ cho tôi sau đó? 1/N
LCsa

Ngoài ra, khi nói "như vậy với nhiều năng lượng hơn ở cùng biên độ" ... bạn có muốn nói "tần số" không?
LCsa

7

Quy ước chia tỷ lệ được sử dụng bởi Matlab là phổ biến trong DSP. Bạn cũng có thể sử dụng DFT đơn nhất mà cả hai DFT và IDFT được thu nhỏ lại bởi một yếu tố của . Bạn cũng có thể sử dụng yếu tố1/Ncho DFT và yếu tố1cho IDFT. Miễn là bạn nhất quán, điều đó không thực sự quan trọng (ngoài những cân nhắc về số, đặc biệt là khi sử dụng triển khai điểm cố định). Vì vậy, không có quy ước "tốt hơn", chỉ có "quy ước" và bạn chỉ cần đồng ý về việc bạn sử dụng công ước nào.1/N1/N1

Lời bình luận

% fft phải được chuẩn hóa theo số lượng mẫu trong dữ liệu.
% Quy ước này được đặt bởi nhà phát triển phần mềm (Mathworks).

sai. Không ai nói rằng bạn phải bình thường hóa kết quả của FFT. Nếu bạn muốn bạn tự do làm điều đó.

TT

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

TNx(t)X(ω)(1)Nx(t)Tx(t)t[0,NT]. Chi tiết hơn về việc sử dụng DFT để xấp xỉ biến đổi Fourier thời gian liên tục có thể được tìm thấy trong câu trả lời này .


2
Downvote để làm gì? Hãy bình luận.
Matt L.

1
Tôi thường bỏ phiếu bằng cách bỏ phiếu kín, nhưng lần này tôi sẽ tạo một ngoại lệ. tùy thuộc vào những gì một người đang làm với DFT, chắc chắn có những quy ước "tốt hơn" so với những người khác. (nhưng không có quy ước nào tốt hơn những người khác trong mọi hoàn cảnh.)
robert bristow-johnson

5

đặc biệt vì đây là một câu hỏi về quy ước, tôi sẽ không củng cố quy ước vô lý của MATLAB và sẽ chỉ trả lời với quy ước hoặc quy ước đúng đắn và đúng đắn . tức là việc lập chỉ mục cho DFT của MATLAB là không đúng và hợp lý, nhưng tôi không biết nhiều về quy ước trong ba quy ước phổ biến.

0n<N0k<Nx[n]NX[k]N

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

x[n]X[k]

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]

do đó, lợi thế duy nhất của một quy ước so với quy ước khác (giả sử cả hai quy ước đều hợp lệ) có thể liên quan đến tính đơn giản của biểu thức của một số định lý.


quy ước chia tỷ lệ phổ biến nhất cho DFT:

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

có lợi thế của sự đơn giản liên quan đến tích chập tuần hoàn trong "miền thời gian"

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

nhưng có một yếu tố mở rộng mà bạn phải lo lắng nếu bạn đang kết hợp trong "miền tần số" :

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

Định lý Parseval có một yếu tố tỷ lệ để lo lắng quá.

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

và định lý đối ngẫu:

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

quy ước chia tỷ lệ phổ biến khác cho DFT:

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

ejωknej(2πk/N)nX[k]x[n]kNA|X[k]|=|X[k]|=|X[Nk]|=A2

nó cũng đơn giản hơn về tích chập tuần hoàn trong miền tần số

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

nhưng có một yếu tố mở rộng mà bạn phải lo lắng nếu bạn đang tham gia vào miền thời gian :

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

Định lý Parseval có một yếu tố tỷ lệ để lo lắng quá.

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

và định lý đối ngẫu:

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

các đơn nhất ước mở rộng quy mô cho DFT là giống hệt nhau trong tỉ lệ với nghịch đảo và bảo tồn năng lượng của nó qua các biến đổi hoặc nghịch đảo:

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

tích chập trong miền thời gian hoặc miền tần số có cùng hệ số tỷ lệ để lo lắng về:

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

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

nhưng định lý của Parseval không có yếu tố tỷ lệ để lo lắng.

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

Định lý đối ngẫu cũng không:

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


Khi nói về các quy ước DFT, thông thường chỉ nói về các yếu tố tỷ lệ, không phải về vấn đề lập chỉ mục. Nếu bạn nghĩ rằng tôi đang đề cập đến việc lập chỉ mục khi tôi nói rằng đó là quy ước DSP phổ biến, thì đó là một sự hiểu lầm. Tất nhiên tôi đã đề cập đến tỷ lệ; việc lập chỉ mục là hoàn toàn không liên quan, bởi vì nó không liên quan gì đến định nghĩa của DFT (và tỷ lệ có).
Matt L.

Đó không phải là một vấn đề "không vấn đề" khi, trong MATLAB, bạn sử dụng max(abs(X))hàm để tìm vị trí của một đỉnh phổ và bạn quên trừ 1chỉ số được trả về và bạn sẽ làm toán trên đó. đó là một vấn đề. và một điều đáng buồn ở đó. nguồn gốc lập chỉ mục có liên quan nhiều đến " định nghĩa của DFT" cũng như chia tỷ lệ. nó có liên quan đến những gì mà sổ sách kế toán yêu cầu hay không.
robert bristow-johnson

có thể là tôi, nhưng lần này thì không :) Nhưng vẫn vậy, tôi không đồng ý với tầm quan trọng của bạn trong việc lập chỉ mục, nhưng tôi đánh giá cao điều đó mang tính cá nhân. Một lần nữa, không downvote vì tôi đánh giá cao thời gian bạn đưa vào câu trả lời.
Matt L.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.