You are on page 1of 17

Cơ bản về xử lý số tín hiệu

Giới thiệu về xử lý số tín hiệu

Trước khi nói đến việc xử lý số tín hiệu, chúng ta hãy xem xét việc xử lý tín hiệu. Tín
hiệu (ở đây là một dòng thông tin được chuyển tải thông qua một đại lượng vật lý nào đó,
thường là điện áp hay dòng điện) có thể được xử lý theo một trong hai cách: xử lý tương
tự và xử lý số. Lấy ví dụ việc lọc thông thấp một tín hiệu dòng điện, giải pháp tương tự sẽ
dùng một mạch lọc (tích cực hay thụ động) để làm suy giảm các thành phần tần số không
mong muốn và giữ lại các thành phần được quan tâm ở ngõ ra, trong khi giải pháp số sẽ
chuyển tín hiệu dòng điện thành một chuỗi các giá trị tương ứng tại những thời điểm rời
rạc, sử dụng các cơ cấu tính toán số để thực hiện việc lọc tần số, sau đó tái tạo lại tín hiệu
đã được lọc ở ngõ ra. Việc chuyển đổi các giá trị tương tự thành chuỗi giá trị số được
thực hiện bằng các bộ chuyển đổi tương tự-số (ADC-Analog to Digital Converter), và
việc chuyển đổi ngược lại được thực hiện bằng các bộ chuyển đổi số-tương tự (DAC-
Digital to Analog Converter).

Như vậy, các hệ thống xử lý tương tự tín hiệu sử dụng các cơ cấu tính toán tương tự để
thực hiện việc xử lý các tín hiệu tương tự, còn các hệ thống xử lý số tín hiệu lại thực hiện
việc xử lý các tín hiệu số thông qua các cơ cấu tính toán số. Một điều cần nói là các thuật
ngữ 'tương tự' và 'số' không thể hiện bản chất của việc xử lý, thuật ngữ chính xác hơn là
'liên tục' và 'rời rạc' (theo thời gian và phạm vi biến đổi của tín hiệu). Chúng ta có các hệ
thống xử lý liên tục tín hiệu với các cơ cấu tính toán tác động lên các tín hiệu liên tục (có
độ lớn thay đổi một cách liên tục) đối lập với các hệ thống xử lý rời rạc tín hiệu sử dụng
các cơ cấu tính toán tác động lên các tín hiệu rời rạc (có độ lớn thay đổi một cách rời rạc
tại những thời điểm rời rạc). Nhưng kể từ đây trở đi, tôi vẫn dùng các thuật ngữ phổ
thông là 'tương tự' và 'số' để thuận tiện cho người đọc.

Việc xử lý số tín hiệu xem ra có vẻ phức tạp hóa vấn đề, nếu dựa vào ví dụ đơn giản trên
để đánh giá. Tuy nhiên, có một số lý do khiến việc xử lý số tín hiệu vẫn được sử dụng:

• Tính linh hoạt: dữ liệu có thể được lấy mẫu và xử lý sau đó, cũng có thể áp dụng
nhiều thuật toán lên cùng một dữ liệu để tìm ra thuật toán thích hợp nhất. Ngoài
ra, độ phức tạp của thuật toán hầu hết chỉ bị giới hạn bởi bộ nhớ và tốc độ của bộ
xử lý, cũng như các thuật toán có thể được tạo sẵn để tự động thích nghi với môi
trường. Cần nhấn mạnh thêm là một số thuật toán rất hữu ích được đặc biệt tạo ra
và chỉ có trong miền thời gian rời rạc.
• Tính lập trình: Nhiều bộ xử lý ngày nay có thể được cấu hình lại (bằng cách lập
trình phần mềm) để thực hiện nhiều tác vụ xử lý số tín hiệu khác nhau. Chỉ cần
thay đổi phần mềm để thực hiện một thuật toán khác. Điều này cũng có nghĩa là
chỉ cần một số lượng linh kiện tối thiểu để thực hiện các thuật toán xử lý rất phức
tạp.
• Tính lặp lại: Các chức năng của các hệ thống số dựa trên phần mềm hay phần
cứng bên ngoài, do đó có thể lặp lại nhiều lần các thao tác đã được thực hiện.
• Tính ổn định: Dữ liệu được lưu trữ và xử lý bằng phần cứng số do đó những ảnh
hưởng của môi trường như nhiệt độ và sự lão hóa của linh kiện gặp phải trong xử
lý tương tự là không có.
• Nén dữ liệu: Dữ liệu có thể được nén để truyền đi với những khoảng cách xa, tiết
kiệm được chi phí truyền dữ liệu mà vẫn đảm bảo thông tin đầy đủ đến được điểm
nhận.
• Chi phí: Ứng dụng của các bộ xử lý số tín hiệu ngày càng trải rộng, và trong
nhiều trường hợp, chi phí của việc hiện thực thuật toán số nhỏ hơn chi phí cho
thuật toán tương tự.

Hai thành phần cần thiết để một hệ thống xử lý số tín hiệu có thể giao tiếp với thế giới
thực là DAC và ADC. Các DAC có thể sử dụng nguyên lý bộ cộng với hệ điện trở có
trọng số hay mạng điện trở R-2R. Mạng điện trở R-2R khắc phục được một số nhược
điểm của sơ đồ hệ điện trở có trọng số, do đó được dùng phổ biến nhất. Hai thông số
quan trọng đối với một DAC là độ phân giải (resolution) và thời gian xác lập (settling
time).

Dạng đơn giản nhất của một ADC là bộ đếm và so sánh. Sau mỗi xung clock, bộ đếm sẽ
tăng giá trị đưa vào một DAC, ngõ ra của DAC sẽ được so sánh với tín hiệu ngõ vào. Bộ
đếm sẽ không tăng nữa khi ngõ ra của DAC lớn hơn tín hiệu vào. Kỹ thuật xấp xỉ liên
tiếp (SAR) được sử dụng rất rộng rãi trong các ADC. Ở mỗi xung clock, một bit nhị phân
được bật hay tắt theo cách giống như thuật toán tìm kiếm nhị phân. Bắt đầu từ bit có
trọng số lớn nhất, bit được bật nếu giá trị ngõ ra của DAC nhỏ hơn tín hiệu vào. Ngược
lại, bit đó sẽ được tắt và bit có trọng số lớn nhất kế tiếp sẽ được bật. Quá trình tiếp diễn
đến khi đạt được sự hội tụ. Thời gian chuyển đổi của ADC dùng thuật toán xấp xỉ liên
tiếp chỉ phụ thuộc vào chu kỳ xung clock và số bit (độ phân giải). Các ADC loại này cho
phép thực hiện một sự thỏa hiệp giữa độ phân giải và thời gian chuyển đổi. Loại ADC thứ
ba là các bộ biến đổi Flash, thực hiện trực tiếp việc so sánh điện áp ngõ vào với điện áp
có được từ các bộ phân áp. Mỗi bộ phân áp xác định một mức lượng tử hóa. Vì các bit
ngõ ra có được một cách song song, các bộ biến đổi loại này là cực nhanh. Tất nhiên
chúng cũng rất đắt tiền, đặc biệt với độ phân giải cao.

Lượng tử hóa và các sự phi tuyến khác

Quá trình biến đổi A/D chuyển tín hiệu tương tự thành một giá trị số tỷ lệ với tín hiệu
gốc, biểu diễn bằng một số hữu hạn các bit. Do đó, tín hiệu gốc chỉ có thể được rời rạc
hóa với một độ phân giải hữu hạn, dẫn đến sai số giữa giá trị gốc và giá trị được lượng tử
hóa, và sai số này được gọi là nhiễu lượng tử hóa (quantisation noise). Nếu các giá trị ngõ
vào có xác suất xuất hiện bằng nhau, giá trị trung bình của nhiễu lượng tử hóa sẽ là 0, do
đó người ta thường biểu diễn nhiễu này bằng giá trị trung bình bình phương.
Gọi q là bước lượng tử hóa, nhiễu lượng tử hóa sẽ nằm trong biên ±q/2, hàm mật độ xác
suất của nhiễu lượng tử hóa sẽ là P(eq) = 1/q (vì xác suất phân bố đều, và tổng xác suất
phải là 1). Giá trị trung bình bình phương sẽ là:

Giá trị hiệu dụng (rms) của nhiễu lượng tử hóa là:

Xét tín hiệu vào tương tự hình sin có biên độ là A. Nếu sóng sin phủ vừa đủ phạm vi
lượng tử hóa, mỗi bước lượng tử hóa sẽ là:

với n là số bit của bộ ADC. Giá trị công suất trung bình bình phương cho bởi:

Tỷ số (công suất) giữa tín hiệu và nhiễu lượng tử hóa SQNR do đó sẽ là:

Trong thực tế SQNR thường được biểu diễn bằng dB (với công suất thì dB được tính
bằng 10log()), giá trị của SQNR tính bằng dB như vậy sẽ là SQNRdB = 1.76 + 6.02n dB.
Điều này có nghĩa là với mỗi bit thêm vào độ phân giải của bộ ADC, chúng ta có thể tăng
6 dB trong SQNR.

Quá trình biến đổi A/D trong thực tế thường gặp một số sự phi tuyến: mất mã (một số mã
nhị phân không thể xuất hiện), phi tuyến sai phân (chuyển tiếp lượng tử hóa có thể là một
hàm phi tuyến của tín hiệu vào, thường được biểu diễn theo LSB), sai số độ lợi (sự thay
đổi của độ dốc hàm truyền), sai số offset (toàn bộ mã bị dịch lên hay xuống cùng một
lượng).

Biến đổi A/D dùng over-sampling


Nhiều nhà sản xuất ADC và DAC hiện đại đang tự hào về sự phát triển của các linh kiện
1-bit (thực chất là một bộ lượng tử hóa kiểu rơle), trong khi chúng ta hiểu rằng cần có
một số nhất định để đạt được SNQR như yêu cầu. Dưới đây là lý do của việc phát triển
các linh kiện 1-bit đó.

Chúng ta bắt đầu với giá trị trung bình bình phương của nhiễu lượng tử hóa:

Cho rằng bộ ADC lấy mẫu tín hiệu ngõ vào ở tần số Fs. Theo định lý lấy mẫu thì tần số
cực đại của tín hiệu ngõ vào, gọi là Fb, phải thỏa mãn < Fs/2. Chú ý là trung bình bình
phương của nhiễu lượng tử hóa là tương đương với phương sai và công suất trung bình
bình phương, và độc lập với tần số, nghĩa là có phổ bằng phẳng. Mật độ nhiễu, nghĩa là
công suất trung bình bình phương nhiễu trên một đơn vị băng thông (trong phạm vi 0 đến
< Fs/2), do đó sẽ là:

Bây giờ chúng ta tính công suất trung bình bình phương nhiễu trong băng thông của tín
hiệu ngõ vào. Vì mật độ phổ công suất là phẳng, lượng nhiễu trong băng thông của tín
hiệu sẽ tỷ lệ với tỷ số của Fb và Fs/2, nghĩa là:

với (Fs/2)/Fb được gọi là tỷ số over-sampling (OSR). Chúng ta hãy so sánh giá trị công
suất nhiễu trên với công suất nhiễu của một tín hiệu được lấy mẫu ở tần số Nyquist, nghĩa
là Fs/2 = /Fb, bằng một bộ ADC m-bit. Nếu cả hai tín hiệu cách lấy mẫu có cùng công
suất nhiễu, chúng ta có quan hệ sau:

Từ đó chúng ta có được quan hệ sau: m − n = (1/2)log2(OSR). Điều này có nghĩa là nếu


chúng ta lấy mẫu nhanh hơn 4 lần, chúng ta sẽ tăng số bit hiệu dụng của bộ ADC lên 1.
Nói cách khác, chúng ta có thể tăng OSR để giảm số bit cần có trong bộ ADC thực mà
vẫn có được công suất nhiễu trong băng thông được quan tâm giống như của một bộ
ADC được lấy mẫu ở tần số Nyquist. Như vậy chúng ta có thể tăng OSR đến khi chỉ cần
1-bit để hiện thực bộ ADC, chẳng hạn, có thể dùng OSR là 16384 để có được độ phân
giải 8-bit với bộ ADC 1-bit.
Các định nghĩa cơ bản

Một tín hiệu liên tục theo thời gian là một hàm của thời gian, và gán một giá trị thực cho
mỗi giá trị thời gian. Một tín hiệu rời rạc theo thời gian là một chuỗi được định nghĩa
theo các số nguyên. Nếu một tín hiệu liên tục theo thời gian x(t) được lấy mẫu mỗi T
giây, kết quả là chuỗi rời rạc theo thời gian x[n] = {x(nT)}.

Một chuỗi rời rạc theo thời gian x[n] là tuần hoàn nếu có một số nguyên N sao cho
x[n+N] = x[n]. Số nguyên dương N nhỏ nhất thỏa mãn x[n+N] = x[n] được gọi là chu kỳ
của x[n]. Cần cẩn thận khi định nghĩa chu kỳ của một tín hiệu rời rạc theo thời gian. Ánh
xạ này thường chỉ là một chiều, nghĩa là không thể thay nT bằng t để chuyển một tín hiệu
rời rạc theo thời gian thành tín hiệu liên tục theo thời gian tương đương.

Các tín hiệu rời rạc điển hình gồm có tín hiệu bước nhảy (step), tín hiệu sin, tín hiệu mũ
và tín hiệu ngẫu nhiên rời rạc. Ngoài ra còn có tín hiệu xung rời rạc δ[n], chỉ mang giá trị
1 tại n = 0 và bằng 0 với mọi n khác. Tất cả các tín hiệu rời rạc đều có thể được tạo thành
từ các xung rời rạc được dịch và thu phóng thích hợp.

Hàm sin và mũ rời rạc

Các hàm sin và mũ rời rạc là nền tảng cho xử lý số tín hiệu. Xét một hàm sin liên tục theo
thời gian:

x(t) = Acos(ωct)

A là biên độ, ωc là tần số góc tính bằng rad/s. Tần số cũng có thể tính bằng Hz: ωc = 2πFc,
với Fc tính bằng Hz.

Một tín hiệu sin liên tục theo thời gian là tuần hoàn, vì x(t + Tp) = x(t), tất nhiên với Tp =
1/Fc.

Xét hàm mũ phức trong miền thời gian liên tục:

cùng với các phần tử:

Rõ ràng các hàm mũ phức bao gồm cả lớp hàm sin thực lẫn ảo. Tính chất tổng quát này
của các hàm mũ phức khiến chúng rất có ích cho việc phân tích tín hiệu cả trong miền
thời gian liên tục lẫn rời rạc. Từ các biểu thức trên, chúng ta giới thiệu các tần số âm,
(chỉ) để thuận tiện về mặt toán học:

Với hàm mũ phức:

chúng ta có thể biểu diễn thành phần ảo theo thành phần thực thành và có được một vectơ
quay ngược chiều kim đồng hồ với tốc độ ωc rad/s. Các hàm mũ có tần số âm là các vectơ
tương tự nhưng quay cùng chiều kim đồng hồ. Do đó tổng của một hàm mữ tần số dương
và một hàm mũ tần số âm (với cùng biên độ và tần số) sẽ tạo ra một vectơ nằm trên trục
hoành, tức là có thể tạo thành các tín hiệu hình sin thực từ tổng các hàm mũ phức.

Với các hàm sin và mũ rời rạc theo thời gian, có các khác biệt cơ bản với các hàm liên
tục theo thời gian. Xét tín hiệu sin đơn giản:

x(t) = cos(ωct)

Nếu chúng ta lấy mẫu tại những khoảng thời gian rời rạc T giây, chúng ta có được chuỗi
rời rạc theo thời gian:

x[n] = cos(ωcnT) = cos(ωdn)

Tần số rời rạc ωd có đơn vị là rad/mẫu. Theo cách tương tự, chúng ta có thể định nghĩa
biến tần số:

Fd = ωd/(2π)

