FFT kích thước không phải là sức mạnh của 2


9

Câu hỏi của tôi liên quan đến kích thước đầu vào của tín hiệu không phải là công suất 2 và chúng ta phải lấy fft của tín hiệu đó. Một số giải pháp nói rằng giả sử nếu chúng ta muốn lấy fft là 1800 thì chúng ta không nên đệm nó cho đến độ dài năm 2048 để biến nó thành sức mạnh của 2 và sau đó áp dụng thuật toán radix 2. Nhưng cũng có những giải pháp khác áp dụng kết hợp các thuật toán khác nhau mà không cần đệm bằng 0 và sau đó tính toán FFT cần thiết. Câu hỏi của tôi là việc không đệm một tín hiệu có độ dài 2048 trong trường hợp chúng ta phải lấy fft 1800 sẽ tạo ra bất kỳ sự khác biệt nào trong kết quả, nếu chúng ta sử dụng kết hợp các thuật toán khác nhau để tính fft có kích thước 1800. Sẽ có sự khác biệt hay kết quả sẽ giống nhau


FFT kết quả sẽ khác: thay vì tính FFT theo tần số 2πn/1800 cho n=01799, bạn sẽ tính toán chúng tại 2πn/2048 cho n=02047. Tuy nhiên, không có sự xuống cấp của thông tin.
Peter K.

Vì vậy, nó có nghĩa là cả hai cách tiếp cận là chính xác? Nhưng cái nào bạn đề nghị là tốt hơn về mặt thực tiễn?
DX

Vâng, cả hai cách tiếp cận đều đúng. Tôi sẽ sử dụng "giải pháp năng lượng tối thiểu" (nghĩa là giải pháp đơn giản nhất, lười biếng nhất). Điều này thường sẽ được sử dụng biến đổi chiều dài 2048.
Peter K.

Tôi đã thấy trong các tài liệu và sách mọi người khuyên rằng không có pad nào để biến nó thành sức mạnh của 2 .. Tại sao họ không bao giờ khăng khăng thực hiện một số kết hợp các thuật toán khác để có kết quả tốt.
DX

2
Giả sử dữ liệu của bạn là trong x. Hình thức X = fft(x,123456);(hoặc một số chiều dài kỳ lạ khác). Tìm xx = ifft(X);. Xem những gì sum(abs(x-xx(1:length(x))));đang có.
Peter K.

Câu trả lời:


6

FFT kết quả sẽ khác: thay vì tính FFT theo tần số 2πn/1800   cho n=01799  , bạn sẽ tính toán chúng tại 2πn/2048   cho n=02047  . Tuy nhiên, không có sự xuống cấp của thông tin.

Cả hai cách tiếp cận đều đúng: sử dụng 1800 hoặc 2048. Tôi sẽ sử dụng "giải pháp năng lượng tối thiểu" (nghĩa là giải pháp đơn giản nhất, lười nhất). Điều này thường sẽ được sử dụng biến đổi chiều dài 2048.

Mọi người có xu hướng sử dụng các phép biến đổi radix-2 vì họ không biết gì hơn. Dường như có nhiều thông tin sai lệch về các FFT có sức mạnh của 2. Không có ràng buộc như vậy. Ngoài ra, có lẽ họ không biết về các thuật toán không phải là radix-2, chẳng hạn như các thuật toán có sẵn trong FFTW và các thư viện khác.

Để thấy rằng FFT có độ dài bất kỳ là bảo toàn thông tin:

Giả sử dữ liệu của bạn có độ dài 1800 là trong x. Mẫu X = fft(x,2048);(hoặc một số chiều dài khác khác với 1800).
Tìm xx = ifft(X);.
Xem những gì sum(abs(x-xx(1:1800)));đang có.

Xem thêm câu hỏi này và câu trả lời của nó.


Khi tôi làm điều đó ... nó chỉ cho tôi một con số nhưng không so sánh qua các biểu đồ. Tôi xin lỗi nhưng tôi không giỏi lắm trong matlab vì tôi đã triển khai mọi thứ trong C.
DX

0

Người ta cần hiểu rằng vì kết quả (và nguồn) là kín đáo, FFT không thực sự là một biến đổi Fourier, mà là trong thực tế phát triển Fourier Series. Điều này có nghĩa là kết quả của bất kỳ FFT nào không phải là biến đổi của một khối dữ liệu duy nhất, mà là dạng tĩnh của tín hiệu định kỳ bao gồm một phép nối vô hạn của cùng một khối dữ liệu, có hoặc không có sự phân tách bao gồm chiều dài đệm . (Giả sử rằng dữ liệu được phân tích của tôi trông giống như «m», phép biến đổi sẽ là sự phát triển của «... mmmmm ...» hoặc của «... mmmmm ...», không cùng tín hiệu.)

Kết quả là, không có phần đệm có nghĩa là người ta sẽ hoàn toàn thêm hoặc loại bỏ sự cố tần số cao trong dữ liệu nguồn đến từ sự gián đoạn trong việc kết thúc một khối và bắt đầu của một khối tiếp theo (giống nhau). Ví dụ cực đoan sẽ là phân tích một khối chứa tất cả cùng một giá trị. Đệm không đệm sẽ tạo ra sự khác biệt giữa tín hiệu liên tục và tín hiệu hình chữ nhật.

Hậu quả khác của điều này là phần đệm càng dài thì kết quả sẽ càng gần với sự biến đổi của một cụm dữ liệu duy nhất và độ phân giải của biến đổi càng cao. Nó không hoàn toàn chính xác để nói rằng bất cứ khi nào đi qua, sẽ không có sự xuống cấp của thông tin. Sẽ có (theo một cách hạn chế), vì các lỗi làm tròn và sử dụng bộ đệm dài hơn có thể giúp ngăn chặn nó (một lần nữa, theo một cách rất hạn chế).

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.