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à:
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:
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:
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à:
−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:
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):
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:
Đố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:
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:
Phép biến đổi ngược là:
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.
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:
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.
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:
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:
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:
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:
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.
Đăng nhận xét