Top Banner
The Discrete Fourier Transform Phân tích Fourier là một công cụ toán học dựa trên việc phân tích một tín hiệu thành các hàm dạng sóng Sin. Biến đổi Fourier rời rạc (DFT) là một dạng của phân tích trên được sử dụng với tín hiệu đã được số hóa. Trong chương này chúng ta sẽ nhìn dưới góc độ của toán học và các thuật toán khi phân tích Fourier – trái tim của DFT. The family of Fourier Transform Phân tích Fourier được lấy tên từ Toán học và Vật Lý người Pháp Joseph Fourier. Không những có rất nhiều đóng góp cho lĩnh vực lý thuyết trường, Fourier còn giành được các huy chương cho những cống hiến của ông trong lĩnh vực toán học và ứng dụng của toán học trong thực tế. Fourier đã rất thích thú về lĩnh vực truyền nhiệt và có bài báo đầu tiên vào năm 1807 trên tờ báo Institut de France trong việc sử dụng sóng hình Sin cho việc phân bố nhiệt độ. Bài báo đã gây ra một cuộc tranh cãi xung quanh vấn đề một tín hiệu tuần hoàn liên tục có thể là tổng của các tín hiệu sóng dạng Sine. Trong số các nhà phê bình, có hai nhà toán học rất nổi tiếng trong lịch sử là Joseph Lagrange và De Laplace. Trong khi Laplace và một số nhà nghiên cứu khác ủng hộ việc xuất bản bài báo nói trên thì Lagrange kịch liệt phản đối. For nearly 50 years, Lagrange đã khăng khăng khẳng định phương pháp tiếp cận này không thể
37

C8The Discrete Fourier Transform

Jul 01, 2015

Download

Documents

nvhop2010
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: C8The Discrete Fourier Transform

The Discrete Fourier Transform

Phân tích Fourier là một công cụ toán học dựa trên việc phân tích một tín

hiệu thành các hàm dạng sóng Sin. Biến đổi Fourier rời rạc (DFT) là một dạng của

phân tích trên được sử dụng với tín hiệu đã được số hóa. Trong chương này chúng

ta sẽ nhìn dưới góc độ của toán học và các thuật toán khi phân tích Fourier – trái

tim của DFT.

The family of Fourier Transform

Phân tích Fourier được lấy tên từ Toán học và Vật Lý người Pháp Joseph

Fourier. Không những có rất nhiều đóng góp cho lĩnh vực lý thuyết trường,

Fourier còn giành được các huy chương cho những cống hiến của ông trong lĩnh

vực toán học và ứng dụng của toán học trong thực tế. Fourier đã rất thích thú về

lĩnh vực truyền nhiệt và có bài báo đầu tiên vào năm 1807 trên tờ báo Institut de

France trong việc sử dụng sóng hình Sin cho việc phân bố nhiệt độ. Bài báo đã gây

ra một cuộc tranh cãi xung quanh vấn đề một tín hiệu tuần hoàn liên tục có thể là

tổng của các tín hiệu sóng dạng Sine. Trong số các nhà phê bình, có hai nhà toán

học rất nổi tiếng trong lịch sử là Joseph Lagrange và De Laplace.

Trong khi Laplace và một số nhà nghiên cứu khác ủng hộ việc xuất bản bài

báo nói trên thì Lagrange kịch liệt phản đối. For nearly 50 years, Lagrange đã

khăng khăng khẳng định phương pháp tiếp cận này không thể được dùng để mô tả

tín hiệu dưới dạng các góc… Chẳng hạn sườn của tín hiệu không liên tục như

xung vuông. Lúc đó do uy tín của Lagrange nên tờ Institut de France đã bác bỏ

bài viết của Fourier. Chỉ đến khi Lagrange qua đời, khoảng 15 năm sau, bài báo

mới được công bố một cách đầy đủ.

Các hình sau minh họa cho việc làm thế nào để một tín hiệu có thể phân

tích thành các sóng Sine và Cosine. Hình 8-a chỉ ra một tín hiệu mẫu có độ dài là

16 điểm, từ mẫu 0 đến mẫu 15. Hình b chỉ ra phân tích Fourier của tín hiệu này

bao gồm 9 sóng Sine và 9 sóng Cosine với các tần số và biên độ khác nhau.

Page 2: C8The Discrete Fourier Transform

Hình a.

Mặc dù có vẻ vô lí nhưng 18 tín hiệu hình Sin này đã mô tả tín hiệu ở hình

a. Cũng cần lưu ý là lí do mà Lagrange bất bình là chỉ áp dụng với các tín hiệu liên

tục. Còn đối với các tín hiệu rời rạc, các phân tích này là hoàn toàn đúng đắn. Và

đương nhiên không có sự khác biệt giữa tín hiệu ở hình a với tổng của các tín hiệu

ở hình b tựa như không có sự khác biệt giữa 7 và 3+4.

Nhưng tại sao sóng dạng Sine được sử dụng trong khi đó sao không sử

dụng xung vuông và xung tam giác? Nên nhớ là có vô vàn cách để phân tích một

tín hiệu. Mục đích của sự phân tích là làm sao cho đơn giản hơn với việc qui ước

các tín hiệu ban đầu. Cho ví dụ: sự phân tích xung có thể cho phép tín hiệu có thể

quan sát một vị trí ở một thời điểm nhất định thông qua công cụ mạnh mẽ là phép

nhân chập. Các thành phần sóng Sine và Cosine sẽ đơn giản hơn tín hiệu ban đầu

bởi vì chúng có thuộc tính mà tín hiệu ban đầu không có đó là tính trung thực

(chính xác). Như đã được đề cập trong chương 5, một tín hiệu đầu vào hình sin

của hệ thống đảm bảo tín hiệu ra cũng là hình sin. Chỉ có biên độ và pha có thể

thay đổi còn tần số và dạng sóng là không đổi. Chỉ có sóng sin mới có những

thuộc tính hữu dụng này. Trong khi đó việc phân tích thành xung vuông và tam

giác có thể thực hiện được nhưng chúng lại không có những thuộc tính hữu dụng

trên.

Page 3: C8The Discrete Fourier Transform

Hình b.

Page 4: C8The Discrete Fourier Transform

Một tín hiệu có thể là rời rạc hoặc liên tục, cũng có thể là tuần hoàn hoặc

không tuần hoàn. Sự tổ hợp của hai tính năng này tạo nên 4 loại tín hiệu được

miêu tả và làm rõ ý thông qua bảng bên dưới:

Tín hiệu Liên tục – Không điều hòa: như hàm mũ, đồ thị Gaussian. Tín hiệu dạng này kéo dài từ và chúng là các sóng không điều hòa. Biến đổi Fourier cho dạng tín hiệu này là dùng Fourier Transform.

Tín hiệu liên tục - Điều hòa: Như các sóng Sin, xung vuông, và một vài dạng sóng mà lặp lại chính nó theo một mô hình đều đặn từ . Phần chuyển đổi Fourier cho dạng sóng này là Fourier Serial.

Tín hiệu rời rạc – Không điều hòa: Những tín hiệu dạng này chỉ xác định ở những điểm rời rạc từ và không bị lặp lại chính chúng. Chuyển đổi Fourier cho dạng này là Dicrete Time Fourier Transform.

Tín hiệu rời rạc - Điều hòa: Đây là những tín hiệu rời rạc mà lặp đi lặp lại trong mỗi chu kì từ . Phép biến đổi Fourier có thể dùng là Dicrete Fourier Serial nhưng được dùng nhiều nhất là phép Dicrete Fourier Transform (DFT).

Bạn có thể nghĩ rằng những cái tên được đưa ra cho 4 loại chuyển đổi

Fourier gây khó hiểu và không có tính tổng quát. Bạn nói đúng, những cái tên này

Page 5: C8The Discrete Fourier Transform

đã xuất hiện cách đây hơn 200 năm. Nên chẳng có cách nào khác là bạn phải nhớ

chúng và sử dụng chúng.

Cả 4 loại tín hiệu đều là tín hiệu từ . Tuy nhiên bạn sẽ làm gì khi

mà bạn chỉ có hữu hạn các mẫu được lưu trong máy tính, chẳng hạn như một tín

hiệu có định dạng là 1024 điểm. Vậy liệu có cách chuyển đổi Fourier cho các tín

hiệu có độ dài hữu hạn chăng? Câu trả lời là không. Các tín hiệu sóng Sin và Cos

là xác định từ . Bạn không thể dùng một lớp các tín hiệu có độ dài vô tận

để tổng hợp các tín hiệu có độ dài hữu hạn. Cách để giải quyết vấn đề này là tạo ra

một lớp dữ liệu hữu hạn được coi như tín hiệu có độ dài vô hạn. Điều này được

thực hiện bằng việc ta hình dung rằng tín hiệu có vô số mẫu nằm về hai phía của

các điểm hiện tại. Nếu tất cả các mẫu thêm vào này có giá trị là 0 thì tín hiệu sẽ trở

thành tín hiệu Rời rạc và Không tuần hoàn và phép biến đổi Fourier là phép

DTFT. Một cách khác có thể dùng là có thể sao chép 1024 điểm. Trong trường

hợp này thì tín hiệu lại được coi là tín hiệu Rời rạc và Tuần hoàn với chu kì là

1024 mẫu. Và phép biến đổi Fourier là DFT.

Một số vô hạn của tín hiệu Sin có thể dùng để tổng hợp tín hiệu không điều

hòa. Điều này làm cho nó không thể tính toán DTFT trong một thuật toán của máy

tính. Bằng phương pháp loại trừ ta thấy chỉ có DFT mới dùng được trong DSP.

Mặt khác máy tính số chỉ làm việc được với các thông tin rời rạc và có độ dài hữu

hạn. Tạm bỏ qua những vấn đề đó, Now, concentrait on understanding the DFT.

Look back at the example DFT decomposition on top figure. Tín hiệu có 16

điểm được phân tích thành 18 sóng dạng Sine, mỗi sóng chứa 16 điểm. Theo cách

nhìn nhận khác, tín hiệu16 điểm tín hiệu ở hình a có thể được coi như là một chu

kì đơn của tín hiệu tuần hoàn có độ dài vô hạn. Cũng theo cách đó, mỗi một đường

dạng Sine trong 18 đường ở hình b mô tả một đoạn 16 điểm của tín hiệu Sin có độ

dài vô hạn. Vậy nó thực sự là có ý nghĩa nếu ta coi như tín hiệu 16 điểm được tổng

hợp từ 16 điểm dạng sóng Sine hoặc 1 tín hiệu tuần hoàn dài vô hạn có thể được

tổng hợp từ tín hiệu dạng Sine dài vô hạn? Câu trả lời là không nhưng thỉnh

thoảng là có. In upcoming chapter, chúng ta sẽ bắt gặp các thuộc tính của DFT mà

đi ngược với điều này nếu các tín hiệu được xem như là hữu hạn nhưng trở thành

hiển nhiên khi chu kì cơ bản được xét tới. Điểm mấu chốt để có thể hiểu là….

Page 6: C8The Discrete Fourier Transform

Mỗi một thuật toán biến đổi Fourier trong 4 thuật toán trên có thể chia

thành dạng số thực và số phức. Số thực là đơn giản nhất và thường dùng trong đại

số thông thường, đại số phân tích và tổng hợp. For instance, hình a là một ví dụ

cho DFT thực. Số phức là phức tạp nhất đòi hỏi người dùng phải biết sử dụng số

phức. Số phức như là : trong đó (trong toán thường sử dụng là i

trong khi trong lĩnh vực kĩ sư điện lại dùng j). Toán học số phức nhanh chóng trở

nên phổ biến thậm chí trong cả biến đổi Fourier vốn là đặc trưng của DSP. Trong

thực tế, mục tiêu cơ bản của cuốn sách là trình bày cơ bản về DSP với ngoài việc

đưa ra toán học số phức. Biến đổi Fourier phức là một đặc trưng của phép biến đổi

Fourier trong lĩnh vực DSP. Và nếu bạn quan tâm thì chương 28 – 31 sẽ nói rõ

hơn.

Trong mối liên hệ toán học, từ biến đổi (Transform) được sử dụng rộng rãi

trong DSP như biến đổi Fourier, biến đổi Z, biến đổi Laplace, biến đổi Hebert…

Vậy biến đổi là gì? (Just what is a transform?) Để trả lời câu hỏi này chúng ta cần

nhớ lại hàm là gì. Hàm là một thuật toán hoặc một thủ tục làm thay đổi một giá trị

thành giá trị khác. Ví dụ là một hàm. Bạn lấy một vài giá trị của x, thế

nó vào phương trình và ta sẽ có giá trị đầu ra y tương ứng. Hàm có thể là hàm đơn

biến hoặc đa biến như: .

Biến đổi là phần mở rộng của hàm số, cho phép cả đầu vào và ra là những

giá trị phức. Chẳng hạn bạn có một tín hiệu gồm 100 mẫu. Nếu bạn nghĩ ra một

phương trình hay một thuật toán, một thủ tục nào đó biến 100 mẫu đó thành 100

mẫu khác, bạn sẽ có một phép biến đổi của chính bạn và bạn hoàn toàn có thể đặt

phép biến đổi đó theo tên bạn.

Notation and format of the Real DFT

Như được chỉ ra trong hình dưới, biến đổi Fourier rời rạc làm thay đổi tín

hiệu gồm N điểm đầu vào thành những tín hiệu đầu ra 2 điểm. Trong khi tín hiệu

đầu vào chứa tín hiệu cần được khai triển thì những tín hiệu đầu ra 2 điểm chứa

thành phần biên độ của sóng sine và cosine. Tín hiệu đầu vào được nói đến là

trong miền thời gian vì phần đa các tín hiệu thông thường đi vào DFT bao gồm các

mẫu được lấy với một khoảng cách đều nhau trong miền thời gian.(taken at regular

Page 7: C8The Discrete Fourier Transform

intervals of time). Đương nhiên có thể có một số mẫu đưa vào DFT mà không biết

nó được lấy như thế nào.

Miền tần số cũng chứa các thông tin như miền thời gian, chỉ khác là nó ở

một dạng khác. Nếu bạn đã biết một miền nào đó, bạn hoàn toàn có thể tính toán

ra các miền khác. Đưa vào tín hiệu miền thời gian, xử lí tính toán trong miền tần

số (phân tích) thông qua DFT. Và ngược lại khi có miền tần số, biến đổi lại miền

thời gian (tổng hợp) thông qua DFT ngược. Cả hai việc phân tích hoặc tổng hợp

trên đều có thể mô tả trong một dạng phương trình hoặc một thuật toán tính toán.

Số mẫu trong miền thời gian thường được mô tả bởi biến N. Trong khi N

thường là số nguyên dương và là số mũ của 2 như 128, 256, 512, 1024… Có hai lí

do cho việc lựa chọn N như trên. Thứ nhất: Việc lưu trữ dữ liệu dưới dạng số được

đánh địa chỉ dạng nhị phân nên mũ của hai là một độ dài tín hiệu cơ bản. Thứ hai,

hầu hết các thuật toán hiệu quả cho việc tính toán DFT là làm việc với N là số mũ

của 2 (FFT). Thông thường N được chọn trong khoảng 32 đến 4069. Và hầu hết

Page 8: C8The Discrete Fourier Transform

trong các trường hợp, người ta qui ước mẫu chạy từ 0 đến N - 1 nhiều hơn là 1 đến

N.

Trong kí hiệu của DSP chuẩn, người ta thường kí hiệu chữ cái thường cho

tín hiệu trong miền thời gian, ví dụ x[], y[],… và chữ in hoa trong miền tần số như

X[], Y[], … For illustration, assume có N điểm tín hiệu trong miền thời gian được

lưu trong x[n]. Trong miền tần số, tín hiệu này được gọi là X[], và nó chứa hai

phần, mỗi phần là một mảng gồm N/2 + 1 mẫu. Những mẫu này có tên là phần

thực của X[], kí hiệu là ReX[] và phần ảo của X[], kí hiệu là ImX[]. Tín hiệu trong

phần ReX[] là biên độ của sóng cosine, tín hiệu trong phần ảo ImX[] là biên độ

của sóng sine (bỏ qua hệ số scale). Như vậy trong miền thời gian, tín hiệu chạy từ

x[0] đến x[N-1] thì trong miền tần số, tín hiệu chạy từ ReX[0] đến ReX[N/2] và từ

ImX[0] đến ImX[N/2]. Cần phải nhớ các kí hiệu này một cách cẩn thận, chúng rất

khó nhớ trong các phương trình của DSP. Khổ cái, một số ngôn ngữ máy lại

không phân biệt giữa chữ hoa và chữ thường nên gây lẫn lộn cho người lập trình.

Có cách khác kí hiệu là XX[] trong miền thời gian và REX[] và IMX[] trong miền

tần số.

Câu hỏi: Tại sao miền thời gian có N mẫu thì miền tần số lại phân tích

thành N/2+1 mẫu là biên độ hàm cosine và N/2+1 mẫu là biên độ hàm sine?

Cái tên phần thực và phần ảo là do bắt nguồn từ biến đổi DFT phức, cái mà

chúng để distinguish between số thực và số ảo. Cũng không có gì là phức tạp so

với DFT số thực. Tạm thời bây giờ bạn cứ nghĩ đơn giản là phần thực là biên độ

của sóng cosine còn phần ảo là biên độ sóng sine. Đừng để những từ ngữ đó khiến

bạn phải suy nghĩ nhiều ít nhất cho đến khi chương 29.

The Frequency Domain’s Independent Variable.

Hình dưới là một ví dụ minh họa cho DFT có N = 128. Tín hiệu trong miền

thời gian được chứa trong mảng: x[0] đến x[127], tín hiệu tần số được chứa trong

hai mảng: ReX[0] đến ReX[64] và ImX[0] đến ImX[64]. Chú ý rằng 128 điểm

trong miền thời gian tương ứng với 65 điểm trong miền tần số với chỉ số tần số

chạy từ 0 đến 64. Điều này có nghĩa là N điểm trong miền thời gian tương ứng với

N/2 + 1 điểm trong miền tần số. Đừng quên điểm đặc biệt này nếu không muốn có

lỗi trong chương trình DFT.

Page 9: C8The Discrete Fourier Transform

Trục hoành trong miền tần số có thể được biểu diễn dưới 4 dạng khác nhau:

Trong phương pháp đầu tiên, trục hoành được đánh dấu từ 0 đến 64, tương

ứng với từ 0 đến N/2 mẫu trong mảng. Khi sử dụng cách đánh dấu này, chỉ

số trong miền tần số là một số nguyên. Ví dụ: ReX[k] và ImX[k] trong đó k

chạy từ 0 đến N/2 trong mỗi bước. Những người lập trình rất thích phương

Page 10: C8The Discrete Fourier Transform

pháp này vì nó tiện cho việc viết code khi dùng chỉ số để truy cập vào các

phần tử của mảng (hình b).

Ở phương pháp thứ hai (hình c), trục hoành được đánh dấu là một phân số

của tốc độ lấy mẫu. Điều này có nghĩa là giá trị theo chiều dài của trục

hoành luôn chạy từ 0 đến 0.5. Dữ liệu rời rạc sin chỉ chứa tần số từ giá trị

ban đầu đến ½. Chỉ số được dùng trong kí hiệu này là tần số f (tên trục

hoành). Phần thực và phần ảo được viết là ReX[f] và ImX[f] trong đó có

N/2 + 1 giá trị tương ứng với khoảng giá trị từ 0 đến 0.5. Và ta có mối quan

hệ . Hầu hết các đồ thị trong quyển sách này dùng phương pháp thứ

hai với nòng cốt là tín hiệu rời rạc chỉ chứa tần số trong khoảng từ 0 đến 0.5

tốc độ lấy mẫu.

Cách biểu diễn thứ 3 gần như phương pháp thứ 2, chỉ khác là trục hoành

được nhân với 2 và tên trục hoành sẽ là . Trong kí hiệu này, phần thực

và phần ảo được kí hiệu là ReX[ ] và ImX[ ] trong đó có N/2+1 giá trị

nằm trong khoảng từ 0 đến . được gọi là tần số tự nhiên và có đơn vị là

radian. Điều này có được là dựa trên cơ sở trong một chu kì có 2 radians.

Trong toán học thì phương pháp biểu diễn này được ưa dùng vì nó làm cho

phương trình trở nên ngắn gọn. Chẳng hạn sóng sine được biểu diễn dưới 3

dạng khác nhau như sau: dùng k: , sử dụng f:

trong khi đó khi sử dụng : .

Phương pháp thứ 4 là kí hiệu trục tung trong mối quan hệ với tần số tương

tự trong những trường hợp riêng. Ví dụ một hệ thống có tốc độ lấy mẫu là

10kHz (10k mẫu mỗi giây), đồ thị trong miền tần số sẽ chạy từ 0 đến 5kHz.

Cách này có ưu điểm là có sự có mặt của tần số thực tế nhưng nhược điểm

là chỉ ứng dụng với tốc độ lấy mẫu đặc biệt nên không thích hợp cho việc

phát triển thuật toán DSP chung chẳng hạn như việc lọc số.

Cả 4 cách qui ước trên đều dùng cho DSP và nhiệm vụ là chúng ta phải

thành thạo trong việc chuyển đổi giữa chúng cả trong đồ thị và phương trình toán

học. Để phân biệt cách nào được sử dụng, bằng cách nhìn giá trị của biến và tên

của chúng.

Page 11: C8The Discrete Fourier Transform

DFT Basis Functions

Các dạng sóng sine và cosine được sử dụng trong biến đổi Fourier được gọi

là những hàm cơ bản của DFT. Nói theo một cách khác, DFT là một tập hợp các

số mô tả biên độ. Các hàm cơ bản là một tập hợp các sóng sine và cosine có biên

độ đồng nhất. Nếu gán mỗi biên độ (trong miền tần số) với sóng sine và cosine

(các hàm cơ bản) thích hợp ta sẽ có kết quả là một tập hợp các sóng sine và cosine

đã được scale cái mà được thêm vào dạng tín hiệu trong miền thời gian.

(The sine and cosine waves used in the DFT are commonly called the DFT basis

functions. In other words, the output of the DFT is a set of numbers that represent

amplitudes. The basis functions are a set of sine and cosine waves with unity

amplitude. If you assign each amplitude (the frequency domain) to the proper sine

or cosine wave (the basis functions), the result is a set of scaled sine and cosine

waves that can be added to form the time domain signal.)

Các phương trình cơ bản của DFT:

Trong đó: i chạy từ 0 đến N-1; ck[] là sóng cosine có biên độ được lưu trong

ReX[], còn sk[] là sóng sine có biên độ được lưu trong ImX[]. (Có thể hiểu như

sau: thông qua các phương trình cơ bản đưa vào DFT kết hợp với tín hiệu input ta

có thể lấy ra được biên độ của các tần số tương ứng khi k chạy từ 0 đến N/2). Ví

dụ hình bên dưới chỉ ra một vài sóng sine và cosine trong 17 dạng sóng sine và

cosine của DFT 32 điểm. Khi các sóng dạng sine được thêm vào dạng tín hiệu đầu

vào, chúng phải có cùng độ dài như tín hiệu đầu vào. Như trong ví dụ, DFT 32

điểm có i chạy từ 0 đến 31. Thông số k là một tập hợp các tần số của sóng dạng

sine. In particular (chi tiết), c1[] là sóng cosine mà thực hiện trọn vẹn 1 chu kì

trong N điểm, c5[] là sóng cosine mà thực hiện trọn vẹn 5 chu kì trong N điểm, etc.

Đây là một khái niệm rất quan trong trong việc hiểu về các hàm cơ bản. Nói tóm

lại tham số tần số k bằng với số chu kì thực hiện xuất hiện trong N điểm của tín

hiệu.

Vấn đề: 1. N chọn với giá trị bao nhiêu là thích hợp?

2. i có ý nghĩa gì?

Page 12: C8The Discrete Fourier Transform

Cùng nhìn lại một vài hàm cơ bản ở trên để chi tiết hơn.

Page 13: C8The Discrete Fourier Transform
Page 14: C8The Discrete Fourier Transform

Hình a là sóng cosine c0[]. Đây là sóng cosine của tần số 0, là một giá trị

hằng số của tần số. Điều này có nghĩa là ReX[0] chứa giá trị trung bình của tất cả

các điểm của tín hiệu trong miền thời gian. Nếu nói trong lĩnh vực điện thì ReX[0]

chứa thành phần một chiều. Hình b là sóng sine của tần số 0, s0[] là một tín hiệu

bao gồm tất cả các giá trị là 0. Nên dạng sóng này không ảnh hưởng đến tín hiệu

tổng hợp trong miền thời gian. Giá trị của ImX[0] luôn là bằng 0 và là thành phần

không liên quan. Hình c và d là c2[] và s2[] cái mà thực hiện 2 chu kì trong N điểm

có hàm tương quan tương ứng là ReX[2] và ImX[2]. Cũng như thế với c10[] và

s10[] trong hình e và f. Vấn đề là các mẫu trong hình e và f nhìn không dài hơn như

sóng sine và cosine (ý nói chỉ là các chấm chứ không liên tục). Vậy nếu các đường

liên tục không có mặt trong đồ thị thì sẽ thật khó để dò được đặc tính của đồ thị.

Điều này có thể gây cho bạn lo lắng, nhưng đừng lo. Từ một điểm toán học được

quan sát, các mẫu này sẽ tạo thành dạng các hình sine rời rạc thậm chí ngay cả khi

mắt bạn không nhìn ra được đường đặc tính.

Tần số cao nhất trong các hàm cơ bản được chỉ ra ở hình g và h chính là

cN/2[] và sN/2[]. Sóng cosine rời rạc biến thiên từ trong khoảng -1 đến 1, cái mà có

thể được hiểu như là (which can be interpreted as) việc lấy mẫu một tín hiệu dạng

sine liên tục ở đỉnh của nó. Trái ngược với nó (In constract), tín hiệu sine rời rạc

chứa toàn điểm 0 nên ta có ImX[N/2] = ImX[0] và nó không có hiệu ứng trong

việc tổng hợp trong miền tần số.

Và câu hỏi là: Nếu có N mẫu được đưa vào DFT và có N+2 mẫu đi ra vậy

các thông tin ngoại lệ lấy từ đâu ra? Câu trả lời là: Có hai mẫu đầu ra không chứa

thông tin nên các mẫu N khác là độc lập với nhau. Hai mẫu đó là ImX[0] và

ImX[N/2].

Synthesis, Calculating the Inverse DFT

Phương trình tổng hợp:

(1)

Đây là phương trình tổng hợp. Trong mối quan hệ này, x[i] là tín hiệu đã

được tổng hợp với chỉ số i chạy từ 0 tới N-1. ReX[k] và ImX[k] chứa biên độ của

Page 15: C8The Discrete Fourier Transform

các sóng sine và cosine ứng với k chạy từ 0 đến N/2. Bằng cách nhân các biên độ

này với các hàm cơ bản sẽ tạo ra một tập hợp các sóng sine và cosine đã được

scale. Tổng của các sóng sine và cosine đã được scale này tạo ra tín hiệu trong

miền thời gian x[i].

Trong phương trình trên, các mảng và hay đúng hơn phải

là và là biên độ cần cho sự tổng hợp. Nó có khác đôi chút với

miền tần số của một tín hiệu ( và ). Đây là một hệ số scaling do

chúng ta qui định để đơn giản hơn. Mặc dù đây chỉ là một phép biến đổi bình

thường nhưng nó lại là một lỗi thường thấy trong lập trình máy tính. Mối liên hệ

giữa chúng:

và (2)

Ngoại trừ có hai trường hợp đặc biệt là

và (3)

Các phương trình trên mô tả việc biến đổi giữa biên độ của sóng dạng sine

và giá trị trong miền tần số. Trong đó và chứa biên độ của hàm

sine và cosine cần cho việc tổng hợp, trong khi đó và chứa phần

thực và phần ảo trong miền tần số.

Suppose (Giả thiết rằng) bạn có một sự biểu diễn trong miền tần số và yêu

cầu là phải tổng hợp thành tín hiệu tương ứng trong miền thời gian. Đầu tiên bạn

phải tìm ra các biên độ của sóng sine và cosine. Từ và nhận được

bạn phải tìm ra và thông qua các phương trình trên. Để thực hiện

việc này trên máy tính, cần thông qua 3 bước. Thứ nhất chia tất cả các giá trị

trong miền tần số cho N/2. Thứ 2, Đổi dấu của tất cả các thành phần ảo. Thứ 3,

chia mẫu đầu tiên và mẫu cuối cùng của phần thực, và , cho 2.

Các phương trình (1), (2), (3) chính là định nghĩa của DFT ngược.(inverse DFT)

//The Inverse DFT

//The time domain signal, held in XX[], is calculated from the frequency

domain //signals, held in RMX[] and IMX[]

Page 16: C8The Discrete Fourier Transform

unsigned XX[511]; //chua tin hieu trong mien thoi gian

unsigned REX[256]; //chua phan thuc cua mien tan so

unsigned IMX[256]; //chua phan ao cua mien tan so

#define N 512 //con tro tro toi XX[]

#define PI 3.14159265

//chuong trinh tim song sin va cosine su dung phuong trinh (2) va (3)

for(unsigned k=0;k<=256;k++)

{

REX[k]/=(N/2);

IMX[k]/=-(N/2);

}

for(unsigned k=0;k<=256;k++)

{

for(unsigned i=0;i<=256;i++)

{

XX[i]+=REX[k]*cos(2*PI*k*i/N);

XX[i]+=IMX[k]*sin(2*PI*k*i/N);

}

}

Để làm rõ hơn, xét ví dụ hình 8-6 là một phép biến đổi DFT ngược. Hình a

là tín hiệu mẫu trong miền thời gian, một xung có cả 32 mẫu có biên độ là 0. Phần

thực trong miền tần số của tín hiệu này (hình b) là một giá trị hằng số. Còn phần

ảo trong miền tần số (không đưa ra) bao gồm các giá trị 0. Hình c là biên độ của

sóng cosine dùng để tái lập lại hình a.

Page 17: C8The Discrete Fourier Transform
Page 18: C8The Discrete Fourier Transform

Ở phần trên chỉ mô tả xem sự khác biệt giữa miền tần số và biên độ sóng

dạng sine là như thế nào chứ không giải thích tại sao lại khác. Sự khác biệt có

được là do miền tần số được định nghĩa như là mật độ phổ (spectral density). Xét

ví dụ trong hình 8-7 có phần thực trong miền tần số của tín hiệu 32 điểm. Mẫu

chạy từ 0 đến 16, tương ứng với 17 tần số bằng khoảng cách giữa 0 tới ½ của tốc

độ lấy mẫu. Mật độ phổ này mô tả có bao nhiêu tín hiệu có trong mỗi đơn vị của

dải thông. Để biến đổi biên độ sóng dạng sine thành mật độ phổ, chia mỗi biên độ

cho băng thông tương ứng với biên độ đó. Điều này nảy sinh vấn đề: Làm thế nào

để xác định được băng thông của mỗi tần số rời rạc trong miền tần số?

Như được chỉ ra trong hình trên, băng thông được định nghĩa là các đường

chia giữa các mẫu với nhau. Ví dụ mẫu số 5 xuất hiện trong dải giữa 4.5 với 5.5;

mẫu số 6 xuất hiện trong dải 5.5 với 6.5, etc. Nếu biểu diễn dưới dạng phân số cho

tất cả các băng thông, băng thông của mỗi mẫu là 2/N ngoại trừ mẫu đầu tiên và

mẫu cuối cùng. Điều này để tính toán hệ số scale giữa biên độ dạng sine và miền

thời gian, cũng như hệ số phụ được thêm vào cho mẫu đầu tiên và cuối cùng.

Nhưng tại sao lại có dấu “–“ trước phần ảo? Có điều này là để DFT thực

đồng nhất với DFT phức sẽ được đề cập trong chương 29. Khi chỉ làm việc với

DFT thực, nhiều tác giả đã không dùng dấu “-”, thậm chí còn có người không xét

đến hệ số scale 2/N. Để biện minh cho sự thiếu vắng này, họ đã đưa ra một điều

kiện quan trọng khác thường: Hầu hết các cách tính DFT hiệu quả là thông qua

thuật toán FFT (giới thiệu trong chương 12). FFT phát sinh một miền tần số được

Page 19: C8The Discrete Fourier Transform

xác định theo các phương trình (1), (2), (3). Nếu bạn lẫn lộn với những hệ số đã

được chuẩn hóa này, chương trình FFT của nó sẽ làm việc không như mong đợi.

Analysis, Calculating the DFT

DFT có thể tính toán theo 3 cách khác nhau:

- First, vấn đề có thể được tiếp cận thông qua một tập hợp các hệ phương

trình. Phương pháp này hữu dụng cho việc hiểu DFT nhưng lại không

hiệu quả cho việc thực hành chúng.

- Second, phương pháp này được lấy từ ý tưởng trong chương trước: Sự

tương quan (correlation). Nó dựa trên việc dò một loại sóng đã biết

trong một tín hiệu khác.

- Last, phương pháp này có tên là FFT là một thuật toán xử lí khéo léo mà

phân tích DFT N điểm thành N DFT một điểm. FFT là phương pháp

tiêu biểu nhất với tốc độ tính toán nhanh hơn các phương pháp khác.

Hai phương pháp đầu tiên sẽ được bàn luận trong chương này, còn FFT sẽ

được đề cập trong chương 12. Điều quan trọng cần nhớ là tất cả 3 phương pháp

