Xem mẫu
- 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.
nguon tai.lieu . vn