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

107 9 0
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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - NGUYỄN TRƯỜNG THỌ ĐỀ TÀI: 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 LUẬN VĂN THẠC SỸ NGÀNH: ĐIỆN TỬ-VIỄN THÔNG NGƯỜI HƯỚNG DẪN KHOA HỌC: PHẠM VĂN BÌNH HÀ NỘI – 2008 MỤC LỤC LỜI NÓI ĐẦU Error! Bookmark not defined CHƯƠNG 1: TỔNG QUAN VỀ OSCILLO VÀ PC OSCILLO .Error! Bookmark not defined 1.1 Giới thiệu chung Error! Bookmark not defined 1.1.1 Oxilo tương tự Error! Bookmark not defined 1.1.2 Oxilo điện tử số Error! Bookmark not defined 1.2 Tổng quan PC Oscillo Error! Bookmark not defined CHƯƠNG GIỚI THIỆU CHUNG VỀ USB Error! Bookmark not defined 2.1 Giới thiệu Error! Bookmark not defined 2.2 Kiến trúc tổng quan hệ thống USB.Error! Bookmark not defined 2.2.1 Host: Error! Bookmark not defined 2.2.2 Thiết bị USB: Error! Bookmark not defined 2.2.3 Mơ hình Bus vật lý Error! Bookmark not defined 2.2.4 Mơ hình Bus logic Error! Bookmark not defined 2.2.5 Mối quan hệ Client software function.Error! Bookmark not defined 2.2.6 Luồng liệu USB Error! Bookmark not defined 2.3 Kiến trúc chi tiết Error! Bookmark not defined 2.3.1 Dây cáp USB Error! Bookmark not defined 2.3.2 USB Connecter Error! Bookmark not defined 2.3.3 Đặc tính điện Error! Bookmark not defined Phụ lục 1: Giao diện phần mềm Phụ lục 2: Mã nguồn thuật toán smooth Public Sub smooths(ByRef dsx1() As Long, dsy() As Long, ByVal dem1 As Long, ByVal color As ColorConstants) Dim kt As Boolean Dim dsy1(1000) As Long Dim i As Long Dim TG1 As Long Dim TG2 As Long Dim ofset As Long Dim tgtg1, tgtg2 As Long Dim tgtgt As Long Dim d As Long Dim batdongbo As Boolean Dim moi As Double Dim moi1 As Double Dim J As Long Dim bien As Double If chuky < And chuky > Then d = Int(4 / chuky) bien = - d * chuky If bien Then bien = chuky / bien bien = chuky / bien / Else bien = End If Else bien = End If If redraw = True Then moi = gain * voltdiv moi1 = timediv * * bien tgtgt = 4500 Else moi = gain * * voltdiv moi1 = timediv * * bien tgtgt = 9000 End If For i = To dem1 dsx1(i) = 120 + (i - 1) * moi1 dsy1(i) = frmMain.sld6.value - moi * dsy(i) Next If (Not frmMain.optr.value) And (Not frmMain.optf.value) Then batdongbo = True End If TG1 = TG2 = Do While (TG2 < dem1) If dsy1(TG1) = dsy1(TG2) Then kt = True Else kt = False End If If kt Then Do While (TG2 < dem1) If dsy1(TG2) = dsy1(TG2 + 1) Then TG2 = TG2 + Else Exit Do End If Loop If TG2 - TG1 < Then For i = dsx1(TG1) To dsx1(TG2) If i - ofset < tgtgt And i - ofset > 120 Then If TG1 > Then If TG2 < dem1 Then d = fx(dsy1(), dsx1(), TG1 - 1, TG2 + 1, i) Else d = fx(dsy1(), dsx1(), TG1 - 1, TG2, i) End If Else d = fx(dsy1(), dsx1(), TG1, TG2 + 1, i) End If If d = triggery And Not batdongbo Then If TG1 = Then tgtg1 = fx(dsy1(), dsx1(), TG1, TG2 + 1, i - 1) tgtg2 = fx(dsy1(), dsx1(), TG1, TG2 + 1, i + 1) Else If TG2 < dem1 Then tgtg1 = fx(dsy1(), dsx1(), TG1 - 1, TG2 + 1, i - 1) tgtg2 = fx(dsy1(), dsx1(), TG1 - 1, TG2 + 1, i + 1) Else tgtg1 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i - 1) tgtg2 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i + 1) End If End If If (frmMain.optr.value And d > tgtg2 And d < tgtg1) Or (frmMain.optf.value And d < tgtg2 And d > tgtg1) Then ofset = i - 120 batdongbo = True End If End If If d > 120 And d < tgtgt And batdongbo Then frmMain.Picture1.PSet (i - ofset, d), color End If End If Next Else If Not batdongbo And ((frmMain.optf.value And triggery < dsy1(TG2) And triggery > dsy1(TG1)) Or (frmMain.optr.value And triggery > dsy1(TG2) And triggery < dsy1(TG1))) Then ofset = dsx1(TG1) + (dsy1(TG1) - triggery) * (dsx1(TG2) dsx1(TG1)) / (dsy1(TG1) - dsy1(TG2)) - 120 batdongbo = True End If If batdongbo Then frmMain.Picture1.Line (dsx1(TG1) - ofset, dsy1(TG1))-(dsx1(TG2) - ofset, dsy1(TG2)), color End If End If ' TG1 = TG2 TG2 = TG2 + ' Else ' Do While (TG2 - TG1 120 Then If TG1 > Then If TG2 < dem1 Then d = fx(dsy1(), dsx1(), TG1 - 1, TG2 + 1, i) Else d = fx(dsy1(), dsx1(), TG1 - 1, TG2, i) End If Else d = fx(dsy1(), dsx1(), TG1, TG2 + 1, i) End If If d = triggery And Not batdongbo Then If TG1 = Then tgtg1 = fx(dsy1(), dsx1(), TG1, TG2 + 1, i - 1) tgtg2 = fx(dsy1(), dsx1(), TG1, TG2 + 1, i + 1) Else If TG2 < dem1 Then tgtg1 = fx(dsy1(), dsx1(), TG1 - 1, TG2 + 1, i - 1) tgtg2 = fx(dsy1(), dsx1(), TG1 - 1, TG2 + 1, i + 1) Else tgtg1 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i - 1) tgtg2 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i + 1) End If End If If (frmMain.optr.value And d > tgtg2 And d < tgtg1) Or (frmMain.optf.value And d < tgtg2 And d > tgtg1) Then ofset = i - 120 batdongbo = True End If End If If d > 120 And d < tgtgt And batdongbo Then frmMain.Picture1.PSet (i - ofset, d), color End If End If Next Else For i = dsx1(TG1) To dsx1(TG2) If i - ofset < tgtgt And i - ofset > 120 Then If TG1 > Then If TG2 < dem1 Then d = fx(dsy1(), dsx1(), TG1 - 1, TG2 + 1, i) Else d = fx(dsy1(), dsx1(), TG1 - 1, TG2, i) End If Else d = fx(dsy1(), dsx1(), TG1, TG2 + 1, i) End If If d = triggery And Not batdongbo Then Luận văn cao học 66 - Tổng số mẫu nhóm nhỏ N (đảm bảo tốc độ thuật toán) Sau tiến hành chia mẫu thành nhóm loại I II, tiến hành khơi phục tín hiệu với nhóm sau: b.2, Hiển thị Đối với nhóm II: - Số mẫu nhóm 2: ( x i , y i) , ( x i +1, y i +1) Khôi phục điểm nằm ( x i , x i +1) theo trục thời gian cách nội suy từ: +, ( x i , y i) , ( x i +1, y i +1) ( x i + , y i + 2) với i = +, ( x i −1, y i −1) , ( x i , y i) ( x i +1, y i +1) với < i ≤ N – - Số mẫu nhóm lớn 2: ( x i , y i) , , ( x q , y q ) Khôi phục điểm nằm xi xq theo trục thời gian cách nội suy điểm ( x i , y i) , , ( x q , y q ) Đối với nhóm I: - Nếu số mẫu nhóm 2: ( x i , y i) , ( x i +1, y i +1) Khôi phục điểm nằm (xi, xi+1) theo trục thời gian cách nội suy từ điểm: +, ( x i , y i) , ( x i +1, y i +1) ( x i + , y i + 2) Với: i + +, ( x i −1, y i −1) , ( x i , y i) ( x i +1, y i +1) Với: i + = N Nguyễn Trường Thọ N USB-Osilloscope Luận văn cao học 67 Nếu số mẫu nhóm lớn 2: ( x i , y i) , , ( x q , y q ) Khôi phục điểm nằm xi xq theo trục thời gian cách nối đường thẳng từ điểm: ( x i , y i) , ( x i +1, y i +1) , , ( x q , y q ) Phương pháp nội suy sử dụng phương pháp 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 nói b.3, Lưu đồ thuật tốn CalType(i,j) = 1: delta(i,j) < A = 2: delta(i,j) >=A Delta(i,j) : Hệ số góc điểm i j Delta(i,j) = yi − y j xi − x j Draw(i,j,type): vẽ nội suy điểm từ xi ÷ xj theo : - Nếu Type=1 nội suy theo lagrange - Nếu Type=2 nối điểm từ i ÷ j Nguyễn Trường Thọ USB-Osilloscope 68 Luận văn cao học Hình 3.7 Lưu đồ thuật tốn Smooth c, Thuật tốn Smooth_add Hình 3.9 Lưu đồ thời gian xử lý Nguyễn Trường Thọ USB-Osilloscope 69 Luận văn cao học Giữa lần lấy mẫu khoảng thời gian dành cho việc chuyển giao xử lý.Khoảng thời gian khác số nguyên lần chu kỳ lấy mẫu, hiển thị hình tín hiệu hay nhiều lần hiển thị dạng tín hiệu hình Mặt khác sau dồn pha hiển thị chu kỳ, phải tiến hành nhân dán chu kỳ để hiển thị đầy đủ hình Để giải vấn đề có cách thức: Cách thức 1: cắt bỏ phần tín hiệu lần hình sau: Hình 3.10 Cắt bỏ phần tín hiệu Điểm cắt điểm cuối có biên độ có đạo hàm dấu với nhau, có nghĩa tăng hay giảm Cách thức 2: Thêm phần tín hiệu vào đầu tín hiệu (n + 1) Hình 3.11 Thêm phần tín hiệu Nguyễn Trường Thọ USB-Osilloscope 70 Luận văn cao học Cách thức 3: Nhân tín hiệu khơi phục lần lấy mẫu để hiển thị đầy khung hình Hình 3.12 Nhân tín hiệu Nhìn hình vẽ cho thấy T phần tín hiệu nội suy lần lấy mẫu T1 phần T, cắt theo nguyên tắc sau: Xác định điểm đầu tiên, tính từ bên trái T, đồng pha với điểm cuối T Sau xác định điểm đó, phần cịn lại tín hiệu T tính từ điểm tìm Sau tính phần T1 tiến hành nhân phần tín hiệu điền đầy cửa sổ hiển thị Trong luận văn sử dụng cách thức hai ba cho việc hiển thị dạng tín hiệu Vì cách thức phù hợp mà ta sử dụng phương pháp dồn pha , mà mẫu đưa vị trí chu kỳ tín hiệu c.1, Cơ sở thuật tốn Giả sử sau trình dồn pha ta thu m mẫu (1 ÷ m) sếp theo thứ tự pha tăng dần Do yêu cầu hiển thị đầy hình nên ta phải tiến hành nhân nhiều Nguyễn Trường Thọ USB-Osilloscope Luận văn cao học 71 lần chu kỳ mẫu ghép chúng lại thành dạng tín hiệu hồn chỉnh Hình 3.13 Nhân ghép chu kỳ tín hiệu Hình vẽ cho thấy, để thực ghép xác thuật toán phải xác định d x = d cho hai điểm t t '0 trùng Khi kết thu hình sau: Hình vẽ cho thấy: x i' = x i + d x + ( x m − x1) Nguyễn Trường Thọ i=0÷2 USB-Osilloscope Luận văn cao học 72 Trong thực tế việc xác định d x để hai đường cong cắt điểm trục thời gian phức tạp nhiều so với việc xác định d x = d '0 để đường cong (ε) tạo điểm {( x m − , y m − ), ( x m −1 , y m −1 ),( x m , y m )} qua điểm K( x1' , y1 ).Thực chất hai cách cho ta kết hoàn toàn giống Do đó, để đơn giản ta xác định d '0 Đường cong (ε) hàm lagrange tạo bới điểm Y=P2(x) = y0 L0 (x)+ y1 L1 (x) + y2 L2 (x) L0 (x) = L1 (x) = L2 (x) = (3.38) ( x − x m −1)( x − x m) ( x m − − x m −1)( x m − − x m) ( x − x m − 2)( x − x m) ( x m −1 − x m − 2)( x m −1 − x m) ( x − x m − 2)( x − x m − 2) ( x m − x m − 2)( x m − x m −1) Để đơn giản ta tịnh tiến tâm trục tọa độ điểm ( x m − , y m − ) Khi đặt: a0 = ( x m −1 − x m − 2) a1 = ( x m − x m −1) Nguyễn Trường Thọ USB-Osilloscope Luận văn cao học a10 = 73 ( x m − x m − 2) Khi biểu thức (3.38) trở thành: Trong đó: Tọa độ điểm K theo trục tọa độ K( d x +1/ a10 , y1 ) Đường cong (ε) qua K khi: Ta chọn nghiệm dương (trong trường hợp có hai nghiệm dương chọn nghiệm nhỏ Nguyễn Trường Thọ USB-Osilloscope Luận văn cao học 74 c.2, Lưu đồ thuật tốn Trong hàm GetOffset() trả giá trị Hàm AddtoArrPoint() có nhiệm vụ chèn chuỗi điểm trỏ {(X(i),Y(i))} vào chuỗi trỏ ArrPoint Hàm Draw(ArrPoint) có nhiệm vụ vẽ đường cong tạo phần tử chuỗi ArrPoint Nguyễn Trường Thọ USB-Osilloscope 75 Luận văn cao học 3.2.2 Thuật tốn phân tích phổ ( FFT số 2) 3.2.2.1 Giải thuật Giải thuật lập trình thơng qua bước: Bước thứ nhất: xếp lại vị trí mẫu, mục đích phân chia mẫu ban đầu thành chuỗi có độ dài hai liên tiếp Thuật toán phân chia đơn giản biểu diễn chu trình sau: ShiffRigh(0)Ỉ ShiffRigh(1)Ỉ… Ỉ ShiffRigh(m-1) Hình vẽ mơ tả chu trình N=8 ShiffRigh(0) Nguyễn Trường Thọ ShiffRigh(1) USB-Osilloscope Luận văn cao học 76 -ShiffRigh(0) (bắt đầu từ bít 0): b’(2)=b(0), b’(1)=b(2) b’(0)=b(1) -ShiffRigh(1) (bắt đầu từ bít 1): b’(1) =b(2), b’(2)=b(1), bít không thay đổi Tổng Quát : - ShiffRigh(i) bít thứ i: b’(m)=b(i) , b’(m-1)=b(m) ,… b’ (i+1) =b(i) Các bít j (j

Ngày đăng: 28/02/2021, 08:30

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan