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ể
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
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.
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.
Hình b.
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
đã 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à….
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
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
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.
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
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.
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:
và
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ì?
Cùng nhìn lại một vài hàm cơ bản ở trên để chi tiết hơn.
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
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[]
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.
Ở 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
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ể
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:
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?
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ỉ
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:
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.
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 độ