Tại sao tôi không nên đệm tín hiệu trước khi thực hiện biến đổi Fourier?


77

Trong một câu trả lời cho một câu hỏi trước đó , nó đã được tuyên bố rằng một người nên

zero-pad các tín hiệu đầu vào (thêm số 0 vào cuối để ít nhất một nửa sóng "trống")

Lý do cho điều này là gì?


Nó phụ thuộc vào những gì bạn đang làm. Đây có thể là một nhận xét về câu trả lời của tôi. Tôi đã thêm một số lời giải thích cho nó.
endolith

@endolith: Ban đầu tôi nghĩ đặt nó như một bình luận, nhưng tôi nghĩ rằng câu hỏi có thể là mối quan tâm chung, và sẽ thật đáng tiếc nếu một câu trả lời tốt cho nó được chôn vùi trong các bình luận ở đâu đó. Nếu bạn không đồng ý, tôi sẽ xóa câu hỏi này.
Jonas

9
Vâng, đó là một câu hỏi rất chung chung. Bạn có thể không đệm để tạo ra thứ gì đó thành công suất 2, bạn có thể không đệm để biến đổi tròn hoạt động giống như biến đổi không tròn, bạn có thể làm điều đó để lấy mẫu lại tín hiệu, thay đổi độ phân giải tần số, v.v.
endolith

Câu trả lời:


82

Không đệm cho phép một người sử dụng FFT dài hơn, sẽ tạo ra một vectơ kết quả FFT dài hơn.

Kết quả FFT dài hơn có nhiều thùng tần số có khoảng cách gần nhau hơn về tần số. Nhưng về cơ bản, chúng sẽ cung cấp kết quả tương tự như phép nội suy Sinc chất lượng cao của FFT ngắn hơn không đệm của dữ liệu gốc.

Điều này có thể dẫn đến phổ trông mượt mà hơn khi được vẽ mà không cần nội suy thêm.

Mặc dù phép nội suy này sẽ không giúp giải quyết hoặc giải quyết và / hoặc giữa các tần số lân cận hoặc gần đó, nhưng nó có thể giúp dễ dàng giải quyết trực quan đỉnh của một tần số bị cô lập duy nhất không có bất kỳ tín hiệu lân cận hoặc nhiễu đáng kể nào trong phổ . Theo thống kê, mật độ cao hơn của các thùng kết quả FFT có thể sẽ khiến cho thùng có cường độ cực đại gần với tần số của hình sin tần số đầu vào bị cô lập ngẫu nhiên và không có phép nội suy tiếp theo (parabol, et.al.).

Nhưng, về cơ bản, không đệm trước DFT / FFT là một phương pháp tính toán hiệu quả để nội suy một số lượng lớn các điểm.

Không đệm cho tương quan chéo, tương quan tự động hoặc lọc tích chập được sử dụng để không trộn kết quả tích chập (do tích chập tuần hoàn). Kết quả đầy đủ của tích chập tuyến tính dài hơn một trong hai vectơ đầu vào. Nếu bạn không cung cấp một nơi để kết thúc kết quả tích chập dài hơn này, tích chập nhanh FFT sẽ chỉ trộn nó với và tăng kết quả mong muốn của bạn. Zero-padding cung cấp một số không vào đó để trộn kết quả dài hơn. Và việc trộn lẫn một thứ gì đó chỉ được trộn / tổng hợp với một vectơ số không dễ dàng hơn nhiều.


12
Đoạn cuối là câu trả lời chính cho câu hỏi ban đầu, mặc dù tôi nghĩ nó có thể được nêu rõ hơn. Không đệm trong bối cảnh tương quan hoặc tích chập có thể được thực hiện để đảm bảo rằng việc thực hiện quy trình trong miền tần số mang lại tuyến tính thay vì tích chập / tương quan tròn . Tuy nhiên, làm như vậy không phải là một yêu cầu nếu bạn sẵn sàng thực hiện một số công việc kế toán ở bên cạnh, như trong các thuật toán chồng chéo-lưu và chồng chéo.
Jason R

4
@Jason R: Thật ra, cả hai đều là tổ hợp tròn. Một FFT bình thường (không được cắt tỉa) thực hiện tất cả các bội số và thêm vào phần bao quanh một phần của kết quả. Chỉ là trong trường hợp có đủ số không, tất cả các số nhân và cộng đó đều có giá trị bằng 0, vì vậy không ai quan tâm đến những gì được tính toán và bao quanh vòng tròn.
hotpaw2

9
Thật; phép nhân DFT của hai tín hiệu luôn luôn thực hiện tích chập tuần hoàn. Tôi nên nói từ khác: bạn nhét các số 0 ở cuối một tín hiệu để đảm bảo rằng kết quả thu được bằng cách kết hợp chúng theo vòng tròn giống như những gì bạn nhận được nếu bạn xác định tuyến tính chúng (giả sử rằng tích chập tuyến tính là những gì bạn muốn, đó là thường là trường hợp).
Jason R

27

Có một vài điều cần xem xét trước khi bạn quyết định không đệm tín hiệu miền thời gian của bạn. Bạn có thể không cần phải đệm tín hiệu nào cả!

1) Kéo dài dữ liệu miền thời gian (không phải đệm bằng 0) để có độ phân giải tốt hơn trong miền tần số.

2) Tăng số lượng điểm FFT vượt quá độ dài tín hiệu trong miền thời gian của bạn (phần đệm bằng 0) nếu bạn muốn xem định nghĩa tốt hơn về các thùng FFT, mặc dù nó không mua cho bạn bất kỳ độ phân giải nào đúng hơn. Bạn cũng có thể đệm để có được sức mạnh bằng 2 số điểm FFT.

3) Khi thay đổi điểm FFT (ở điểm trước), hãy đảm bảo các điểm tần số của bạn kết thúc tại nơi bạn muốn. Khoảng cách của các điểm là , trong đó là tần số lấy mẫu và là số điểm FFT.fs/NfsN

Có một số số liệu đẹp minh họa những điểm này tại http://www.bitweenie.com/listings/fft-zero-padding/

Một điều cuối cùng cần đề cập: Nếu bạn không đệm tín hiệu trong miền thời gian và bạn muốn sử dụng chức năng cửa sổ, hãy đảm bảo bạn cửa sổ tín hiệu trước khi bạn không đệm. Nếu bạn áp dụng chức năng cửa sổ sau khi đệm bằng 0, bạn sẽ không hoàn thành những gì cửa sổ cần phải hoàn thành. Cụ thể hơn, bạn vẫn sẽ có sự chuyển đổi mạnh mẽ từ tín hiệu về 0 thay vì chuyển đổi suôn sẻ sang không.


8

Nói chung, phần đệm không trước DFT tương đương với phép nội suy hoặc lấy mẫu thường xuyên hơn, trong miền được chuyển đổi.

Dưới đây là một hình dung nhanh về cách làm việc ngược lại. Nếu bạn lấy mẫu tín hiệu được giới hạn theo thời gian ở tốc độ cao hơn, bạn sẽ có phổ 'bị bẹp' nhiều hơn, tức là phổ có nhiều số không ở cả hai đầu. Nói cách khác, bạn có thể lấy được nhiều mẫu hơn theo thời gian chỉ bằng cách đệm không tần số sau DFT'ing, và sau đó IDFT'ing kết quả không đệm.

Hiệu ứng tương tự giữ ngược lại khi thời gian đệm không xảy ra. Đây là tất cả bởi vì việc tái tạo tín hiệu hoàn hảo là có thể miễn là tín hiệu được phân tách và lấy mẫu ít nhất là ở tốc độ Nyquist.

