Mối quan hệ giữa độ dài FFT và độ phân giải tần số là gì?


67

Nếu tôi đã lấy mẫu tín hiệu bằng các phương pháp lấy mẫu thích hợp (Nyquist, lọc, v.v.), làm cách nào để liên kết độ dài FFT của tôi với độ phân giải tần số kết quả mà tôi có thể thu được?

Giống như nếu tôi có sóng hình sin 2.000 Hz và 1.999 Hz, làm cách nào để xác định độ dài của FFT cần thiết để nói chính xác sự khác biệt giữa hai sóng đó?

Câu trả lời:


81

Độ phân giải tần số phụ thuộc vào mối quan hệ giữa độ dài FFT và tốc độ lấy mẫu của tín hiệu đầu vào.

Nếu chúng tôi thu thập 8192 mẫu cho FFT thì chúng tôi sẽ có:

8192 samples2=4096 FFT bins

Nếu tốc độ lấy mẫu của chúng tôi là 10 kHz, thì định lý lấy mẫu Nyquist-Shannon nói rằng tín hiệu của chúng tôi có thể chứa nội dung tần số lên đến 5 kHz. Sau đó, độ phân giải bin tần số của chúng tôi là:

5 kHz4096 FFT bins1.22 Hzbin

Đây có thể là cách dễ dàng hơn để giải thích về mặt khái niệm nhưng được đơn giản hóa: độ phân giải bin của bạn chỉ là fsampNfsamp

Chúng ta có thể thấy từ trên để có được các thùng FFT nhỏ hơn, chúng ta có thể chạy FFT dài hơn (nghĩa là lấy nhiều mẫu hơn với cùng tốc độ trước khi chạy FFT) hoặc giảm tốc độ lấy mẫu của chúng ta.

Cuộc đuổi bắt:

Luôn có sự đánh đổi giữa độ phân giải thời gian và độ phân giải tần số.

Trong ví dụ trên, chúng ta cần thu thập 8192 mẫu trước khi có thể chạy FFT, khi lấy mẫu ở 10 kHz mất 0,82 giây.

Nếu chúng tôi cố gắng để có được các thùng FFT nhỏ hơn bằng cách chạy FFT dài hơn, sẽ mất nhiều thời gian hơn để thu thập các mẫu cần thiết.

Điều đó có thể ổn, nó có thể không. Điểm quan trọng là ở tốc độ lấy mẫu cố định, tăng độ phân giải tần số làm giảm độ phân giải thời gian. Đó là phép đo của bạn trong miền tần số càng chính xác, bạn càng có thể chính xác trong miền thời gian. Bạn thực sự mất tất cả thông tin thời gian bên trong chiều dài FFT.

Trong ví dụ này, nếu âm 1999 Hz bắt đầu và dừng ở nửa đầu của FFT mẫu 8192 và âm 2002 Hz phát ở nửa sau của cửa sổ, chúng ta sẽ thấy cả hai, nhưng chúng có vẻ như đã xảy ra như nhau thời gian.

Bạn cũng phải xem xét thời gian xử lý. Một FFT 8192 điểm có một số khả năng xử lý tốt. Một cách để giảm nhu cầu này là giảm tốc độ lấy mẫu, đây là cách thứ hai để tăng độ phân giải tần số.

Trong ví dụ của bạn, nếu bạn giảm tốc độ lấy mẫu xuống mức 4096 Hz, thì bạn chỉ cần FFT 4096 điểm để đạt được các thùng 1 Hz * 4096 Hz, thì bạn chỉ cần FFT 4096 điểm để đạt được các thùng 1hz và vẫn có thể giải quyết Tín hiệu 2khz. Điều này làm giảm kích thước thùng FFT, nhưng cũng làm giảm băng thông của tín hiệu.

Cuối cùng với một FFT sẽ luôn có sự đánh đổi giữa độ phân giải tần số và độ phân giải thời gian. Bạn phải thực hiện một chút hành động cân bằng để đạt được tất cả các mục tiêu.


với các thẻ tiêu đề và một số định dạng bài đăng này có thể đi từ tốt đến tuyệt vời. Bạn đã chạm vào tất cả mọi thứ tôi muốn lưu ý, và rất tốt, nhưng cách bài viết được định dạng sẽ ít người đọc nó hơn vì độ dài của nó bị cấm, nếu bạn đưa ra tiêu đề với mỗi phần của những gì bạn đang thảo luận, mọi người sẽ nhảy vào bit juicy mà bộ chúng và số +1 của bạn sẽ tăng lên rất nhiều. Tất nhiên không phải từ tôi, như bạn đã kiếm được nó.
Kortuk

@kurtuk Tôi vội vàng nhổ cái này ra, tôi sẽ dọn sạch định dạng khi có thời gian rảnh (hoặc thoải mái chỉnh sửa nó nếu bạn muốn).
Đánh dấu

1
@kortuk, tên bắt đầu bằng 'o'. Tôi giả sử bạn có, tôi chỉ chia sẻ quan điểm của tôi, cả cho bạn nếu bạn chưa biết, nhưng nhiều hơn cho cộng đồng nói chung.
Kortuk

1
Lưu ý rằng bạn không phải tính toán FFT. Nếu bạn chỉ muốn biết một vài thùng, thì việc tính DFT của những thùng đó sẽ rẻ hơn so với việc chạy một FFT được tối ưu hóa để tính toán tất cả các thùng cùng một lúc bằng cách chia sẻ nhiều thao tác.
Chris Stratton

Cũng cần lưu ý rằng sự đánh đổi miền tần số / thời gian tương tự áp dụng cho các bộ lọc tương tự và IIR.
Caleb Reister

10

fsNfs

Khả năng phân biệt hai tín hiệu có khoảng cách rất gần nhau phụ thuộc mạnh mẽ vào biên độ tương đối và chức năng cửa sổ được sử dụng.

Bạn có thể thấy rằng chơi với máy phân tích tín hiệu Baudline là một cách tốt để phát triển một số trực giác về vấn đề này - và không, chạy một số FFT và vẽ một phổ tại một thời điểm trong Matlab hoặc Python / Numpy thực sự không giống nhau.

EDIT: Ngoài ra còn có một mẹo để đệm đầu vào bằng số không và lấy FFT lớn hơn. Nó sẽ không cải thiện khả năng khác biệt của bạn nhưng có thể làm cho phổ dễ đọc hơn. Về cơ bản, đây là một mẹo tương tự như khử răng cưa trong đồ họa vector.


Tôi có phải là người duy nhất không thấy mã latex được hiển thị đúng định dạng không?
stevenvh

@stevenvh Không làm việc cho tôi quá.
sân thượng

Làm việc cho tôi. Mủ chỉ có 2 chỗ.
Kortuk

2
Đã sửa lỗi (đã được một thời gian). Bổ trợ NoScript của Firefox bị chặn mathjax.org.
stevenvh

3

Cần lưu ý rằng FFT là một giải pháp thay thế cho việc tính toán một số cặp tiền riêng biệt (k = 0..sample_length-1) của Mẫu [k] * SineRefWave [j] [k] và Mẫu [j] * CosRefWave [j ] [k], với tất cả j tối đa một nửa chiều dài mẫu. Nếu một người cần đọc chỉ số biên độ ở tất cả các tần số đó, một FFT sẽ tính toán tất cả chúng trong thời gian O (NlgN), trong khi tính toán chúng riêng lẻ sẽ mất thời gian O (N ^ 2). Mặt khác, nếu người ta chỉ cần đọc chỉ số biên độ ở một vài tần số, người ta thường sẽ tốt hơn chỉ đơn giản là tính toán chúng riêng lẻ, đặc biệt nếu người ta đang sử dụng bộ xử lý hoặc DSP có thể tính toán hiệu quả kiểu đó.

Cũng đáng lưu ý rằng trong khi một FFT với cửa sổ lấy mẫu 20ms sẽ không thể phân biệt giữa một âm 1975Hz hoặc kết hợp tần số (1975-N) Hz và (1975 + N) Hz cho N <25, nó có thể được sử dụng để đo tần số cách ly với độ chính xác cao hơn cửa sổ lấy mẫu nếu không có nội dung phổ khác gần đó. Tần số 1975Hz đơn độc sẽ tăng bằng nhau trong các thùng 1950Hz và 2000Hz, cũng như sự kết hợp của các âm 1974Hz và 1976Hz. Tuy nhiên, âm 1974Hz bị cô lập sẽ thu mạnh hơn ở thùng 1950Hz so với thùng 2000Hz và âm 1976Hz sẽ thu mạnh hơn ở thùng 2000Hz.


1

Độ phân giải tần số không phụ thuộc vào độ dài của FFT, nhưng độ dài của tổng thời gian lấy mẫu T, tức là 1 / T, cũng là thành phần tần số thấp nhất bạn thu được.

Lưu ý, phần đệm bằng 0 không làm tăng độ phân giải tần số; DFT của tín hiệu đệm bằng 0 chỉ đơn thuần là xấp xỉ tốt hơn DTFT của tín hiệu ban đầu.


0

Nếu bạn biết phạm vi tần số đầu vào có thể có và phạm vi hẹp, bạn có thể áp dụng cách lấy mẫu để giảm số lượng mẫu và thời gian để tính toán FFT. Với 256 mẫu và tần số mẫu là 256 Hz, bạn có được độ phân giải 1 Hz mong muốn và băng thông không có bí danh là 128 Hz.


-3

nhìn vào bức ảnh này rõ ràng. mối quan hệ giữa độ phân giải fs và fft

nhập mô tả hình ảnh ở đây


5
Nó không hoàn toàn rõ ràng từ hình ảnh này những gì đang xảy ra. (Điều đó không giúp ích gì cho bức tranh không bằng tiếng Anh.) Điều này thêm gì mà các câu trả lời khác chưa được đề cập?
Greg d'Eon
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.