Một sóng sin rời rạc là tuần hoàn khi và chỉ khi x[n + N] = x[n]. Giá trị nguyên N nhỏ
nhất thỏa mãn điều kiện này được gọi là chu kỳ cơ bản. Bây giờ là một trong những khác
biệt cơ bản nhất giữa sóng sin liên tục và rời rạc theo thời gian. Xét một sóng côsin rời
rạc: cos(ωdn). Chúng ta sẽ cộng thêm 2π vào tần số của sóng côsin rời rạc đó:

cos((ωd+2π)n) = cos(ωdn + 2πn) = cos(ωdn)

Điều này cho thấy chúng ta không thể phân biệt giữa các tần số trong khoảng 0 ≤ ωd ≤ 2π
và các tần số cao hơn. Vì chúng ta cũng quan tâm đến tần số âm, chúng ta sẽ dùng phạm
vi tần số sau: −π ≤ ωd ≤ π, và −½ ≤ Fd ≤ ½. Điều này cũng áp dụng cho các hàm mũ
(phức) rời rạc.

Quan hệ cơ bản giữa tần số liên tục và tần số rời rạc là:
Do đó, để chuyển phạm vi tần số rời rạc trở về phạm vi tần số liên tục, chúng ta chia
phạm vi tần số rời rạc cho chu kỳ lấy mẫu T. Như vậy, chúng ta không thể nói đến tần số
của một tín hiệu liên tục theo thời gian từ dữ liệu rời rạc theo thời gian mà không biết về
chu kỳ lấy mẫu. Hệ quả, khi một sóng sin liên tục theo thời gian được lấy mẫu, nó phải
nằm trong khoảng:

−Fs/2 ≤ Fc ≤ Fs/2

Lấy mẫu lý tưởng và tự nhiên

Xét một tín hiệu liên tục theo thời gian, x(t), được lấy mẫu mỗi T giây. Tín hiệu lấy mẫu
được, x*(t), có thể được biểu diễn:

Sử dụng phép biến đổi Fourier, có thể cho thấy các thành phần tần số của tín hiệu lấy
mẫu được, x*(t), như sau:

với X(jω) biểu diễn biến đổi Fourier của tín hiệu gốc x(t). Với n = 0, X*(jω) trùng với
X(jω), tuy nhiên với n ≠ 0, chúng ta có các thành phần tần số khác, với hình dạng tương
tự như X(jω), nhưng bị dịch bởi một số nguyên lần tần số lấy mẫu ωs theo cả chiều dương
lẫn chiều âm. Những thành phần này được gọi là alias.

Nếu tần số cao nhất của tín hiệu gốc là nhỏ hơn một nửa tần số lấy mẫu, nghĩa là ωb <
ωs/2, khi đó tín hiệu gốc có thể được tái tạo từ tín hiệu lấy mẫu được bằng cách dùng một
bộ lọc thông thấp lý tưởng (tức là loại bỏ các alias).

Định lý lấy mẫu: Để lấy mẫu và tái tạo đúng một tín hiệu, cần phải lấy mẫu ở tần số ít
nhất là gấp 2 lần tần số cao nhất có mặt trong tín hiệu gốc.

Trong thực tế, để thực hiện điều này người ta cho tín hiệu gốc qua một bộ lọc thông thấp
để loại bỏ các nhiễu tần số cao làm sai lệch tín hiệu tần số thấp được lấy mẫu. Các bộ lọc
đó được gọi là các bộ lọc anti-aliasing.
Một bộ lọc thông thấp lý tưởng là phi thực tế, do đó người ta thường lấy mẫu ở tần số ít
nhất là gấp 10 lần tần số cao nhất có mặt trong tín hiệu gốc.

Phương pháp lấy mẫu thực tế sử dụng một chuỗi xung, với mỗi xung có độ rộng là q
giây. Chuỗi xung có thể được biểu diễn bằng hàm bước nhảy (step):

Biễu diễn p(t) bằng một chuỗi Fourier, chúng ta có thể biễu diễn tín hiệu lấy mẫu được
như sau:

Thực hiện phép biến đổi Fourier và áp dụng định lý dịch tần số, chúng ta có:

Các hệ số Cn được tính bởi:

Lấy mẫu thực với dạng sóng phẳng đầu

Kỹ thuật này được coi là điều chế biên độ xung (PAM). Trong trường hợp này, sóng
xung p(t) và tín hiệu x(t) không được nhân với nhau, thay vào đó x(t) được lấy mẫu ở
cạnh trước của mỗi xung p(t) và được lưu ở mức này trong q giây.

Kỹ thuật này làm méo dạng cả tín hiệu gốc lẫn các alias, và không cho phép phân tích
Fourier trực tiếp. Hiện tượng méo dạng biên độ các thành phần tần số của tín hiệu gốc
được gọi là hiệu ứng aperture.

Các hệ rời rạc theo thời gian

Chúng ta thường dùng các phương trình vi phân để biểu diễn phản ứng động học của hệ
trong miền thời gian liên tục. Với các hệ trong miền thời gian rời rạc, chúng ta có công cụ
tương tự là các phương trình sai phân. Phương trình sai phân liên hệ (chuỗi) đầu ra của
một hệ rời rạc, y[n], với một (chuỗi) đầu vào rời rạc, x[n].
Ngày nay, các hệ rời rạc có thể được hiện thực hoàn toàn trong máy tính; có thể thực hiện
một bộ lọc số chẳng hạn. Tín hiệu vào, x[n], sẽ là dữ liệu đã được lấy mẫu (và thực tế là
một số nhị phân), và y[n] sẽ là kết quả của việc lọc, sẵn sàng được xuất ra thế giới thực
thông qua một DAC.

