Việc sử dụng sức mạnh của 2 khi sử dụng FFT quan trọng như thế nào?


8

Đây là vấn đề. Tôi có một mảng dữ liệu 2D, cột đầu tiên biểu thị dữ liệu thời gian và cột thứ hai biểu thị dữ liệu phản hồi hình sin, dựa trên dữ liệu thời gian. Tôi áp dụng fft và tôi nhận được tần số của mình (mà tôi đã bắt đầu) trong một thùng cụ thể như tôi mong đợi và tôi tìm thấy biên độ và góc pha từ thùng đó. Bây giờ vấn đề là tôi có cùng một thiết lập nhưng với nhiều điểm dữ liệu hơn, tôi áp dụng lại fft và số bin thay đổi (điều này là bình thường và đó là nơi tôi mong đợi), biên độ là như nhau nhưng góc pha là khác nhau) đầu tiên là bình thường? Thứ hai, tôi nên dùng phương pháp nào? Cảm ơn bạn

PS: không phải thiết lập nào (đã đề cập ở trên) cung cấp dữ liệu về độ dài công suất bằng 2, giả sử cái đầu tiên cung cấp 1620 điểm dữ liệu và cái thứ hai cung cấp 1745 điểm dữ liệu, do đó, nên lấy sức mạnh tiếp theo là 2 cho cả hai bắt đầu?

Câu trả lời:


5

Các thư viện FFT hiện đại, chẳng hạn như khung FFTW và Khung tăng tốc của Apple có thể thực hiện các FFT không có công suất 2 rất hiệu quả, miễn là tất cả các ước số nguyên tố có độ dài tổng hợp khá nhỏ (2,3,5, v.v.)

Sức mạnh của 2 làm cho nó đơn giản hơn (khoảng 1 trang mã nguồn) nếu bạn phải mã hóa FFT của riêng mình vì một số lý do hoặc bị hạn chế về độ dài chương trình tối đa (hoặc cổng FPGA, v.v.)

Đối với phép đo pha, có thể thực hiện thao tác chuyển đổi nhanh hơn (xoay trước dữ liệu bằng N / 2) để tham chiếu pha FFT đến trung tâm của cửa sổ dữ liệu, trong đó tỷ lệ chẵn / lẻ và do đó pha sẽ không thay đổi hoặc thay thế bằng số bin (đối với pha giống nhau ở trung tâm của cửa sổ dữ liệu đó) ngay cả đối với các tín hiệu không định kỳ theo độ dài FFT, khi bạn thay đổi độ dài.


Xin chào hotpaw2, xin lỗi tôi đã quên đề cập rằng tôi đang sử dụng matlab FFT, điều đó có làm nên sự khác biệt nào không? cám ơn bạn một lần nữa.
lamia

Matlab có thể sử dụng thư viện FFT hiện đại, như FFTW, trong nội bộ. Kiểm tra tài liệu MATLAB cho phiên bản của bạn.
hotpaw2

Ngoài ra, @ hotpaw2, tôi đã sử dụng frafthift rồi ...
lamia

Với frafthift, đặt trung tâm cửa sổ dữ liệu nơi bạn muốn đo pha. Hoặc tính toán pha từ trung tâm ngược thời gian bằng cách sử dụng ước lượng tần số tốt.
hotpaw2

5

Không có gì là 'ma thuật' về việc thực hiện sức mạnh 2 DFT, ngoài thực tế là việc thực hiện sức mạnh 2 DFT cho phép một người thực hiện DFT trong Ôi(Ntôiog(N)) thay vì Ôi(N2). Vì vậy, sức mạnh của 2 DFT, ( Thuật toán thực hiện điều này được gọi là FFT), cho phép bạn chỉ cần tăng tốc tính toán DFT của mình bằng một yếu tố rất lớn.

Tôi áp dụng fft một lần nữa và số thùng thay đổi (đó là bình thường và đó là nơi tôi mong đợi), biên độ là như nhau nhưng góc pha là khác nhau) đầu tiên là bình thường?

Nếu bạn thực hiện DFT lớn hơn vectơ dữ liệu của bạn, về cơ bản bạn sẽ được nội suy trong miền tần số. Do đó, đỉnh mới của bạn có thể không phải là đỉnh tương đương cũ mà bạn đã phát hiện lần đầu tiên, trước khi bạn lấy DFT lớn hơn. Và vì nó không giống nhau, về cơ bản, bạn đang chọn một cơ sở hàm mũ (sin cộng cosine) phức tạp khác nhau trong khoảng thời gian này, có nghĩa là bạn có thể có một giá trị pha khác, vâng.