Thuật ngữ 'độ phân giải' phụ thuộc vào cách bạn xác định nó. Đối với tôi, điều đó có nghĩa là hai điểm quan sát liền kề về thời gian hoặc tần suất có thể được phân biệt đối xử (theo thống kê) tốt đến mức nào. Trong trường hợp này, độ phân giải thực sự phụ thuộc vào kích thước DFT do rò rỉ quang phổ. Đó là, kích thước cửa sổ nhỏ hơn, mờ hơn hoặc làm mờ tín hiệu được chuyển đổi và ngược lại. Nó khác với tần suất bạn lấy mẫu, hoặc những gì tôi gọi là 'định nghĩa'. Ví dụ: bạn có thể lấy một hình ảnh rất mờ được lấy mẫu ở tốc độ cao (độ phân giải cao), nhưng bạn vẫn không thể có được nhiều thông tin hơn so với lấy mẫu ở tốc độ thấp hơn. Vì vậy, tóm lại, phần đệm không hoàn toàn không cải thiện độ phân giải vì bạn không thu được thêm thông tin nào trước đó.


6

Nếu người ta có hứng thú với phổ của chức năng cửa sổ được sử dụng để cô lập mẫu miền thời gian, thì đệm không S W làm tăng độ phân giải tần số của chức năng cửa sổ.

Nếu tín hiệu thời gian là , trong đó là hàm cửa sổ, thì phổ tổng thể là , trong đó suy ra tích chập. w ( t ) X ( f ) * W ( f ) *x(t)w(t)w(t)X(f)W(f)