Bất chấp bản chất của hệ rời rạc, chúng ta muốn biểu diễn mối quan hệ vào/ra bằng toán
học, để hiểu tính chất của hệ hay để thiết kế các bộ lọc mới đáp ứng các chỉ tiêu kỹ thuật
riêng bằng các phương pháp toán học hợp lý. Các phương trình sai phân chính là một
công cụ như vậy.

Xét một hệ được biểu diễn toán học bằng một phương trình sai phân:

y[n] = a.y[n−1] + b.y[n−2] + c.x[n] + d.x[n−1]

Ngõ ra hiện tại, y[n], là một hàm của các ngõ ra trước đó (y[n−1], y[n−2]), giá trị ngõ vào
hiện tại, x[n], và giá trị ngõ vào ngay trước đó, x[n−1]. Chức năng của hệ phụ thuộc vào
các hệ số a, b, c, d.

Như với hệ liên tục, có một số tính chất chung cần phải làm quen. Các tính chất này bao
gồm:

• Tính tuyến tính Giả thiết x[n] là tổng của một số tín hiệu, x[n] = x1[n] + x2[n].
Gọi y[n] là ngõ ra của hệ khi ngõ vào là x[n]. Giả sử y1[n] là ngõ ra khi ngõ vào là
x1[n], và y2[n] là ngõ ra khi ngõ vào là x2[n]. Hệ là tuyến tính nếu y[n] = y1[n] +
y2[n]. Nghĩa là, hệ là tuyến tính nếu đáp ứng với x[n] = (x1[n] + x2[n]) bằng với
tổng của các đáp ứng khi x1[n] và x2[n] được áp đặt độc lập.
• Tính nhân quả Các tín hiệu/hệ được gọi là nhân quả nếu 'các sự kiện hiện tại' chỉ
phụ thuộc vào 'các sự kiện' hiện tại và quá khứ. Phương trình sai phân sau là một
ví dụ của hệ không nhân quả:

y[n] = y[n−1] + x[n] + x[n+1]

• Tính bất biến theo thời gian Một hệ là bất biến theo thời gian nếu đáp ứng của
hệ, y[n], đối với một ngõ vào cụ thể, x[n], là không phụ thuộc vào thời điểm áp
đặt ngõ vào.
• Tính ổn định Một hệ được gọi là ổn định nếu và chỉ nếu với mọi ngõ vào bị chặn,
x[n], ngõ ra, y[n], là bị chặn. Định nghĩa cụ thể này về tính ổn định được gọi là
tính ổn định ngõ vào bị chặn ngõ ra bị chặn (BIBO).

Người ta thường chỉ xét đến các hệ tuyến tính, bất biến theo thời gian (LTI) trong các
giáo trình về Xử lý số tín hiệu (DSP).
Chập tín hiệu-Convolution

Chập tín hiệu là quá trình nền tảng cho việc phân tích và xử lý tín hiệu. Nó có quan hệ rất
gần gũi với phép biến đổi Fourier, hay tổng quát hơn là phép biến đổi Laplace, trong
miền tần số và với phép biến đổi Z trong miền thời gian rời rạc. Việc nhân các thành
phần trong miền tần số, tức là nhân hàm truyền trong miền tần số của một hệ với biểu
diễn trong miền tần số của một tín hiệu vào, là tương đương với việc chập đáp ứng xung
trong miền thời gian của hệ với tín hiệu ngõ vào trong miền thời gian. Nhớ lại rằng phép
biến đổi Laplace ngược của một hàm truyền của một hệ cho ta đáp ứng xung của hệ.
Phép chập chỉ đơn thuần là một phép toán trong miền thời gian, không giống như phép
nhân các biến đổi Laplace xảy ra trong một miền tần số giả.

Phép chập thường được ký hiệu bằng dấu sao (*). Bằng cách này, chúng ta có thể biểu
diễn phép chập của h[n] và x[n] bởi y[n] = h[n]*x[n]. Khi mô tả bằng đồ thị, chúng ta
thường đảo ngược một tín hiệu, và tính tổng của tích các thành phần chồng lên nhau cho
mỗi một phép dịch thời gian. Với những tín hiệu có nhiều thành phần khác 0, đây là một
quá trình rất tốn công sức và thời gian. May mắn là chúng ta có một công thức toán học
ngắn gọn cho phép chập:

Tổng chập có ích trong nhiều phương diện phân tích và xử lý tín hiệu, tuy nhiên ứng
dụng cơ bản nhất là lấy đáp ứng rời rạc của các hệ, các bộ lọc đối với tín hiệu vào rời rạc
mong muốn.

Đối với miền thời gian liên tục, có thể dễ dàng chứng minh hàm truyền của một hệ cho
biết đáp ứng xung của hệ đó. Trong miền thời gian rời rạc, chúng ta cũng có quan hệ
tương tự. Xét một hệ với ngõ vào là một xung rời rạc δ[n], và để ý ngõ ra rời rạc y[n] của
hệ, với hàm truyền là h[n]. Vì ngõ vào chỉ là một xung rời rạc, kết quả của phép chập sau
mỗi phép dịch thời gian chỉ là thành phần tương ứng trong h[n] nhân với 1 (của ngõ vào),
nghĩa là ngõ ra y[n] chính là h[n]. Nói cách khác, h[n] chính là đáp ứng xung rời rạc của
hệ.

