Thông báo
Collapse
No announcement yet.
Project nhỏ: Bộ lọc số FIR thực hiện bằng FPGA
Collapse
This is a sticky topic.
X
X
-
Nemesis21 có thể giúp dùng Matlab để tạo ra bộ coefficient, số tap, input và output vectors được kô? Thx
-
Phần filter analysis / design không quá khó. Chỉ với vài dòng lệnh, bạn có thể generate filter coefficients và analyze frequency response như trong screen captures 01/02, so sánh 21/51/101 taps Hamming filters và 101 taps Boxcar filter.
Trong screen captures 03 / 04, zero-padded sine wave được filter qua 21-tap Hamming filter. Zero-padded data được dùng để chúng ta có thể dễ dàng thấy được effect của filter.
Phần FIR filter đơn giản chỉ có 3-4 dòng:
Code:for in range (len(x)) : delay_buf[1:len(filter_coeffs)] = delay_buf[0:len(filter_coeffs)-1] delay_buf[0] = x[i] y[i] = sum(delay_buf * filter_coeffs)
Code:delay_buf[1:len(filter_coeffs)] = delay_buf[0:len(filter_coeffs)-1] delay_buf[0] = x[i]
Code:for j in range(len(filter_coeffs)-1,0,-1) : delay_buf[j] = delay_buf[j-1] delay_buf[0] = x[i]
Code:DATA_SHIFT : for j in 20 downto 1 generate delay_buf(j) = delay_buf(j-1) when rising_edge(clk); end generate;
Tương tự như vậy, bạn cũng chuyển dần dòng lệnh dưới sang một dạng suitable cho HDL implementation hơn.
Code:y[i] = sum(delay_buf * filter_coeffs)
Ở đây tôi đã dùng floating-point, nhưng đại khái là, bạn nên tạo ra một functional model trước, và sau đó chuyển thể từ từ sang dạng HDL suitable hơn. Như đã từng đề cập, phần viết VHDL nên là phần dễ dàng nhất. Chúc bạn thành công.
Leave a comment:
-
Tôi nghĩ nếu bạn cá chép đang gặp vấn đề với mạch delay, những giai đoạn tất yếu trước đó đã được hoàn thành? Dù với project nhỏ, chúng ta vẫn nên làm theo trình tự để giảm thiểu vấn đề.
- Requirements / specs cho filter như thế nào? Có vài chỉ số được đưa ra, nhưng hình như thiếu sự liên kết giữa các chỉ số quan trọng. Dù với scalable design, chúng ta vẫn phải đặt ra performance bounds. Rất không nên nhảy vào coding trước khi establishing requirements / specs.
- Design cho filter như thế nào? Dựa vào requirements / specs, bạn đã chọn filter structure nào? Parallel, serial (single multiplier), hoặc semi-parallel? Nếu serial, mạch delay của bạn nên sử dụng RAM (hoặc registers và multiplexer để emulate RAM). Nếu parallel, mạch delay của bạn nên sử dụng registers. Bạn đã chọn structure / mạch delay nào? Bạn đã vẽ block diagram cho design của bạn? Generic design hay là target spefiic? Chẳng hạn như với DSP48 của Virtex-4, parallel design có thể hoàn toàn sử dụng intenal registers và routing của DSP48. Bạn đã diagram / model mạch delay của bạn?
- Giai đoạn viết VHDL nên là giai đoạn dễ dàng nhất.
Khuyến khích làm các project là một việc hay, nhưng tôi nghĩ rằng học về process và các trình tự tất yếu còn quan trọng hơn simulation output đối với những người mới.
Leave a comment:
-
Nguyên văn bởi nemesis21 Xem bài viếtMột vài góp ý vế FIR filter implementation:
Trước tiên bạn nên tạo ra một fixed-point mathematical model với Matlab hoặc Numerical Python. Dù FIR filter hơi đơn giản một chút, nhưng bạn sẽ verify design của bạn như thế nào? Bạn nên đạt được bit-exact match giữa model và simulation/hardware output. Với algorithm khó hơn một chút như Cholesky decomposition, QR decomposition hoặc SVD decomposition, bạn không thể bỏ qua phần modeling được.
Leave a comment:
-
Một vài góp ý vế FIR filter implementation:
- Thông thường thì bạn cần analyze filter requirements (ripple characteristics, response) để derive number of taps và filter data width cần thiết.
- Hardware platform: design sẽ chạy trên FPGA nào, và realistically, maximum attainable / target clock rate của design là bao nhiêu?
- Number of taps, output data rate, và design clock rate ảnh hưởng đến cấu trúc của filter --> cần dùng maximum number of multipliers hoặc có thể share resource? Design clock rate x number of multipliers cần phải > output data rate x number of taps. (Chẳng hạn như resampling FIR filter, input data rate không quan trọng, chỉ ăn thua ở output data rate).
- Với một design thật sự, scalability rất quan trọng, chẳng hạn như dùng generate để tùy ý thay đổi number of multipliers từ 1 đến N. Support data / filter data width khác nhau dễ dàng thực hiện hơn, như dùng parameters đã được đề cập đến, hoặc dùng unconstrained ports.
- Trước tiên bạn nên tạo ra một fixed-point mathematical model với Matlab hoặc Numerical Python. Dù FIR filter hơi đơn giản một chút, nhưng bạn sẽ verify design của bạn như thế nào? Bạn nên đạt được bit-exact match giữa model và simulation/hardware output. Với algorithm khó hơn một chút như Cholesky decomposition, QR decomposition hoặc SVD decomposition, bạn không thể bỏ qua phần modeling được.
Leave a comment:
-
Nguyên văn bởi robocon2011 Xem bài viếtbác Tony ở em mới chỉ ngâm cứu vhdl thôi. bác có thể viết nó với ngôn ngữ vhdl dc k ạ?
thanks bác trước!Không có việc gì khó,
chỉ sợ lòng không bền!
Leave a comment:
-
Nguyên văn bởi tonyvandinh Xem bài viết@cachep, bạn có ý định gì về FIR chưa? Thôi để mình gồng mình lên làm mẫu trước nhé.
1) 8 TAPS - có thể đổi được
2) Độ rộng (8 bit integer, có thể đổi được)
3) Coefficient - Truyền từ ngoài vô (programmable)
4) Register base cho shift registers.
Đính kèm là systemC model với test bench. Mô hình này sẽ nhận 1 sample và cho ra 1 sample cho mỗi clock. Nhân của FIR là untime model. Tùy theo tiêu chuẩn, nhân nên đổi ra time model với cấu trúc chỉ tiêu.
Các bạn có thể theo cái link dưới đây để lấy chỉ dẫn thêm về systemC.
http://www.dientuvietnam.net/forums/...729#post253729
Chúc các bạn nghiên cứu vui vẻ và đóng góp.
Tony
bác Tony ở em mới chỉ ngâm cứu vhdl thôi. bác có thể viết nó với ngôn ngữ vhdl dc k ạ?
thanks bác trước!
Leave a comment:
-
Xin lỗi bác tony và mọi người, hiên em vẫn ngắc ngoải với cái mạch delay, híc híc, nên vẫn chưa thực hiện gì được project này. Em sẽ cố gắng để tiếp tục thực hiện, híc
Leave a comment:
-
Đã có bạn nào chạy thử simulation cho bộ lọc FIR chưa? Có gi thắc mắc thì hỏi nhe. Mọi người cùng học hỏi để cầu tiến mà. Khi nào các bạn hiểu về cách xử lý của version này rồi, tôi sẽ hướng dẫn vô chi tiết thêm. Mong các bạn tham gia nồng nhiệt.
Leave a comment:
-
Bộ lọc FIR 8 taps
@cachep, bạn có ý định gì về FIR chưa? Thôi để mình gồng mình lên làm mẫu trước nhé.
1) 8 TAPS - có thể đổi được
2) Độ rộng (8 bit integer, có thể đổi được)
3) Coefficient - Truyền từ ngoài vô (programmable)
4) Register base cho shift registers.
Đính kèm là systemC model với test bench. Mô hình này sẽ nhận 1 sample và cho ra 1 sample cho mỗi clock. Nhân của FIR là untime model. Tùy theo tiêu chuẩn, nhân nên đổi ra time model với cấu trúc chỉ tiêu.
Các bạn có thể theo cái link dưới đây để lấy chỉ dẫn thêm về systemC.
http://www.dientuvietnam.net/forums/...729#post253729
Chúc các bạn nghiên cứu vui vẻ và đóng góp.
TonyAttached FilesLast edited by tonyvandinh; 16-04-2010, 04:55.
Leave a comment:
-
Như bạn danbeo đã nêu ra, rất rất nhiều option cần phải để tâm khi thiết kế.
Theo mình thấy specifications quan trọng nhất của bô lọc FIR:
- Độ rộng của tín hiệu và các hệ số vào phải là parameter nghĩa là re-configurable. Điều này ảnh hưởng trực tiếp đến khả năng của bộ lọc.
Các yếu tố còn lại:
- Bậc của FIR : mình nghĩ bạn có thể cố định cho nó trước rồi sau này cải tiến cho nó configurable.
Có thể bắt đầu bằng 8-tap, rồi phát triển lên.
- Độ rộng của ngõ ra, đơn giản nhất là Full-precision, không bỏ bớt bit nào hết.
- Chênh lệch giữa tốc độ lấy mẫu và tốc độ của IP. Để đơn giản hóa bạn có thể bắt đầu bằng tốc độ lấy mẫu = tốc độ của mạch
Về cấu trúc của mạch FIR, mình search trên mạng thì thấy có 3 dạng cơ bản sau (và rất nhiều dạng phức tạp từ các bài báo khoa học khác)
Leave a comment:
-
Hi, jefflieu
Mình xin giải nghĩa một số từ trên:
- 1/k băng thông là sai. Băng thông bằng 1/k fs/2 thì đúng hơn. Lấy một ví dụ nếu bạn dùng một bộ lọc FIR thông thấp lấy 1/2 của fs/2, bạn sẽ có một tập hợp các hệ số của bộ lọc mà trong đó sẽ có giá trị 0 được lặp lại theo một quy luật. Mà trong tính toán thì chúng ta không cần lưu những hệ số này vì nó không cần thiết (trong trường hợp không cần nạp lại các hệ số khi hệ thống đang chạy).
- Mình lấy tín hiệu mẫu cao nhất là 27MHz chỉ là ngẫu nhiên (random) thôi không có gì hết
- Còn xử lí đa kênh có nghĩa là do cấu trúc FIR của bạn có thể xử lí nhiều tin hiệu ngõ vào liên tục (và các tín hệu này cần dùng chung một tập hợp hệ số bộ lọc). Bạn có thể tham khảo chức năng này trong FIR IP của Altera và Xilinx.
Mình hi vọng câu trả lời này sẽ làm rõ nghĩa thêm yêu cầu của đề tài.
,^_^.
Leave a comment:
-
Design space nên dịch là gì nhỉ?
Như bạn danbeo85 đã đề ra: design space khá là rộng ... bạn cá chép nên hiểu khá khá phần lý thuyết về FIR trước rồi tiến hành HDL design.
Bạn danbeo85 có đề cập:
- Có khả năng tối ưu theo thông số bộ lọc: đối xứng, lọc 1/k băng thông
....
- Tần số lấy mẫu tối đa là 27MHz. Còn tần số hoạt động của IP thì tùy bạn có thể là 100 - 200MHz
- Khi nào làm xong cái đó thì hãy nghĩ đến xử lí đa kênh
Cho mình hỏi "lọc 1/k băng thông" nghĩa là gì? ... tại sao tần số lấy mẫu tối đa là 27MHz? ... còn xử lý đa kênh nghĩa là gì? ... có phải polyphase ko?
Thanks.
Leave a comment:
-
Nguyên văn bởi tonyvandinh Xem bài viết
Mặc dù project này có thể làm bằng một người nhưng tôi xin mọi người cùng đóng góp để thiết kế. Có làm sai mới học hỏi được nhiều. Ăn thua là ở tinh thần cầu tiến.
Mong mọi người tiếp tục cho ý kiến ạ!!!
Leave a comment:
Bài viết mới nhất
Collapse
-
Trả lời cho Hỏi về mạch công suất bị dò DCbởi vandoanĐiện áp ở A và C được ghim bởi Transistor Q8. chuyện áp ra loa + hay - là do các trans khác bị chập chập bên nào thì thay bên đó.
-
Channel: Điện thanh
hôm nay, 12:00 -
-
bởi chinhnguyen9Sực nhớ dòng cân bằng có dạng xung vuông đối xứng, nghĩa là có thể đo bằng đồng hồ Ampe kep. Nên tôi đo test lại, và quả là đo được bình thường với các số liệu trong hình 1.
Qua kết quả này ta thấy mạch này tiên tiến và hửu dụng, nổi bậc ở chổ dung lượng từ...-
Channel: Hướng dẫn sử dụng diễn đàn
hôm nay, 07:10 -
-
bởi dinhthuong92Cảm ơn bác đã chia sẻ nhiều thí nghiệm thực tế.
Về mạch cân bằng cells pin thì theo cá ngân em, nó chỉ có chức năng bảo vệ quá xả và quá nạp cho các cell thôi. Tức là bất kì cell nào trong khi xả mà có áp thấp nhất và bằng...-
Channel: Hướng dẫn sử dụng diễn đàn
18-04-2024, 21:07 -
-
bởi jigokushoujoCó anh chị nào có thể cho em 1 mạch chống ngược cực, chập mạch, khi bị chạm mạch hay ngược cực thì nó sẽ tự động ngắt nguồn,khi không còn chạm thì nó sẽ đóng nguồn lại bình thường. Em có dùng nguồn 12V 75A từ ắc quy . Em cần chụi...
-
Channel: Điện tử dành cho người mới bắt đầu
18-04-2024, 18:24 -
-
bởi chinhnguyen9Tôi nghi ngại về sự hiện diện của điện trở 0,1R trong mach test có thể làm sai lạc và méo mó hoạt động của mạch. Sau khi tháo bỏ điện trở trên test lại thì thấy hoạt động cân bằng tích cực hơn rất nhiều và sờ thấy các most fet của...
-
Channel: Hướng dẫn sử dụng diễn đàn
18-04-2024, 15:01 -
-
bởi chinhnguyen9Test module cân bằng chủ động kiểu Flying Capacitor Balancing 4s 6A TQ
Hình thức board mạch có vẻ ổn. Hình 1 mặt trên và mặt dưới
Hình 2
Lắp bài test với 3 cell 32-650 (4000mAh) với các mức điện áp trong dòng thứ 2 cell số 5 là pin lion 10Ah để tạo độ...-
Channel: Hướng dẫn sử dụng diễn đàn
18-04-2024, 11:26 -
-
bởi chinhnguyen9Hính 1 Sản phẩm board cân bằng acquy Minh Quang
Hình 2 Sơ đồ nguyên lý hoạt động
Hình 3 Sơ đồ đấu dây
Dùng 2 khối pin 32-650 khối 1 4s=13V và khối 2 5s =16V bắt nối tiếp, đấu dây đen B0 vào âm, nguồn B1 vào cọc 13V, và B2 vào cọc 29V,...-
Channel: Hướng dẫn sử dụng diễn đàn
18-04-2024, 10:51 -
-
bởi chinhnguyen91- Sơ khai là mạch cân bằng thụ động do hiệu quả của mạch này là rất kém nên ta vứt nó vào quá khứ.
2- Mạch cân bằng chủ động, so áp liền kề gồm 2 nhánh: dùng từ trường và dùng điện tích
3- Mạch cân bằng chủ động toàn nhóm.(flying capacitor balancing)
Trong mạch cân bằng chủ...-
Channel: Hướng dẫn sử dụng diễn đàn
16-04-2024, 08:48 -
Leave a comment: