2012-04-24 28 views
55

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

Không thể đại diện cho miền tần số chỉ theo số thực?

+5

Điều gì về việc chuyển câu hỏi này sang DSP SX: http://dsp.stackexchange.com/? – petrichor

+3

Bạn nên chọn một câu trả lời đúng. – Jonathan

Trả lời

57

FFT về cơ bản là 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 thay thế. Để cơ sở đó mô tả tất cả các yếu tố đầ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 các số phức.

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

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

+1

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

+4

Vâng, 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

36

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

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

28

Có, có thể biểu thị kết quả miền tần số FFT của đầu vào thực sự nghiêm ngặt chỉ sử dụng số thực.

Những 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ả chiều dài và góc hướng (hoặc cường độ và pha). Và mọi thành phần tần số trong kết quả FFT có thể có biên độ duy nhất và một pha duy nhất (tương ứng với một số điểm trong khẩu độ FFT).

Một số thực không thể đại diện cho cả cường độ và pha. Nếu bạn vứt bỏ thông tin pha, điều đó có thể dễ dàng bóp méo tín hiệu nếu bạn cố gắng tạo lại nó bằng cách sử dụng một 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. Hai số thực này được kết hợp với nhau trong một số FFT trong một 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) chỉ tạo ra 2 vectơ thực (một cho các tọa độ cosin và một cho tọa độ sin).

Ngoài ra còn có các thủ tục FFT tạo ra độ lớn và pha trực tiếp, nhưng chúng chạy chậm hơn FFTs tạo ra kết quả vectơ phức tạp (hoặc hai thực). Cũng tồn tại các thủ tục FFT chỉ tính toán độ lớn và chỉ vứt bỏ thông tin pha, nhưng chúng thường chạy nhanh hơn cho phép bạn tự làm điều đó sau một FFT tổng quát hơn. Có lẽ họ tiết kiệm một coder 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 bao gồm các hình thức FFT chậm hơn và ít tổng quát hơn này, và chỉ để người lập trình chuyển đổi hoặc bỏ qua những gì họ cần hoặc không cần.

Ngoài ra, nhiều người coi toán học liên quan đến việc là thanh lịch hơn bằng cách sử dụng số học phức tạp.

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

6
  1. Các đổi Fourier rời rạc về cơ bản là một sự chuyển đổi từ một vector của các số phức trong "thời gian miền" tới vector của số phức trong "miền tần số" (Tôi sử dụng dấu ngoặc kép bởi vì nếu bạn áp dụng rộng ngay các yếu tố, DFT là nghịch đảo riêng của nó). Nếu đầu vào của bạn là có thật, sau đó bạn có thể thực hiện hai DFTs cùng một lúc: Đi đầu vào vector xy và tính toán F (x + iy). Tôi quên làm thế nào 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 phân loại discrete cosine transform cho phép bạn đại diện cho "miền tần số" với thực tế và phổ biến trong thuật toán nén mất dữ liệu (JPEG, MP3). Điều đáng ngạc nhiên (với tôi) là nó hoạt động mặc dù nó dường như loại bỏ thông tin pha, nhưng điều này dường như 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 một cách dễ dàng để thực hiện convolution/correlation) một DCT).

tôi đã có thể nhận được một số chi tiết sai;)

+0

Tôi rất thích tìm thêm thông tin khi bạn đặt nó - tách DFT sau đó - đối với trường hợp biến đổi F (x + i y). – CatsLoveJazz

13

Nếu hệ số FFT của bạn cho một tần số cho trước fx + i y, bạn có thể nhìn vào x như hệ số của một cosin ở tần số đó, trong khi y là 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 sóng lệch pha ở tần số đó; độ lớn của sóng này là sqrt(x*x + y*y), bằng với cường độ của hệ số phức tạp.

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

Các vấn đề liên quan