PS: không phải thiết lập nào (đã đề cập ở trên) cung cấp dữ liệu về độ dài công suất bằng 2, giả sử cái đầu tiên cung cấp 1620 điểm dữ liệu và cái thứ hai cung cấp 1745 điểm dữ liệu, do đó, nên lấy sức mạnh tiếp theo là 2 cho cả hai bắt đầu?

Có, nếu bạn muốn có công suất 2 FFT, thì bạn chỉ cần chọn công suất tiếp theo là 2 FFT dài hơn chiều dài bản ghi dữ liệu của bạn.

Tôi không nhất thiết muốn hoặc không muốn có sức mạnh của 2 FFT (hiệu suất thời gian hoàn toàn không phải là vấn đề của tôi), giống như, tôi có cần phải không?

Bạn không bao giờ nên lấy FFT có độ dài nhỏ hơn độ dài bản ghi của mình, trừ khi bạn muốn loại bỏ dữ liệu. Câu hỏi "FFT của tôi cần lớn đến mức nào", giả sử độ dài FFT lớn hơn chiều dài bản ghi dữ liệu của bạn, sau đó nhanh chóng trở thành ứng dụng phụ thuộc. Thông thường, bạn có thể thoát khỏi độ dài FFT giống như độ dài bản ghi của bạn. Tuy nhiên, đôi khi bạn muốn chọn một đỉnh từ FFT 'mượt mà' hơn. Trong trường hợp này, bạn có thể sử dụng độ dài FFT lớn hơn, (gấp 2 lần, gấp 3 lần, gấp 10 lần, v.v.) và bạn sẽ nội suy đỉnh của bạn trong miền tần số. Không có số ma thuật, tuy nhiên. Hãy nhớ rằng mức độ chi tiết của kết quả FFT của bạn luôn luônfSN.


Cảm ơn người dùng4619 vì câu trả lời, tôi không nhất thiết muốn hoặc không muốn nhận sức mạnh của 2 FFT (hiệu suất thời gian không phải là vấn đề của tôi), giống như, tôi cần phải làm gì?
lamia

Ngoài ra, @ user4619, vì bạn đã đề cập rằng có, góc pha có thể thay đổi, tôi nên tin vào câu trả lời nào cho tôi câu trả lời đúng? (tôi không biết góc pha trước tay hoặc biên độ, tôi chỉ biết tần số trước tay) ... cảm ơn bạn
lamia

@lamia Power-of-2 chỉ dành cho các vấn đề về tốc độ. Thế là xong. Không có gì kỳ diệu về nó nếu không. Về góc pha - hãy nhớ rằng mặc dù góc pha của bạn thay đổi, tần số cực đại của bạn cũng vậy. Nếu bạn thực hiện FFT 1000 điểm, bạn chọn tần số bin 100 làm đỉnh và tìm góc pha của nó. Đúng rồi. Sau đó, bạn thực hiện FFT 343212 điểm và chọn tần số 34321 làm đỉnh và nó có góc pha khác nhau. Điều đó vẫn đúng. "Pha" là một hàm của tần số. (Nếu bạn thấy điều này hữu ích, vui lòng upvote)
Tarin Ziyaee

@lamia Cũng xem các chỉnh sửa của tôi.
Tarin Ziyaee

Cảm ơn bạn rất nhiều vì những lời giải thích bạn đã cung cấp :)
lamia

3

Hiển thị câu trả lời của @ user4619:

Sử dụng IPython, tương tự như Matlab

In[1]: fft(arange(2**22))
1 loops, best of 3: 354 ms per loop

In[2]: fft(arange(4*1000*90*12)) # close to 2**22
# equal to 2*2 * 2*5*2*5*2*5 * 3*3*2*5 * 2*2*3
1 loops, best of 3: 295 ms per loop

In[2]: fft(arange(2**22+1))
1 loops, best of 3: 14 s per loop

Nếu bạn đang sử dụng các số nguyên tố thực sự, khá quan trọng (hệ số 50!). Nếu bạn đang sử dụng các số có yếu tố thấp, không quan trọng. Nhưng làm điều đó chỉ với các số nguyên tố chỉ làm nó nhanh hơn - nó hoàn toàn không thay đổi câu trả lời.

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.