này đều cho ra cùng một kết quả. Vậy bạn sẽ sử dụng cái nào? Trong thực tế,

correlation thường được ưa dùng với các DFT ít hơn 32 điểm, còn không thì FFT

thường được dùng.

DFT by Simultaneous Equations

Bài toán: Có N giá trị trong miền thời gian, yêu cầu là tính toán N giá trị

trong miền tần số (được bỏ qua 2 giá trị trong miền tần số có giá trị là 0). Đại số

cơ bản sẽ cho câu trả lời: Để tìm N số chưa biết cần N phương trình độc lập tuyến

tính. Cách làm như sau: Lấy mẫu đầu tiên của mỗi sóng dạng sin sau đó cộng

chúng lại với nhau. Tổng phải bằng mẫu đầu tiên của tín hiệu trong miền thời gian,

để cung cấp cho phương trình đầu tiên. Theo cách đó mỗi phương trình được viết

cho các điểm còn lại của tín hiệu trong miền thời gian, kết quả là ta được N

phương trình yêu cầu. Việc giải hệ phương trình này có thể thực hiện bằng các

phương pháp có sẵn như là phép khử Gauss. Nhưng phương pháp này đòi hỏi số

lượng phép tính khổng lồ nên gần như (virtually) không dùng trong DSP. Tuy

nhiên trong một số trường hợp nó tỏ ra khá quan trọng, nó chỉ ra tại sao lại có thể

Page 20: C8The Discrete Fourier Transform

phân tích một tín hiệu thành các tín hiệu sóng dạng sine, có bao nhiêu sóng dạng

sine cần dùng, và các hàm cơ bản phải độc lập tuyến tính.

DFT by Correlation

Bây giờ ta xét một phương pháp tốt hơn, phương pháp chuẩn để tính DFT.

Ví dụ sau sẽ chỉ ra phương pháp này thực hiện như thế nào. Suppose chúng ta cần

tính toán DFT của tín hiệu 64 điểm. Điều này có nghĩa là ta cần tính toán 33 điểm

trong phần thực và 33 điểm trong phần ảo trong miền tần số. Trong ví dụ này ta

chỉ xét cách tính toán với một mẫu, chẳng hạn ImX[3]. Biên độ của sóng sine mà

thực hiện 3 chu kì trong khoảng từ 0 đến 63. Tất cả các giá trị biên độ trong miền

tấn số còn lại được tính toán tương tự.

Hình 8-8 minh họa cách sử dụng sự tương quan để tính ra ImX[3]. Hình a

và b là hai tín hiệu mẫu trong miền thời gian tương ứng là x1[] và x2[]. Tín hiệu

đầu tiên x1[] không có gì đáng bàn, là tín hiệu sine thực hiện 3 chu kì trong khoảng

0 đến 63. Trái lại, tín hiệu x2[] bao gồm một vài sóng dạng sine và cosine, và

không thực hiện 3 chu kì trong khoảng 0 đến 63. Hai tín hiệu này minh họa thuật

toán tính toán ImX[3] thì cần phải làm gì. Khi đưa vào x1[], thuật toán cần phải

đưa ra giá trị của 32 biên độ của sóng sine xuất hiện trong tín hiệu (đã được thay

đổi bởi hệ số scale theo phương trình (2) và (3)). Trong khi đó khi thuật toán đưa

tín hiệu x2[] vào, giá trị 0 sẽ được cung cấp và hiển thị, cái mà sóng sine đặc biệt

này không xuất hiện trong tín hiệu này.

Khái niệm về sự tương quan này đã được giới thiệu trong chương 7. Tóm

lại để tìm ra một dạng sóng đã biết được chứa trong tín hiệu khác, nhân hai cái đó

với nhau và lấy tổng các tích đó với nhau.

Một cách tổng quát, các hàm tính toán được cụ thể hóa theo phương trình:

Page 21: C8The Discrete Fourier Transform
Page 22: C8The Discrete Fourier Transform

Như vậy mỗi mẫu trong miền tần số có thể tính bằng cách nhân tín hiệu

trong miền thời gian với các sóng sine và cosine cần tìm sau đó lấy tổng của chúng

(phương trình 8-4). Nếu ai đó hỏi bạn làm thế để làm gì thì câu trả lời là ta đang

tìm tương quan giữa tín hiệu vào với các hàm cơ bản. Việc lập trình có thể làm

như sau:

//DFT

#define PI 3.14159265

#define N 512

for(unsigned k=0;k<=256;k++)

{

For(unsigned i=0;i<=256;i++)

{

REX[k] = REX[k] + XX[i]*cos(2*PI*k*i/N);

IMX[k] = IMX[k] - XX[i]*sin(2*PI*k*i/N);

}

}

Trong phép tính tương quan, các hàm cơ bản phải có một thuộc tính khá thú

vị: Mỗi hàm cơ bản không tương quan với các hàm còn lại. Điều này có nghĩa là

nếu bạn nhân hai hàm cơ bản với nhau sau đó lấy tổng của chúng thì được kết quả

là 0. Các hàm cơ bản có thuộc tính này nên gọi là trực giao nhau. Có rất nhiều hàm

cơ bản trực giao nhau như: xung vuông, xung tam giác, xung lực, etc. Tín hiệu có

thể phân tích thành các hàm cơ bản trực giao khác bằng hàm tương quan như đã

làm với các sóng dạng sine. Đây không phải là một lời gợi ý mà chỉ là nó có thể

thôi.

Phương trình đã viết ở trên mô tả làm thế nào mà mỗi mẫu riêng lẻ trong

miền tần số lại bị ảnh hưởng bởi tất cả các mẫu trong miền thời gian. Chương trình

tính toán mỗi giá trị trong miền tần số theo trình tự nối tiếp chứ không theo một