Nhân nói về phép chập, 2 loại bộ lọc cũng được giới thiệu ở đây, vì chúng được phân loại
dựa vào đáp ứng xung. Trước tiên, xét phương trình sai phân bậc nhất liên hệ ngõ ra y[n]
và ngõ vào x[n] của bộ lọc:

y[n] = x[n] + 0.5y[n−1]

Hàm truyền của hệ có thể tìm được bằng cách cho x[n] = δ[n]. Tại n = 0, ta có x[0] = 1,
do đó y[0] = 1. Vì tác dụng hồi tiếp (feedback) của thành phần y[n−1], ngõ ra sẽ không
bao giờ đạt đến giá trị 0, dù ngõ vào chỉ là một xung rời rạc. Chúng ta gọi đáp ứng xung
này là đáp ứng xung vô hạn (IIR-Infinite Impulse Response), và bộ lọc tương ứng với
loại hàm truyền này được gọi là bộ lọc đáp ứng xung vô hạn. Xét một phương trình sai
phân khác liên hệ ngõ ra y[n] và ngõ vào x[n] như sau:
y[n] = 0.25×(x[n] + x[n−1] + x[n−2] + x[n−3])

Cũng dùng một xung rời rạc áp đặt vào ngõ vào của hệ để tìm hàm truyền. Rõ ràng, chỉ
sau một số phép dịch thời gian (4 phép dịch trong trường hợp này), ngõ ra đã trở về giá
trị 0 khi ngõ vào là một xung rời rạc. Đáp ứng xung này được gọi là đáp ứng xung hữu
hạn (FIR-Finite Impulse Response), và bộ lọc tương ứng với loại hàm truyền này được
gọi là bộ lọc đáp ứng xung hữu hạn.

Sau cùng là một số tính chất của phép chập. Phép chập là một quá trình có tính giao hoán,
nghĩa là:

y[n] = h[n]*x[n] = x[n]*h[n]

Phép chập cũng có tính kết hợp và phân bố, nghĩa là:

{x[n]*h1[n]}*h2[n] = x[n]*{h1[n]*h2[n]}
x[n]*{h1[n] + h2[n]} = x[n]*h1[n] + x[n]*h2[n]

Nhân tiện đang nói đến chập tín hiệu, có thể giới thiệu định lý cửa sổ (windowing
theorem) ở đây. Khi xét mối quan hệ giữa các miền thời gian và tần số, chúng ta có thể
thấy chập của hai chuỗi rời rạc trong miền thời gian tương đương với nhân các đáp ứng
tần số của chúng trong miền tần số. Ngược lại, tích của hai chuỗi rời rạc trong miền thời
gian tương đương với chập các biến đổi Fourier của chúng:

Phân tích trong miền tần số

Xét trường hợp chuỗi vào x[n] có dạng hàm mũ phức x[n] = ejωdn. Ngõ ra của hệ được
tính bởi tổng chập:

Chúng ta định nghĩa:

và như vậy có thể biểu diễn ngõ ra như sau:


H(ejωd) bao gồm các thành phần biên độ và pha phụ thuộc tần số, và được coi là đáp ứng
tần số của hệ. Cần chú ý rằng đáp ứng tần số là một hàm liên tục và tuần hoàn, và đáp
ứng tần số được định nghĩa hoàn toàn trong phạm vi tần số −π ≤ ωd ≤ π.

Ví dụ về tính đáp ứng tần số: Tính đáp ứng tần số của hệ được biểu diễn bằng phương
trình sai phân sau: y[n] = 0.5x[n] + x[n−1] + 0.5x[n−2].

Về mặt toán học, đáp ứng xung cho bởi: h[n] = 0.5δ[n] + δ[n−1] + 0.5δ[n−2].

Do đó, đáp ứng tần số cho bởi:

Chúng ta tính phần biên độ và phần pha riêng biệt:

Vậy chúng ta có thể tính đáp ứng tần số của hệ nếu biết được đáp ứng xung. Đối với tín
hiệu rời rạc, chúng ta cũng có công cụ tương tự. Biến đổi Fourier của tín hiệu rời rạc cho
bởi:

Do đó, với cùng phép biến đổi, nếu chúng ta áp dụng cho tín hiệu x[n], chúng ta sẽ có các
thành phần tần số của tín hiệu, nếu chúng ta áp dụng cho đáp ứng xung h[n] của một hệ,
chúng ta sẽ đáp ứng tần số của hệ.

Phép biến đổi ngược là:

Để xác định mối quan hệ giữa các biến đổi Fourier của tín hiệu vào và ngõ ra của hệ,
chúng ta xét phép biến đổi Fourier của ngõ ra:

Thừa số thứ nhất chính là biến đổi Fourier của h[n], còn thừa số thứ hai, sau khi điều
chỉnh đôi chút, chính là biến đổi Fourier của x[n]. Như vậy:
Do vậy, chúng ta vừa chứng minh điều đã khẳng định trước đó, phép chập của đáp ứng
xung h[n] của một hệ với tín hiệu vào x[n] trong miền thời gian rời rạc là tương đương
với việc nhân các biến đổi Fourier x[n] và h[n] trong miền tần số.

