You are on page 1of 27

TRƯỜNG ĐẠI HỌC BÁCH KHOA

KHOA ĐIỆN TỬ - VIỄN THÔNG

THÍ NGHIỆM THÔNG TIN SỐ

Đà Nẵng, tháng 12/2021


MỞ ĐẦU: GIỚI THIỆU VỀ MATLAB
Matlab là sản phẩm của hãng Mathwork
- Công cụ lập trình, thuận tiện trong các bài toán kỹ thuật phức tạp
- Thuận tiện tính toán ma trận, vẽ đồ thị, biểu đồ, thực hiện thuật toán, tạo giao
diện người dùng
- Liên kết với các chương trình máy tính khác viết bằng ngôn ngữ lập trình khác.
Matlab bao gồm:
- Gồm các hàm xây dựng trong các trình biên dịch và có trong các mfile
- Mỗi hàm gồm một dãy câu lệnh thực hiện một thuật toán
- Có thể tự viết chương trình mới và lưu trong m-file mới
- Các cửa sổ: command window, history, workspace, editor window, figure
window, current director window.
MABLAB, viết tắt của Matrix Labotary, là một công cụ phần mềm hỗ trợ
tính toán trên ma trận. MATLAB được tích hợp trên một môi trường chung một
loạt các khả năng bao gồm tính toán, hiển thị kết quả và lập trình nhằm giải quyết
các vấn đề liên quan đến toán học. Các vấn đề đó bao gồm:
- Các phương trình toán học và toán tử
- Phát triển các giải thuật
- Thu thập dữ liệu
- Mô hình hóa, mô phỏng và tạo các mẫu thiết kế
- Phân tích, khảo sát và thể hiện dữ liệu bằng hình ảnh
- Phát triển các giao diện với người sử dụng
Ưu điểm nổi bật của MATLAB, như đã được đề cập ở trên, là khả năng tính toán,
đặc biệt là những bài toán liên quan đến ma trận và vector, với thời gian ít hơn
nhiều lần so với cùng một công việc tính toán trên các ngôn ngữ lập trình khác
như C hay Fortran. Khả năng lập trình của MATLAB cũng rất linh hoạt, cụ thể
là trong việc tạo ra các câu lệnh riêng và các hàm của riêng người sử dụng.
Hệ thống MATLAB gồm có 5 phần chính:
 Môi trường phát triển: là một tập hợp các công cụ, phần lớn trong chúng
là các giao diện đồ hoạ, giúp người dùng sử dụng các câu lệnh và các hàm của
MATLAB.
 Thư viện các hàm toán học: Là một tập hợp các hàm toán học bao gồm từ
các hàm cơ bản như sin, cosin, các phép tính đại số phức đến các hàm
phức tạp như tìm ma trận đảo, tìm ma trận riêng, hàm Bessel và biến đổi
Fourier nhanh (Fast Fourier Transform – FFT).
 Ngôn ngữ lập trình: là một ngôn ngữ bậc cao liên quan đến ma trận và
mảng. Trong MATLAB có đầy đủ những đặc trưng của một ngôn ngữ lập
trình bao gồm các lệnh rẽ nhánh, các hàm, cấu trúc dữ liệu, nhập/xuất dữ
liệu, và các đặc tính lien quan đến lập trình hướng đối tượng (object-
oriented programming).
 Đồ hoạ: là một tập hợp các công cụ để biểu diễn ma trận và vector bằng đồ
hoạ. Bên cạnh các công cụ ở mức thấp để thể hiện dữ liệu dạng 2 chiều và
3 chiều, xử lý hình ảnh tĩnh, ảnh động còn có các công cụ ở mức cao dùng
để tạo ra các biểu diễn đồ hoạ theo ý đồ của người sử dụng cũng như tạo ra
các giao diện đồ hoạ users.
 Các API: Là một thư viện cho phép người sử dụng gọi các hàm viết trên
ngôn ngữ C và Fortran. Chúng bao gồm cả các công cụ cho phép gọi các
hàm từ MATLAB dưới dạng liên kết động, và để đọc và ghi các tệp .MAT.
Để khởi động MATLAB, người sử dụng có thể nháy đúp chuột vào biểu tượng
MATLAB trên màn hình desktop hoặc vào menu Start -> All Programs ->
MATLAB ->R2009b -> MATLAB R2009b từ giao diện của Windows. Sau khi
MATLAB được khởi động, trên màn hình người sử dụng sẽ hiển thị lên môi
trường phát triển tích hợp của MATLAB bao gồm một số cửa sổ như trong Hình
1.1.
Hình 1.1 Giao diện chính của MATLAB

