30
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 dn : PGS.TS.Vũ Văn Yêm Sinh viên thc hin : Nguyn Nam Hi MSSV : 20101479 Lp : KSTN ĐTVT – K55 Hà Nội 12-2014

TTVT

Embed Size (px)

DESCRIPTION

dsa

Citation preview

Page 1: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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: TTVT

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).