Việc sử dụng trực tiếp những kết quả trên đôi khi gặp nhiều khó khăn trong thực tế, vì
việc biến đổi ngược Fourier để có được ngõ ra rời rạc trong miền thời gian không phải
lúc nào cũng nhanh và dễ thực hiện. Tuy nhiên, chúng ta hãy xét phương trình dùng để
lấy các thành phần tần số của tín hiệu.

Nếu chúng ta thay ejωd bằng z, chúng ta có:

Đây là định nghĩa tổng quát của phép biến đổi z. Thông thường, khi tín hiệu được xem là
chỉ xuất hiện khi n ≥ 0, chúng ta dùng phép biến đổi z đơn hướng (unilateral):

Do đó, chúng ta có:

Hơn nữa:

Y(z) = H(z)X(z)

nghĩa là có thể dùng bảng biến đổi z để tính H(z) và X(z), tìm tích của chúng, và dùng
bảng biến đổi z ngược để tìm chuỗi rời rạc y[n]. Phép biến đổi z ngược của tích hai chuỗi
đã được biến đổi z cho ta cùng kết quả như việc chập hai chuỗi trong miền thời gian rời
rạc. Cũng có thể thấy rõ là hàm truyền theo biến z của một hệ rời rạc là tương đương với
biến đổi Fourier của đáp ứng xung rời rạc.

Nếu cần đánh giá đáp ứng tần số, chúng ta thay z bằng ejωd, và đánh giá biên độ và pha
theo cách bình thường.
Biến đổi z là trường hợp tổng quát của biến đổi Fourier của chuỗi rời rạc trong miền thời
gian, giống như phép biến đổi Laplace là trường hợp tổng quát hóa của biến đổi Fourier
cho tín hiệu liên tục theo thời gian.

Để đánh giá đáp ứng tần số thuận tiện hơn, chúng ta có thể biến đổi thẳng từ hàm theo z
sang miền tần số tương tự, bằng cách thay z bằng ejωcT, với tần số tính bằng rad/s.

Phép biến đổi Fourier rời rạc-DFT

Theo cách tương tự như với tín hiệu liên tục theo thời gian, chúng ta có thể rút ra chuỗi
Fourier của tín hiệu rời rạc theo thời gian:

với N là số mẫu trong một chu kỳ của tín hiệu tuần hoàn rời rạc theo thời gian. Chú ý là
không giống với trường hợp tín hiệu liên tục theo thời gian, có vô số hệ số Ck, chuỗi
Fourier rời rạc chỉ có N hệ số, nghĩa là k = 0..N−1.

Việc biểu diễn các hệ số ra các thành phần biên độ và pha mang nhiều thông tin hơn.
Thành phần biên độ là có ích nhất trong việc thể hiện mức độ mà một tần số cụ thể có
mặt trong tín hiệu gốc, được tính bằng cách bình phương cả hai phần thực và ảo, sau đó
rút căn tổng các bình phương. Trục tần số được tính theo đơn vị Fs/N Hz, với Fs là tần số
lấy mẫu. Đối với phổ tần số có được, giá trị trung bình (giá trị dc) được nhân bởi N, và
các họa tần được nhân bởi N/2.

Cũng cần chú ý đến tính đối xứng của biên độ của các hệ số, với tín hiệu thực, chỉ cần
tính N/2 hệ số đầu tiên, phần còn lại là đối xứng với các hệ số này. N/2 hệ số đầu tiên là
đủ để xác định phổ của tín hiệu gốc. Lý do của việc chỉ có N hệ số được tính là bản chất
tuần hoàn chuỗi Fourier theo định nghĩa.

Về lý thuyết, phép biến đổi Fourier của một tín hiệu không tuần hoàn rời rạc luôn luôn
tạo ra phổ liên tục. Tuy nhiên, do tính phức tạp của việc định trị một hàm liên tục trên
một máy tính, phổ của phép biến đổi Fourier rời rạc (DFT-Discrete Fourier Transform)
được giả thiết là lấy từ chuỗi Fourier rời rạc của tín hiệu, và giả thiết rằng tín hiệu không
tuần hoàn gốc thực chất là một chu kỳ của một tín hiệu tuần hoàn, có chu kỳ vô cùng lớn.
Cụ thể, phổ liên tục của phép biến đổi Fourier của một tín hiệu rời rạc được xấp xỉ là Ck
tại các khoảng tần số rời rạc, với Ck là các hệ số của chuỗi Fourier rời rạc (giả thiết tín
hiệu không tuần hoàn là một chu kỳ của một tín hiệu tuần hoàn). Độ phân giải (khoảng
tăng tần số) là Fs/N, như được biểu diễn trong chuỗi Fourier rời rạc.

Do đó chúng ta xấp xỉ phép biến đổi Fourier của một tín hiệu rời rạc theo thời gian bằng
một tập các hệ số rời rạc, X(k), với:

Định nghĩa của DFT giả thiết dữ liệu lấy mẫu là một chuỗi tuần hoàn. Nếu dữ liệu lấy
mẫu không thực sự tuần hoàn, thông tin phổ tần số sẽ bị trải ra toàn bộ phạm vi tần số.
Không may là điều này thường xảy ra với các tín hiệu liên tục theo thời gian được lấy
mẫu không đủ chu kỳ. Tuy nhiên, chúng ta có các phương pháp khắc phục vấn đề này,
trong số đó có kỹ thuật cửa sổ (windowing).