Nếu chức năng cửa sổ của bạn là một hình chữ nhật đơn giản (trích xuất một số bộ giá trị từ . Thì là hàm đồng bộ. Vì vậy, ví dụ, nếu Nfft giống với chiều rộng của hình chữ nhật của bạn và bạn đã có một hình sin ở chính xác một trong các tần số bin, sau đó các mẫu của chức năng đồng bộ hóa xuất hiện tập trung vào thùng đó xảy ra chính xác tại các điểm giao nhau 0 cực đại và bạn không thấy hình dạng của đồng bộ hóa trong Nếu tất cả bây giờ không có dữ liệu, dữ liệu của bạn sẽ đi vào FFTX ( f )x(t)X(f), bạn sẽ thấy một số mẫu tại các vị trí không phải là giao điểm cực đại và cực đại, cho thấy hình dạng của chức năng đồng bộ hóa trong phổ kết quả. Vì vậy, những gì sử dụng là không đệm? Nó chắc chắn được sử dụng trong giáo dục trong việc tiết lộ bản chất của sự biến đổi rời rạc của các tín hiệu cửa sổ, đó là trường hợp thông thường. Trong một ý nghĩa thực tế, nó có thể hữu ích trong mọi trường hợp bạn quan tâm đến hình dạng phổ của một phong bì bị cô lập cưỡi trên sóng mang.


4

Có thể có những lý do khác nhau cho việc này tùy thuộc vào bất kỳ quy trình nào được thực hiện trước và sau khi biến đổi Fourier. Lý do phổ biến nhất là để đạt được độ phân giải tần số lớn hơn trong bất kỳ biến đổi kết quả nào. Điều đó có nghĩa là, số lượng mẫu được sử dụng trong biến đổi của bạn càng lớn, độ hẹp của băng thông trong phổ công suất thu được càng lớn. Ghi nhớ: bin thong = sample_frequency / Transform_size (thường được gọi là kích thước cửa sổ). Bạn có thể tưởng tượng từ điều này, rằng khi bạn tăng kích thước biến đổi, băng thông sẽ giảm (= độ phân giải tần số tốt hơn). Không đệm là một cách để tăng kích thước biến đổi mà không đưa ra thông tin mới cho tín hiệu.

Vậy tại sao không chỉ có một biến đổi lớn hơn mà không có đệm? Điều đó sẽ không đạt được hiệu quả tương tự? Câu hỏi hay. Trong nhiều trường hợp, bạn có thể muốn phân tích luồng dữ liệu miền thời gian mà bạn có thể đang sử dụng biến đổi Fourier thời gian ngắn (stft). Điều này liên quan đến việc lấy một biến đổi mỗi N mẫu theo độ phân giải thời gian bạn cần để mô tả các thay đổi trong phổ tần số. Đây là vấn đề. Cửa sổ quá lớn và bạn sẽ mất độ phân giải thời gian, cửa sổ quá nhỏ và bạn sẽ mất độ phân giải tần số. Giải pháp sau đó là lấy các cửa sổ miền thời gian nhỏ cung cấp cho bạn độ phân giải thời gian tốt và sau đó không đệm chúng để cung cấp cho bạn độ phân giải tần số tốt. Hy vọng điều này hữu ích cho bạn

Cập nhật
tôi đã không giải thích điều này tốt. Tôi nên làm rõ nó tốt hơn. Đề cập đến một biến đổi cửa sổ, thực sự bạn không nhận được độ phân giải tần số lớn hơn 'thực tế' nhưng với mục đích trực quan hóa (đọc phổ công suất bằng mắt), nó có thể cung cấp kết quả rõ ràng hơn. Sử dụng tỷ lệ lấy mẫu quan trọng, mỗi thùy bên chiếm một thùng duy nhất, tùy thuộc vào kỹ thuật vẽ đồ thị có thể gây hiểu nhầm. Không đệm cung cấp một phổ tần số nội suy có thể được tiết lộ nhiều hơn. Ngoài ra, nếu bạn đang sử dụng phương pháp chọn đỉnh đơn giản để ước tính tần số, hiệu ứng nội suy phổ của phần đệm bằng 0 sẽ cho bạn một mẫu phổ gần với đỉnh thực sự của thùy chính. Liên kết này cung cấp một số sơ đồ hữu ích: http://www.dsprelated.com/dspbooks/sasp/Practical_Zero_Padding.html


9
Câu trả lời này không đúng. Không đệm không cải thiện độ phân giải tần số; nó chỉ đơn thuần là nội suy giữa các đầu ra của biến đổi nhỏ hơn. Bạn có thể nghĩ về phần đệm bằng 0 khi thêm nhiều thùng tần số có cùng băng thông như khi thực hiện với biến đổi nhỏ hơn; do đó, từ góc độ ngân hàng bộ lọc, các băng thông của họ chồng chéo lên nhau.
Jason R

1
Nếu nó giúp hiểu: Bạn cũng có thể làm ngược lại: lấy FFT của tín hiệu, sau đó chọn không kết quả và FFT ngược. Điều này sẽ có tác dụng nội suy tín hiệu gốc. Nhưng tất nhiên tín hiệu vẫn sẽ là tín hiệu tương tự, với cùng băng thông Nyquist. Nội suy sẽ không cung cấp cho bạn thông tin tần số cao hơn so với ban đầu.
endolith

1
@Jason R - Bạn nói đúng, câu trả lời của tôi đã sai lệch, tôi đã cố gắng làm rõ ở trên bài viết gốc. Tôi không nên nói rằng đệm không làm tăng độ phân giải tần số.
Dan Barry

2

Tôi không thấy những điều này được đề cập trong các phản hồi tốt trước đó vì vậy tôi sẽ thêm các lý do quan trọng bổ sung sau đây cho phần đệm bằng không:

Các thuật toán Radix-2 hiệu quả hơn vì vậy không có phần đệm nào cho công suất tiếp theo là 2 (hoặc công suất 4 trong một số trường hợp cho radix-4), hoặc đáng kể hơn là tránh mọi yếu tố chính lớn có thể cải thiện hiệu suất thời gian thực. Ngoài ra, khi sử dụng FFT để phân tích, phần đệm bằng 0 thường được thực hiện để tính toán các mẫu của DTFT, chẳng hạn như xác định đáp ứng tần số của FIR: so sánh fft ([1 1 1 1]) với fft ([1 1 1 1], 512) giống hệt với freqz ([1 1 1 1]).

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.