Tại sao FFT tạo ra số phức thay vì số thực?


81

Tất cả các triển khai FFT mà chúng tôi đã gặp đều dẫn đến các giá trị phức tạp (với phần thực và phần ảo), ngay cả khi đầu vào cho thuật toán là một tập hợp các số thực (số nguyên) rời rạc.

Không thể chỉ biểu diễn miền tần số dưới dạng số thực?

Câu trả lời:


86

FFT về cơ bản là một sự thay đổi cơ sở. Cơ sở mà FFT thay đổi tín hiệu ban đầu của bạn là một tập hợp các sóng sin. Để cơ sở đó mô tả tất cả các đầu vào có thể, nó cần có khả năng biểu diễn pha cũng như biên độ; pha được biểu diễn bằng số phức.

Ví dụ: giả sử bạn FFT một tín hiệu chỉ chứa một sóng hình sin. Tùy thuộc vào giai đoạn, bạn cũng có thể nhận được kết quả FFT hoàn toàn thực. Nhưng nếu bạn dịch chuyển pha của đầu vào một vài độ, làm cách nào khác mà đầu ra FFT có thể đại diện cho đầu vào đó?

chỉnh sửa: Đây là một lời giải thích hơi lỏng lẻo, nhưng tôi chỉ đang cố gắng thúc đẩy trực giác.


3
Nó giúp trả lời rất nhiều. Nếu kết quả FFT chỉ chứa tần số và pha, làm thế nào nó nắm bắt được thông tin biên độ trong mẫu miền thời gian? Đó là, làm thế nào để nó tạo lại các biên độ chính xác trong iFFT?
steve landiss

7
Mỗi giá trị trong FFT tương ứng với một thành phần tần số khác nhau. Độ lớn của giá trị đó là biên độ của thành phần và góc phức là pha của thành phần đó.
zmccord

52

FFT cung cấp cho bạn biên độ pha. Biên độ được mã hóa dưới dạng độ lớn của số phức (sqrt (x ^ 2 + y ^ 2)) trong khi pha được mã hóa dưới dạng góc (atan2 (y, x)). Để có kết quả thực chính xác từ FFT, tín hiệu đến phải có đối xứng chẵn (tức là x [n] = obs (x [Nn])).

Nếu tất cả những gì bạn quan tâm là cường độ, thì độ lớn của số phức là đủ để phân tích.


41

Có, có thể biểu diễn kết quả miền tần số FFT của đầu vào thực hoàn toàn chỉ sử dụng số thực.

Các số phức đó trong kết quả FFT chỉ đơn giản là 2 số thực, cả hai đều được yêu cầu để cung cấp cho bạn tọa độ 2D của vectơ kết quả có cả độ dài và góc hướng (hoặc độ lớn và pha). Và mọi thành phần tần số trong kết quả FFT có thể có một biên độ duy nhất và một pha duy nhất (liên quan đến một số điểm trong khẩu độ FFT).

Một số thực không thể đại diện cho cả độ lớn và pha. Nếu bạn vứt bỏ thông tin về pha, điều đó có thể dễ dàng làm sai lệch tín hiệu một cách đáng kể nếu bạn cố gắng tạo lại nó bằng iFFT (và tín hiệu không đối xứng). Vì vậy, một kết quả FFT hoàn chỉnh yêu cầu 2 số thực trên mỗi thùng FFT. 2 số thực này được nhóm lại với nhau trong một số FFT ở kiểu dữ liệu phức tạp theo quy ước chung, nhưng kết quả FFT có thể dễ dàng (và một số FFT thì có) chỉ tạo ra 2 vectơ thực (một cho tọa độ cosine và một cho tọa độ sin).

Cũng có những quy trình FFT tạo ra cường độ và pha trực tiếp, nhưng chúng chạy chậm hơn những quy trình FFT tạo ra kết quả phức tạp (hoặc hai vectơ thực). Cũng có những quy trình FFT chỉ tính toán độ lớn và chỉ loại bỏ thông tin về giai đoạn, nhưng chúng thường chạy không nhanh hơn là để bạn tự làm điều đó sau một FFT tổng quát hơn. Có thể họ tiết kiệm cho lập trình viên một vài dòng mã với chi phí không thể đảo ngược. Nhưng rất nhiều thư viện không bận tâm đến việc đưa vào các dạng FFT chậm hơn và ít tổng quát hơn này, và chỉ để người viết mã chuyển đổi hoặc bỏ qua những gì họ cần hoặc không cần.

Thêm vào đó, nhiều người coi phép toán liên quan sẽ thanh lịch hơn rất nhiều khi sử dụng số học phức tạp (trong đó, đối với đầu vào thực tế nghiêm ngặt, tương quan cosin hoặc thành phần chẵn của kết quả FFT được đưa vào thành phần thực và tương quan sin hoặc thành phần lẻ của Kết quả FFT được đưa vào thành phần ảo của một số phức.)

(Đã thêm :) Và, là một tùy chọn khác, bạn có thể coi hai thành phần của mỗi ngăn kết quả FFT, thay vì là các thành phần thực và ảo, là các thành phần chẵn và lẻ, cả hai đều thực.


19

Nếu hệ số FFT của bạn cho một tần số nhất định fx + i y, bạn có thể xem xnhư là hệ số của một cosin ở tần số đó, trong khi đó ylà hệ số của sin. Nếu bạn thêm hai sóng này cho một tần số cụ thể, bạn sẽ nhận được một sóng lệch pha ở tần số đó; độ lớn của sóng này sqrt(x*x + y*y)bằng độ lớn của hệ số phức.

Các rời rạc Cosine Transform (DCT) là một thân nhân của biến đổi Fourier trong đó sản lượng tất cả các hệ số thực. DCT hai chiều được sử dụng bởi nhiều thuật toán nén hình ảnh / video.


9
  1. Phép biến đổi Fourier rời rạc về cơ bản là một phép biến đổi từ vectơ của số phức trong "miền thời gian" thành vectơ của số phức trong "miền tần số" (Tôi sử dụng dấu ngoặc kép vì nếu bạn áp dụng đúng hệ số tỷ lệ, DFT là của riêng nó nghịch đảo). Nếu đầu vào của bạn là thực, thì bạn có thể thực hiện hai DFT cùng một lúc: Lấy các vectơ đầu vào xy và tính F ( x  +  i  y ). Tôi quên cách bạn tách DFT sau đó, nhưng tôi nghi ngờ đó là một cái gì đó về đối xứng và liên hợp phức tạp.

  2. Loại biến đổi cosine rời rạc cho phép bạn biểu diễn "miền tần số" với giá trị thực và phổ biến trong các thuật toán nén mất dữ liệu (JPEG, MP3). Điều đáng ngạc nhiên (đối với tôi) là nó hoạt động ngay cả khi nó dường như loại bỏ thông tin pha, nhưng điều này cũng có vẻ làm cho nó ít hữu ích hơn cho hầu hết các mục đích xử lý tín hiệu (tôi không biết cách dễ dàng để thực hiện tích chập / tương quan với a DCT).

Có lẽ tôi đã hiểu sai một số chi tiết;)


1
Tôi rất muốn tìm thêm thông tin khi bạn đặt nó - tách DFT sau đó - cho trường hợp của phép biến đổi F (x + iy).
CatsLoveJazz
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.