Các phương thức trao đổi dữ liệu

Một phần của tài liệu thiết kế phần mềm thiết bị đo và hiển thị dạng sóng lên màn hình máy tính (Trang 30 - 86)

Trong giao thức USB gồm có bốn phương thức trao đổi dữ liệu giữa các thiết bị và host. Mỗt pipe chỉ hỗ trợ một trong bốn kiểu truyền sau tại một thời điểm:

Control Transfer (Truyền điều khiển): Được dùng để cấu hình một thiết bị

và có thể sử dụng cho các mục đích khác như điều khiển các pipe khác trong thiết bị.

Bulk Data Transfer (Truyền dữ liệu trọng tải lớn): Nhận hoặc gửi một

lượng số liệu lớn, theo khối (burst) mà không có giới hạn thời gian truyền (truyền trong bao lâu cũng được miễn sao là đến được đích).

Interrupt Data Transfers (Truyền dữ liệu gián đoạn): Được sử dụng cho dữ

liệu cần nhận đúng thời điểm và có độ tin cậy. Ví dụ: chuột, game pad…

Isochoronous Data Transfers (truyền dữ liệu thời gian thực): Giữ và dàn

xếp trước (prenegotiated) một số băng thông USB với một hệ thống phân phát ngầm thỏa thuận trước (prenegotiated delivery latency). Dữ liệu được truyền liên tục và có thời gian thực trong quá trình tạo ra, phân phát và tiêu thụ. Ví dụ: Dữ liệu audio, video…

2.3.6.1 Control transfer.

Truyền CONTROL được sử dụng để ra lệnh và điều khiển trạng thái của thiết bị.Chúng ta có thể dễ dàng cài đặt thiết bị USB với các hàm khởi tạo nhờ sử dụng truyền CONTROL. Các gói tin ở dạng chuẩn và tuỳ theo từng tốc độ mà kích thước các gói tin khác nhau: ở low-speed là 8 byte, ở full-speed là 64 byte, còn ở high-speed là 8, 16, 32, hoặc 64 byte.

Truyền CONTROL hoạt động theo 3 giai đoạn:

Setup stage: Dùng để gửi yêu cầu với 3 gói tin được gửi:

Trước tiên, host gửi token packet bao gồm địa chỉ thiết bị và số Endpoint. Sau đó data packet được gửi với kiểu PID của DATA0 và bao gồm 1 setup packet mô tả chi tiết của yêu cầu. Function nhận dữ liệu, kiểm tra CRC, nếu đúng sẽ gửi handshake packet là ACK. Nếu data Packet có lỗi, function sẽ bỏ qua mà ko gửi lại handshake packet.

Data stage: Có hướng truyền IN hoặc OUT. Setup packet sẽ xác định tổng

số dữ liệu được truyền trong giai đoạn này. Nếu dữ liệu vượt quá kích thước gói tin lớn nhất, nó sẽ được chia thành các gói tin bằng với gói tin có kích thước lớn nhất, trừ gói tin cuối có thể bằng hoặc nhỏ hơn. Data stage có 2 hướng truyền dữ liệu:

IN: Khi host đã sẵn sàng nhận dữ liệu, nó gửi một IN token packet.

Function nhận IN token packet, nếu có lỗi sẽ bỏ qua. Nếu không có lỗi function sẽ truyền data packet bao gồm dữ liệu điều khiển được truyền, gói STALL khi có lỗi dữ liệu hoặc gói NAK khi bộ đệm của Endpoint trống (không có dữ liệu để truyền). Host nhận dữ liệu, nếu đúng sẽ gửi lại ACK, có lỗi sẽ bỏ qua.

Hình 2.12 Truyền IN data stage

xử lý gói tin trước đó, function sẽ gứi lại NAK. Nếu Endpoint có lỗi thì function gửi lại STALL.

Hình 2.13 Truyền OUT data stage

Status stage: Báo cáo tình trạng của toàn bộ các yêu cầu và cũng có 2 hướng truyền. Chú ý: Các báo cáo luôn được gửi bởi host.

IN: Nếu host gửi IN token trong giai đoạn data stage, sau đó host phải biết

dữ liệu được nhận thành công (do khi truyền IN token bị lỗi thì function sẽ bỏ qua). Việc này được host thực hiện bằng cách gửi OUT token theo sau bởi gói dữ liệu gồm một dãy toàn số 0. Function sẽ trả lời qua handshake packet: ACK xác định function đã nhận thành công yêu cầu và sẵn sàng nhận yêu cầu tiếp theo, STALL: Nếu có lỗi trong quá trình xử lý yêu cầu, NAK: Nếu function đang bận và để thong báo cho host truyền lại status stage.

Hình 2.14 Truyền IN status stage

OUT: Nếu host gửi OUT token trong giai đoạn data stage, để biết function có nhận được thành công hay không host sẽ gửi gói tin IN token, function sẽ báo dữ liệu được nhận thành công OUT token bằng cách gửi một gói toàn số 0 để trả lời IN token. Tuy nhiên, nếu có lỗi, nó sẽ gửi STALL hoặc nếu đang bận xử lý dữ liệu, nó sẽ gửi NAK yêu cầu host lặp lại status stage.

Hình 2.15 Truyền OUT status stage

2.3.6.2 Bulk transfer.

Bulk transfer được sử dụng cho dữ liệu trọng tải lớn, ví dụ: một tài liệu được gửi vào máy in hoặc ảnh scan tạo ra từ máy quét. Truyền BULK cho phép sửa lỗi dùng mã CRC 16 trong data packet và có cơ chế phát hiện lỗi / truyền lại, đảm bảo chắc chắn dữ liệu được truyền và nhận không có lỗi. Truyền BULK sẽ sử dụng khoảng băng thông dư trên bus sau khi tất cả các kiểu truyền khác được dùng. Nếu bus đang bận truyền dữ liệu ISOCHRONOUS và/hoặc INTERRUPT thì dữ liệu BULK sẽ được truyền sau (mức ưu tiên kém nhất). Do dó, truyền BULK được sử dụng trong trường hợp không yêu cầu thời gian thực và băng thông truyền.

BULK IN: Khi host sẵn sàng nhận BULK data, nó gửi IN token. Nếu (adsbygoogle = window.adsbygoogle || []).push({});

function nhận IN token có lỗi, nó sẽ bỏ qua. Nếu token không có lỗi, function sẽ thực hiện truyền data packet chứa BULK data, hoặc gửi STALL khi Endpoint có lỗi, hay gửi NAK xác định bộ đệm của Endpoint không có dữ liệu để truyền .

Hình 2.16 Truyền BULK IN

BULK OUT: Khi host muốn truyền một BULK data packet, nó gửi OUT

token, tiếp theo là data packet chứa BULK data. Nếu OUT token hoặc data packet có lỗi, function sẽ bỏ qua. Nếu bộ đệm của Endpoint trống, dữ liệu được nhận và function gửi lại ACK. Nếu bộ đệm đang bận, function sẽ gửi NAK. Còn nếu Endpoint có lỗi, function sẽ gửi lại STALL.

Hình 2.17 Truyền BULK OUT

2.3.6.3 Interrupt transfer.

Trong USB, khi thiết bị yêu cầu sự chú ý của host, nó phải đợi cho đến khi host poll (thăm dò) nó trước. Sau đó nó mới thông báo yêu cầu được sự chú ý

của host. Kích thước dữ liệu lớn nhất đối với thiết bị low-speed là 8 byte, full- speed là 64 byte và high-speed là 1024 byte.

* Truyền INTERRUPT cũng có hai kiểu truyền: IN và OUT.

Hình 2.18 Hai kiểu truyền IN và OUT INTERRUPT

IN INTERUPT: Host sẽ poll định kỳ đối với INTERRUPT Endpoint. Tốc độ poll được mô tả trong Endpoint descriptor. Mỗi poll là một lần host gửi IN token. Nếu IN token lỗi, function sẽ bỏ qua và tiếp tục theo dõi bus chờ IN token mới. Nếu có một ngắt được yêu cầu bởi thiết bị, function sẽ gửi một data packet chứa ngắt đó khi nó nhận được một IN token. Nếu host nhận thành công, nó sẽ gửi lại ACK. Nếu data packet bị mất thì host không làm gì. Nếu một yêu cầu ngắt chưa sẵn sàng khi host gửi một IN token để thăm dò, function sẽ gửi lại NAK. Nếu Endpoint có lỗi, function sẽ gửi lại STALL.

Nếu bộ đệm đang bận, nó sẽ gửi lại NAK. Còn nếu Endpoint lỗi, nó sẽ gửi lại STALL.

2.3.6.4 Isochronous transfer.

Isochronous transfer: Được sử dụng cho các yêu cầu dữ liệu liên tục và theo thời gian thực, ví dụ: Audio, video…, Kiểu truyền này có phát hiện lỗi nhưng không sửa lỗi, phần mềm phải có khả năng phát hiện và sửa lỗi. Kích thước gói tin lớn nhất là 1023 byte đối với full-speed, 1024 byte đối với high-speed. Dữ liệu được chia nhỏ và có thể thay đổi kích thước phụ thuộc vào băng thông để hạn chế lỗi đến mức tối thiểu.

Hình 2.19 Truyền IN và OUT ISOCHRONOUS

Host gửi IN hoặc OUT token, sau đó gửi tiếp Data Packet (trong OUT Isochronous) hoặc nhận data Packet (trong IN Isochronous). Không có handshake packet.

CHƯƠNG 3: PHẦN MỀM 3.1 Lý thuyết chung

3.1.1 Phương pháp xây dựng đường cong.

Với 1 đường cong ( ), qua N điểm xác định (xi, yi) với i = 1 N. Yêu cầu

vẽ lại đường cong ( ) từ N điểm đã biết ở trên 1 cách tương đối chính xác.

Hướng giải quyết: Ta xây dựng lại đường cong ( ’) tương đối giống với

đường cong ( ). Với yêu cầu của bài toán ra ta có thể có các phương pháp như sau: phương pháp nội suy Newton, nối suy Lagrange, phương pháp bình phương tối thiểu. Đó là các phương pháp hay sử dụng khi giải quyêt các bài toán về nội suy đường cong.

3.1.1.1 Phương pháp nội suy Lagrange.

Trong thực tế nhiều khi phải phục hồi một hàm y=f(x) tại mọi giá trị x trong một đoạn [a,b] nào đó mà chỉ biết một số nhất định các giá trị của hàm tại một số điểm cho trước. Các giá trị này được cung cấp qua thực nghiệm hay tính toán, vì vậy nảy sinh vấn đề toán học là trên một đoạn a ≤ x ≤ b cho một loạt các điểm xi(i=0,1,2…) và tại các điểm xi này giá trị của hàm là yi=f(xi) đã biết. Bây giờ ta

Sao cho Pn(xi)=f(xi)=yi . Đa thức Pn(x) được gọi là đa thức nộ suy của hàm y=f(x). Ta chọn đa thức để nội suy hàm y=f(x) là loại hàm đơn giản luôn có đạo hàm và nguyên hàm, việc tính toán của nó theo thuật toán Homer cũng đơn giản

Bây giờ ta xây dựng đa thức nội suy kiểu Lagrange. Gọi L là đa thức:

= (3.2) (adsbygoogle = window.adsbygoogle || []).push({});

Rõ ràng Li(x) là đa thức bậc n và:

(3.3) Ta gọi đa thức này là đa thực Lagrange cơ bản.

Bây giờ ta xét biểu thức: (5.4)

(3.4)

Ta thấy ( ) là một đa thức bậc b vì các Li(x) là các đa thức bậc n và thỏa

mãn điều kiện ( ) =f(xi) = yi . Ta gọi nó là đa thức nội suy Lagrange Với n=1 ra có bảng:

= =

Như vậy là một đa thức bậc nhất đối với x. Với n=2 ta có bảng

x y

Đa thức nội suy sẽ là:

=

= Là đa thức bậc 2 đối với x.

Tương tự như vậy với các hệ số n ta có đa thức là đa thức n đối với x.

3.1.1.2 Phương pháp nội suy Newton.

Xét một cách khác để xây dựng đa thức nội suy là gọi phương pháp Newton. Trước hết đưa ra một khái niệm gọi là tỷ hiệu;

Giả sử hàm y=y(x) có các giá trị cho trong bảng sau:

Tỉ hiệu cấp 1 của y tại xi, xj là:

= (3.5)

Tỉ hiệu cấp hai của y tại xi, xj, xk là:

= (3.6)

v.v.

= (3.7)

Là một đa thức tỷ hiệu cấp 2 tại x, x0, x1:

= (3.8)

Là mootn đa thức bâc (n-2) v.v.. và tới tỉ hiệu cấp n+1 thì: Pn[x, x0,.., xn ]=0

Từ định nghĩa tỷ hiệu ta suy ra:

…………..

Do Pn[x, x0,.., xn ]=0 nên từ đó ta có:

+ +…

Pn(xi)=f(xi)=yi với i=0÷n. (adsbygoogle = window.adsbygoogle || []).push({});

Do đó tỷ hiệu từ cấp 1 đến cấp n của Pn và của y là trùng nhau và như vậy ta có:

+ +…

(3.10)

Đa thức này gọi là đa thức nội suy Newton tiến xuất phát từ nút x0 của hàm y= f(x). Ngoài đa thức tiến còn có đa thức nội suy Newton lùi xuất phát từ điểm xn vó dạng như sau:

+ +…

(3.11)

Trường hợp các nút cách đều thì xi = x0 +ih với i=0, 1,.., n. Ta gọi sai phân cấp tiến cấp 1 tại i là:

yi = yi+1 - yi

Sai phân cấp tiến cấp 2 tại i:

2yi = ( yi) = yi+2 -2yi+1 + yi

…………..

nyi = ( n-1yi) (3.12) Khi đó ta có: = = …. =

Bây giờ đặt x=x0 + ht trong đa thức Newton tiến ta được:

t + +…+ (3.13)

Thì ta nhận được đa thức Newton tiến xuất phát từ xn trong trường hợp nút cách đều. Với n=1 ta có:

Một cách tương tự ta có khái niệm các sai phân lùi tại i: = -

= - +

………

Và đa thức nội suy Newton lùi khi các điểm nội suy cách đều:

t + +…+ (3.14)

3.1.1.3 Xấp xỉ hàm bằng phương pháp bình phương tối thiểu.

Trong các mục trước ta đã nội suy giá trị vủa hàm. Bài toán đó là cho một hàm dưới dạng bảng số và phải tìm giá trị của hàm tại một giá trị của số không nằm trong bảng.

Phương pháp này cho phép ta tìm một xấp xỉ hàm từ các giá trị đã cho, giả sử ta có mẫu (xi, yi) của hàm y= f(x). Ta chọn hàm f(x) có dạng:

f(x) = a0f0(x) + a1f1(x) + a2f2(x)….. (3.15)

Trong đó các hàm f0(x), f1(x), f2(x) .v.v. là (m+1) hàm độc lập tuyến tính mà ta có thể chọn tùy ý và các hệ số ai là tham số chưa biết mà ta phải xác định dựa vào hệ hàm đã chọn và các điểm quan sát. Sai số giữa giá trị mẫu và trị tính theo công thức trên là:

Sai số này có thể âm hay dương tùy từng giá trị của yi, khi dùng phương pháp bình phương tối thiểu ta xét bình phương của sai số tại một điểm:

ei2 = [yi - f(xi) ]2 (3.17) Với n điểm tổng bình phương của sai số sẽ là:

S = = + +…+ (3.18)

Rõ ràng S là hàm của các giá trị cần tìm ai, và chúng ta sẽ chọn các ai sao cho S đạt giá trị min, nghĩa là các đạo hàm

ai S ∂ ∂ phải bằng không. Ta xét các trường hợp hàm cụ thể. a. Xấp xỉ hàm có dạng đa thức. (adsbygoogle = window.adsbygoogle || []).push({});

Trong trường hợp tổng quát ta chọn hệ hàm xấp xỉ là một đa thức, nghĩa là f(x) = a0 + a1x + +a2x2 +…+ amxm

(3.19) Vậy hàm S là:

S = (yi -a1x + +a2x +…+ amx)2 (3.20) Theo điều kiệm đạo hàm

ai S ∂ ∂ =0 ta nhận được hệ phương trình: am +am-1 am +am-1

……….

am +am-1

Đây là một hệ phương trình tuyến tính, Giải nó ta nhận được các giá trị ai.

b. Hàm dạng Aecx.

Khi các mẫu thể hiện một sự biến đổi đơn điệu ta dùng hàm xấp xỉ là y= Aecx, lấy logarit hai vế ta có:

lny= lnA+ cxlne (3.22)

Theo điều kiện đạo hàm =0 ta có hệ phương trình:

Giải hệ phương trình này ta có các hệ số A và c.

c. Hàm lượng giác.

Khi quan hệ y= f(x) có dạng tuần hoàn ta dùng hàm xấp xỉ là tổ hợp tuyến tính của các hàm sin và cosin dạng:

f(x)=

f(x)=a0 + a1cos x +b1sin x Hàm S sẽ có dạng:

S

Theo điểu kiện đạo hàm triệt tiêu ta có hệ phương trình đối với các hệ số dạng:

= Do:

Giải hệ ta tìm được

Trong trường hợp tổng quát, một cách tương tự ta có:

d. Hàm hữa tỉ.

Khi quan hệ y=f(x) có dạng đường cong bão hòa hay dạng arctan, tan .v.v. ta dùng hàm xấp xỉ là hàm hữu tỉ dạng đơn giản:

Y= (3.25) Lấy nghịch đảo của nó ta có:

= +

Đặt 1/y=Y, 1/x=X, b/a=B và 1/a=A phương trình trên có dạng: Y = A + BX

Và là một đa thức bậc một, do vậy ta có hệ phương trình đối với các hệ số A và B là:

3.1.2 Phân tích phổ tín hiệu.

3.1.2.1. Biến đổi Fourier rời rạc.

Với dãy {x(n)} có độ dài hữu hạn là L(x(n)=0 với n<0 và n ) ta có biến đổi fourier: (adsbygoogle = window.adsbygoogle || []).push({});

X( ) = Với 0

Việc phân tích tín hiệu rời rạc theo thời gian trong miền tần số thường được thực hiện rất hiệu quả và tiện lợi bằng bộ vi xử lý tín hiệu số. Bộ vi xử lý này có thể là máy tính được sử dụng cho các mục đích chung hoặc là một thiết bị số chuyên dụng. Để thực hiện việc phân tích này, tín hiệu rời rạc theo thời gian {x(n)} cần được chuyển từ miền thời gian sang miền tần số tương ứng thông qua biến đổi Fourier X (ω) của dãy. Tuy vậy, do X (ω) là hàm liên tục của biến tần số nên có thể thấy việc xử lý bằng máy tính của cách biểu diễn này là không thuận tiện.

Để tránh nhược điểm nêu trên có thể đưa ra một cách biểu diễn khác của {x(n)} biểu diễn thông qua việc lấy mẫu phổ X (ω) của tín hiệu tại N tần số cách

đều nhau: k , k=0,1,.., N-1 với N

Các mẫu nhận được là: X(k)= X(2 k/N) =

Đặt = khi đó

X(k) =

Như vậy, từ biểu diễn của tín hiệu trong miền tần số liên tục ta đã đưa đến biến đổi Fourier rời rạc (DFT). Biến đổi này là một công cụ rất hiệu quả trong việc phân tích các tín hiệu rời rạc theo thời gian.

x(n)=x(n+LN) với L là số nguyên

Ta có định nghĩa biến đổi Fourier rời rạc của dãy tuần hoàn x(n):

Đặt =

Viết lại biểu thức của biến đổi Fourier rời rạc:

X(k)= (3.31)

3.1.2.2 Biến đổi Fourier nhanh phân thời gian.

a. Định nghĩa.

Thuật toán tính nhanh biến đổi Fourier rời rạc dựa trên việc phân dãy x(n) thành các dãy con có chiều dài ngắn hơn được gọi là thuật toán biến đổi Fourier

Một phần của tài liệu thiết kế phần mềm thiết bị đo và hiển thị dạng sóng lên màn hình máy tính (Trang 30 - 86)