Trong đó có các cửa số quan trọng sau:


 Cửa sổ lệnh (Command Window): có chức năng thể hiện dấu nhắc
để nhập vào các lệnh từ bàn phím, và hiển thị kết quả tính toán sau khi gõ
một lệnh hoặc gọi một hàm.
 Cửa sổ các lệnh đã dùng (Command History): thể hiện danh mục
các lệnh đã gõ hoặc các hàm đã được gọi theo các phiên làm việc.
 Cửa sổ thư mục hiện thời (Current Directory): thể hiện danh sách
các tệp dạng đuôi .m đang tồn tại trong thư mục hiện thời. Để thay đổi thư
mục hiện thời trên cửa sổ nhỏ nằm ngay bên trên cửa số lệnh.
 Vùng làm việc (Workspace): thể hiện danh mục tất cả các biến bao
gồm: tên biến, giá trị hiện thời của biến, kiểu biến đang tồn tại ở phiên
làm việc hiện tại.
Ngoài ra còn một loạt các cửa sổ khác sẽ được kích hoạt và hiển thị khi gọi một
lệnh hoặc chọn một mục trong phần Menu của MATLAB. Để biết thêm về các
cửa số có thể tham khảo t hêm trong phần trợ giúp (Help) của MATLAB bằng
cách nhấn phím F1. Để soạn thảo một kịch bản hoặc một hàm, thực hiện chọn
menu File -> New -> M-File hoặc nhắp chuột vào biểu tượng New M-File trên
thanh công cụ (Toolbar). Trên màn hình sẽ hiển thị lên cửa sổ soạn thảo (Editor)
có đầy đủ các chức năng soạn thảo giống như bất cứ môi trường soạn thảo của
ngôn ngữ lập trình nào khác. Để xem trợ giúp về một lệnh hay một hàm có sẵn
nào đó của MATLAB, gõ lệnh help kèm theo tên của lệnh hoặc hàm từ cửa sổ
lệnh của MATLAB, ví dụ: >> help fft
trên cửa số lệnh sẽ đưa ra nội dung về chức năng, cú pháp cho các tham số vào/ra
cho hàm thực hiện phép biến đổi Fourier nhanh được MATLAB đặt dưới tên FFT.
1.1. Operators
There are in general two kinds of operators: unary operators, which operate on a single
value or operand; and binary operators, which operate on two values or operands. The
symbol “–”, for example, is both the unary operator for negation and the binary operator
for subtraction.
Here are some of the common operators that can be used with numeric expressions:
+ addition
– negation, subtraction
* multiplication
/ division (divided by e.g. 10/5 is 2)
\ division (divided into e.g. 5\10 is 2)
^ exponentiation (e.g., 5^2 is 25)
1.2. Vectors and matrices
Vectors and matrices are used to store sets of values, all of which are the same type. A
vector can be either a row vector or a column vector. A matrix can be visualized as a
table of values. The dimensions of a matrix are r × c, where r is the number of rows and
c is the number of columns. This is pronounced “r by c.” If a vector has n elements, a
row vector would have the dimensions 1 × n, and a column vector would have the
dimensions n × 1. A scalar (one value) has the dimensions 1 × 1. Therefore, vectors
and scalars are actually just subsets of matrices. Here are some diagrams showing, from
left to right, a scalar, a column vector, a row vector, and a matrix:

The scalar is 1 × 1, the column vector is 3 × 1 (3 rows by 1 column), the row vector is
1 × 4 (1 row by 4 columns), and the matrix is 3 × 3. All the values stored in these
matrices are stored in what are called elements.
MATLAB is written to work with matrices; the name MATLAB is short for “matrix
laboratory.” For this reason, it is very easy to create vector and matrix variables, and
there are many operations and functions that can be used on vectors and matrices.
A vector in MATLAB is equivalent to what is called a one-dimensional array in other
languages. A matrix is equivalent to a two-dimensional array. Usually, even in
MATLAB, some operations that can be performed on either vectors or matrices are
referred to as array operations. The term array also frequently is used to mean
generically either a vector or a matrix.
1.2.1. Creating row Vectors
There are several ways to create row vector variables. The most direct way is to put the
values that you want in the vector in square brackets, separated by either spaces or
commas. For example, both of these assignment statements create the same vector v:
>> v = [1 2 3 4]
v=
1234
>> v = [1,2,3,4]
v=
1234
Both of these create a row vector variable that has four elements; each value is stored
in a separate element in the vector.
If, as in the earlier examples, the values in the vector are regularly spaced, the colon
operator can be used to iterate through these values. For example, 1:5 results in all the
integers from 1 to 5:
>> vec = 1:5
vec =
12345
Note that in this case, the brackets [ ] are not necessary to define the vector.
With the colon operator, a step value can also be specified with another colon, in the
form (first:step:last). For example, to create a vector with all integers from 1 to 9 in
steps of 2:
>> nv = 1:2:9
nv =
13579
Similarly, the linspace function creates a linearly spaced vector; linspace(x,y,n) creates
a vector with n values in the inclusive range from x to y. For example, the following
creates a vector with five values linearly spaced between 3 and 15, including the 3 and
15:
>> ls = linspace(3,15,5)
ls =
3 6 9 12 15
Vector variables can also be created using existing variables. For example, a new vector
is created here consisting first of all the values from nv followed by all values from ls:
>> newvec = [nv ls]
newvec =
1 3 5 7 9 3 6 9 12 15
Putting two vectors together like this to create a new one is called concatenating the
vectors.
1.2.2 Creating Column Vectors
One way to create a column vector is by explicitly putting the values in square brackets,
separated by semicolons:
>> c = [1; 2; 3; 4]
c=
1
2
3
4
There is no direct way to use the colon operator described earlier to get a column vector.
However, any row vector created using any of these methods can be transposed to get
a column vector. In general, the transpose of a matrix is a new matrix in which the rows
and columns are interchanged. For vectors, transposing a row vector results in a column
vector, and transposing a column vector results in a row vector. MATLAB has a built-
in operator, the apostrophe, to get a transpose.
>> r = 1:3;
>> c = r’
c=
1
2
3
1.2.3. Creating Matrix Variables
Creating a matrix variable is really just a generalization of creating row and column
vector variables. That is, the values within a row are separated by either spaces or
commas, and the different rows are separated by semicolons. For example, the matrix
variable mat is created by explicitly typing values:
>> mat = [4 3 1; 2 5 6]
mat =
4 3 1
2 5 6
There must always be the same number of values in each row. If you attempt to create
a matrix in which there are different numbers of values in the rows, the result will be an
error message; for example:
>> mat = [3 5 7; 1 2]
??? Error using ==> vertcat
CAT arguments dimensions are not consistent.
Iterators can also be used for the values on the rows using the colon operator; for
example:
>> mat = [2:4; 3:5]
mat =
2 3 4
3 4 5
Different rows in the matrix can also be specified by pressing the Enter key after each
row instead of typing a semicolon when entering the matrix values; for example:
>> newmat = [2 6 88
33 5 2]
newmat =
2 6 88
33 5 2
Matrices of random numbers can be created using the rand and randint functions. The
first two arguments to the randint function specify the size of the matrix of random
integers. For example, the following will create a 2 × 4 matrix of random integers, each
in the range from 10 to 30:
>> randint(2,4,[10,30])
ans =
29 22 28 19
14 20 26 10
For the rand function, if a single value n is passed to it, an n × n matrix will be created,
or passing two arguments will specify the number of rows and columns:
>> rand(2)
ans =
0.2311 0.4860
0.6068 0.8913
>> rand(1,3)
ans =
0.7621 0.4565 0.0185
MATLAB also has several functions that create special matrices. For example, the zeros
function creates a matrix of all zeros. Like rand, either one argument can be passed
(which will be both the number of rows and columns), or two arguments (first the
number of rows and then the number of columns).
>> zeros(3)
ans =
0 0 0
0 0 0
0 0 0
>> zeros(2,4)
ans =
0 0 0 0
0 0 0 0
1.4. Plot and Subplot
The MATLAB command plot allows you to graphically display vector data (in our case
here, the two signals). For example, if you had the variables t for time, and y for the
signal, typing the command plot(t, y); will display a plot of t vs. y. See help plot for
more information. Annotating your plots is very IMPORTANT! Here are a few
annotation commands.
• title('Here is a title'); - Adds the text "Here is a title" to the top of the plot.
• xlabel('Control Voltage (mV)'); - Adds text to the X-axis.
• ylabel('Current (mA)'); - Adds text to the Y-axis.
• grid on; - Adds a grid to the plot.
In order to display multiple plots in one window you must use the subplot command.
This command takes three arguments, subplot(m, n, p) . The first two breaks the window
into a m by n matrix of smaller plot windows. The third argument, p, selects which plot
is active. For example, if we have three signals x, y, and z, that we want to plot against
time, t, then we can use the subplot command to produce a single window with three
plots stacked on top of each other.
subplot(3,1,1);
plot(t,x);
subplot(3,1,2);
plot(t,y);
subplot(3,1,3);
plot(t,z);
1.5. Selection Statements
1.5.1. Relational expressions
The relational operators in MATLAB are:
Operator Meaning
> greater than
< less than
>= greater than or equals
<= less than or equals
== equality
~= inequality
The logical operators are:
Operator Meaning
|| or for scalars
&& and for scalars
~ not
1.5.2. The IF statement
The if statement chooses whether or not another statement, or group of statements, is
executed. The general form of the if statement is:
if condition
action
end
A condition is a relational expression that is conceptually, or logically, either true or
false. The action is a statement, or a group of statements, that will be executed if the
condition is true. When the if statement is executed, first the condition is evaluated. If
the value of the condition is conceptually true, the action will be executed, and if not,
the action will not be executed. The action can be any number of statements until the
reserved word end; the action is naturally bracketed by the reserved words if and end.
(Note: This is different from the end that is used as an index into a vector or matrix.)
1.5.3. The IF-ELSE statement and the SWITCH statement
The if statement chooses whether an action is executed or not. Choosing between two
actions, or choosing from several actions, is accomplished using if-else, nested if, and
switch statements.
The if-else statement is used to choose between two statements, or sets of statements.
The general form is:
if condition
action1
else
action2
end
First, the condition is evaluated. If it is conceptually true, then the set of statements
designated as action1 is executed, and that is it for the if-else statement. If instead the
condition is conceptually false, the second set of statements designated as action2 is
executed, and that’s it. The first set of statements is called the action of the if clause; it
is what will be executed if the expression is true. The second set of statements is called
the action of the else clause; it is what will be executed if the expression is false. One
of these actions, and only one, will be executed—which one depends on the value of
the condition.
A switch statement can often be used in place of a nested if-else or an if statement with
many elseif clauses. Switch statements are used when an expression is tested to see
whether it is equal to one of several possible values.
The general form of the switch statement is:
switch switch_expression
case caseexp1
action1
case caseexp2
action2
case caseexp3
action3
% etc: there can be many of these
otherwise
actionn
end
The switch statement starts with the reserved word switch, and ends with the reserved
word end. The switch_expression is compared, in sequence, to the case expressions
(caseexp1, caseexp2, etc.). If the value of the switch_expression matches caseexp1, for
example, then action1 is executed and the switch statement ends. If the value matches
caseexp3, then action3 is executed, and in general if the value matches caseexpi, where
i can be any integer from 1 to n, then actioni is executed. If the value of the
switch_expression does not match any of the case expressions, the action after the word
otherwise is executed.
1.6. The FOR Loop
The for statement, or the for loop, is used when it is necessary to repeat statement(s) in
a script or function, and when it is known ahead of time how many times the statements
will be repeated. The statements that are repeated are called the action of the loop. For
example, it may be known that the action of the loop will be repeated five times. The
terminology used is that we iterate through the action of the loop five times.
The variable that is used to iterate through values is called a loop variable, or an iterator
variable. For example, the variable might iterate through the integers 1 through 5 (e.g.,
1, 2, 3, 4, and then 5). Although variable names in general should be mnemonic, it is
common for an iterator variable to be given the name i (and if more than one iterator
variable is needed, i, j, k, l, etc.) This is historical, and is because of the way integer
variables were named in Fortran. However, in MATLAB both i and j are built-in values
for -1 , so using either as a loop variable will override that value. If that is not an issue,
then it is acceptable to use i as a loop variable.
The general form of the for loop is:
for loopvar = range
action
end
where loopvar is the loop variable, range is the range of values through which the loop
variable is to iterate, and the action of the loop consists of all statements up to the end.
The range can be specified using any vector, but normally the easiest way to specify the
range of values is to use the colon operator.
BÀI 1: KỸ THUẬT MÃ HÓA KÊNH
I. LÝ THUYẾT:
- Mã hóa kênh: kỹ thuật này giúp việc truyền thông tin chính xác hơn trong
môi trường nhiễu loạn của kênh truyền thông. Vấn đề mã kênh dựa trên ý tưởng
thêm các ký hiệu mới vào trong dữ liệu được truyền, để có thể xây dựng các loại
mã nhằm mục đích có thể phát hiện lỗi và sửa sai các lỗi.
- Có 4 dạng kiểm tra lỗi cơ bản dùng mã thừa trong truyền dữ liệu:
+VRC (vertical redundancy check): kiểm tra tính chẵn lẻ của tổng bit ‘1’
trong một đơn vị dữ liệu.
+ LRC (longitudinal redundancy check): kiểm tra tính chẵn lẻ của tổng các
bit ‘1’ trong một khối.
+ CRC (cyclic redundancy check): kiểm tra chu kỳ dư.
+ Checksum: kiểm tra tổng. Ba dạng đầu thường được thiết lập trong lớp vật
lý để dùng trong lớp kết nối dữ liệu. Dạng checksum thường được dùng trong các
lớp trên.
- Sửa lỗi: có 2 cách sửa lỗi
+ Khi phát hiện một mỗi, máy thu phải yêu cầu máy phát truyền lại dữ liệu.
+ Máy thu dùng các mã sửa lỗi, để sửa tự động một số lỗi.
- Mã khối tuyến tính là một lớp mã được dùng rất phổ biến trong việc chống
nhiễu (phát hiện sai và sửa sai). Mã khối tuyến tính c có mục đích mã hóa các
khối tin k bit thành các từ mã n bit trước khi truyền đi, nói cách khác, trong n bit
của từ mã truyền đi có k bit chứa thông tin, còn n-k bit là thêm vào (mã hóa) đề
chống nhiễu.
- Mã hóa bản tin dùng mã khối tuyến tính (4, 7) là một tin nguồn gồm 4 bit
đã được mã hóa thành một mã nguồn gồm 7 bit, 4 bit chứa thông tin và 3 bit thêm
vào là để chống nhiễu.
- Mã hóa bản tin dùng mã khối tuyến tính (7, 11) là một tin nguồn gồm 7 bit
đã được mã hóa thành một mã nguồn gồm 11 bit, 7 bit chứa thông tin và 4 bit
thêm vào là để chống nhiễu.
Hệ thống thông tin số điển hình:

II. BÀI TẬP:


Bài 1:
Thực hiện mã hóa ASCII cho đoạn văn bản sau:
Faculty of Electronic and Telecommunication
- Giả sử lỗi rơi vào các vị trí 1, 2, 4, 3, 3, 5, 7, 1, 6 của các ký tự màu đỏ. Giải mã.
- Nhận xét về khả năng phát hiện lỗi của mã ASCII.
Bài 2:
Cho đoạn văn sau:
Electronic
- Mã hóa bản tin trên dùng mã khối tuyến tính (4, 7) với đa thức sinh như trong
ví dụ.
Tính tỷ lệ mã.
- Giải mã bản tin trên với giả sử lỗi xuất hiện ở vị trí 1, 7 trong ký tự “e” màu đỏ.
Nhận xét về khả năng phát hiện lỗi của mã (4, 7).
Bài 3:
- Thực hiện bài tập 2 với mã (7, 11). Đa thức sinh tự chọn.
- So sánh mã (4, 7) và (7, 11) về các tiêu chí:
+ Tỷ lệ mã.
+ Khả năng phát hiện lỗi.
III. HƯỚNG DẪN THỰC HIỆN
Thực hiện những nhiệm vụ trên trong phần mềm Matlab
Bài 1: Các bước thực hiện:
- Input a chuỗi trước khi mã hóa, output c là chuỗi sau khi mã hóa.
- Tạo chuỗi ký tự rỗng.
- Sử dụng vòng lặp for i từ điểm 1 đến kích thước của ascii.
+ Mã hóa tại điểm i thành mã nhị phân 7 bits.
+ Thực hiện vòng lặp và mã hóa từng ký tự của đoạn văn bản dùng hàm
dec2bin mã hóa về mã ASCII.
+ Thực hiện nối chuỗi.
- Giả sử lỗi theo yêu cầu của đề bài.
- Giải mã chuỗi sau khi đã thêm lỗi.
- Xuất kết quả chuỗi.
Bài 2: Các bước thực hiện:
- Mã hóa đoạn văn được cho theo mã ASCII
- Tạo mã khối (4, 7):
- Giả sữ mã khối lỗi:
+ Trường hợp 1: lỗi ở vị trí 1 (tức vị trí 1 trong c) ta thu được c1.
+ Trường hợp 2: Lỗi ở vị trí 7 (tức vị trí 10 trong c) ta thu được c2.
+ Trường hợp 3: Lỗi ở vị trí 1 và 7 ta thu được c3.
- Sửa lỗi:
+ Tính: si = ei x H-T
+ Lấy 7bits/1 lần nhân với H-T: sa = c(1/2/3) x H-T
+ Kết quả của từng sa so sánh với từng si. Nếu giống với si nào thì mã khối
(4, 7) phát hiện được lỗi, nếu không giống với si nào thì mã khối (4, 7) không
phát hiện được lỗi
+ Lấy từng c(1/2/3) cộng với ei tương ứng phát hiện lỗi si, nếu giống với c thì
mã khối (4, 7) sửa được lỗi, khác c thì mã khối (4, 7) không sửa được.
Bài 3: Thực hiện tương tự như bài 2 đối với mã khối (7,11).
BÀI 2: KỸ THUẬT MÃ HÓA NÉN
I. LÝ THUYẾT:
Giới thiệu về nén tín hiệu:
1.1 Nén dữ liệu:
- Nén dữ liệu (Data compression) là việc chuyển định dạng thông tin sử dụng
ít bit hơn cách thể hiện ở dữ liệu gốc. Tùy theo dữ liệu có bị thay đổi trước và sau
khi giải nén không, người ta chia nén thành hai loại: Không tổn hao (lossless) và
tổn hao (lossy).

