1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

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

Thảo luận trong 'Mạng máy tính-Viễn thông' bắt đầu bởi small ant, 5 Tháng tám 2011.

  1. small ant Well-Known Member

    Số bài viết: 2,827
    Đã được thích: 88
    Điểm thành tích: 48
    Giới tính: Nữ
    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à:
    [IMG]
    Giá trị hiệu dụng (rms) của nhiễu lượng tử hóa là:
    [IMG]
    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à:
    [IMG]
    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:
    [IMG]
    Tỷ số (công suất) giữa tín hiệu và nhiễu lượng tử hóa SQNR do đó sẽ là:
    [IMG]
    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:
    [IMG]
    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à:
    [IMG]
    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à:
    [IMG]
    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:
    [IMG]
    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:
    [IMG] cùng với các phần tử:
    [IMG]
    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:
    [IMG]
    Với hàm mũ phức:
    [IMG]
    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à:
    [IMG]
    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:
    [IMG]
    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:
    [IMG]
    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):
    [IMG]
    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:
    [IMG]
    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ó:
    [IMG]
    Các hệ số Cn được tính bởi:
    [IMG]
    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:
    [IMG]
    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:
    [IMG]
    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:
    [IMG]
    Chúng ta định nghĩa:
    [IMG]
    và như vậy có thể biểu diễn ngõ ra như sau:
    [IMG]
    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:
    [IMG]
    Chúng ta tính phần biên độ và phần pha riêng biệt:
    [IMG] [IMG]
    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:
    [IMG] 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à:
    [IMG]
    Để 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:
    [IMG] 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:
    [IMG]
    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.
    [IMG]
    Nếu chúng ta thay ejωd bằng z, chúng ta có:
    [IMG]
    Đâ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):
    [IMG]
    Do đó, chúng ta có:
    [IMG]
    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:
    [IMG]
    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.
    [IMG]
    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:
    [IMG]
    Đị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:
    [IMG]
    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:
    [IMG]
    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:
    [IMG]
    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.
    ngocyeu87 thích bài này.

Chia sẻ trang này