Làm cách nào để tôi lấy FFT dữ liệu cách đều nhau?


55

Thuật toán Biến đổi Fourier nhanh tính toán phân tách Fourier theo giả định rằng các điểm đầu vào của nó cách đều nhau trong miền thời gian, . Nếu họ không thì sao? Có một thuật toán nào khác mà tôi có thể sử dụng, hoặc bằng cách nào đó tôi có thể sửa đổi FFT, để tính toán tỷ lệ lấy mẫu thay đổi có hiệu quả không?tk=kT

Nếu giải pháp phụ thuộc vào cách phân phối mẫu, có hai tình huống cụ thể tôi quan tâm nhất:

  • Tỷ lệ lấy mẫu thường xuyên với jitter: nơi δ t k là một biến phân phối ngẫu nhiên. Giả sử an toàn để nói | δ t k | < T / 2 .tk=kT+δtkδtk|δtk|<T/2
  • Giảm mẫu từ một tỷ lệ lấy mẫu khác liên tục: nơi n kZktk= =viết sai rồikTviết sai rồikZk

Động lực: trước hết, đây là một trong những câu hỏi được bình chọn cao hơn về đề xuất cho trang web này. Nhưng ngoài ra, cách đây một thời gian tôi đã tham gia vào một cuộc thảo luận về việc sử dụng FFT (được nhắc bởi một câu hỏi về Stack Overflow ) trong đó một số dữ liệu đầu vào với các điểm được lấy mẫu không đồng đều xuất hiện. Hóa ra các dấu thời gian trên dữ liệu là sai, nhưng nó khiến tôi suy nghĩ về cách người ta có thể giải quyết vấn đề này.

Câu trả lời:


40

Có rất nhiều kỹ thuật cho FFT không đồng nhất, và những kỹ thuật hiệu quả nhất đều có nghĩa là chính xác cho trường hợp của bạn: mẫu bán đồng nhất. Ý tưởng cơ bản là bôi các nguồn được lấy mẫu không đồng đều lên lưới đồng nhất ("quá khổ") một chút mặc dù các kết cấu cục bộ chống lại Gaussian. Một FFT tiêu chuẩn sau đó có thể được chạy trên lưới thống nhất được ghép lại, và sau đó phép tích chập đối với Gaussian có thể được hoàn tác. Việc triển khai tốt là những thứ như đắt hơn gấp nhiều lần so với FFT tiêu chuẩn ở các chiều d , trong đó C là thứ gì đó gần bằng 4 hoặc 5.CCười mở miệngCười mở miệngC

Tôi khuyên bạn nên đọc Tăng tốc biến đổi Fourier nhanh Nonuniform của Greengard và Lee.

Ôi(VIẾT SAI RỒICười mở miệngđăng nhậpVIẾT SAI RỒI)

Một điểm quan trọng là tất cả các kỹ thuật trên là các xấp xỉ có thể được thực hiện chính xác tùy ý với chi phí thời gian dài hơn, trong khi thuật toán FFT tiêu chuẩn là chính xác.


9

Trong xử lý tín hiệu, tránh răng cưa bằng cách gửi tín hiệu qua bộ lọc thông thấp trước khi lấy mẫu. Jack Poulson đã giải thích một kỹ thuật cho FFT không đồng nhất bằng cách sử dụng Gaussian bị cắt cụt làm bộ lọc thông thấp. Một đặc điểm bất tiện của Gaussian bị cắt cụt là ngay cả sau khi bạn đã quyết định khoảng cách lưới cho FFT (= tốc độ lấy mẫu trong xử lý tín hiệu), bạn vẫn có hai tham số miễn phí: Độ rộng của Gaussian và bán kính cắt.

Do đó, tôi thích chức năng "mũ" với chiều rộng của hai ô lưới là bộ lọc thông thấp. Điều này có tác dụng là thứ tự Fourier zeroth là chính xác và các đơn hàng Fourier thấp hơn sẽ hội tụ theo phương trình bậc hai. Biến đổi Fourier của hàm "mũ" rất dễ tính toán (nó là bình phương của hàm chân), giúp đơn giản hóa hoàn tác tích chập sau FFT. Lưu ý rằng hàm "mũ" là tích chập của hàm đặc trưng của ô đơn vị (chính giữa) với chính nó. Bất kỳ tốc độ hội tụ mong muốn nào cũng có thể đạt được, bằng cách kết hợp ô đơn vị nhiều lần với chính nó và sử dụng hàm kết quả thay vì hàm "mũ".


6

Nếu bạn quan tâm đến phần mềm, tôi có thể giới thiệu thư viện NFFT (trong C có giao diện với MATLAB) có thể tìm thấy ở đây . Lưu ý rằng cũng có thư viện PFFT để tính toán FFT song song và thậm chí là thư viện PNFFT cho các FFT không song song của cùng một nhà phát triển .


1
Theo như tôi biết, PNFFT là thư viện nhanh nhất cho các FFT không đồng nhất 3d song song.
Jack Poulson

liên kết cho PNFFT dường như bị phá vỡ.
Foad

2

Ngoài ra câu trả lời được chấp nhận. Đây là một liên kết đến một triển khai mã nguồn mở của phương pháp Greengard và Lee: https://finufft.readthedocs.io/en/latest/ Nó có các hàm bao tới C, fortran, MATLAB, octave và python. Tôi tin rằng FINUFFT được viết bằng C ++.

Nó được duy trì và sử dụng tại viện NYU Courant, SFU, Flatiron (rõ ràng), Đại học Texas Austin và đại học bang Florida. Ít nhất đây là những cái tôi biết.

Bản thân tôi đang sử dụng một phiên bản cũ hơn, bởi vì tôi lười biếng. Xem: https://cims.nyu.edu/cmcl/nufft/nufft.html


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.