FFT cho một dải tần số cụ thể.


11

Tôi muốn chuyển đổi một tín hiệu sang miền tần số. Các dải tần số mong muốn là 0.1 Hzđể 1 Hzvà độ phân giải tần số là 0.01 Hz.

Với tốc độ lấy mẫu là 30 Hz, FFT cung cấp cho các thành phần tần số lên đến 15 Hz. Tăng tốc độ lấy mẫu cho độ phân giải tần số tốt hơn. Tuy nhiên, FFT cho dải tần số rộng hơn. Trong trường hợp của tôi, tôi chỉ muốn 0.1 Hzđến 1 Hz, FFT cho lên đến 15 Hz(tính phụ).

Câu hỏi của tôi là, có cách nào tiêu chuẩn để tôi có thể tính toán miền tần số của tín hiệu với dải tần số cụ thể và độ phân giải cao không?


2
âm thanh như bạn muốn Zoom FFT arc.id.au/ZoomFFT.html
endolith

Nếu bạn chỉ thực hiện một DFT tiêu chuẩn với tốc độ lấy mẫu 2 Hz và thời lượng 100 giây, bạn sẽ nhận được dải tần từ 0 đến 1 Hz với độ phân giải 0,01 Hz. Chỉ 10% số mẫu của bạn sẽ nằm ngoài ban nhạc mà bạn quan tâm. Có thực sự đáng nỗ lực để tìm ra các chi tiết của thuật toán "không chuẩn" để cải thiện hiệu quả của phép tính tương đối nhỏ này không?
Photon

Hạn chế là, thời lượng cần phải càng ngắn càng tốt. 100s là quá dài. Chúng tôi cần khoảng 10+ s
NcJie

Câu trả lời:


5

Tôi nghĩ rằng giải pháp tốt nhất cho vấn đề của bạn là sử dụng chirp-DFT. Nó giống như một chiếc kính lúp cho một dải tần số nhất định. Nó hiệu quả hơn so với việc thực hiện trực tiếp DFT (không có FFT), bởi vì thuật toán FFT có thể được sử dụng với một số xử lý trước và sau xử lý thích hợp. Về cơ bản, bạn cần điều chỉnh tín hiệu của mình bằng tín hiệu chirp, sau đó lọc bằng FFT và sau đó điều chỉnh lại tín hiệu của bạn để có được đáp ứng tần số mong muốn. Xem ở đâyở đây để biết chi tiết về cách thực hiện chirp-DFT.


2

Ngoài ra còn có khả năng sử dụng độ cong vênh tần số (cũng hoạt động như một kính lúp trong đó bạn có được độ phân giải được cải thiện trong phạm vi quyền lợi tự do của mình cho cùng một FFT với chi phí cho độ phân giải thấp hơn ở tần số cao hơn). Tuy nhiên, bạn không lưu bất kỳ MIPS nào vì kích thước FFT không giảm và độ cong tần số không còn rẻ.

Nếu bạn chỉ muốn tính một số thùng nhất định trong FFT (và do đó lưu MIPS), có một vài phương pháp để làm điều đó. Ví dụ, DFT trượt. Các tài liệu tham khảo trong bài viết này đưa ra một lời giải thích rất hay http://www.comm.utoronto.ca/~dimitris/ece431/slidingdft.pdf . Tôi cũng nghĩ rằng goertzel algo làm điều gì đó tương tự nhưng tôi không biết điều đó.

Sau đó, có tùy chọn downsampling trước FFT'ing. Điều đó có thể cũng sẽ tiết kiệm một số MIPS.

Chỉnh sửa: Chỉ để làm rõ nhận xét về thuật toán Goertzel không hữu ích. Bằng cách cắm trực tiếp các giá trị vào biểu thức tìm thấy ở cuối trang wiki này http://en.wikipedia.org/wiki/Goertzel_alacticm thì cách tiếp cận Goertzel sẽ phức tạp hơn FFT khi kích thước của FFT yêu cầu lớn hơn 128 (giả sử kích thước FFT là hệ số 2 và triển khai cơ số 2).

Tuy nhiên, có những yếu tố khác cần được tính đến có lợi cho Goertzel. Chỉ cần trích dẫn trang wiki: "Các triển khai và nền tảng xử lý FFT có tác động đáng kể đến hiệu suất tương đối. Một số triển khai FFT [9] thực hiện các phép tính số phức nội bộ để tạo ra các hệ số nhanh chóng, làm tăng đáng kể" chi phí K mỗi đơn vị công việc. "Các thuật toán FFT và DFT có thể sử dụng các bảng giá trị hệ số được tính toán trước để có hiệu quả số tốt hơn, nhưng điều này đòi hỏi nhiều quyền truy cập hơn vào các giá trị hệ số được đệm trong bộ nhớ ngoài, điều này có thể dẫn đến sự tranh chấp bộ đệm tăng lên một số lợi thế về số . "

"Cả hai thuật toán đều đạt được hệ số hiệu quả xấp xỉ 2 khi sử dụng dữ liệu đầu vào có giá trị thực thay vì dữ liệu đầu vào có giá trị phức tạp. Tuy nhiên, những lợi ích này là tự nhiên đối với thuật toán Goertzel nhưng sẽ không đạt được cho FFT nếu không sử dụng một số biến thể thuật toán nhất định để chuyển đổi thực dữ liệu được định giá. "


1
DFT trượt thực sự hữu ích trong bối cảnh phân tích phổ thời gian thực, trong đó chuỗi đầu vào rất dài và phổ cần phải được tính lại theo các khoảng thời gian đều đặn. Thuật toán Goertzel rất hiệu quả nếu chỉ cần tính toán một vài giá trị DFT. Sẽ không hữu ích khi giải quyết vấn đề nhất định vì số điểm tần số mong muốn quá lớn.
Matt L.

Cảm ơn @MattL. để chỉ ra điểm yếu của Thuật toán Goertzel.
NcJie

1

Δf=fsN
fsNN

Ns(t)fcfbx(n)s(t)x(n)=s(n/fs)

x~(n)=x(n)ej2πk0/N
k0=fc/fsfbfb+fcf~sfbx~(n)M=fs/fbN

s(t)M

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.