- Nén không tổn hao: entropy được bảo toàn X* = X


- Nén có tổn hao: entropy bị hao hụt X* ≠ X
Đánh giá:
- Tỷ số nén: (số bit trong X)/(số bit trong Y)
- Chất lượng: sai khác giữa X và X*
Nén có tổn hao được thực hiện dựa vào lượng tử hóa:

Nén không tổn hao:


Gồm các kỹ thuật: mã hóa Huffman, mã hóa run-length,…
Mã hóa Huffman: còn gọi là mã hóa entropy, hiệu quả trong
trường hợp xác suất xuất hiện của các ký tự không đều nhau
Mã hóa run-length: hiệu quả trong trường hợp dữ liệu có sự lặp
lại theo từng đoạn (liên tiếp hay không liên tiếp).
Mã hóa Huffman:
Mã hóa các ký tự có xác suất sinh ra lớn/bé bằng các từ mã ngắn/dài
Mã có tính prefix → không cần ký tự ngắt từ → tăng hiệu suất mã.
Mã hóa run-length bằng:
<số lần ký tự được lặp lại> <ký tự được lặp lại>
Ví dụ:
Mã hóa chuỗi ký tự
WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWW
W
WWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW
thành 12W1B12W3B24W1B14W
Mã hóa Fax:
Fax là dịch vụ truyền các tài liệu số đen trắng
qua đường dây điện thoại
Trang fax được quét thành dòng gồm các pixel trắng – đen liên
tục (run-length)
Run-length được mã hóa dựa vào mã Huffman
Quy tắc: run-length hay xuất hiện↔ từ mã ngắn
run-length ít xuất hiện ↔ từ mã dài.
Dòng quét trang Fax:
II. BÀI TẬP
Bài 1: Cho trang tài liệu quét TestRLC.bmp.
+ Thực hiện mã hóa nén trang tài liệu quét trên, dung kĩ thuật mã hóa RLC.
Tính tỉ lệ nén.
+ Cho bên thu biết số điểm ảnh trên một dòng quét tài liệu là 250. Thực hiện
giải mã.
+ So sánh tài liệu gốc và sau khi giải nén để đánh giá chất lượng nén bằng
định tính và định lượng.
Bài 2: Cho trang tài liệu quét TestFax.bmp.
+ Thực hiện mã hóa nén trang tài liệu quét trên, dung kĩ thuật mã hóa RLC.
Tính tỉ lệ nén.
+ Cho bên thu biết số điểm ảnh trên một dòng quét tài liệu là 250. Thực hiện
giải mã.
+ So sánh tài liệu gốc và sau khi giải nén để đánh giá chất lượng nén bằng
định tính và định lượng.
III. HƯỚNG DẪN:
Thực hiện những nhiệm vụ trên trong phần mềm Matlab
Bài 1:
- Phương pháp mã hóa loạt dài RLC được phát triển dành cho ảnh số 2 mức:
mức đen (0) và mức trắng (1) như các văn bản trên nền trắng, trang in, các bản
vẽ kỹ thuật.
- Nguyên tắc của phương pháp là phát hiện một loạt các bit lặp lại, như một
loạt các bit 0 nằm giữa hai bit 1, hay ngược lại. Dãy các bit lặp gọi là loạt hay
mạch (run). Tiếp theo, thay thế chuỗi đó bởi một chuỗi mới gồm 2 thông tin:
chiều dài chuỗi và bit lặp (ký tự lặp). Như vậy, chuỗi thay thế sẽ có chiều dài
ngắn hơn chuỗi gốc.
Phương pháp RLC được sử dụng trong việc mã hóa lưu trữ các
ảnh Bitmap theo dạng PCX, BMP.
Mã hóa:
+ Đọc file ảnh TestRLC.bmp với bài 1 và TestFax.bmp đối với bài 2.
+ Lấy kích thước ảnh và gắn vào 2 biến hang_mahoa và cot_mahoa.
+ Sử dụng vòng lặp For 1:hang_mahoa và 2:cot_mahoa để thực hiện đếm số
bit lặp và gán ‘11111111’ tương ứng với màu trắng và ‘00000000’ tương ứng với
màu đen.
+ Tính số bit sau khi nén bằng so_bit_nen=length(giatri_mahoa).
+ Xuất ra kết quả và tính tỉ lệ nén
Giải mã:
+ Lấy kích thước chuỗi đã thui được trên sau khi mã hóa.
+ Khởi tạo ma trận 1 hàng 250 cột.
+ Sử dụng vòng lặp while để kiểm tra biến đếm, lần lượt đếm 16 bit với 8
bit đầu là số bit trắng đen và 8 bit sau là xác định đó là trắng hay đen.
+ Nếu cot_giaima vượt quá 250 thì ta phải thêm 1 hàng tương ứng.
+ Dùng câu lệnh If để so sánh nén có tổn hao hay không.
+ Xuất kết quả hình ảnh sau khi giải mã.
Bài 3:
+ Đọc file ảnh TestFax.bmp và chuyển nó thành ảnh nhị phân.
+ Lấy kích thước của ảnh và gán vào giá trị hàng, cột.
+ Tạo ra 1 ma trận rỗng để chứa RCL.
+ Chạy vòng lặp For để đếm số bit 0 và 1, đồng thời xác định là đang đếm bit 0
hay bit 1.
+ Lần lượt gán những giá trị đã đếm vào ma trận rỗng chứa RCL theo các vị trí
tương ứng.
+ Lấy kích thước của ma trận rỗng chứa RCL thu được để so sánh trên bảng mã
terminating và bảng mã makeup.
+ Xuất số bit sau khi nén và trước khi nén để tính tỷ lệ nén FAX.
BÀI 3: KỸ THUẬT SỐ HÓA TÍN HIỆU
I. LÝ THUYẾT:
1. Bộ biến đổi tương tự - số cơ bản:

2. Kỹ thuật lấy mẫu:


a. Khái niệm:
 Lẫy mẫu là quá trình chuyển đổi tín hiệu liên tục thành tín hiệu rời rạc
bằng cách lấy mẫu (Sample) của tín hiệu liên tục tại các thời điểm rời
rạc cách đều nhau.
 Tín hiệu sau lấy mẫu là các dãy xung PAM rời rạc (Pulse Amplitude
Modulation).

b. Vai trò: Đảm bảo rằng các tín hiệu có tần số giới hạn có thể được tái tạo
hoàn toàn từ phiên bản mẫu của nó.
c. Chu kỳ lấy mẫu:

Trong đó: là chu kỳ lấy mẫu.

là tần số lấy mẫu.


d. Định lý lấy mẫu:

 Xếp chồng tuần hoàn phổ tín hiệu liên tục: .

 Trường hợp lấy mẫu với tần số lấy mẫu không đủ lớn sẽ xảy ra hiện
tượng chồng phổ.

 Chồng phổ (Aliasing) có thể tránh được nếu tần số Nyquist lớn hơn tần
số lớn nhất của tín hiệu được lấy mẫu. Để chống chồng phổ ta có thể sử
dụng bộ lọc.
 Chọn tần số lấy mẫu:

 Trường hợp phổ tín hiệu tương tự từ 0 đến :


 Trường hợp phổ tín hiệu tương tự từ đến :

