Upload
dao-hai-nam
View
271
Download
11
Embed Size (px)
DESCRIPTION
dsa
Citation preview
VIỆN ĐIỆN TỬ VIỄN THÔNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
BÁO CÁO THÔNG TIN VỆ TINH
Đề tài : Tìm hiểu Onboard Computer
Giảng viên hướng dẫn : PGS.TS.Vũ Văn Yêm
Sinh viên thực hiện : Nguyễn Nam Hải
MSSV : 20101479
Lớp : KSTN – ĐTVT – K55
Hà Nội 12-2014
Page 2
LỜI MỞ ĐẦU 3
NỘI DUNG CHÍNH ....................................................................................................... 4
1 Tổng quan về OBC. ................................................................................................... 4
1.1 Sợ lược lịch sử OBC. .......................................................................................... 4
1.2 Cấu trúc OBC. .................................................................................................... 6
1.3 Thiết kế cơ khí của OBC. ................................................................................... 9
1.4 Một số OBC mini trên thị trường. .................................................................... 10
2 Tìm hiểu và thiết kế khối nén ảnh JPEG. ................................................................ 12
2.1 Ý tưởng thiết kế. ............................................................................................... 12
2.2 Nguyên lý nén ảnh JPEG. ................................................................................. 12
2.2.1 Tổng quan về công nghệ nén ảnh và JPEG. .............................................. 12
2.2.2 Phương pháp nén ảnh theo chuẩn JPEG. ................................................... 14
2.2.3 So sánh ảnh JPEG và ảnh TIFF. ................................................................ 20
2.3 Thiết kế chi tiết và triển khai. ........................................................................... 21
2.3.1 Input. .......................................................................................................... 21
2.3.2 Color Transformation. ............................................................................... 23
2.3.3 Discrete Cosine Transform. ....................................................................... 23
2.3.4 Quantization ............................................................................................... 24
2.3.5 Huffman Encoding. .................................................................................... 24
2.3.6 Creating Output Bitstream. ........................................................................ 25
2.3.7 Testbench. .................................................................................................. 26
2.4 Kết quả và mô phỏng. ....................................................................................... 26
KẾT LUẬN ................................................................................................................... 28
TÀI LIỆU THAM KHẢO ........................................................................................... 29
DANH MỤC HÌNH ẢNH ............................................................................................ 29
Page 3
LỜI MỞ ĐẦU Ngày nay, cùng với sự phát triển không ngừng của công nghệ hàng không vũ trụ,
các vệ tinh hiện nay càng ngày càng hiện đại và thực hiện được nhiều chức năng đa dạng.
Nhưng một vệ tinh chỉ có thể thực hiện được nhiệm vụ khi nó có thể tự vận hành và thực
hiện các chức năng của nó trong không gian, đồng thời trao đổi dữ liệu với một trạm mặt
đất.Một Onboard Computer (OBC) được xem như là bộ não của vệ tinh. OBC cùng với
các phần mềm phụ trợ điều khiển toàn bộ hoạt động của vệ tinh cũng như sự trao đổi dữ
liệu của vệ tinh với trạm mặt đất, hay như cơ chế tự hành và bảo dưỡng của vệ tinh. Một
ví dụ điển hình của tầm quan trọng của OBC là vệ tinh Artemis của châu Âu được phóng
năm 2003, đã thực hiện bám quỹ đạo chính xác trong vòng 18 tháng trước khi kết thúc
nhiệm vụ và trở về trái đất. OBC đã điều khiển mọi hoạt động của vệ tinh rất chính xác!
Trong đề tài “Tìm hiểu OBC” này, ngoài trình bày tóm lược về cấu trúc, thiết kế
của OBC, em thực hiện thêm một chức năng nhỏ của OBC cụ thể là “Thiết kế bộ nén và
mã hóa ảnh JPEG”. Như đã biết, vệ tinh có một nhiệm vụ khá quan trọng đó là chụp ảnh
và quan trắc trái đất. Công việc này được vệ tinh thực hiện thường xuyên gần như 24/24,
do vậy nếu những dữ liệu đó không được xử lý trước khi gửi về trạm mặt đất thì dung
lượng của chúng rất cồng kềnh. Vì vậy, chỉ cần một khâu xử lý nhỏ như việc nén và mã
hóa ảnh cũng có thể đem lại cho vệ tinh nhiều tiện lợi hơn, nhờ đó kích thước và chi phí
cho vệ tinh cũng giảm đi.
Để hoàn thiện đề tài này, em xin cảm ơn sâu sắc đến PGS.TS. Vũ Văn Yêm, người
trực tiếp giảng dạy bộ môn Thông tin Vệ tinh cũng như đã cho em những ý kiến quý báu
để em hoàn thành đề tài. Tuy nhiên, do hạn chế về mặt lý thuyết lẫn thực hành nên chắc
chắn phần tìm hiểu của em còn nhiều sai sót, chưa hoàn thiện. Em mong nhận được thêm
ý kiến và sẽ hoàn thiện đề tài này triệt để hơn. Em xin chân thành cảm ơn.
Page 4
NỘI DUNG CHÍNH
1 Tổng quan về OBC.
1.1 Sợ lược lịch sử OBC.
Lịch sử OBC trải dài qua nhiều thập kỉ gắn liền với các chương trình sau :
Chương trình Mariner
Công nghệ OBC sử dụng trong chương trình này dựa trên mạch số tuần tự, kỹ
thuật kiếm soát đơn giản, nó có thể được lập trình bằng các dòng lệnh w.r.t, được xác
định trên các khe thời gian tương ứng. Bộ nhớ 512 từ nhớ, đủ để lưu trữ một chuỗi lệnh
điều khiển. Các dữ liệu khoa học ghi nhận, các tín hiệu video truyền hình đầu tiên từ tàu
Mariner được truyền trên băng X. OBC này có chức năng reset trong một số trường hợp
khẩn cấp.
Chương trình Pioneer và các nhiệm vụ Voyager
Đặc trưng của OBC trong hai chương trình này là hệ vi xử lý được xây dựng trên
công nghệ transistor là các mạch tích hợp mật độ thấp và trung bình. Bộ nhớ lõi từ tính,
khả năng lưu trữ 4K từ nhớ 18bit. Do yêu cầu xử lý ảnh hiệu suất cao nên có CMOS
RAM (8 Kword). OBC được cung cấp các chức năng giải mã lệnh, khắc phục lỗi, xử lý
tín hiệu từ anten, thông tin tuần tự của vệ tinh.
Hình 1.1.1. Voyager FDS computer main board.
Page 5
Chương trình Galileo
Galileo là vệ tinh thăm dò cỡ lớn với tải trong lên tới 2,2 tấn, được phóng lên vũ
trụ ngày 10/10/1989. Công nghệ máy tính trên Galileo có bước tiến dài so với các chương
trình vũ trụ trước đây, OBC có cấu trúc CDS- “Command and Data Subsystem”, bộ vi
xử lý là các microprocessor.
So với việc thực hiện trên công nghệ bóng bán dẫn CDS của Voyager các CDS
của Galileo có tốc độ chậm hơn. Tuy nhiên kể từ khi sử dụng các thành phần tiền xử lý
dữ liệu mà hiệu suất của IC được tăng lên đáng kể. OBC trên Galileo có bộ nhớ 32 Kbyte,
CPU hoạt động ở clock khoảng 1,6 MHz với chu kỳ lệnh 200kHz. Phần mềm được viết
trên ngôn ngữ Asembler.
Ngày nay, công nghệ để sử dụng để chế tạo OBC là sử dụng các chip có cấu trúc
RISC, bộ nhớ RAM sử dụng các công nghệ mới nhất như M-RAM. Điển hình là chip
LEON3FT :
Hình 1.1.2. Chip LEON3FT.
Các OBC phát triển, cải tiến không ngừng nhưng vẫn phải đảm bảo một số yêu cầu cơ
bản như : tương thích với điều kiện môi trường không gian, với các tia bức xạ năng lượng
cao, chịu được nhiệt độ thay đổi đột ngột, hoạt động ở tần số thấp, tích hợp nhiều loại
giao tiếp ( Serial, LVLS, Analog, bus dữ liệu), có phân hệ dự phòng được điều khiển từ
trạm mặt đất hoặc tự động.
Page 6
1.2 Cấu trúc OBC.
OBC càng ngày càng phức tạp nhưng về cơ bản nó vẫn gồm các thành phần chính
như: bộ xử lý, bộ nhớ, bus dữ liệu và bus điều khiển, nguồn, giao diện transponder, khối
cảm biến và điều khiển nhiệt độ.
Bộ xử lý.
Hiện nay, OBC đều sử dụng các chip RISC làm bộ vi xử lý, tuy nhiên với mỗi
quốc gia hàng đầu về công nghệ vũ trụ, họ sẽ sử dụng những dòng chip khác nhau do
chính họ phát triển. Bảng dưới đây là liệt kê các chip được sử dụng :
Mỹ PowerPC603, PowerPC750, MIPS R3000
Châu Âu ERC32 và LEON
Nhật Hitachi SuperH (SH)
Trung Quốc ARM IP, FPGAs
Bộ nhớ.
Bộ nhớ trong OBC được phân chia thành nhiều chức năng khác nhau:
- Bộ nhớ khởi động (Boot Memory): giúp giữ bộ nạp khởi động cho các phần mềm
ngay cả khi OBC bị khởi động lại, thường dùng PROM hoặc EEPROM.
- Bộ nhớ hoạt động (Work Memory): giúp lưu trữ các thủ tục hoặc các phần mềm
bao gồm cả hệ điều hành và phần mềm xử lý trên OBC, thường dùng RAM,
DRAM, SDRAM.
- Bộ nhớ bảo vệ (Safeguard Memory): lưu trữ thông tin về cấu hình, trạng thái và
các thiết bị dư thừa của vệ tinh nhằm mục đích tái cấu hình hoặc khôi phục dữ
liệu sau khi mất điện tạm thời, thường dùng RAM Flash.
- Bộ nhớ dữ liệu khoa học và bảo dưỡng (Science & Housekeeping data Memory):
giúp lưu trữ các dữ liệu khoa học và các dữ liệu vệ sinh định kỳ từ trạm mặt đất
gửi lên.
Page 7
Bus dữ liệu và Bus điều khiển.
Để kết nối với OBC tồn tại ba loại kết nối chính :
- Điểm với điểm : để kết nối OBC với các cảm biến thông qua dây dẫn.
- Bus dữ liệu : kết nối OBC với các thiết bị như bộ tiếp nhận GPS, tải,…
- Mạng điều khiển : gồm các thiết bị định tuyến và các mạng con.
Một số chuẩn cho kết nối điển hình trong OBC của vệ tinh hiện nay là : MIL-
STD-1552B, SpaceWire, CAN – bus.
Giao diện transponder.
Một trong những hoạt động của OBC là gửi những dữ liệu khoa học thu nhận
được về trạm mặt đất, những dữ liệu này được gọi là Telemetry (TM) đồng thời là nhận
lệnh từ trạm mặt đất và xử lý chúng, được gọi là Telecommand (TC). Các lệnh chỉ huy
vệ tinh ngày nay được thực hiên bằng cách áp dụng một phương thức truyền thông được
đặt theo tên của “Ủy ban tư vấn cho hệ thống dữ liệu không gian”- CCSDS.
Hình 1.2.1. Sơ đồ mã hóa và giải mã CCSDS.
Page 8
Nhiệm vụ giải mã TC và mã TM trên vệ tinh được thực hiện bởi một vộ vi xử lý
gọi là CCSDS được tích hợp vào OBC. Hình dưới đây mô tả vị trí của bộ đồng xử lý
CCSDS bên cạnh một OBC trong thực tê. Nó cũng cho thấy các khối chức năng chính
để giải mã TC và mã hóa các chuỗi TM.
Hình 1.2.2. CCSDS processor board.
Nguồn.
OBC thường hoạt động để cung cấp điện áp cho các chip xử lý từ 3,3V đến 5V.
Bus nguồn của OBC thường cung cấp hai nguồn điện áp một chiều là 28V và 50V. Thiết
bị chuyển đổi điện áp được sử dụng như bộ dự phòng. PCDU là nơi phân phối và cung
cấp điện áp cho toàn bộ hệ thống.
Thiết bị kiếm soát nhiệt độ
Công việc giám sát nhiệt độ của vệ tinh được OBC thực hiện thông qua các cảm
biến nhiệt độ được gắn ở vỏ của vệ tinh, tùy theo điều kiện nhiệt độ phân tích được từ
các cảm biến này mà OBC sẽ đưa ra quyết định hớp lý để đảm bảo an toàn cho toàn bộ
hệ thống.
Page 9
1.3 Thiết kế cơ khí của OBC.
Việc thiết kế phần cơ khi cho OBC tuy đơn giản hơn so với việc chế tạo mạch
điện tử hoạt động trong OBC, tuy nhiên công việc này vẫn đòi hỏi một số yêu cầu hết
sức ngặt nghèo nhất là ở kết nối giữa các PCB và vỏ OBC:
- Rung động và va đập trong quá trình khởi động.
- Dao động biên độ nhiệt lớn trên quỹ đạo.
Đầu tiên, các linh kiện được gắn vào board và được hàn lại. Các linh kiện này
được sử dụng phổ biến nhất và linh kiện dán – SMD hoặc BGA. Mỗi bảng mạch phải
được gắn vào một khung nhôm.
Hình 1.3.1. OBC CPU Board.
Một khung như trên cần phải giữ mạch in và các mối nối. Yêu cầu đối với dây
nối là phải được sắp xếp song song và ngắn, để cho tải trọng lên các mối hàn là nhỏ nhất,
bởi khi phóng vệ tinh, sin rung là rất lơn. Ngoài các mối nối chính, các board cần có các
mối nối trung gian để tạo sự chắc chắn cần thiết.
Toàn bộ một nhóm các khung như vậy được lắp ráp thành một OBC tổng thể được
trang bị thêm một khung bọc bên ngoài. Do đó việc thiết kế phần khung bên ngoài là khá
phức tạp.
Page 10
Hình 1.3.1. Khung tổng thể của OBC
Một khía cạnh nữa trong việc thiết kế khung là đảm bảo độ nhiễu điện từ và sự thay
đổi nhiệt độ bên ngoài, phần khung bên ngoài phải chắc chắn và được bọc một lớp bảo
vệ để tránh các tác dụng này.
1.4 Một số OBC mini trên thị trường.
NanoMind A712D – Cubesat Onboard Computer.
NanoMind A712D ứng dụng trên các vệ tinh cỡ nano và pico, thực hiện nhiệm
vụ đo đạc từ xa, cung cấp lưu trữ cho các phần mềm xử lý dữ liệu và ứng dụng người
dùng.
Hình 1.4.1. NanoMind A712D
Một số tính năng nổi bật như :
- Tương thích với các hệ điều hành thời gian thực FreeRTOS.
Page 11
- Hệ điều hành được cài sẵn trình điều khiển.
- Cảm biến 3 trục.
- Giao diện SPI
Đặc tính sản phẩm :
- Chịu được nhiệt độ từ -400C đến 850C.
- PCB bằng Polyimide, khối lượng 50 đến 55g
- Điện áp hoạt động 3,3V
ISIS Onboard Computer.
Đơn vị xử lý tốc độ cao với chip ARM tốc độ 400MHz
Hình 1.4.2. ISIS Onboard Computer.
Một số tính năng nổi bật :
- Chip ARM hoạt động ở tần số cao.
- Tương thích với hệ điều hành thời gian thực FreeRTOS.
- Lưu dữ liệu dự phòng với SD Card.
- 256K FRAM
Page 12
- Cảm biến nhiệt độ.
2 Tìm hiểu và thiết kế khối nén ảnh JPEG.
2.1 Ý tưởng thiết kế.
Như ở phần trên đã trình bày, việc vệ tinh phải chụp ảnh trái đất và gửi về các
trạm mặt đất diễn ra rất thường xuyên, hơn thế nữa các dữ liệu ảnh do camera số trên vệ
tinh chụp thường là những định dạng nguyên gốc và chưa được xử lý (ví dụ TIFF), chính
vì thế để hạn chế dung lượng phải truyền xuống thì hệ thống OBC của vệ tinh nên được
tích hợp bộ xử lý ảnh, cụ thể là nén hoặc mã hóa ảnh. Xuất phát từ nhu cầu đó, ý tưởng
thiết kế của em là thiết kế một bộ nén ảnh sống (tức là ảnh chưa xử lý, có thể là ảnh
TIFF) để biến đổi dữ liệu ảnh thành dữ ảnh JPEG dưới dạng nhị phân, do đó kích thước
chuỗi bit cần truyền xuống trạm mặt đất sẽ nhỏ đi rất nhiều mà ảnh khôi phục lại có chất
lượng không suy giảm nhiều. Toàn bộ phần xử lý ảnh này sẽ được thiết kế bằng phần
cứng trên FPGA để dễ dàng tích hợp với OBC. Song song với đó, em cũng xây dựng cơ
chế để khôi phục được ảnh JPEG từ chuỗi bit thu được từ vệ tinh gửi xuống trạm mặt
đất, việc này được thực hiện nhờ một chương trình nhỏ viết bằng Matlab. Nhờ đó, ta có
thể đối chiếu được ảnh JPEG sau khi được xử lý với ảnh gốc ban đầu để kiểm chứng độ
trung thực của bộ xử lý.
Hình 2.1.1. Sơ đồ tổng quan ý tưởng thiết kế.
2.2 Nguyên lý nén ảnh JPEG.
2.2.1 Tổng quan về công nghệ nén ảnh và JPEG.
Trước hết ta nên hiểu qua thế nào là nén ảnh tĩnh? Hiểu cách đơn giản nén ảnh là
việc làm giảm kích thước cỡ, dung lượng của bức ảnh bằng các biện pháp kĩ thuật, có
thể có hoặc không mất mát thông tin.
Page 13
Quá trình nén ảnh không làm mất mát dữ liệu ( dùng phương pháp mã hóa):
Hình 2.2.1.1. Sơ đồ quá trình nén ảnh không mất mát.
Quá trình nén ảnh làm mất dữ liệu ( sử dụng phương pháp biến đổi điểm ảnh):
Hình 2.2.1.2. Sơ đồ quá trình nén ảnh có mất mát.
Các phương pháp mã hóa dữ liệu có thể kể đến:
- Mã hàng loạt (RLE): Dùng số đếm để thay thế các đặc diểm giống nhau lặp lại.
- Mã Shannon-Fano: Dùng các cụm bít có độ dài thay đổi để mã hóa
- Mã Huffman: Sử dụng các đặc điểm mã hóa của Shannon-Fano với ý tưởng: Kí
hiệu có khả năng xuất hiện nhiều có từ mã ngắn.
- Mã Lemple- Ziv: Dựa trên việc xây dựng và tra từ điển
Page 14
- Mã dự đoán: Dựa trên quá trình tạo điểm tuần tự và luật dự đoán.
Các phép biến đổi áp dụng trong nén ảnh bao gồm:
- Phép biến đổi Cosin rời rạc (DCT): Biểu diễn các giá trị điểm ảnh trên miền tần
số, tập trung năng lượng vào một số hệ số. DCT sử dụng trong các chuẩn JPEG và
MPEG
- Phép biến đổi Wavelet rời rạc (DWT): sử dụng các bộ lọc thông dải xử lý phân
tích đa phân trong phép DWT.
- Phép biến đổi Fractal: Sử dụng các phép biến đổi hình học.
JPEG viết tắt của Joint Photographic Experts Group, một nhóm các nhà nghiên
cứu đã phát minh ra định dạng này để hiển thị các hình ảnh đầy đủ màu hơn (full-colour)
cho định dạng di động mà kích thước file lại nhỏ hơn. Đây là một phương pháp nén ảnh
hiệu quả, nó cho phép làm việc với các ảnh có nhiều màu và kích cỡ lớn, tỷ lệ nén ảnh
đạt mức so sánh tới vài chục lần. Nó được công nhận là chuẩn quốc tế năm 1990 cho các
ứng dụng truyền ảnh.
2.2.2 Phương pháp nén ảnh theo chuẩn JPEG.
a. Phép biến đổi DCT (Discrete Cosine Transform).
Như chúng ta đã nói ở trên, phép biến đổi DCT được sử dụng trong phương pháp
nén ảnh theo chuẩn JPEG. Vì vậy trước khi đi vào tìm hiểu về phương pháp nén ảnh
JPEG chúng ta cùng khái quát sơ qua về phép biến đổi DCT.
Phép biến đổi DCT hai chiều.
𝑋[𝑢, 𝑣] = 4. 𝜀𝑘. 𝜀𝑙
𝑀. 𝑁 ∑ ∑ 𝑥(𝑘, 𝑙). cos
𝜋(2𝑘 + 1)𝑢
2𝑀. cos
𝜋(2𝑙 + 1)𝑣
2𝑁
𝑁−1
𝑙=0
𝑀−1
𝑘=0
Với x(k,l) là ma trận các khối điểm ảnh có kích thước 8x8, phép biến đổi DCT
hai chiều được thực hiện lần lượt theo hàng rồi theo cột, đều là các phép biến đổi một
chiều.
Page 15
Phép biến đổi DCT một chiều.
𝑋(𝑢) = 2. 𝜀𝑘
𝑀. ∑ 𝑥(𝑘). cos
𝜋(2𝑘 + 1)𝑢
2𝑀
𝑀−1
𝑘=0
Với 𝜀𝑘 = 1√2
⁄ nếu k=0 và 𝜀𝑘 = 1 với k khác.
Entropy của thông điệp S.
𝐻(𝑆) = ∑ 𝑝𝑖 . log2
1
𝑝𝑖𝑖
Với pi là xác suất của ký hiệu Si trong S.
Vai trò của phép biến đổi DCT trong chuẩn JPEG.
- Tập trung năng lượng vào một số giá trị để giải tương quan tốt nhất nhằm nâng
cao tỷ số nén.
- Giảm độ dư thừa dữ liệu trong pixel ở miền tần số cao.
- Ảnh hưởng trực tiếp đến việc khôi phục lại ảnh cho chất lượng tốt hay xấu.
b. Phương pháp nén ảnh theo chuẩn JPEG.
Phương pháp nén ảnh theo thuẩn JPEG có thể cho hệ số nén tới 80:1 hay lớn hơn,
nhưng bạn phải chịu mất thông tin (ảnh sau khi bung nén khác với ảnh ban đầu), lượng
thông tin mất mát tăng dần theo hệ số nén. Tuy nhiên sự mất mát thông tin này không bị
làm một cách cẩu thả. JPEG tiến hành sửa đổi thông tin ảnh khi nén sao cho ảnh mới gần
giống như ảnh cũ, khiến phần đông mọi người không nhận thấy sự khác biệt. Và bạn
hoàn toàn có thể quản lý sự mất mát này bằng cách hạn chế hệ số nén. Như thế người
dùng có thể cân nhắc giữa cái lợi của việc tiết kiệm bộ nhớ và mức độ mất thông tin của
ảnh, để chọn phương án thích hợp.
Page 16
Hình 2.2.2.1. Sơ đồ nén và giải nén ảnh theo chuẩn JPEG.
Phương pháp nén ảnh JPEG dựa trên nguyên lý sau: ảnh màu trong không gian
của 3 màu RGB (Red Green Blue) được biến đổi về hệ YUV (hay YCbCr) (điều này
không phải là nhất thiết, nhưng nếu thực hiện thì cho kết quả nén cao hơn) theo công
thức :
𝑌𝑈𝑉 = 0,615. 𝑅 − 0,515. 𝐺 − 0,100. 𝐵
𝑌 = 0,299. 𝑅 + 0,587. 𝐺 + 0,114. 𝐵
𝑈 = 0,492. (𝐵 − 𝑌) = −0,147. 𝑅 − 0,289. 𝐺 + 0,436. 𝐵
𝑉 = 0,877. (𝑅 − 𝑌) = 0,578. 𝑅 − 0,587. 𝐺 − 0,114. 𝐵
Hệ YUV là kết quả nghiên cứu của các nhà sản xuất vô tuyến truyền hình hệ Pal,
Secam và NTSC, nhận thấy tín hiệu video có thể phân ra 3 thành phần Y, U, V (cũng
như phân theo màu chuẩn đỏ, xanh lá cây và xanh da trời). Và một điều thú vị là hệ nhãn
thị của con người rất nhạy cảm với thành phần Y và kém nhạy cảm với hai loại U và V.
Phương pháp JPEG đã nắm bắt phát hiện này để tách những thông tin thừa của ảnh. Hệ
Page 17
thống nén thành phần Y của ảnh với mức độ ít hơn so với U, V, bởi người ta ít nhận thấy
sự thay đổi của U và V so với Y.
Hình 2.2.2.2. Các công đoạn nén ảnh JPEG
Giai đoạn tiếp theo là biến đổi những vùng thể hiện dùng biến đổi cosin rời rạc
(thông thường là những vùng 8x8 pixel). Khi đó thông tin về 64 pixel ban đầu sẽ biến
đổi thành ma trận có 64 hệ số thể hiện "thực trạng" các pixel. Điều quan trọng là ở đây
hệ số đầu tiên có khả năng thể hiện "thực trạng" cao nhất, khả năng đó giảm rất nhanh
với các hệ số khác. Nói cách khác thì lượng thông tin của 64 pixel tập trung chủ yếu ở
một số hệ số ma trận theo biến đổi trên. Trong giai đoạn này có sự mất mát thông tin,
bởi không có biến đổi ngược chính xác. Nhưng lượng thông tin bị mất này chưa đáng kể
so với giai đoạn tiếp theo. Ma trận nhận được sau biến đổi cosin rời rạc được lược bớt
sự khác nhau giữa các hệ số. Đây chính là lúc mất nhiều thông tin vì người ta sẽ vứt bỏ
những thay đổi nhỏ của các hệ số. Như thế khi bung ảnh đã nén bạn sẽ có được những
tham số khác của các pixel. Các biến đổi trên áp dụng cho thành phần U và V của ảnh
với mực độ cao hơn so với Y (mất nhiều thông tin của U và V hơn). Sau đó thì áp dụng
Page 18
phương pháp mã hóa của Hoffman: Phân tích dãy số, các phần tử lặp lại nhiều được mã
hóa bằng ký hiệu ngắn (marker).
𝐹(𝑢, 𝑣) = 𝐶(𝑢). 𝐶(𝑣)
4. ∑ ∑ 𝑓(𝑗, 𝑘). cos
(2𝑗 + 1)𝑢𝜋
16. cos
(2𝑘 + 1)𝑣𝜋
16
7
𝑘=0
7
𝑖=0
Trong đó f(j,k) là mẫu gốc trong khối 8x8
F(u,v) là hệ số khối DCT
𝐶(𝑢), 𝐶(𝑣) = 1√2
⁄ với u=v=0
C(u), C(v) =1 nếu u,v khác 0
Lượng tử hóa.
Nhiệm vụ của bước này là mã hóa ma trận đầu ra của khối DCT thành các giá trị
mức xám đặc trưng cho cường độ sáng.
Quá trình này được thực hiện bằng cách chia hệ số DCT cho các mức lượng tử tương
ứng, giá trị được làm tròn xuống số nguyên gần nhất :
𝐹𝑄(𝑢, 𝑣) = 𝐼𝑛𝑡𝑒𝑔𝑒𝑟𝑅𝑜𝑢𝑛𝑑[𝐹(𝑢,𝑣)
𝑄(𝑢,𝑣)]
Ở đây, các mức lượng tử được tổ chức thành bang lượng tử Q(u,v) và tuy ứng dụng khác
nhau mà ta sử dụng những bảng lượng tử khác nhau. Bảng lượng tử thông dụng là
Hình 2.2.2.3. Một bảng lượng tử thường dùng.
Page 19
Hình 2.2.2.4. Ví dụ thực hiện lượng tử hóa.
Mã hóa.
Đầu vào của bước mã hóa được chia thành hai phần phân biệt để xử lý là DC ( hệ
số một chiều) và AC ( hệ số xoay chiều).
- Hệ số xoay chiều AC.
Các hệ số AC được sắp xếp theo kiểu zig-zag, việc này có tác dụng là ạo ra nhiều
hệ số giống nhau bởi vì các hệ số tần số cao thường có giá trị 0, vì thế khi quét zigzag sẽ
xuất hiện nhiều số 0 liên tiếp trong dãy, điều này rất thuận tiện cho việc dùng mã VLC.
Hình 2.2.2.5. Quét zigzag để sắp xếp hệ số AC.
Tiếp đó các hệ số AC được mã hóa VLC
Page 20
Hình 2.2.2.6. Lược đồ mã hóa AC.
- Hệ số một chiều DC.
Hệ số DC được mã hóa theo phương pháp biến đổi xung mã.
Hình 2.2.2.7. Lược đồ mã hóa DC.
Khi bung ảnh người ta chỉ việc làm lại các bước trên theo quá trình ngược lại cùng
với các biến đổi ngược. Vì phương pháp này thực hiện với các vùng ảnh (thông thường
là 8 x 8 pixel) nên hay xuất hiện sự mất mát thông tin trên vùng biên của các vùng (block)
này. Hiện nay người ta đã giải quyết vấn đề này bằng cách làm trơn ảnh sau khi bung
nén để che lấp sự khác biệt của biên giới giữa các block. Một hệ nén ảnh theo chuẩn
JPEG cùng algorithm làm trơn ảnh đã được công ty ASDG đưa ra trong hệ Art
Department Professional.
2.2.3 So sánh ảnh JPEG và ảnh TIFF.
TIFF hay Tagged Image File Format là một chuẩn định dạng để lưu trữ ảnh, ảnh
TIFF không bị mất mát hoặc giám chất lượng khi truyền, thường được dùng trong in ấn
Page 21
hay máy fax số. Chuẩn TIFF bao gồm một số loại ảnh : ảnh nhị phân (Bilevel Image),
ảnh đa mức xám (Grayscale image), ảnh đa màu sắc (Palette-color image), ảnh màu RGB
đầy đủ (RGB full color image), ngoài ra còn một số loại cải tiến (YCbCr Image,…).
Một so sánh chung nhất cho 2 chuẩn TIFF và JPEG là : yêu cầu về tài nguyên sử
dụng của JPEG giảm rất nhiều so với TIFF, nhờ vậy tốc độ mở file cũng như dung lượng
lưu trữ của tệp tin JPEG nhỏ hơn TIFF ( khoảng 10 lần) trong khi chất lượng nội dung
không có nhiều khác biệt.
2.3 Thiết kế chi tiết và triển khai.
Thiết kế này sử dụng ảnh đầu vào là TIFF loại ảnh RGB Full Color Image và
ảnh JPEG thu được có tỷ lệ lấy mẫu là 4:4:4 ( để đơn giản trong việc viết chương
trình).
Hình 2.3.1. Thiết kế chi tiết module nén ảnh JPEG.
Ta sẽ thiết kế từng thành phần của module này
2.3.1 Input.
Ba đầu vào cơ bản của module JPEG gồm có clock (clk), enable (enable), reset
(rst) và một tín hiệu Global Clock (gclk). Global clock là xung nhịp đồng hồ chạy xuyên
Page 22
suốt các khối trong module JPEG và tất cả các thanh ghi, bộ đệm trong module này đều
phải đồng bộ theo sườn lên của xung này, mục đích của việc này để tránh gây bất đồng
bộ trong quá trình thực hiện. Tín hiệu enable được đưa lên mức logic “1” khi dữ liệu của
pixel đầu tiên của ảnh sẵn sang, theo chuẩn JPEG thì một pixel được mã hóa 8 bits.
Enable được giữ ở “1” trong khi dữ liệu ảnh đang được đưa vào module, sẽ mất 64 chu
kỳ đồng hồ để đưa dữ liệu của một block 8x8 ( 64 pixel) vào. Sau 64 chu kỳ này, tín hiệu
enable tiếp tục được giữ ở”1” trong khoảng tối thiểu 33 chu kỳ nữa, và tốt nhất không
nên đưa thêm bất kỳ dữ liệu gì vào module trong 33 chu kỳ này, điều này giúp module
hoạt động đúng và ổn định. Tiếp đó enable sẽ được đưa xuống mức logic “0” trong 1
chu kỳ rồi lại đưa lên “1” báo hiệu cho block 8x8 tiếp theo được đưa vào module. Quá
trình cứ lặp lại như vậy đến block cuối cùng.
Dữ liệu vào (data_in) có độ rộng 24 bits, đây là sự tổng hợp của 3 giá trị pixel
Red, Green, Blue ( mỗi giá trị 8 bit : 0-255). Giá trị pixel Blue là data_in[23:16], pixel
Green là data_in[15:8] và pixel Red là data_in[7:0]). Các giá trị này được tách trực tiếp
từ ảnh đầu vào là “ja.tif” kích thước 96x96 bằng một chương trình matlab tự viết rất đơn
giản “extract.m” (file được gửi kèm báo cáo).
Một tín hiệu đầu vào cuối cùng của module là end_of_file_signal, tín hiệu này
được đưa lên “1” tại chu kỳ đầu tiên khi bắt đầu đưa dữ liệu của block cuối cùng của ảnh
vào, nó báo cho module biết phải xuất hết dữ liệu output từ khối cuối cùng này. Dữ liệu
output là 32 bit, bình thường nếu không làm gì, khi truyền dữ liệu giữa các khối có một
số bit sẽ không điền đầy 32 bit này do vậy sẽ không được xuất ra. Thay vì như vậy, ta sẽ
lấy thêm vài bit từ block tiếp theo để thêm vào cho đủ 32 bit output, tại block cuối cùng,
với điều kiện của tín hiệu end_of_file_signal thì tất cả các bit còn lại sẽ được đưa ra.
Như vậy hầu như không có mất mát dữ liệu.
Page 23
2.3.2 Color Transformation.
Đây là hoạt động đầu tiên của module này, ta sẽ chuyển từ các giá trị pixel R, G,
B sang giá trị chói và màu tương ứng là Y, Cb, Cr. Sub-module thực hiện là
RGB2YCbCr, công thức chuyển đổi là:
𝑌 = 0,299. 𝑅 + 0,587. 𝐺 + 0,114. 𝐵
𝐶𝑏 = −0,1687. 𝑅 − 0,3313. 𝐺 + 0,5. 𝐵 + 128
𝐶𝑟 = 0,5. 𝑅 − 0,4187. 𝐺 − 0,0813. 𝐵 + 128
Ở đây ta sử dụng phép toán với dấu phẩy cố định, tất cả các giá trị hệ số trong ma
trận 3x3 trên được nhân với 2^14 (16384). Các phép nhân được thực hiện trong một chu
kỳ đồng hồ sau đó chúng được cộng lại với nhau trong chu kỳ tiếp theo. Tổng thu được
sẽ chia cho 2^14 bằng cách dịch phải 14 bit, nếu bit LSB thứ 13 mà là 1 thì sẽ cộng thêm
1 vào tổng sau khi đã dịch để làm tròn, bằng 0 thì giữ nguyên.
2.3.3 Discrete Cosine Transform.
Trong bước này ta sẽ thực hiện biến đổi DCT 2 chiều cho các ma trận 8x8 Y,
Cb, Cr một cách riêng biệt nhưng hoàn toàn tương tự nhau. Module thực hiện là y_dct,
cb_dct, cr_dct. Công thức biến đổi như sau:
DY = T * Y * inv(T)
T là ma trận hệ số DCT, Y là ma trận giá trị Y, DY là ma trận kết quả sau biến
đổi DCT 2 chiều. Ở bước trước chúng ta không làm các giá trị Y, Cb, Cr xung quanh giá
trị 0 bới vì để thực hiện DCT các giá trị Y, Cb, Cr cần trong khoảng (-128,127). Để làm
điều này, ta sẽ trừ 128 vào giá trị Y cuối cùng trong khi không cộng 128 vào giá trị Cb
và Cr. Tuy nhiên để thực hiện DCT dễ dàng hơn, ta thực hiện 1 vài chi tiết nhỏ để cho
phép chúng ta giữ giá trị Y, Cb, Cr trong khoảng (0,255).
Ma trận T được nhân với 2^14, các hàng của T là trực giao trừ hàng đầu tiên, nhờ
đó sẽ không đạng ngại khi Y không trong khoảng (-128,127). Thực hiện nhân hàng của
Page 24
T với cột của Y thì ta sẽ loại bỏ được giá trị thừa 128 trong Y do tính trực giao. Tuy
nhiên do hàng đầu của T không trực giao nó sẽ chứa một hằng số là 3536 hoặc 5793 sau
khi nhân với 2^14. Do vậy phần thừa 128 trong mỗi giá trị sẽ được tích lũy trong tổng
cuối cùng là 128*8*5793 = 5932032 và phần thừa này sẽ bị trừ trực tiếp vào tổng cuối
cùng khi nhân hàng đầu tiên của T với các cột của Y. Tất cả là 8 phép trừ, trong khi nếu
ngay trừ trước khi DCT ta đưa các giá trị Y về khoảng (-128,127) ta mất 64 phép trừ.
Sau khi nhân ma trận T với Y, kết quả thu được sẽ được nhân với ma trận đảo của
T, đến đây có khá nhiều cách để thực hiện nhưng thao tác này sẽ hoạt động với yêu cầu
đạt tần số clock cao nhất cho thiết kế.
Trên đây trình bày cho ma trận Y, ta nên hiểu rằng ma trận Cb, Cr thực hiện tương tự.
2.3.4 Quantization
Đây là một bước khá đơn giản. Module thực hiện là y_quantizer, cb_quantizer,
cr_quantizer. 64 mức lượng tử được lưu trữ trong các tham số Q1_1 cho đến Q8_8.
Chúng ta có thể chọn các giá trị này khác đi nếu muốn, ở đây sau khi đã làm thử nhiều
lần em quyết định chọn sử dụng các giá trị của 1 tương ứng với Q=100.
Như đã thực hiện trên, thiết kế này hoàn toàn không sử dụng bộ chia riêng biệt
nào vì điều này không cần thiết và còn làm tăng khối lượng tính toán của thiết kế. Cách
làm ở đây như sau, ta thiết lập một bộ tham số QQ1_1 đến QQ8_8, mỗi giá trị được tính
bằng cách lấy 4096 chia cho Q1_1 đến Q8_8 tương ứng, phép chia này khi tổng hợp
không đòi hỏi bộ chia 2 số trong FPGA. Đầu vào của module quantization sẽ được nhân
tương ứng với bộ tham số QQ1_1 đến QQ8_8, sau đó 12 bit của kết quả sẽ được cắt để
làm output, kết quả được làm tròn dựa vào bit LSB thứ 11.
2.3.5 Huffman Encoding.
Sau khi lượng tử hóa, ta sẽ mã hóa Huffman cho đầu ra của cá module
quantization. Module thực hiện điều này là y_huff, cb_huff, cr_huff. Một module dùng
để đóng gói 3 quá trình biến đổi DCT, quantization và mã hóa Huffman được tạo ra cho
Page 25
thiết kệ tiện lợi là yd_q_h, cbd_q_h, crd_q_h. Các ma trận giá trị của block 8x8 trong
input được viết vào theo kiểu truyền thống tức là theo hàng và từ trái sang phải. Trong
khi thực hiên biến đổi DCT, ta phải nhân hàng của T với cột của Y vậy nên Y sẽ được
tổ chức theo kiểu cột từ trên xuống dưới. Thay vì thế, ta vẫn tổ chức Y theo kiểu truyền
thống rồi sẽ đảo giá trị khi chúng đi qua giữa 2 module quatizer và Huffman.
Các giá trị của bảng Huffman có thể được thay đổi, tuy nhiên khuyến cáo không
nên thay đổi vì sẽ phải biên dịch lại mất công. Rất may ảnh chọn đầu vào kích thước
nhỏ, nếu không ta sẽ phải tạo ra bang Huffman đầy đủ để xử lý, như vậy sẽ tốn thêm khá
nhiều tài nguyên để lưu trữ những hệ số này. Thành phần DC được tính toán trước, tiếp
đó thành phần AC sẽ được tính theo thứ tự zigzag. Ouput của module này sẽ là 32bit.
2.3.6 Creating Output Bitstream.
Kết quả của y_huff, cb_huff, cr_huff được tổ hợp trong module pre_fifo, module
này chỉ có nhiệm vụ tổ chức 3 module kia thành một thôi chứ không có thêm bất kì phép
logic hay hàm nào. Cấp bậc tiếp theo trong thiết kế là module fifo_out, nó tổ hợp module
pre_fifo cùng với 3 module sync_fifo_32. Các module sync_fifo_32 dùng để lưu trữ
output của y_huff, cb_huff, cr_huff; nó có 16 thanh ghi. Số lượng thanh ghi trong bộ
đệm này có thể tăng lên nếu như giá trị bảng Quantization nhỏ, thậm chí có thể gây tràn
bộ đệm.
Ouput JPEG Bitstream được tổ hợp từ mã hóa Huffman của Y, Cb Cr lần lượt
theo thứ tự đó cho mỗi block 8x8. Sau đó, mã Huffman của block tiếp theo sẽ được đưa
vào chuỗi này. Sau module fifo_out, dữ lieu được đưa vào module ff_checker, module
này tìm kiếm “FF” trong bitstream, mỗi khi tìm thấy “FF” nó sẽ thêm “00” vào sau”FF”.
Trợ giúp nó là sync_fifo_ff để lưu dữ liệu mà nó đã duyệt qua khi tìm “FF”. Một JPEG
output bitstream sẽ hợp lệ khi tín hiêu data_ready bằng “1”.
Page 26
Hình 2.3.6.1. Sơ đồ phân cấp module trong thiết kế.
2.3.7 Testbench.
Module testbench là jpeg_top_tb, như đã nói ở phần input, dữ liệu của ảnh ja.tif
được tách thành các giá trị pixel R, G, B, các giá trị này được lưu là lượt trong tệp
“ja_bits_input.txt”. Testbench dùng để mô phỏng module jpeg_top và thiết lập các giá
trị thời gian để các sub-module hoạt động đúng. Output bitstream sau khi chạy mô phỏng
xong sẽ được ghi ra tệp “ja_output.v” để tiện sử dụng sau này khi tạo ảnh JPEG.
2.4 Kết quả và mô phỏng.
Toàn bộ thiết kế trên được triển khai trên FPGA Virtex 5, Device XC5VFX100T,
Package FF1136. Tốc độ clock lớn nhất mà Device này hỗ trợ thiết kế là 290Mhz. Tài
nguyên sử dụng như sau :
Slice Registers 31878 uses (49%)
Slice LUTs 33098 uses (51%)
BlockRAM/FIFO 8 uses (3%)
DSP48E 256 uses (100%)
BUFG/BUFGCTRLs 2 uses ( 6%)
Page 27
Từ file “ja_output.v” có được từ trên, ta thực hiện thêm một chương trình matlab
để tạo ra ảnh JPEG nhằm kiểm chứng độ chung thực của thiết kế (“ahuff11.m”). Cách
làm tương đối đơn giản, ta sẽ tách header từ một ảnh JPEG có sẵn có cùng kích thước
96x96 (“test1.jpg”) sau đó ta tách bảng hệ số Huffman cũng từ một ảnh JPEG khác
(“gisele.jpg”). Tất cả dữ liệu header và Huffman cùng với bitstream được xếp vào 1 tệp
mới gọi là “ja.jpg” cùng với dấu hiệu kết thúc ảnh “FFD9” ở cuối. Thực hiện chương
trình ta thấy xuất hiện file “ja.jpg” là file JPEG.
Hình 2.4.1. Trước khi tạo ảnh JPEG.
Hình 2.4.2. Sau khi tạo ảnh JPEG.
Page 28
Mở thử ảnh để quan sát:
Hình 2.4.3. Ảnh TIFF (bên trái) và ảnh JPEG (bên phải).
Nhận xét : gần như không có sự khác biệt nhiều giữa 2 loại ảnh này trong khi dung lượng
ảnh TIFF là 28KB còn ảnh JPEG là 9KB. Như vậy thiết kế đảm bảo được tính chính xác
như theo lý thuyết.
KẾT LUẬN
Thông qua bài tìm hiểu này, chúng ta có thể cơ bản hiểu được phần nào cấu tạo và hoạt
động của các OBC trên vệ tinh và thấy được tầm quan trọng vô cùng to lớn của vệ tinh.
Thực tế OBC rất hiện đại, và có thể việc xử lý ảnh chỉ là một phần rất nhỏ của nó và
cũng có thể có nhiều phương pháp mới hơn, tốt hơn để phục vụ cho mục đích này, nhưng
những ứng dụng của chuẩn nén ảnh JPEG thì vẫn mang nhiều ý nghĩa và được ứng dụng
rộng rãi nhất là khi truyền ảnh. Những bộ xử lý ảnh cho vệ tinh như vậy thường được
thiết kế nhúng nên sẽ rất nhỏ và tiện lợi.
Đến đây em xin được kết thúc báo cáo, em rất mong nhận được nhiều ý kiến góp ý của
thầy để em hoàn thiện hơn những tìm hiểu của mình phục vụ cho học tập môn thông tin
vệ tinh cũng như học hành sau này.
Page 29
TÀI LIỆU THAM KHẢO [1] Onboard Computer, Onboard Software and Satellite Operations – Jens Eickhoff.
[2] Onboard Computer for Satellite – M.A. Perry
[3] JPEG IMAGE COMPRESSION USING VERILOG, B.Raghu Kanth,S R Sastry
Kalavakolanu, M.Aravind Kumar, D.N.Bhushan Babu
[4] A JPEG Encoder in SystemC – Bjorn Jonsson
DANH MỤC HÌNH ẢNH Hình 1.1.1. Voyager FDS computer main board
Hình 1.1.2. Chip LEON3FT.
Hình 1.2.1 Sơ đồ mã hóa và giải mã CCSDS.
Hình 1.2.2. CCSDS processor board.
Hình 1.3.1. OBC CPU Board.
Hình 1.3.1. Khung tổng thể của OBC
Hình 1.4.1. NanoMind A712D
Hình 1.4.2. ISIS Onboard Computer.
Hình 2.1.1. Sơ đồ tổng quan ý tưởng thiết kế.
Hình 2.2.1.1. Sơ đồ quá trình nén ảnh không mất mát.
Hình 2.2.1.2. Sơ đồ quá trình nén ảnh có mất mát.
Hình 2.2.2.1. Sơ đồ nén và giải nén ảnh theo chuẩn JPEG.
Hình 2.2.2.2. Các công đoạn nén ảnh JPEG
Hình 2.2.2.3. Một bảng lượng tử thường dùng.
Page 30
Hình 2.2.2.4. Ví dụ thực hiện lượng tử hóa.
Hình 2.2.2.5. Quét zigzag để sắp xếp hệ số AC.
Hình 2.2.2.6. Lược đồ mã hóa AC.
Hình 2.2.2.7. Lược đồ mã hóa DC.
Hình 2.3.1. Thiết kế chi tiết module nén ảnh JPEG.
Hình 2.3.6.1. Sơ đồ phân cấp module trong thiết kế.
Hình 2.4.1. Trước khi tạo ảnh JPEG.
Hình 2.4.2. Sau khi tạo ảnh JPEG.
Hình 2.4.3. Ảnh TIFF (bên trái) và ảnh JPEG (bên phải).