nhóm. Khi vòng lặp bên trong và bên ngoài bị tráo cho nhau thì chương trình tính

toán vẫn thông qua tất cả các mẫu trong miền thời gian và đều ảnh hưởng tới miền

tần số. Tất cả miền tần số được tính bằng cách cộng tất cả các thành phần từ các

điểm trong miền thời gian riêng biệt. Vậy câu hỏi đặt ra:what kind of contribution

does an individual sample in the time domain provide to the frequency domain?

Page 23: C8The Discrete Fourier Transform

Câu trả lời chứa trong một khía cạnh khá thú vị của miền Fourier được gọi là tính

duality

Duality

Việc phân tích và tổng hợp theo các phương trình (1) và 8-4 đều quan trọng

như nhau. Để chuyển từ miền này sang miền kia, ta chỉ việc nhân tín hiệu đã biết

với các hàm cơ bản sau đó lấy tổng của các tích đó. Thực tế là cả DFT và Inverse

DFT đều chung một thuật toán nên đây là một điều khá đặc biệt, suy cho cùng the

totally different way we arrived at the two procedures. Thực tế chỉ có sự khác biệt

rõ nét nhất giữa hai phương trình là kết quả trong miền thời gian chỉ là một tín

hiệu N điểm trong khi trong miền tần sô là hai tín hiệu N/2 + 1 điểm. Như sẽ trình

bày trong chương cuối, cả DFT thực và DFT phức đều biểu diễn tín hiệu trong

miền thời gian và trong miền tần số là một tín hiệu phức N điểm, điều này làm cho

hai miền đối xứng hoàn toàn và phương trình biến đổi giữa chúng hầu như là

giống nhau.

Tính đối xứng giữa miền thời gian và miền tần số được gọi là duality. Nó

kéo theo rất nhiều thuộc tính thú vị. Ví dụ một điểm đơn trong miền tần số tương

ứng với một sóng dạng sine trong miền thời gian. Và đảo lại cũng thế, một điểm

trong miền thời gian cũng tương ứng với một sóng dạng sine trong miền tần số.

Hay một ví dụ khác, phép nhân chập trong miền thời gian tướng ứng với phép

nhân thường trong miền tần số và ngược lại phép nhân chập trong miền tần số

tương ứng với phép nhân thường trong miền thời gian. Những mối quan hệ này sẽ

được đề cập trong chương 10 và 11.

Polar Notation (Miền cực)

Như đã được trình bày trước đó, miền tần số là một tập hợp các biên độ

sóng sine và cosine (có thay đổi 1 ít do hệ số scale). Cái này được gọi là

rectangular notation (miền tọa độ vuông góc). Ngoài ra miền tần số còn được

biểu diễn trong polar notation (miền cực). Trong miền này, ReX[] và ImX[] được

thay bằng hai mảng khác là Magnitude of X[] (biên độ) và Phase of X[] (pha) có kí

hiệu tương ứng là MagX[] và PhaseX[]. MagX[] và PhaseX[] đôi một thay thế cho

phần thực và phần ảo. Ví dụ MagX[0] và PhaseX[0] được tính toán bằng cách chỉ

Page 24: C8The Discrete Fourier Transform

sử dụng ReX[0] và ImX[0] và tương tự với các chỉ số khác. Để hiểu phép biến đổi

này, ta xem xem chuyện gì sẽ xảy ra khi lấy tổng của hàm sine và hàm cosine

cùng tần số. Kết quả là được hàm cosine có cùng tần số nhưng có biên độ và phase

khác đi. Phương trình quan hệ:

Điều quan trọng nhất là không có thông tin nào bị mất đi trong chu trình

trên. Trong mối quan hệ này, thông tin chứa trong A và B sẽ được chứa trong M

và . Hình bên dưới chỉ ra một vector tương tự đặc trưng bởi hai biến A và B

trong tọa độ vuông góc trong khi M và được biểu diễn trong tọa độ cực.

Trong tọa độ cực, MagX[] chứa biên độ của sóng cosine trong khi PhaseX[]

chứa góc pha của sóng cosine. Các phương trình sau biến đổi miền tần số trong tọa

độ vuông góc sang tọa độ cực:

Page 25: C8The Discrete Fourier Transform

Hệ tọa độ vuông góc và cực cho ta nghĩ về DFT theo hai hướng khác nhau.

Với tọa độ vuông góc, DFT phân tích tín hiệu N điểm thành N/2+1 tín hiệu hình

sine và N/2+1 tín hiệu hình cosine với biên độ của mỗi tín hiệu đã được xác định

Trong tọa độ cực, DFT phân tích tín hiệu N điểm thành N/2+1 với biên độ xác

định và phase bị dịch đi. Câu hỏi: Tại sao tọa độ cực lại dùng sóng cosine mà

không phải là sine? Vì sóng sine không thể biểu diễn thành phần một chiều của tín

hiệu vì sóng sine của tần số 0 chỉ chứa giá trị 0.

Mặc dù thế nhưng cả hai cách biểu diễn trong hai tọa độ đều chứa cùng

thông tin. Có nhiều ví dụ về cái này có thể biểu diễn dễ hơn cái khác: Ví dụ hình

dưới là tín hiệu trong miền tần số được biểu diễn trong hai tọa độ khác nhau. Đây

là đáp ứng tần số của bộ lọc thông thấp.

Page 26: C8The Discrete Fourier Transform

Vậy câu hỏi là: Khi nào thì dùng tọa độ cực, khi nào dùng tọa độ vuông

góc? Tọa độ vuông góc thường thuận tiện cho tính toán như trong phương trình

hoặc lập trình trên máy tính. Trái lại, khi biểu diễn dưới đồ thị thì thường là tọa độ

cực.