Kỹ thuật cửa sổ là một phương pháp điều chỉnh dữ liệu có chiều dài hữu hạn để dữ liệu
trở nên thích hợp hơn nhiều cho xử lý số tín hiệu. Một cửa sổ mô tả một số hệ số nhân
được áp đặt vào các phần tử rời rạc của một chuỗi dữ liệu. Dạng cửa sổ đơn giản nhất là
cửa sổ chữ nhật (có tất cả các phần tử khác 0 là 1). Các phần tử của chuỗi dữ liệu cửa sổ
w[n] được nhân với các phần tử tương ứng của chuỗi dữ liệu có chiều dài hữu hạn x[n].
Kiểu dữ liệu này không thực sự có ích trừ khi cần cắt bỏ chuỗi dữ liệu.

Một cửa sổ hữu dụng hơn là cửa sổ Hanning (còn gọi là cửa sổ cosin nâng lên). Cửa sổ
Hanning được định nghĩa như sau:

Hiển nhiên, nhân một chuỗi dữ liệu với cửa sổ Hanning sẽ làm méo nghiêm trọng tín
hiệu. Tuy nhiên, từ quan điểm phân tích trong miền tần số, một cửa sổ như vậy sẽ làm dữ
liệu giống như tuần hoàn, nghĩa là không có sự gián đoạn đột ngột. Như vậy các vấn đề
liên quan đến việc rò phổ có thể được giảm đi.

Một cửa sổ thông dụng khác là cửa sổ Hamming, một biến thể của cửa sổ Hanning, được
định nghĩa như sau:

Cửa sổ Hamming nhìn chung cho kết quả tốt hơn cửa sổ Hanning, mặc dù nó hơi phức
tạp hơn khi tính toán. Ngoài ra còn một số cửa sổ khác như Blackman, và Kaiser, có
những cải thiện hơn nữa và càng phức tạp hơn khi tính toán.
Một điểm cần chú ý là tuy các cửa sổ cải thiện vấn đề rò phổ bằng cách làm giảm kích
thước của side-lobe trong phổ tần số của chúng, nhưng chúng lại làm giảm độ phân giải
phổ. Điều này xảy ra vì các cửa sổ phức tạp thường có main-lobe của phổ tần số của
chúng rộng hơn main-lobe của cửa sổ chữ nhật, và như vậy có khuynh hướng làm nhòe
thành phần phổ trội lên. Khi phân biệt các thành phần tần số gần nhau, điều này sẽ gây
khó khăn rất nhiều.

Như vậy, việc dùng cửa sổ thường đòi hỏi một sự thỏa hiệp giữa việc chọn cửa sổ có
side-lobe nhỏ để giảm rò phổ, và cửa sổ có main-lobe nhỏ để có được độ phân giải tần số
tốt bằng cách giảm sự nhòe phổ.

Phép biến đổi Fourier nhanh-FFT

Mặc dù một cách lý tưởng thì chúng ta muốn tính biến đổi Fourier của tín hiệu rời rạc,
nhưng sẽ dễ dàng hơn nếu chúng ta giả thiết chuỗi dữ liệu rời rạc là 1 chu kỳ của một
chuỗi tuần hoàn, và hệ quả là chúng ta tính chuỗi Fourier rời rạc của tín hiệu. Cách xử lý
này có ích vì, mặc dù chỉ cho thấy đường bao của phổ thực của tín hiệu, phép biển đổi
DFT có thể được tính toán dễ dàng hơn nhiều trên một máy tính.

Có lẽ DFT được sử dụng rộng rãi nhất trong tất cả các thuật toán DSP và từ những năm
1960 đã có nhiều kỹ thuật được phát triển để tính DFT một cách hiệu quả hơn. Những
thuật toán này, được gọi là những phép biến đổi Fourier nhanh-FFT (Fast Fourier
Transform), lợi dụng một thực tế là một số phép toán dùng để tính các hệ số DFT được
lặp lại nhiều lần. Do đó, với một chút cẩn thận, chúng ta có thể nhận diện các phép toán
lặp lại này, tính chúng một lần, và dùng lại kết quả khi cần thiết. Những kỹ thuật dùng
trong FFT sẽ không được đề cập ở đây, chúng ta chỉ xem xét thử những phép toán thừa
khi tính DFT qua một ví dụ để hiểu rõ hơn vấn đề.

Xét một chuỗi rời rạc theo thời gian x[n], có 8 điểm, nghĩa là N = 8. Các hệ số của phổ
được cho bởi:

với WN = e−j2π/N. Với DFT cơ bản, chúng ta sẽ phải tính WNkn cho mỗi giá trị k và n. Tuy
nhiên, nếu xem xét WNkn kỹ hơn thì chúng ta chỉ có N (=8) giá trị khác nhau, bất chấp giá
trị của k và n, do tính chất của hàm mũ phức WN.

Do đó, các thuật toán FFT chỉ tính các giá trị trên một lần, và dùng kết quả ở những vị trí
thích hợp, và giảm được số phép toán cần thực hiện rất nhiều. Lấy ví dụ cụ thể, với N =
1024, DFT cần 1047552 phép cộng phức và 1048576 phép nhân phức, trong khi FFT cần
10240 phép cộng phức và 5120 phép nhân phức. Khi chiều dài mẫu N càng lớn, ưu thế
của FFT so với DFT càng thể hiện rõ.
Phần này chỉ nói đến những vấn đề cơ bản trong xử lý số tín hiệu, các phương pháp thiết
kế mạch lọc số (ứng dụng rộng rãi nhất của DSP) sẽ được giới thiệu qua những ví dụ cụ
thể cho các dòng chip khác nhau.

You might also like