e. Lấy mẫu ảnh:


 Lấy mẫu: Phân chia không gian ảnh ra thành lưới các ô vuông.
 Độ phân giải: Là số lượng điểm ảnh trong bức ảnh. Độ phân giải thấp
→ Không chính xác; Độ phân giải cao → Chậm thuật toán lãng phí bộ
nhớ.
 Ví dụ:

3. Kỹ thuật lượng tử hoá:


a. Khái niệm:
 Lượng tử hoá là quá trình xấp xỉ hoá giá trị của các mẫu.
 Mục đích của quá trình này nhằm biểu diễn lại một cách chính xác nhất
các tín hiệu tương tự bằng tín hiệu số.
 Quá trình này được thực hiện bằng hàm bậc thang mô tả như hình sau:

b. Nhiễu lượng tử hoá:


 Sai số lượng tử hóa (nhiễu/ lỗi/ méo lượng tử hóa): Sai khác với giá trị
thực và giá trị lượng tử hóa.
 Kích thước bước lượng tử hóa ảnh hưởng đến méo lượng tử hóa.
 Muốn giảm méo lượng tử hóa, phải giảm kích thước bước lượng tử hóa,
dẫn đến tăng số mức lượng tử hóa, tăng số bit mã hóa.
II. BÀI TẬP
Bài 1: Cho bức ảnh xám Test.bmp
Thay đổi tần số lấy mẫu trên ảnh này.
Quan sát ảnh, so sánh, đánh giá chất lượng và dung lượng ảnh,
rút ra nhận xét. Từ đó chọn ra tần số lấy mẫu tối ưu.
Chụp ảnh cả nhóm, chuyển về ảnh xám và thực hiện lại các yêu
cầu trên.
Bài 2: Cho bức ảnh xám Test.bmp
Thay đổi số mức lượng tử hoá trên ảnh này.
Quan sát ảnh, so sánh, đánh giá chất lượng ảnh và dung lượng ảnh, rút ra
nhận xét.
Từ đó chọn ra số mức lượng tử hoá tối ưu.
Chụp ảnh cả nhóm, chuyển về ảnh xám và thực hiện lại các yêu cầu trên.
Bài 3: Chọn ảnh màu chụp cả nhóm
Thay đổi tần số lấy mẫu trên ảnh này. Quan sát ảnh, so sánh, đánh giá chất
lượng ảnh và dung lượng ảnh, rút ra nhận xét.
Thay đổi số mức lượng tử hoá trên ảnh này. Quan sát ảnh, so sánh, đánh giá
chất lượng ảnh và dung lượng ảnh, rút ra nhận xét.
Lưu ý: Cần quan sát sự thay đổi màu sắc. Tần số lấy mẫu và số mức lượng
tử hoá có ảnh hưởng như thế nào đến màu sắc?
III. HƯỚNG DẪN
Thực hiện những nhiệm vụ trên trong phần mềm Matlab
Bài 1: Cách thực hiện
1) Đọc ảnh, đưa ảnh vào trình làm việc bằng hàm imread.
2) Chuyển đổi ảnh màu thành ảnh xám bằng lệnh rgb2gray
3) Xử lí ảnh, lấy mẫu ảnh bằng hàm imresize có sẵn theo tần số lấy mẫu
1/(2^i).
4) Hiện thị ảnh đã xử lí bằng hàm imshow.
Bài 2: Các bước thực hiện:
1) Đọc ảnh, đưa ảnh vào trình làm việc bằng hàm imread.
2) Chuyển đổi ảnh màu thành ảnh xám bằng lệnh rgb2gray.
3) Thực hiện lượng tử hoá: xác định số màu của ảnh i bit , số mức màu trên
mỗi ô của ảnh, ánh xạ ảnh.
4) Hiện thị ảnh bằng imshow.
Bài 3: Các bước thực hiện:
Lấy mẫu ảnh:
1) Đọc ảnh, đưa ảnh vào trình làm việc bằng hàm imread.
2) Xử lí ảnh, lấy mẫu ảnh bằng hàm imresize theo tần số lấy mẫu 1/(2^i).
3) Hiện thị ảnh đã xử lí bằng hàm imshow.
Lượng tử hoá ảnh:
1) Đọc ảnh, đưa ảnh vào trình làm việc bằng hàm imread.
2) Thực hiện lượng tử hoá: xác định số màu của ảnh i bit , số mức màu trên
mỗi ô của ảnh, ánh xạ ảnh.
3) Hiện thị ảnh đã xử lí bằng imshow.

You might also like