Thiết kế bộ lọc tín hiệu số trên công nghệ FPGA với công cụ Matlab và EDA của Xilinx

MỤC LỤC MỞ ĐẦU 1 Chương 1: TỔNG QUAN VỀ TÍN HIỆU VÀ CHỌN LỌC TÍN HIỆU . 4 1.1 Tín hiệu tương tự (Analog) và tín hiệu số (Digital) . . 4 1.1.1.Khái niệm, phân loại tín hiệu và hệ xử lý tín hiệu . 4 1.1.2 Hệ xử lý số . 12 1.2 Cỏc bộ biến đổi tín hiệu tín hiệu tương tự-số (ADC) và bộ biến đổi số-tương tự (DAC) 19 1.2.1 Bộ biến đổi DAC :. . 19 1.2.2 Bộ biến đổi ADC : 22 1.3 Bộ lọc số và cơ sở toỏn học của nú 24 1.3.1: Tổng quan về bộ lọc số: . . . 25 1.3.2: Cụng cụ toán học để thiết kế bộ lọc số . 28 Chương 2 : TỔNG QUAN VỀ CẤU TRÚC FPGA CỦA HÃNG XILINX VÀ PHẦN MỀM HỖ TRỢ THIẾT KẾ WEBPACK ISE 32 2.1 Tổng quan về cấu trúc FPGA của XILINX . 32 2.1.1. Sự hình thành và phỏt triển của FPGA và CPLD. 32 2.1.2. Giới thiệu các họ thiết bị của Xilinx . 38 2.1.3. Cấu trúc FPGA của hãng Xilinx 44 2.2 Phần mềm thiết kế WEBPACK ISE 52 2.2.1. Giới thiệu sơ lược: . 52 2.2.2. Công cụ thiết kế: . 52 2.2.3. Lõi sở hữu trí tuệ của Xilinx ( IP_Core ): . 55 2.2.4. Giới thiệu ngụn ngữ VHDL 55 Chương 3 : HỖ TRỢ THIẾT KẾ CỦA MATLAB VÀ EDA VỚI BỘ LỌC SỐ 63 3.1 Phương pháp thiết kế theo mô hình: . 63 3.1.1.Giới thiệu: . 63 3.1.2.Kết luận . 68 3.2 Sự hỗ trợ của Matlab với thiết kế bộ lọc số (FDATool) 68 3.2.1. Tổng quan về hộp công cụ thiết kế bộ lọc số (FDATool) 68 3.2.2. Thiết kế bộ lọc theo phương phỏp sử dụng các hàm chức năng: . 73 3.2.3. Thiết kế bộ lọc theo phương phỏp sử dụng giao diện của FDATool .:. 77 3.2.4. Phân tích một số cấu trúc của các hàm thông dụng trong thiết kế bộ lọc: . . 83 3.3 Sự hỗ trợ thiết kế của EDA (phần mềm ISE): . 85 Chương 4 : THIẾT KẾ BỘ LỌC TÍN HIỆU SỐ DẠNG FIR . 87 4.1 Kết cấu cho các kiểu lọc tần số dạng FIR: 87 4.1.1. Bộ lọc thông thấp lý tưởng . 88 4.1.2. Bộ lọc thông cao lý tưởng . . 90 4.1.3. Bộ lọc dải thông lý tưởng . 91 4.1.4. Bộ lọc dải chặn lý tưởng . 93 4.1.5 .Nhận xét . . 95 4.2 Cấu hình tổng quát của bộ lọc FIR . 92 4.3 Tổng hợp hệ thống theo phương pháp mô hình hoá đối tượng . . 95 4.3.1. Giả thiết kỹ thuật 95 4.3.2. Thiết kế bộ lọc số đáp ứng xung hữu hạn theo phương pháp MBD 95 4.3.3.Hiện thực hoỏ và mó để hiện thực hoá . 105 4.3.4. Thử nghiệm và kiểm tra .112 ĐÁNH GIÁ VÀ KẾT LUẬN . .114 1. Khả năng thực hiện và hướng phát triển của đề tài .114 2. Khả năng áp dụng vào thực tiễn . 114 TÀI LI ỆU THAM KH ẢO . 116 PHỤ LỤC

pdf132 trang | Chia sẻ: lvcdongnoi | Lượt xem: 5255 | Lượt tải: 3download
Bạn đang xem trước 20 trang tài liệu Thiết kế bộ lọc tín hiệu số trên công nghệ FPGA với công cụ Matlab và EDA của Xilinx, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ng bình pha min 73 * Bộ lọc thích nghi: Sau đây ta sẽ chỉ ra một vài hàm giải thuật có sẵn trong hộp công cụ khi ta làm việc với bộ lọc thích nghi.Bạn có thể tham khảo mục: Adaptive Filter Constructors để thấy rõ hơn bộ lọc loại này. Bảng 3.4: Cấu trúc của bộ lọc thích nghi. Hàm lọc Mô tả Adaptfilt.lms Sử dụng thuật toán lọc thích nghi LMS FIR adaptfilt.nlms Sử dụng thuật toán lọc thích nghi chuẩn hoá LMS FIR adaptfilt.rls Sử dụng thuật toán lọc thích nghi đệ quy ô vuông nhỏ nhất RLS adaptfilt.sd Sử dụng thuật toán lọc thích dấu hiệu dữ liệu Tóm lại: Mỗi hàm chức năng có một cấu trúc riêng đáp ứng những yêu cầu kỹ thuật riêng, chúng ta sẽ xem xét vấn đề này sau (tham khảo FilterStructure), khi đã nắm chắc cấu trúc và đáp ứng kỹ thuật của nó thì việc thiết kế bộ lọc trở nên hoàn toàn dễ ràng, thuận lợi vẫn đáp ứng đầy đủ của mục tiêu yêu cầu kỹ thuật với bộ lọc.Bạn có thể tham khảo các hàm dược phân theo nhóm chức năng tại: Functions-- Categorical List 3.2.2. Thiết kế bộ lọc theo phương pháp sử dụng các hàm chức năng: Như chúng ta đã biết FDATool hỗ trợ thiết kế bộ lọc số bằng rất nhiều hàm chức năng, Ở đây chúng ta đơn cử hàm firgr và fircband dùng để thiết kế bộ lọc FIR , các hàm khác chúng ta tiếp cận theo phương pháp tương tự.Chúng ta chỉ đưa ra một ví dụ tổng quát, từ đó ta làm sáng tỏ cú pháp và ý nghĩa từng thông số của dòng lệnh. Khi khai thác các hàm này chúng ta cần quan tâm đến các cấu trúc phần tử ở bảng dưới đây: 74 Bảng 3.5 : Cấu trúc phần tử cho các hàm chức năng. Cấu trúc phần tử Nội dung res.order Lọc thứ tự res.fgrid Vector lưới tần tối ưu trong thiết kế bộ lọc res.H Đáp tuyến tần số của fgrid res.error Lỗi điểm trên lưới tần res.des Đáp tuyến mong muốn tại mỗi điểm trên fgrid res.wt Trọng số tại mỗi điểm trên fgrid res.iextr Vector chỉ số fgrid của tần số cực trị res.fextr Vector của tần số cực trị res.iterations Số lặp remez cho tối ưu res.evals Số ước lượng hàm cho tối ưu res.edgeCheck Những kêt quả bất thường khi kiểm tra_các tính toán được chỉ định. 1=Ok 0= Chuyển tiếp bất thường -1= Tình trạng nguy khó Sau đây là một ví dụ tổng quát minh chứng cho thiết kế bộ lọc khi sử dụng hàm chức năng : Thiết kế bộ lọc có đáp tuyến “như vuông” Trong ví dụ này chúng ta thiết kế bộ lọc “53 rd_order” và sử dụng tệp taperedresp.m trong:Matlab \toolbox\filterdesign\filtdesdemos\ taperedresp.m để thực hiện vector trọng số tạo lên đáp tuyến cho bộ lọc ta lập trình như sau: [b,err,res]=firgr(53, [0 0.3 0.33 0.77 0.8 1],... {'taperedresp',[0 0 1 1 0 0]}, [2 2 1]); [H,W,S]=freqz(b,1,1024); S.plot = 'mag'; S.yunits = 'linear'; freqzplot(H,W,S); 75 Các điểm tần số Vector trọng số tương đối Các điểm cực Hình 3.5: Thiết kế bộ lọc theo hàm chức năng. Tương ứng với các điểm tần số là các điểm cực của đáp tuyến mức điện_tần số của bộ lọc. Kết quả ta có: Đáp tuyến mức điện _tần số sau: 76 Hình 3.6 Đáp tuyến biên độ tần số của bộ lọc . Cú pháp: b = firgr(N,F,A,S) ở đây : N,F,A,S là các vector đầu vào tạo nên cấu hình của bộ lọc.Ta có thể liệt kê các vector đầu vào và ý nghĩa sử dụng của nó ở bảng sau: Bảng 3.6 : Thông số kỹ thuật của hàm chức năng. Vector đầu vào Ý nghĩa sử dụng N Vector hàng b chứa N+1 cột của bộ lọc FIR tương hợp với vector A và F F= định nghĩa các điểm tần số đầu vào ở đây có giới hạn từ 0- 1 F (Frequency): tần số/ mẫu A= Đặt mức điện tương ứng với mỗi điểm tần số A(gAin): mức điện S={‘n’ ’n’ ’s’ ’n’ Chỉ rõ điểm tần số tương ứng là bình thường hay là điểm 77 ’n’ ’s’’n’’n’ } tần số đơn,ta thấy điểm tần số:0.25 và 0.55 là điểm đơn và nhận mức điện=0,các điểm tần số còn lại là điểm bình thường và nhận mức điện =1 n (normal): bình thường s (single): đơn Ở trên chúng ta đã nghiên cứu phương pháp thiết kế bộ lọc số khi chúng ta sử dụng các hàm chức năng để thiết kế. Sau đây chúng ta tiếp tục nghiên cứu thiết kế bộ lọc sử dụng FDATool. 3.2.3. Thiết kế bộ lọc theo phương pháp sử dụng giao diện của FDATool: FDATool cho ta một giao diện thiết kế bộ lọc số rất mạnh và thuận tiện cho người sử dụng, một cái rất hay của nó là ta có thể chuyển đổi từ thiết kế bộ lọc trên giao diện thành ngôn ngữ lập trình để từ đó ta có thể đóng gói và sử dụng nó trong những thiết kế phát triển cao hơn.Có thể nói rằng: Thiết kế bộ lọc trên giao diện của FDATool về mặt chức năng thì gần như giống với thiết kế bộ lọc bằng ngôn ngữ lập trình trừ một số hàm chức năng đặc biệt mà FDATool không thể có được, bù vào đó là sự rất trực quan và dễ hiểu. Sau đây ta bắt đầu khởi động cho FDATool: Từ cửa sổ lệnh của windows ta gõ: FDATool và Eter. Một giao diện được hiện ra như sau: 78 Hình 3.7 : Giao diện thiết kế của FDATool. Trên thanh tiêu đề ta có: File: công cụ cho tệp tin. Edit: công cụ soạn thảo. Analysis: công cụ phân tích. View : công cụ hiển thị. Window: Tương thích với hệ điều hành Windows. Help: công cụ trợ giúp Trong khung:Current filter information (thông tin về bộ lọc): Store Filter: lưu bộ lọc vào kho. Filter manager: Quản lý các bộ lọc đã được lưu giữ. Trong khung: Filter specifications (thuyết minh về bộ lọc). Trong khung Response type (kiểu đáp ứng) bao gồm các đáp ứng: lowpass (bộ lọc thông thấp ). Highpass (bộ lọc thông cao). 79 Bandpass ( bộ lọc thông giải ). Bandstop ( bộ lọc chặn giải ). Differentiator (bộ vi phân ). Trong khung design method (phương pháp thiết kế):cho ta lựa chọn 2 kiểu bộ lọc đó là bộ lọc IIR và bộ lọc FIR trong từng kiểu này cho ta lựa chọn các phương thức lọc khác nhau. Ngoài ra ta còn có các khung như: Filter order (lọc thứ tự) Frequency Specificatiins (thuyết minh về tần số). Magnitude Specìications ( thuyết minh về trọng số). Về nội dung của các khung này chúng ta đã biết khi ta nghiên cứu thiết kế bộ lọc bằng các hàm chức năng ở mục trước . 3.2.3.1. Thiết kế bộ lọc thông giải: Như chúng ta biết, để tiết kiệm giải tần thì giải thông âm tần của điện thoại được quy định từ 0,3Khz đến 3,4Khz. Tín hiệu âm tần (có tần số từ 0 đến 20Khz) sẽ được lọc trước khi đưa vào vào hệ thống thông tin đa kênh. Vì lý do đó, với FDATool chúng ta thiết kế bộ lọc thông giải tần là từ 0.3Khz đến 3.4Khz. Trong ví dụ này chúng ta chọn bộ lọc FIR, các thông số kỹ thuật được ghi trên giao diện: 80 Hình 3.8 Thông số kỹ thuật của bộ lọc thông giải. Ta thấy rằng bộ lọc cho đáp tuyến mức điện_tần số thực quả là lý tưỏng. 3.2.3.2. Chuyển đổi từ thiết kế trên giao diện FDATool sang dạng thiết kế bằng hàm chức năng. Thao tác như sau: Từ giao diện FDATool vào File ---- Generater M_file xuất hiện giao diện Generate M_file ta ghi tên file và chọn đường dẫn để lưu tệp tin sau đó chọn: save Ở đây ta chọn tệp tin tên là Bandpass.m, tệp tin đó như sau: %function Hd = bandpass %BANDPASS Returns a discrete-time filter object. % % M-File generated by MATLAB(R) 7.0.4 and the Signal Processing Toolbox 6.3. % % Generated on: 28-Mar-2008 23:36:01 % 81 % Equiripple Bandpass filter designed using the FIRPM function. % All frequency values are in Hz. Fs = 10000; % Sampling Frequency Fstop1 = 200; % First Stopband Frequency Fpass1 = 300; % First Passband Frequency Fpass2 = 3400; % Second Passband Frequency Fstop2 = 3500; % Second Stopband Frequency Dstop1 = 0.0001; % First Stopband Attenuation Dpass = 0.057501127785; % Passband Ripple Dstop2 = 0.0001; % Second Stopband Attenuation dens = 20; % Density Factor % Calculate the order from the parameters using FIRPMORD. [N, Fo, Ao, W] = firpmord([Fstop1 Fpass1 Fpass2 Fstop2]/(Fs/2), [0 1 ... 0], [Dstop1 Dpass Dstop2]); % Calculate the coefficients using the FIRPM function. b = firpm(N, Fo, Ao, W, {dens}); Hd = dfilt.dffir(b); fvtool(b) % [EOF] Cấu trúc của tệp lệnh này chúng ta đã khá quen thuộc. Ở đây chúng ta chỉ lưu ý là: Dstop1, Dstop2, Dpass là các các đơn vị không thứ nguyên. Còn ở trong FDATool chúng có đơn vị là deciben (db). Chúng ta lấy tệp M_file cho chạy trong của sổ của WINDOWS ta sẽ được đồ thị mức điện_tần số pha như sau: (xem trang bên) Như vậy từ thiết kế trong FDATool ta có thể chuyển chúng về dạng thiết kế theo hàm chức năng (ta đã xem xét kỹ ở các mục trước) để tiếp tục sử dụng chúng ở các thiết kế lớn hơn. 82 Hình 3.9 Chuyển thiết kế FDATool sang hàm chức năng. Hình 3.10 Đáp tuyến biên độ_ tần số pha của bộ lọc thông giải. 3.2.3.3. Chuyển đổi từ thiết kế trên giao diện trên FDATool sang ngôn ngữ VHDL: Từ giao diện của FDATool ta chọn Targets chọn Generate HDL lúc này xuất hiện giao diện: 83 Hình 3.11 Phát mã VHDL của FDATool. Ở filter target language cho phép chúng ta lựa chọn ngôn ngữ cần chuyển đổi đó là ngôn ngữ VHDL hoặc Verilog Chọn tên bandpass, chọn thư mục… như trong bảng chọn sau đó chọn Generate. Khi đó ở F:\luanvan\Tran Thanh Son có 2 tệp tin: Bandpass.vhd và Bandpass_tb.vhd. Hai tệp tin này sẽ được dùng trong phần mềm thiết kế WEBPACK_ISE của Xilinx. Chúng ta sẽ bàn đến vấn đề này ở chương sau. 3.2.4. Phân tích một số cấu trúc của các hàm thông dụng trong thiết kế bộ lọc: Do FDATool co rất nhiều hàm và chúng có cấu trúc khác nhau, ở đây ta chỉ xem xét một hàm các hàm khác phương pháp tiếp cận tương tự. Cấu trúc của hàm dfilt.dffir Dùng trong bộ lọc FIR với tín hiệu rời rạc và lọc trực tiếp loại I chính tắc. 84 Cú pháp: Hd = dfilt.dffir(b) Hd = dfilt.dffir Nó có cấu trúc: Hình 3.12 Cấu trúc của bộ lọc FIR. Vector cột của nó là: Z1(1) Z2(1) Z3(1) Z1(2) Z2(2) Z3(2) Z1(3) Z2(3) Z3(3) Cách viết: b = [0.05 0.9 0.05]; hd=dfilt.dffirt({b}); hq = copy(hd); hq.arithmetic = 'fixed'; 85 3.3 Sự hỗ trợ thiết kế của EDA (phần mềm ISE): Sù hç trî cña EDA víi thiÕt kÕ lµ rÊt lín, ë ®©y ta chØ ®−a ra h−íng tæng qu¸t vÒ sù trî gióp cña nã víi thiÕt kÕ, cßn cô thÓ ta sÏ nãi ®Õn ë ch−¬ng sau. PhÇn mÒm thiÕt kÕ ISE cã kh¶ n¨ng ®−a thiÕt kÕ vμo trong c¸c PLD (Programmable Logic Device) ®−îc chän lùa còng nh− c¸c b−íc thùc hiÖn thiÕt kÕ −a dïng. Nh×n chung c¸c b−íc tiÕn hμnh thiÕt kÕ cho FPGA vμ CPLD lμ gièng nhau, ng−êi thiÕt kÕ cã thÓ nhËp vμo mét thiÕt kÕ d−íi d¹ng mét s¬ ®å hoÆc d¹ng HDL (VHDL, Verilog, hoÆc ABEL). Mét thiÕt kÕ cã thÓ bao gåm c¶ d−íi d¹ng s¬ ®å vμ HDL. PhÇn mÒm ISE ®−îc kÕt hîp víi bé m« pháng MXE ®−a ra kh¶ n¨ng m« pháng vμ kiÓm tra chøc n¨ng cña VHDL. Bé m« pháng MXE ®−a ra mét biÓu ®å kiÓm tra, nã cho phÐp ng−êi dïng ®−a ra c¸c mÉu thö ®Ó test c¸c chøc n¨ng trong qu¸ tr×nh tæng hîp (®−îc gäi lμ TestBencher). Qu¸ tr×nh tæng hîp mét thiÕt kÕ ®−îc thùc hiÖn theo c¸c b−íc d−íi ®©y. 1. Translate - DÞch thiÕt kÕ vμ cho ch¹y kiÓm tra theo qui luËt thiÕt kÕ . 2. Map - TÝnh to¸n vμ cÊp ph¸t tμi nguyªn trong thiÕt bÞ ®Ých. 3. Place and Route - X¾p ®Æt c¸c khèi logic, ®Þnh cÊu h×nh phï hîp víi c¸c vÞ trÝ logic vμ sö dông c¸c tμi nguyªn ®Þnh tuyÕn . 4. Generate Programming File - t¹o ra dßng c¸c bit ch−¬ng tr×nh (T¹o file.Bit). C¸c c«ng cô phÇn mÒm tæng hîp thiÕt kÕ cña ISE : * ViÖc nhËp thiÕt kÕ cã vμi c¸ch kh¸c nhau vμ c«ng cô ®Ó tæng hîp thiÕt kÕ chÝnh lμ tæng hîp m· nguån ®−îc viÕt d−íi d¹ng VHDL, Verilog, 86 ABEL sang d¹ng file netlist. C¸c thiÕt kÕ d−íi d¹ng s¬ ®å ®−îc chuyÓn ®æi sang m· nguån VHDL hoÆc Verilog mμ c¸c m· nguån nμy ®−îc tæng hîp b»ng XST theo d¹ng th«ng th−êng. * StateCAD lμ mét c«ng cô phÇn mÒm cho phÐp nhËp thiÕt kÕ d−íi d¹ng ®å ho¹ theo nhãm c¸c tr¹ng th¸i, nhãm c¸c tr¹ng th¸i nμy sÏ ®−îc dÞch ra HDL vμ ®−îc ®Ýnh vμo trong phÇn mÒm ISE. * Bé m« pháng MXE cã thÓ ®−îc sö dông cho viÖc m« pháng c¶ vÒ thêi gian vμ chøc n¨ng . * HDL Bencher : T¹o ra c¸c biÓu ®å kiÓm tra cho phÐp m« pháng thiÕt kÕ ë d¹ng test. * Implemention : C«ng cô thùc thi nμy cã mét vμi b−íc vμ sÏ ®−îc giíi thiÖu kü h¬n trong c¸c phÇn sau th«ng qua c¸c vÝ dô cô thÓ . * iMPACT Programmer : Modul nμy cho phÐp n¹p ch−¬ng tr×nh vμo thiÕt bÞ ®Ých ( Lóc nμy c¸p JTAG cÇn ph¶i ®−îc nèi víi cæng song song cña m¸y tÝnh. ) * CHIP VIEWER : C«ng cô nμy ®−îc sö dông ®Ó kiÓm tra thiÕt kÕ sau khi ®· thùc thi cÊu h×nh, chØ ra viÖc kÕt nèi gi÷a c¸c ch©n cña thiÕt bÞ . * Xpower : Cho phÐp tÝnh to¸n kh¶ n¨ng tiªu thô nguån cña thiÕt kÕ khi ch¹y trong thiÕt bÞ ®Ých . 87 CHƯƠNG 4 THIẾT KẾ BỘ LỌC TÍN HIỆU SỐ DẠNG FIR Ở chương này chúng ta sẽ đi thiết kế và hiện thực hoá một bộ lọc số dạng FIR theo quan điểm “Mô hình hoá đối tượng”.Qua đó chúng ta sẽ hiểu rõ hơn về phương pháp thiết kế thiết kế theo mô hình hoá đối tượng (MBD) mà ở chương trước chúng ta đã đề cập. Để đưa ra được một cấu hình tổng quát cho bộ lọc FIR chúng ta đi vào xem xét kết cấu của bộ lọc FIR. 4.1 Kết cấu cho các kiểu lọc tần số dạng FIR: Để đưa ra được nét chung nhất mang tính tổng quát của các bộ lọc FIR, chúng ta đi vào xem xét đặc tính xung của chúng: Giống như các bộ lọc tín hiệu tương tự, bộ lọc số là mạch thực hiện chức năng chọn lọc tín hiệu theo tần số. Các mạch lọc số cho tín hiệu số có phổ nằm trong một dải tần số nhất định đi qua và không cho các tín hiệu có phổ nằm ngoài dải tần số đó đi qua. Dải tần số mà mạch lọc cho tín hiệu đi qua được gọi là dải thông, còn dải tần số mà mạch lọc không cho tín hiệu đi qua được gọi là dải chặn. Tần số phân cách giữa dải thông và dải chặn là tần số cắt và được ký hiệu là ωc . Theo dạng của đặc tính biên độ tần số ⏐H(ejω)⏐, người ta chia các bộ lọc số thành các loại : - Bộ lọc thông thấp, có dải thông ),( 0 cωω ∈ . - Bộ lọc thông cao, có dải thông ),( ∞∈ cωω . - Bộ lọc dải thông, có dải thông ),( 21 cc ωωω ∈ . - Bộ lọc dải chặn, có dải thông ),( 10 cωω ∈ và ),( 2 ∞∈ cωω . 4.1.1. Bộ lọc thông thấp lý tưởng: * Bộ lọc thông thấp lý tưởng có đặc tính biên độ tần số khi ω ∈ (-π , π ) như sau : ⎩⎨ ⎧ ∈−−∈ −∈= ][][0 ][1 )( ππ ω ,ωωω,ωKhi ω,ωωKhi e cc ccj lpH vμ (4.1) Đặc tính biên độ tần số của bộ lọc thông thấp lý tưởng ở hình 4.1. 88 )( ωjlp eH ω -π -ωc 0 ωc π Hình 4.1 : Đặc tính biên độ tần số của bộ lọc thông thấp lý tưởng. *Đặc tính xung hlp(n) của bộ lọc thông thấp lý tưởng Xét bộ lọc thông thấp lý tưởng pha tuyến tính αωωθ −=)( , đặc tính tần số của nó có dạng : ⎪⎩ ⎪⎨⎧ ∈−−∈ −∈= − ][][ ][ )( 0 ππ αωω ,ωωω,ωKhi ω,ωωKhie e cc cc j j lpH vμ (4.2) Đặc tính xung hlp(n) của bộ lọc trên được xác định bằng IFT : [ ] ∫ − == π π ωωω ωπ deeeIFTnh njj lp j lplp HH )()()( 2 1 c c c c njnjj lp enj deenh ω ω αω ω ω ωαω αω ππ − − − − −== ∫ )()()( 12121 )( )](sin[ )( )](sin[ )( αω αωω α αω ππ − −=− −= n n n n nh c ccc lp (4.3) Theo (4.3), bộ lọc thông thấp lý tưởng pha tuyến tính có đặc tính xung hlp(n) dạng hàm sin giảm dần về 0 khi n → ± ∞ . Tại n = 0 có : ππ ω αω αωω c c cc nlpnlp n n LimnhLimh =⎥⎦ ⎤⎢⎣ ⎡ − −== →→ )( )](sin[ )()( 00 0 Đặc tính xung hlp(n) đạt cực đại tại n = 0 , và 0)( =nhlp tại các điểm ckn ωπ= , với k là số nguyên. 4.1.2. Bộ lọc thông cao lý tưởng * Bộ lọc thông cao lý tưởng có đặc tính biên độ tần số khi ω ∈ (-π , π ) như sau : 1 89 ⎩⎨ ⎧ −∈ ∈−−∈= ][0 ][][1 )( cc ccj hp ω,ωωKhi ,ωωω,Khi eH ππωω vμ (4.4) Đồ thị đặc tính biên độ tần số của bộ lọc thông cao lý tưởng ở hình 4.2. )( ωjhp eH ω -π -ωc 0 ωc π Hình 4.2 : Đặc tính biên độ tần số của bộ lọc thông cao lý tưởng. * Đặc tính xung hhp(n) của bộ lọc thông cao lý tưởng Xét bộ lọc thông cao lý tưởng pha tuyến tính αωωθ −=)( , đặc tính tần số của nó có dạng : ⎪⎩ ⎪⎨⎧ −∈ ∈−−∈= − ][0 ][][ )( cc cc j j hp ω,ωωKhi ,ωωω,ωKhie eH ππαωω vμ (4.5) Vì dải thông và dải chặn của bộ lọc thông cao ngược với bộ lọc thông thấp, nên có thể biểu diễn Hhp(ejω) qua Hlp(ejω) như sau : )()( 1 ωω jlpjhp ee HH −= (4.6) Theo (4.6) có thể tìm được đặc tính tần số của bộ lọc thông cao từ đặc tính tần số của bộ lọc thông thấp có cùng tần số cắt. Đặc tính xung hhp(n) của bộ lọc trên được xác định bằng IFT : [ ] [ ]∫ − −== π π ωωω ωπ deeeIFTnh njj lp j hphp HH .)()()( 12 1 ∫ ∫ − − −−= π π ω ω ωαωω ωω ππ c c deedenh njjnjhp 2 1 2 1)( c c njnj hp enj e jn nh ω ω αωπ π ω αππ − − − −−= )( )( )( 1 2 11 2 1 )( )](sin[).sin()( . α αω ππ π − −−= n n n nnh chp 1 90 Hay : )( )](sin[).sin( )( . αω αωω ππ π − −−= n n n nnh c cc hp (4.7) Vì : )(. ).sin( . ).sin( 00 01 n n n nKhi nKhi n n δπ π π π =⇒ ⎩⎨ ⎧ ≠ == (xung đơn vị_Dirac) Nên có thể viết lại (4.7) dưới dạng : )( )](sin[ )( )sin( )()( . αω αωωδωδ ππ − −−=−= n n n n n nnh c ccc hp (4.8) So sánh (4.6) với (4.7), có thể biểu diễn đặc tính xung hhp(n) của bộ lọc thông cao qua đặc tính xung hlp(n) của bộ lọc thông thấp : )()()( nhnnh lphp −= δ (4.9) Từ đó ta có thể tìm được đặc tính xung hhp(n) của bộ lọc thông cao từ đặc tính xung hlp(n) của bộ lọc thông thấp có cùng tần số cắt ωc . Đặc tính xung hhp(n) của bộ lọc thông cao lý tưởng là dãy chẵn, đối xứng qua trục tung và đạt cực đại tại n = 0. Khi tần số cắt Nc πω = thì đặc tính xung hhp (kN) = 0 tại các điểm n = kN, với k là số nguyên. 4.1.3 Bộ lọc dải thông lý tưởng *Bộ lọc dải thông lý tưởng có đặc tính biên độ tần số khi ω ∈ (-π , π ) như sau : ⎩⎨ ⎧ ∈−−∈= n.trªngkho¶c¸cngoμin»m vμ ωKhi ω,ωωω,ωωKhi e ccccjbpH 0 ][][1 )( 2121ω (4.10) Đồ thị đặc tính biên độ tần số của bộ lọc dải thông lý tưởng ở hình 4.3. )( ωjbp eH -π -ωc1 -ωc2 0 ωc1 ωc2 π ω Hình 4.3 : Đặc tính biên độ tần số của bộ lọc dải thông lý tưởng. 1 91 *Đặc tính xung hbp(n) của bộ lọc dải thông Xét bộ lọc dải thông lý tưởng có pha tuyến tính αωωθ −=)( , đặc tính tần số của nó có dạng : ⎪⎩ ⎪⎨ ⎧ ∈−−∈= − n.trªngkho¶c¸cngoμin»m vμ ωKhi ω,ωωω,ωωKhie e cccc j j bpH 0 ][][ )( 2121 αω ω (4.11) Có thể biểu diễn Hbp(ejω) qua đặc tính tần số Hlp1(ejω) và Hlp2(ejω) của các bộ lọc thông thấp lý tưởng có tần số cắt ωc1 và ωc2 tương ứng : )()()( 12 ωωω jlpjlpjbp eee HHH −= (4.12) Theo (4.12) có thể tìm được đặc tính tần số của bộ lọc dải thông có tần số cắt ωc1 và ωc2 , từ đặc tính tần số của hai bộ lọc thông thấp có tần số cắt ωc1 và ωc2 tương ứng. Đặc tính xung hbp(n) của bộ lọc trên được xác định bằng IFT : [ ] [ ]∫ − −== π π ωωωω ωπ deeeeIFTnh njj lp j lp j bpbp HHH .)()()()( 122 1 ∫∫ − − − − −= 1 1 2 2 2 1 2 1)( c c c c deedeenh njjnjjbp ω ω ωαω ω ω ωαω ωω ππ )( )](sin[ )( )](sin[ )( .. 12 α αω α αω ππ − −−− −= n n n n nh ccbp (4.13) )( )](sin[ )( )](sin[ )( 1 11 2 22 αω αωω αω αωω ππ − −−− −= n n n n nh c cc c cc bp (4.14) Hay : )()()( 12 nhnhnh lplpbp −= (4.15) Ta có thể tìm được đặc tính xung hbp(n) của bộ lọc dải thông theo đặc tính xung hlp1(n) và hlp2(n) của các bộ lọc thông thấp có tần số cắt ωc1 và ωc2 tương ứng. 4.1.4. Bộ lọc dải chặn lý tưởng * Bộ lọc dải chặn lý tưởng có đặc tính biên độ tần số khi ω ∈ (-π , π ) như sau : ⎩⎨ ⎧ ∈−−∈= ntrªngkho¶c¸cthuéckh«ng vμ ωKhi ω,ωωω,ωωKhi e ccccjbsH 1 0 ][][ )( 2121ω (4.16) 92 Đồ thị đặc tính biên độ tần số của bộ lọc dải chặn lý tưởng ở hình 4.4. )( ωjbpH e -π -ωc1 -ωc2 0 ωc1 ωc2 π ω Hình 4.4: Đặc tính biên độ tần số của bộ lọc dải chặn lý tưởng. * Đặc tính xung hbs(n) của bộ lọc dải chặn lý tưởng Xét bộ lọc dải chặn lý tưởng pha tuyến tính αωωθ −=)( , đặc tính tần số của nó có dạng : ⎩⎨ ⎧ ∈−−∈= − ntrªngkho¶c¸cthuéckh«ng vμ ωKhie ω,ωωω,ωωKhi e j ccccj bsH αω ω ][][)( 2121 0 (4.16) Có thể biểu diễn Hbs(ejω) qua đặc tính tần số Hlp1(ejω) và Hlp2(ejω) của các bộ lọc thông thấp lý tưởng có tần số cắt ωc1 và ωc2 như sau : )()()( 121 ωωω j lp j lp j bs eee HHH +−= (4.17) Theo (5.1-19) có thể tìm được đặc tính tần số của bộ lọc dải chặn có các tần số cắt ωc1 và ωc2 từ đặc tính tần số của hai bộ lọc thông thấp có tần số cắt ωc1 và ωc2 tương ứng. Biểu diễn Hbs(ejω) qua đặc tính tần số Hbp(ejω) của bộ lọc dải thông: )()( 1 ωω jbpjbs ee HH −= (4.18) Ta có thể tìm được đặc tính tần số của bộ lọc dải chặn có các tần số cắt ωc1 và ωc2 , từ đặc tính tần số của bộ lọc từ hai bộ lọc thong thấp có tần số cắt tương ứng. Đặc tính xung hbs(n) của bộ lọc trên được xác định bằng IFT : [ ] [ ]∫ − +−== π π ωωωω ωπ deeeeIFTnh njj lp j lp j bsbs HHH .)()()()( 1212 1 1 93 ∫∫∫ − − − − − +−= 1 1 2 2 2 1 2 1 2 1)( c c c c deedeedenh njjnjjnjbs ω ω ωαω ω ω ωαω π π ω ωωω πππ 1 1 2 2 )()( )()( )( 1 2 11 2 11 2 1 c c c c njnjnj bs enj e nj e jn nh ω ω αωω ω αωπ π ω αα πππ − − − − − −+−−= )( )](sin[ )( )](sin[)sin( )( 12 . . α αω α αω πππ π − −+− −−= n n n n n nnh ccbs (4.19) )]([ )](sin[ )( )](sin[ . )sin( )( 1 11 2 22. αω αωω αω αωω πππ π − −+− −−= n n n n n nnh c cc c cc bs (4.20) Hay : )()()()( 12 nhnhnnh lplpbs +−= δ (4.21) Hoặc : )()()( nhnnh bpbs −= δ (4.22) Ta có thể tìm được đặc tính xung hbp(n) của bộ lọc dải chặn khi biết đặc tính xung hlp1(n) và hlp1(n) của các bộ lọc thông thấp tương ứng. Theo (4.22) có thể tìm được đặc tính xung hbs(n) của bộ lọc dải chặn khi biết đặc tính xung hbp(n) của bộ lọc dải thông tương ứng. 4.1.5 Nhận xét: Qua phân tích đặc tính xung h(n) của tất cả các bộ lọc FIR từ thông thấp, thông cao, thông giải, chặn giải ta có thể nhận xét chung là: Tất cả các bộ lọc dạng FIR đều có thể được xây dựng từ bộ lọc thông thấp.Như vậy ta có thể xây dựng một cấu hình tổng quát chung cho tất cả các bộ lọc số, sự khác nhau giữa các bộ lọc như thông thấp, thông cao, thông giải, chặn giải chỉ là hệ số nhân của các mắt giữ chậm và phương thức lập (convert) tín hiệu của từng mắt.Việc thông giải tần số nào và loại bỏ giải tần số nào với bộ lọc FIR ta phải nắm chắc chúng cả về biên độ và tần số của chúng mà xác lập tần số lấy mẫu(Fs) cho phù hợp. Có phương pháp xác lập các hệ số và tần số lấy mẫu một cách hoàn toàn tự động như trong bộ lọc thích nghi, song do chủ hướng của đề tài và thời gian có hạn mà chúng ta không đề cập vấn đề đó ở đây. 4.2 Cấu hình tổng quát của bộ lọc FIR: Như chúng ta đã đề cập ở trên: Tất cả các bộ lọc dạng FIR đều có chung một cấu hình tổng quát. Sau đây chúng ta xem xét vấ đề này: 94 Cấu hình tổng quát của bộ lọc FIR: Hình 4.5 Cấu hình tổng quát của bộ lọc FIR đáp ứng xung hữu hạn. Trong hình 4.5: Z 1− là các mắt giữ chậm Bo đến B(N-1) là các hệ số nhân tương ứng với các mắt giữ chậm. Convert: phương thức lập tín hiệu từ mắt giữa chậm này đến mắt giữ chậm tiếp theo phụ thuộc dạng dữ liệu và dạng bộ lọc. Các hệ số nhân và phương thức lập tín hiệu (convert) sẽ quyết định đến đặc tính xung của bộ lọc.Phương thức lập tín hiệu phụ thuộc vào các công thức (4.1.3), (4.8), (4.14), ( 4.20) tương ứng cho từng loại bộ lọc mà ta đã xét ở mục 4.1 và dạng dữ liệu truyền của chúng. Ở đây chú ý rằng đặc tính xung được xét trong phổ tần từ 1−z Convert 0 +B0 1−z +B1 Convert 1 1−z + Convert N-1 B(N-1) X(n) Y(n) 95 0 đến 2pi đây là đặc tính tần số pha.Nó có giá trị trong khoảng từ -∏ đến +∏ còn ngoài khoảng đó nó có giá trị bằng 0. Tần số thực của bộ lọc phụ vào tần số lấy mẫu Fs và công thức tổng quát của bộ lọc FIR đáp ứng xung hữu hạn là: ∑− = −= 1 0 )()()( N N k kk nxhny (4.23) Viết cách kháclà: )()(...)(.)()()()( 11110 +−−++−+= NN nxhnxhnxhny NNN (4.24) Từ những quan điểm ở trên chúng ta sẽ đi tổng hợp hệ thống theo phương pháp mô hình hoá đối tượng mà tổng quan của nó ta đã xét ở mục 3.1 của chương trước. 4.3 Tổng hợp hệ thống theo phương pháp mô hình hoá đối tượng: Ở mục này chúng ta đi thiết kế một hệ thống xử lý tín hiệu (đơn giản) tuân theo thứ tự các bước và quan điểm của phương pháp mô hình hoá đối tượng (MBD) đề xuất. 4.3.1 Giả thiết kỹ thuật: Chúng ta biết rằng: Phổ tần của tiếng nói con người có năng lượng tập chung trong khoảng tần số từ 0.8Khz đến 1.7Khz để có thể nhận dạng rõ giọng nói của từng người thì tiêu chuẩn giải thông điện thoại là từ 0.3Khz đến 3.4Khz. Giả sử do một nguyên nhân nào đó mà tín hiệu âm tần này bị nhiễu tạp nặng nề khiến thiết bị đầu cuối (của hệ thống truyền thông) không còn nhận dạng ra giọng nói của thiết bị đầu đầu nữa.Bằng các biện pháp kỹ thuật người ta xác định được : N% = max max Us Un 100% = 50% Và năng lượng nhiễu nằm rải rác trong giải tần từ 10Khz đến 100Khz. Nhiệm vụ phải thiết kế bộ lọc để loại bỏ nhiễu tạp trên ra khỏi nguồn tín hiệu với tiêu chuẩn nhiễu tạp cho phép: 5% ≤ N% ≤ 10% trước khi đưa vào hệ thống truyền thông. 96 4.3.2. Thiết kế bộ lọc số đáp ứng xung hữu hạn theo phương pháp MBD. 4.3.2.1. Những thuyết minh chính cho thiết bị (Executable specifications): Xây dựng sơ đồ khối chức năng: Hình 4.5 Sơ đồ khối chức năng của hệ thống. Để hiện thực bộ lọc nhằm phục vụ yêu cầu kỹ thuật trên, trước hết ta xây dựng chúng trên hệ mô phỏng. Nhiệm vụ của các khối như sau: Khối tạo tín hiệu hình sin có tần số 1Khz đại diện cho tín hiệu âm tần (0.3Khz – 3.4Khz). Khối tạo nhiễu ngẫu nhiên có phổ tần dải rác từ 10Khz – 100Khz. Bộ cộng có nhiệm vụ cộng tín hiệu với nhiễu, kết quả sau bộ cộng là tín hiệu âm tần bị xuyên nhiễu tác động (đúng với yêu cầu kỹ thuật ban đầu đề ra). Bộ lọc FIR có nhiệm vụ chọn lọc tần số âm tần và gạt bỏ nhiễu tạp. Khối hiển thị cho phép hiển thị tối đa kết quả dạng sóng của các điểm kiểm tra. Giao chỉ tiêu kỹ thuật cho các khối: * Khối phát sóng sin (đại diện cho tín hiệu âm tần): Amp : 10 (đơn vị biên độ) T(m) : 1/100 000 (sec) Frequency : 1Khz Phase offset : 0.7Rad GENERATOR FUNCTION 1Khz NOISE 10Khz -100Khz + FIR_FILTER Fpass≤ 3,4khz. Fstop≥ 3.6 khz DIS PLAY 97 * Khối tạo sóng nhiễu ngẫu nhiên: Amp : 5 (đơn vị biên độ). T(m) : 1/100 000 (sec). Source type : Gaussion. Method : Zigurat. Mean : 1 Variance : 1 Initial seed : 1302. * Khối bộ lọc FIR: - Chọn bộ lọc FIR thông thấp giải thông (Fpass) ≤ 3,4khz. giải chặn (Fstop) ≥ 3.6 khz. Tần số lấy mẫu = 10khz - Mức điện giải thông (Againpass) : 1db (deciben) - Mức điện giải chặn (againstop) : -80db - Số điểm phân tích (order) : 127 - Chiều dài từ hệ số nhân(coefficients) : 16bit - Số bit dữ liệu đầu vào : 8bit - Số bit dữ liệu đầu ra : 8bit - Thanh ghi tổng có chiều dài : 16bit - Tổng tích luỹ cho phép : 32bit * Khối hiển thị: - Hiển thị tín hiệu dưới dạng lượng tử. - Đáp ứng tín hiệu theo quan hệ: biên độ_thời gian. - Hiển thị 4 điểm cần kiểm tra: Tín hiệu Sin. Tín hiệu nhiễu. Tín hiệu tổng: Sin + nhiễu. Tín hiệu sau khi lọc. 98 4.3.2.2. Thiết kế và mô phỏng thiết kế (Design with simulation): Trong phần này ta có nhiều phương pháp thực hiện ví dụ như: Sử dụng các khối chức năng viết sẵn của Trung tâm sở hữu trí tuệ IP (đã giới thiệu ở chương 2), sử dụng các lõi (core) viết sẵn theo mục tiêu của các phần mền chuyên dụng cho xử lý tín hiệu.v.v. Song ở đây theo chủ hướng của đề tài chúng ta sử dụng công cụ phần mềm MATLAB. *.Thiết kế bộ lọc FIR thông thấp: Từ giao diện của MATLAB ta chọn: Start > Toolboxes > Filter design HDL Coder > Filter design_Analyses Tool (Fdatool). Khi đó ta được giao diện của Fdatool như sau: Hình 4.6 Giao diện của FDATool. Ta thiết lập các thông số .. sau đó chọn Design Filter như hình vẽ sau thể hiện: 99 Hình 4.7 Thông số của bộ lọc FIR thông tần thấp. Đây là chương trình tự động thiết kế của MATLAB. Nhìn vào đáp tuyến biên độ tần số của bộ lọc chúng ta thấy rằng: đây là đáp tuyến của bộ lọc thông tần thấp đã được MATLAB tối ưu hoá, đáp tuyến trên quả là lý tưởng.Chúng ta ghi lại kết quả của thiết kế này với File tên là: lowpass.fda. *.Mô phỏng thiết kế: Để mô phỏng được thiết kế này chúng ta chuyển thiết kế này thành khối chức năng sử dụng trong Simulink, thao tác như sau: Trước hết ta đặt các thông số lượng tử của bộ lọc theo giao diện của: Set quantization parameters. Khi đó giao diện hiện lên .. và ta chọn các thông số như hình dưới đây thể hiện: 100 Hình 4.8 Chọn chế độ dữ liệu vào ra cho bộ lọc. Ở đây ta cần chọn các thông số như hệ số nhân, các thông số dữ liệu vào ra, cấu trúc thanh ghi, và giải thuật số học cho bộ lọc. Sau khi đã chọn các tham số phù hợp với yêu cầu kỹ thuật của bộ lọc, lúc này chúng ta chuyển toàn bộ thiết kế sang dạng khối chức năng để mô phỏng trong Simulink như sau: Từ giao diện chính ta chọn Realize model như sau: 101 Nháy đúp vào biểu tượng. Khi đó giao diện hiện ra như hình dưới: Hình 4.9 Chọn chế độ phát khối chức năng mô phỏng. Ở đây ta đặt tên khối chức năng là: lowpass và chúng ta cần chọn các yêu cầu băng cách tích vào các ô yêu cầu với khối chức năng như hình vẽ thể hiện.Sau đó ta chọn: Realize model. Khi đó MATLAB sẽ cho phép ta làm việc với Simulink và đã được chọn trước khối chức năng của bộ lọc lowpass. 102 Hình 4.10 Chọn chế độ cho khối mô phỏng. Hình 4.11 Khối chức năng mô phỏng trong Simulink. Trong môi trường của Simulink dễ dàng chọn các thông số kỹ thuật cho khối tạo tín hiệu Sin và khối tạo nhiễu cũng như khối hiển thị như ở hình sau: 103 Hình 4.12 : Thiết lập hệ thống mô phỏng trong Simulink. Các thông số kỹ thuật của khối phát Sin và khối tạo nhiễu được hiển thị theo bảng chọn: Hình 4.13 : Xác lập các thông số các khối trong mô phỏng. Trong môi trường simulink ta cho chạy mô phỏng. Kết quả mô phỏng được hiển thị ở Scope như sau: Dạng sóng thể hiện từ dưới lên như sau: - Tín hiệu Sin lượng tử. 104 - Tín hiệu nhiễu lượng tử. - Tổng của tín hiệu Sin + nhiễu. - Tín hiệu Sin lượng tử sau bộ lọc. - Hình 4.14 Dạng sóng của các điểm test trong hệ thống. Nhận xét: Nhìn vào dạng sóng của tín hiệu đầu ra so với dạng sóng của tín hiệu đầu vào của bộ lọc ta thấy tín hiệu đầu ra hoàn toàn đáp ứng được so với yêu cầu kỹ thuật đã được đề ra cho bộ lọc.Thiết kế này hoàn toàn có thể đưa vào để hiện thực hoá trong FPGA. 4.3.3.Hiện thực hoá và mã để hiện thực hoá (Implementation with code generation): Để hiện thực hoá trên FPGA , MATLAB có phần mềm hỗ trợ tương tác với Xilinx, nó cho phép phát ra ngôn ngữ VHDL, hệ số Coefficient để dùng trong Xilinx ISE. Ở đây ta đề cập đến ngôn ngữ VHDL. Sin (sau lọc) Sin + Nhiễu Nhiễu Phát Sin 105 4.3.3.1. Phát mã VHDL để hiện thực hoá trên FPGA: Từ giao diện chính của FDATool chọn: Targets > Generate HDL Khi đó giao diện hiện ra và ta chọn tệp tin là lowpass như sau: Hình 4.15 : Phát mã VHDL sử dụng trong Xilinx. Matlab cho phép phát ra hai loại mã là: Test Bench và VHDL đó là: filter.vhd. Filter_tb.vhd. 106 Chọn HDL Options và ta khai báo như các hình sau đây: Hình 4.16 Các khai báo cho chế độ phát mã VHDL. Chọn Apply sau đó chọn OK để quay chở lại giao diện chính của Generate HDL sau đó nháy đúp vào Generate, khi đó Matlab sẽ phát hai file là: filter.vhd và 107 filter_tb.vhd, chúng đã sẵn sàng kết hợp với phần mềm WEBPACK ISE của Xilinx,và đảm bảo chắc chắn khả năng hiện thực hoá trên FPGA vì chúng đã được kiểm nghiệm trên phần mềm mô phỏng Simulink. Chúng ta chuyển hai filer này sang cho Xilink thực hiện. 4.3.3.2. Hiện thực hoá trên FPGA: Mở phần mềm WEBPACK ISE như sau: Start > Allprograms > Xilinx ISE 7.1i > Project Navigator. Từ giao diện chính của Project Navigator chọn: File > New Project. Khi đó giao diện New Project hiện ra, ta đặt tên và chọn như sau: Đặt tên project là: locnhieu có đường dẫn: F:\LUANVAN_CH\locnhieu. Sau đó ta chọn Next. Giao diện hiện ra sau đó ta add hai filter vừa dược tạo ra vào ta được giao diện như sau: Hình 4.17 Giao diện của Xilinx. Ta chọn filter.vhd và nháy kép vào Implement Design trong cửa sổ Processes for source khi đó ta được bảng test tổng hợp như hình sau: 108 Hình 4.18 Các test của Xinlinx. Đến đây ta đã có thể hiện thực hoá bộ lọc, song như vậy việc kiểm tra bộ lọc trong chế độ thực là khó vì chúng ta phải có máy phát sin và thiết bị tạo nhiễu số. Vì vậy ta tạo thêm bộ đếm lên 8bit để đưa vào bộ lọc và sẽ kiểm tra tín hiệu sau bộ lọc từ đó ta có thể nhận xét được khả năng làm việc của bộ lọc mà ta vừa thiết kế. Công việc này ta tiến hành như sau: Từ Project ta chọn new source và đặt tên là count.vhd. Ta viết ngôn ngữ cho bộ đếm sau chạy check syntax ta được kết quả như hình dưới đây: 109 Hình 4.19 Tạo Modul counter. Ta tạo file count_tb.tbw để kiểm tra bộ đếm, Chú ý rằng xung clk của bộ đếm và xung clk của bộ lọc phải trùng nhau và sau này sẽ là xung clk của hệ thống.Dạng sóng của bộ đếm và dạng sóng của bộ lọc được hiển thị như các hình sau: Hình 4.20 Dạng sóng của counter. 110 Hình 4.21 Dạng sóng của Filter. Bây giờ ta tạo file top.sch để kết hợp hai modul: counter và Filter này lại. Trước tiên ta chuyển hai File count.vhd sang count.sch.và File filter.vhd sang filter.sch. sau đó kết nối chúng với nhau như thể hiện hình sau: Hình 4.22 Tạo hệ thống trong SCH. Để kiểm tra sự kết nối giữa hai modul này ta chọn top.sch sau đó chạy Implement design để kiểm tra kết quả phải được test bằng dấu xanh như sau: 111 Hình 4.23 Kiểm tra khả năng hiện thực hoá của hệ thống. Đến đây thiết kế của ta đảm bảo chắc chắn sẽ thực hiện được trên FPGA Spartan-3 xc3s200. Công việc tiếp theo của ta là gán chân cho thiết bị. Để có thể gán chân đúng trên board Spartan-3 chúng ta phải có hướng dẫn về nó.Chúng ta có thể truy cập trang WEB: www.xilinx.com để đọc tài liệu hướng dẫn về board: Spartan-3 Starter Kit board User Guide. Ở đây Xilinx đã cho sẵn một số core viết bằng VHDL rất tiện dụng như: VHD cho cổng nối tiếp UART rs232, ps/2 .v.v. Sơ đồ khối của Spartan-3 mà tài liệu hướng dẫn như sau: 112 Hình 4.24 Sơ đồ khối của Board Spartan-3_xc3s200. Dựa vào các cổng I/O ta gán chân như bảng sau: Hình 4.25 Gán chân cho thiết kế. Ở đây ta dùng xung clock của board Spartan-3 ( clk gán với chân T9 thuộc Bank4). 4.3.4. Thử nghiệm và kiểm tra (Continuous test and Verification): 4.3.4.1. Tải cấu hình xuống FPGA: Kích chuột phải vào Generate Programming File và kích vào Properties trong tab Startup Option, phải đảm bảo rằng clock khởi động phải được đặt là JTAG Clock, nhấn OK, Kích đúp vào 113 Generate Programming File, thao tác này sẽ tạo ra File “ . bit” dùng trong nạp chương trình iMPACT. Mở công cụ Generate Programming File kích đúp vào Configure Device (iMPACT), (Lúc này phải đảm bảo rằng cáp JTAG đã được nối với PC).Nếu như các thong số trong thiết kế không được tự động đưa vào từ công cụ IES thì chúng ta kích chuột phải vào cửa sổ của iMPACT rồi chọn Ađ Xilinx Device, đưa đường dẫn của thiết kế và chọn File top.bit sau đó kích vào biểu tượng của thiết bị. Từ Menu Operation chọn Program, sau đó sẽ được thông báo việc tải cấu hình xuống FPGA đã thành công. Tuy nhiên với Board Spartan-3 bạn cần lưu ý khi nạp chương trình, vì trên nó bao gồm một Flash Rom nối tiếp bạn cần đáp ứng một số câu hỏi mà chươpng trình yêu cầu. 4.3.4.2. Kiểm tra khả năng làm việc của bộ lọc: Tại đầu ra filter_out (8bit) ta có thể cho kết nối với bộ chuyển đổi DAC, tín hiệu sau DAC ta có thể kiểm tra bằng máy hiện sóng. Nếu chúng ta có thiết bị kiểm tra dữ liệu số ta có thể kiểm tra trực tiếp dữ liệu trên 8 bit đầu ra. 114 ĐÁNH GIÁ VÀ KẾT LUẬN 1. Khả năng thực hiện và hướng phát triển của đề tài: Qua quá trình thực hiện đề tài: “ Thiết kế bộ lọc tín hiệu số trên công nghệ FPGA với công cụ Matlab + EDA của Xilinx ”, từ việc nghiên cứu lý thuyết cơ sở về bộ lọc số, hệ thống xử lý tín hiệu số, đến việc tìm hiểu về sự trợ giúp của Matlab và EDA,chúng ta đã đưa ra được phương pháp thiết kế mô hình hoá đối tượng ( Model Based Design ) viết tắt là MBD. Qua phương pháp này nó giúp người thiết kế giảm thiểu công sức và thời gian thiết kế, nâng cao hiệu quả kinh tế, và một điều quan trọng hơn nữa là thiết kế của chúng ta mang tính mềm dẻo cao, sẵn sàng đáp ứng được yêu cầu kỹ thuật mới của công nghệ. Chúng ta đã thực hiện thành công bộ lọc FIR theo phương pháp thiết kế của MBD, Cấu hình đã được tải xuống Board Spartan-3_xc3s200 đã chạy và được kiểm tra bằng các thiết bị thực tế. Qua nghiên cứu về bộ lọc số (đây là một vấn đề lớn), Chúng ta đương nhiên nắm được phương pháp điều chế tín hiệu số (điều biên số), chuyển phổ tần trong xử lý tín hiệu số, giải điều chế tín hiệu số.v.v. Do thời gian có hạn ta chỉ đưa ra phương thức giải điều chế tín hiệu điều biên số ( bằng kết quả cuối ) để minh chứng cho điều nói trên. 2. Khả năng áp dụng vào thực tiễn: Với phương pháp thiết kế theo mô hình (MBD) ta có thể áp dụng để thiết kế các thiết bị điện tử số, Ngoài việc áp dụng sự phát mã VHD của các phần mềm (ở luận văn này là sự phát mã của Matlab, một số phần mềm khác cũng có khả năng này) chúng ta còn có thể khai thác các lõi (core) được viết sẵn theo mục tiêu của khối chức năng, vì vậy người thiết kế chỉ việc tổng hợp các khối này theo mục tiêu kỹ thuật của thiết bị, công việc này đơn giản song mang lại hiệu quả kinh tế cao ( ta đã phân tích vấn đề này trong luận văn). 115 Board Spartan-3_xc3s200 chỉ phù hợp cho các thiết kế nhỏ vì dung lượng Cell,cổng hệ thống và số lượng bộ nhân là hạn chế, dùng nó để thiết kế các bộ lọc là không phù hợp. Ta có thể sử dụng board Spartan-3_xc3s5000 để thiết kế các bộ lọc số và các khối chức năng khác cho thiết bị điện tử số.Ngôn ngữ viết cho Spartan- 3_xc3s5000 với chức năng bộ lọc ta có thể tham khảo ở phụ lục trong luận văn này. Thiết kế theo phương pháp mô hình hoá đối tượng “Model Based Design” _ MBD được đề cập trong luận văn này là một vấn đề lớn mang tính tổng quát cao, Chúng ta phải nghiên cứu nhiều lĩnh vực từ “Cơ sở xử lý tín hiệu và điều khiển số” đến các ngôn ngữ phần mềm “ Matlab_Simulịnk “ phần mềm “Webpack_ISE ”, tham khảo rất nhiều trang WEB mà có đề cập đến phương pháp thiết kế này, ngoài ra để tổng hợp thiết kế một cách chắc chắn ta cũng cần nghiên cứu đến kết cấu cứng của các board trong họ Spartan-3 của Xilinx. Do khối lượng công việc lớn, lúc đầu bản thảo của luận văn này dài lên đến 3-4 trăm trang, song do yêu cầu về khuôn khổ giới hạn cho phép mà tác giả đã gạn lọc đi rất nhiều nội dung chi tiết. Các luận điểm của luận văn phần lớn dược viết theo hướng: Điểm xuất phát… hướng tiếp cận và phát triển…. kết quả cuối. Nên sự rõ ràng, tường minh của luận văn có phần bị hạn chế. Tác giả xin được sự cảm thông ủng hộ và góp ý của quý vị để luận văn được hoàn thiện hơn. Xin chân thành cảm ơn. 116 Tμi liÖu tham kh¶o Tiếng Việt 1. NguyÔn Ngäc BÝch (2001), C¬ së xö lý sè tÝn hiÖu vµ ®iÒu khiÓn sè, Häc viÖn kü thuËt qu©n sù, Hµ Néi. 2. NguyÔn T¨ng C−êng, Phan Quèc Th¾ng, TrÇn V¨n Hîp (2002), CÊu tróc c¸c hÖ xö lý tÝn hiÖu sè, Häc viÖn kü thuËt qu©n sù, Hµ Néi 3. D−¬ng Tö C−êng, (2003), Xö lý tÝn hiÖu sè, Häc viÖn kü thuËt qu©n sù, Hµ Néi. 4. V¨n ThÕ Minh (1998), Kü thuËt vi xö lý, NXB Gi¸o dôc, Hµ Néi 5. §ç Xu©n TiÕn (1991), Kü thuËt vi xö lý, Häc viÖn kü thuËt qu©n sù, Hµ Néi. TiÕng Anh 6. David Harris (1955) Structural Design With Verilog Harvey Mudd College. 7. Donnamaie E. White (2002), Logic Design for Array-Based Circuits, Original Hardcover – Still, London. 8. Don Davis (Winter 2002), “Architectural Synthesis: Unleashing the Power of FPGA System-Level Design”, Xcell Journal, (Issue 44), pages 30–34, Xilinx, United States of America. 9. Giovanni De Micheli, Rajesh K. Gupta (3/1997), “Hardware/Software Co-Design”, Proceedings of the IEEE, (Vol. 85, No 3), pages 349 – 64. 10. Dag Strnneby, William Walker (2001), Digital Signal Processing and Applications 11. Donnamaie E. White (2002), Logic Design for Array-Based Circuits, Original Hardcover – Still, London. 12. Don Davis (Winter 2002), “Architectural Synthesis: Unleashing the Power of FPGA System-Level Design”, (Issue 44), pages 30 – 34, 13. Uwe Meyer- Baese,Ph.D. (2001), Digital Signal Processing With Field Programmble Gate Arrays, Florida States University . 14. Peter J.Ashenden (1990), The VHDL CooKBook, University of Adelaide, South Australia. 117 15. Roger Lipsett & Carl Schaefer (1989), VHDL: Hardware Description and Design, Kluwer Academic Publishers, United States of America. 16. Nguån tham kh¶o tõ Internet xlnx/xil_ans_brower.jsp xlnx/xweb/xil_publications_index.jsp PHỤ LỤC NGÔN NGỮ VHDL BỘ LỌC THÔNG THẤP HIỆN THỰC TRÊN BOARD SPARTAN-3 XC3S5000 -------------------------------------------------------------------------------- -- Copyright (c) 1995-2003 Xilinx, Inc. -- All Right Reserved. -------------------------------------------------------------------------------- -- ____ ____ -- / /\/ / -- /___/ \ / Vendor: Xilinx -- \ \ \/ Version : 7.1i -- \ \ Application : sch2vhdl -- / / Filename : top.vhf -- /___/ /\ Timestamp : 05/03/2008 20:32:17 -- \ \ / \ -- \___\/\___\ -- --Device: spartan3 --Purpose: -- This vhdl netlist is translated from an ECS schematic. It can be -- synthesis and simulted, but it should not be modified. --------------------------------------------------------------------------------------------- -- Author :Tran Thanh Son_TDHK18 --Project : Locnhieu --Modul : Top.vhd library ieee; use ieee.std_logic_1164.ALL; use ieee.numeric_std.ALL; -- synopsys translate_off library UNISIM; use UNISIM.Vcomponents.ALL; -- synopsys translate_on entity top is port ( clk : in std_logic; clk_enable : in std_logic; reset : in std_logic; filter_out : out std_logic_vector (7 downto 0)); end top; architecture BEHAVIORAL of top is signal XLXN_1 : std_logic_vector (7 downto 0); component count port ( clk : in std_logic; clk_enable : in std_logic; reset : in std_logic; count : inout std_logic_vector (7 downto 0)); end component; component filter port ( clk : in std_logic; clk_enable : in std_logic; reset : in std_logic; filter_in : in std_logic_vector (7 downto 0); filter_out : out std_logic_vector (7 downto 0)); end component; begin XLXI_1 : count port map (clk=>clk, clk_enable=>clk_enable, reset=>reset, count(7 downto 0)=>XLXN_1(7 downto 0)); XLXI_2 : filter port map (clk=>clk, clk_enable=>clk_enable, filter_in(7 downto 0)=>XLXN_1(7 downto 0), reset=>reset, filter_out(7 downto 0)=>filter_out(7 downto 0)); end BEHAVIORAL; -------------------------------------------------------------------------------- -- Create Date: 20:17:19 05/03/08 -- Design Name: -- Revision: -- Revision 0.01 - File Created -- Additional Comments: -- ---------------------------------------------------------------------------- -- Author :Tran Thanh Son_TDHK18 --Project : Locnhieu --Modul : Count.vhd -- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity count is Port ( clk : in std_logic; clk_enable : in std_logic; reset : in std_logic; count : inout std_logic_vector(7 downto 0)); end count; architecture Behavioral of count is begin process (clk, reset) begin if reset='1' then count <= "00000000"; elsif clk>='1' and clk'event then if clk_enable='1' then count <= count + 1; end if; end if; end process; end Behavioral; -- ------------------------------------------------------------- -- Author :Tran Thanh Son_TDHK18 --Project : Locnhieu --Modul : Filter.vhd -- -- Filter Settings: -- -- Discrete-Time FIR Filter (real) -- ------------------------------- -- Filter Structure : Direct-Form FIR -- Filter Length : 51 -- Stable : Yes -- Linear Phase : Yes (Type 1) -- Arithmetic : fixed -- Numerator : s16,16 -> [-5.000000e-001 5.000000e-001) -- Input : s8,7 -> [-1 1) -- Filter Internals : Specify Precision -- Output : s8,7 -> [-1 1) -- Product : s16,15 -> [-1 1) -- Accumulator : s16,15 -> [-1 1) -- Round Mode : convergent -- Overflow Mode : wrap -- ------------------------------------------------------------- LIBRARY IEEE; USE IEEE.std_logic_1164.all; USE IEEE.numeric_std.ALL; ENTITY filter IS PORT( clk : IN std_logic; clk_enable : IN std_logic; reset : IN std_logic; filter_in : IN std_logic_vector(7 DOWNTO 0); -- sfix8_En7 filter_out : OUT std_logic_vector(7 DOWNTO 0) -- sfix8_En7 ); END filter; ---------------------------------------------------------------- --Module Architecture: filter ---------------------------------------------------------------- ARCHITECTURE rtl OF filter IS -- Local Functions -- Type Definitions TYPE delay_pipeline_type IS ARRAY (NATURAL range ) OF signed(7 DOWNTO 0); -- sfix8_En7 -- Constants CONSTANT coeff1 : signed(15 DOWNTO 0) := to_signed(-60, 16); -- sfix16_En16 CONSTANT coeff2 : signed(15 DOWNTO 0) := to_signed(-178, 16); -- sfix16_En16 CONSTANT coeff3 : signed(15 DOWNTO 0) := to_signed(-163, 16); -- sfix16_En16 CONSTANT coeff4 : signed(15 DOWNTO 0) := to_signed(240, 16); -- sfix16_En16 CONSTANT coeff5 : signed(15 DOWNTO 0) := to_signed(895, 16); -- sfix16_En16 CONSTANT coeff6 : signed(15 DOWNTO 0) := to_signed(1137, 16); -- sfix16_En16 CONSTANT coeff7 : signed(15 DOWNTO 0) := to_signed(502, 16); -- sfix16_En16 CONSTANT coeff8 : signed(15 DOWNTO 0) := to_signed(-430, 16); -- sfix16_En16 CONSTANT coeff9 : signed(15 DOWNTO 0) := to_signed(-504, 16); -- sfix16_En16 CONSTANT coeff10 : signed(15 DOWNTO 0) := to_signed(400, 16); -- sfix16_En16 CONSTANT coeff11 : signed(15 DOWNTO 0) := to_signed(909, 16); -- sfix16_En16 CONSTANT coeff12 : signed(15 DOWNTO 0) := to_signed(23, 16); -- sfix16_En16 CONSTANT coeff13 : signed(15 DOWNTO 0) := to_signed(-1108, 16); -- sfix16_En16 CONSTANT coeff14 : signed(15 DOWNTO 0) := to_signed(-584, 16); -- sfix16_En16 CONSTANT coeff15 : signed(15 DOWNTO 0) := to_signed(1143, 16); -- sfix16_En16 CONSTANT coeff16 : signed(15 DOWNTO 0) := to_signed(1360, 16); -- sfix16_En16 CONSTANT coeff17 : signed(15 DOWNTO 0) := to_signed(-806, 16); -- sfix16_En16 CONSTANT coeff18 : signed(15 DOWNTO 0) := to_signed(-2244, 16); -- sfix16_En16 SIGNAL add_temp_44 : signed(16 DOWNTO 0); -- sfix17_En15 SIGNAL sum46 : signed(15 DOWNTO 0); -- sfix16_En15 SIGNAL add_temp_45 : signed(16 DOWNTO 0); -- sfix17_En15 SIGNAL sum47 : signed(15 DOWNTO 0); -- sfix16_En15 SIGNAL add_temp_46 : signed(16 DOWNTO 0); -- sfix17_En15 SIGNAL sum48 : signed(15 DOWNTO 0); -- sfix16_En15 SIGNAL add_temp_47 : signed(16 DOWNTO 0); -- sfix17_En15 SIGNAL sum49 : signed(15 DOWNTO 0); -- sfix16_En15 SIGNAL add_temp_48 : signed(16 DOWNTO 0); -- sfix17_En15 SIGNAL sum50 : signed(15 DOWNTO 0); -- sfix16_En15 SIGNAL add_temp_49 : signed(16 DOWNTO 0); -- sfix17_En15 SIGNAL output_typeconvert : signed(7 DOWNTO 0); -- sfix8_En7 SIGNAL output_register : signed(7 DOWNTO 0); -- sfix8_En7 BEGIN -- Block Statements Delay_Pipeline_process : PROCESS (clk, reset) BEGIN IF reset = '1' THEN delay_pipeline(0 TO 50) (OTHERS => '0')); ELSIF clk'event AND clk = '1' THEN IF clk_enable = '1' THEN delay_pipeline(0) <= signed(filter_in); delay_pipeline(1 TO 50) <= delay_pipeline(0 TO 49); END IF; END IF; END PROCESS Delay_Pipeline_process; mul_temp <= delay_pipeline(50) * coeff51; product51 <= resize( shift_right(mul_temp(23 DOWNTO 0) + ( "0" & (mul_temp(8) & NOT mul_temp(8) & NOT mul_temp(8) & NOT mul_temp(8) & NOT mul_temp(8) & NOT mul_temp(8) & NOT mul_temp(8) & NOT mul_temp(8))), 8), 16); mul_temp_1 <= delay_pipeline(49) * coeff50; product50 <= resize( shift_right(mul_temp_1(23 DOWNTO 0) + ( "0" & (mul_temp_1(8) & NOT mul_temp_1(8) & NOT mul_temp_1(8) & NOT mul_temp_1(8) & NOT mul_temp_1(8) & NOT mul_temp_1(8) & NOT mul_temp_1(8) & NOT mul_temp_1(8))), 8), 16); mul_temp_2 <= delay_pipeline(48) * coeff49; product49 <= resize( shift_right(mul_temp_2(23 DOWNTO 0) + ( "0" & (mul_temp_2(8) & NOT mul_temp_2(8) & NOT mul_temp_2(8) & NOT mul_temp_2(8) & NOT mul_temp_2(8) & NOT mul_temp_2(8) & NOT mul_temp_2(8) & NOT mul_temp_2(8))), 8), 16); mul_temp_3 <= delay_pipeline(47) * coeff48; product48 <= resize( shift_right(mul_temp_3(23 DOWNTO 0) + ( "0" & (mul_temp_3(8) & NOT mul_temp_3(8) & NOT mul_temp_3(8) & NOT mul_temp_3(8) & NOT mul_temp_3(8) & NOT mul_temp_3(8) & NOT mul_temp_3(8) & NOT mul_temp_3(8))), 8), 16); mul_temp_4 <= delay_pipeline(46) * coeff47; add_temp_47 <= resize(sum47, 17) + resize(product49, 17); sum48 <= add_temp_47(15 DOWNTO 0); add_temp_48 <= resize(sum48, 17) + resize(product50, 17); sum49 <= add_temp_48(15 DOWNTO 0); add_temp_49 <= resize(sum49, 17) + resize(product51, 17); sum50 <= add_temp_49(15 DOWNTO 0); output_typeconvert <= resize( shift_right(sum50(15 DOWNTO 0) + ( "0" & (sum50(8) & NOT sum50(8) & NOT sum50(8) & NOT sum50(8) & NOT sum50(8) & NOT sum50(8) & NOT sum50(8) & NOT sum50(8))), 8), 8); Output_Register_process : PROCESS (clk, reset) BEGIN IF reset = '1' THEN output_register '0'); ELSIF clk'event AND clk = '1' THEN IF clk_enable = '1' THEN output_register <= output_typeconvert; END IF; END IF; END PROCESS Output_Register_process; -- Assignment Statements filter_out <= std_logic_vector(output_register); END rtl;

Các file đính kèm theo tài liệu này:

  • pdflv_sonsua.pdf