Uploaded by Trường Phạm

20020646 PhamDucDat

advertisement
VIETNAM NATIONAL UNIVERSITY,
HANOI UNIVERSITY OF
ENGINEERING AND TECHNOLOGY
Báo cáo thực hành
Họ và tên: Phạm Đức Đạt
Msv: 20020646
Môn học: Xử lý tín hiệu số
1
MỤC LỤC
Chương 1 LÀM QUEN VỚI NGÔN NGỮ LẬP TRÌNH MATLAB ............................ 6
A. Lý Thuyết....................................................................................................................... 6
1.1 Giới thiệu chung .......................................................................................... 6
1.2 Giao diện sử dụng của Matlab ...................................................................... 6
1.3 Biến số trong Matlab ................................................................................... 7
1.4 Vector và ma trận ........................................................................................ 8
1.5 Phép toán .................................................................................................... 8
1.6 Cấu trúc điều khiển và cấu trúc lặp .............................................................. 9
1.6.1 Cấu trúc điều kiện: ................................................................................ 9
1.6.2 Cấu trúc lặp: ......................................................................................... 9
1.7 Function và script ........................................................................................ 9
1.8 I/O và File I/O ........................................................................................... 10
1.9 Đồ thị ........................................................................................................ 11
B. Bài Tập ......................................................................................................................... 11
Chương 2 BIỂU DIỄN VÀ PHÂN TÍCH TÍN HIỆU TRONG MIỀN THỜI GIAN
VÀ MIỀN TẦN SỐ .......................................................................................................... 15
A. Lý Thuyết..................................................................................................................... 15
2.1 Tín hiệu cơ bản .......................................................................................... 15
2.1.1 Tín hiệu rời rạc .................................................................................... 15
2.1.2 Tín hiệu liên tục ................................................................................... 16
2.2 Các phép toán trên tín hiệu ........................................................................ 16
2.2.1 Phép toán không phụ thuộc vào biến thời gian:...................................... 16
2.2.2 Phép toán phụ thuộc vào biến thời gian: ................................................ 17
2.3 Tín hiệu trong miền tần số.......................................................................... 17
B. Bài tập .......................................................................................................................... 18
Chương 3 LẤY MẪU TÍN HIỆU ................................................................................... 28
A. Lý Thuyết..................................................................................................................... 28
2
3.1 Lý thuyết lấy mẫu tín hiệu ......................................................................... 28
3.1.1 Định lý lấy mẫu Nyquist ....................................................................... 28
3.2 Lấy mẫu tín hiệu âm thanh ..................................................................... 29
B. Bài tập .......................................................................................................................... 30
Chương 4 HỆ THỐNG TUYẾN TÍNH BẤT BIẾN RỜI RẠC ................................... 32
A. Lý Thuyết..................................................................................................................... 32
4.1 Hệ thống tuyến tính bất biến ...................................................................... 32
4.2 Đáp ứng xung ............................................................................................ 32
4.2.1 Tính chất của hệ thống ......................................................................... 32
4.2.2 Xác định đáp ứng lối ra của hệ thống .................................................... 33
4.3 Phương trình sai phân và hàm truyền ......................................................... 33
4.3.1 Xác định đáp ứng lối ra của hệ thống .................................................... 33
4.3.2 Xác định đáp ứng xung của hệ thống..................................................... 33
4.3.3 Hàm truyền và giản đồ điểm cực điểm không ........................................ 34
4.4 Đáp ứng tần số .......................................................................................... 34
4.4.1 Đáp ứng tần số của hệ thống ................................................................. 34
4.4.2 Ý nghĩa của đáp ứng tần số ................................................................... 34
4.4.3 Ứng dụng của đáp ứng tần số ............................................................... 34
B. Bài tập .......................................................................................................................... 35
Chương 5 THIẾT KẾ CẤU TRÚC HỆ THỐNG ......................................................... 44
A. Lý Thuyết..................................................................................................................... 44
5.1 Cấu trúc hệ thống ...................................................................................... 44
5.2 Cấu trúc nối tiếp và cấu trúc song song ....................................................... 45
5.2.1 Thiết kế cấu trúc tối ưu kiểu nối tiếp ..................................................... 45
5.2.2 Thiết kế cấu trúc tối ưu kiểu song song .................................................. 45
B. Bài tập .......................................................................................................................... 46
Chương 6 ỨNG DỤNG CỦA XỬ LÝ TÍN HIỆU TRONG TẠO HIỆU ỨNG ÂM
THANH............................................................................................................................. 48
A. Lý Thuyết..................................................................................................................... 48
6.1 Âm thanh .................................................................................................. 48
3
6.2 Tiếng vọng (Echo) ...................................................................................... 48
6.3 Tiếng ngân (Reverberation)........................................................................ 48
6.4 Chipmunks ............................................................................................... 49
6.5 Optimus Primes ......................................................................................... 49
Chương 7 THIẾT KẾ BỘ LỌC SỐ IIR, FIR ............................................................... 50
A. Lý Thuyết..................................................................................................................... 50
7.1 Bộ lọc số .................................................................................................... 50
7.2 Lọc IIR ..................................................................................................... 50
7.3 fdatool và fvtool ......................................................................................... 51
7.4 Thiết kế bộ lọc số FIR ................................................................................ 51
7.4.1 Thiết kế sử dụng phương pháp cửa số ................................................... 52
7.4.2 Chuyển đổi giữa các bộ lọc ................................................................... 52
B. Bài tập .......................................................................................................................... 52
Chương 8 XỬ LÝ TIẾNG NÓI ...................................................................................... 57
A. Lý Thuyết..................................................................................................................... 57
8.1 Tiếng nói - Speech ...................................................................................... 57
8.2 Thu tiếng nói ............................................................................................. 57
8.3 Đặc điểm của tiếng nói ............................................................................... 57
8.4 Loại nhiễu trong file âm thanh ................................................................... 57
Chương 9 LỌC NHIỄU VÀ PHÁT HIỆN TÍN HIỆU ĐIỆN TIM BẤT THƯỜNG . 59
A. Lý Thuyết..................................................................................................................... 59
9.1.2 Hình thái học của tín hiệu điện tim .......................................................... 59
9.1.3 Nhiễu trong ECG .................................................................................... 60
9.1.4 Rối loạn nhịp tim (Arrhythmia) ............................................................... 60
Chương 10 XỬ LÝ ẢNH ................................................................................................. 61
A. Lý Thuyết..................................................................................................................... 61
10.1 Hiển thị ảnh và chuyển đổi giữa các kênh mầu khác nhau .......................... 61
10.1.1 Đọc và hiển thị ảnh ............................................................................. 61
10.1.2 Chuyển đổi ảnh trong các không gian mầu (colorspace) ....................... 61
4
10.2 Độ phân giải ảnh ...................................................................................... 62
10.3 Toán tử trong ảnh .................................................................................... 62
10.4 Miền tần số .............................................................................................. 62
B. Bài tập .......................................................................................................................... 62
5
Chương 1 LÀM QUEN VỚI NGÔN NGỮ LẬP TRÌNH MATLAB
A. Lý Thuyết
1.1 Giới thiệu chung
1.2 Giao diện sử dụng của Matlab
• Cửa sổ lệnh (Command Window): là nơi bạn gõ lệnh Matlab.
• Cửa sổ thư mục đường dẫn (Current Directory): là thư mục hiện tại Matlab đang làm
việc với các file trong đó.
• Cửa sổ lịch sử lệnh (Command History): cho thấy các lệnh mà bạn đã nhập trong quá
khứ. Bạn có thể lặp lại bất kỳ lệnh nào bằng cách kích đúp vào chúng, hoặc bằng cách
kéo chúng từ cửa sổ Command History vào cửa sổ lệnh.
• Cửa sổ hiển thị giá trị biến/tham số (Workspace): cho thấy danh sách các biến hiện đang
được định nghĩa, và thuộc tính của biến (giá trị, kích thước biến,...).
6
• Trợ giúp (Help): đưa ra thông tin về các hàm số, cách sử dụng hàm số, ví dụ mô phỏng
dùng hàm đó. Có thể gọi trợ giúp nhanh bằng Shift F1 hoặc trên cửa sổ lệnh gõ doc + tên
hàm hoặc help + tên hàm.
1.3 Biến số trong Matlab
Matlab khác với các ngôn ngữ C là các biến số không cần khai báo trước định
dạng. Tuỳ vào giá trị khởi tạo mà biến có thể là số (scalar), vector/matrix hay chuỗi
(string), cấu trúc (struct, list) hoặc cell.
7
1.4 Vector và ma trận
•
Trong MATLAB, ma trận là kiểu dữ liệu đặc biệt cho phép tính toán nhanh và hiệu
quả.
•
Ma trận có thể được khai báo trực tiếp thông qua gán giá trị. Các ma trận nhiều
chiều có thể được tạo từ các ma trận có số chiều thấp hơn. Có các lệnh như ones,
zeros, eye, rand, randn để khởi tạo ma trận đặc biệt.
•
Các phần tử của ma trận được gán chỉ số bắt đầu từ 1 và kết thúc bằng 'end'. Để
truy cập một phần tử tại hàng i, cột j của ma trận A, sử dụng lệnh A(i, j).
•
Dấu ':' được sử dụng trong khai báo vector, dãy số, trích xuất chỉ số của ma trận và
trong các vòng lặp. Nếu ':' đứng một mình, nghĩa là tất cả hàng (hoặc cột) của ma
trận.
•
Thường không sử dụng vòng lặp mà thay vào đó sử dụng chỉ số và các hàm tính
toán có sẵn để tối ưu thời gian tính toán khi làm việc với ma trận trong MATLAB.
1.5 Phép toán
1. Phép toán số học: Đây là các phép tính cơ bản được thực hiện trên các số hoặc
vector/ma trận số. Bao gồm cộng, trừ, nhân, chia và các phép toán khác như mũ,
căn bậc hai, logarit,...
2. Phép toán quan hệ: Được sử dụng trong các lệnh điều kiện để so sánh giá trị của
các biến. Các phép toán này bao gồm bằng nhau (==), khác nhau (~=), lớn hơn
(>), nhỏ hơn (<), lớn hơn hoặc bằng (>=), nhỏ hơn hoặc bằng (<=),...
3. Phép toán logic và phép toán trên bit: Bao gồm các phép toán logic như AND,
OR, XOR, NOT và các phép toán bitwise như AND bit (bitwise AND), OR bit
(bitwise OR), XOR bit (bitwise XOR),...
8
4. Phép toán trên tập hợp: Các phép toán này được sử dụng để thực hiện các thao
tác trên các tập hợp dữ liệu. Bao gồm hợp (union), giao (intersection), phần tử
không thuộc (set difference),...
1.6 Cấu trúc điều khiển và cấu trúc lặp
1.6.1 Cấu trúc điều kiện:
•
Có ba loại cấu trúc điều kiện chính: if, if-else và if-elseif-else.
•
Cấu trúc if được sử dụng để kiểm tra một điều kiện duy nhất.
•
Cấu trúc if-else được sử dụng để kiểm tra một điều kiện, nếu điều kiện đó không
đúng thì thực hiện một tập hợp lệnh khác.
•
Cấu trúc if-elseif-else cho phép kiểm tra nhiều điều kiện tuần tự cho đến khi một
điều kiện đúng được tìm thấy.
•
Luôn cần có end để đóng mỗi cấu trúc điều kiện.
1.6.2 Cấu trúc lặp:
•
Có hai loại cấu trúc lặp chính: for và while.
•
Cấu trúc for được sử dụng để lặp qua một tập hợp các giá trị hoặc một khoảng cụ
thể.
•
Cấu trúc while được sử dụng để lặp lại một tập hợp lệnh cho đến khi một điều kiện
cụ thể không còn đúng nữa.
•
Luôn cần có end để đóng mỗi cấu trúc lặp.
1.7 Function và script
Function (Hàm):
•
Trong MATLAB, một hàm là một tập hợp các câu lệnh được tổ chức lại thành một
khối logic để thực hiện một nhiệm vụ cụ thể.
9
•
Hàm được định nghĩa bằng từ khóa function, sau đó là tên hàm và danh sách các
đối số nếu có.
•
Một hàm có thể trả về một giá trị hoặc không trả về giá trị nào.
•
Hàm có thể được gọi từ bất kỳ nơi nào trong chương trình bằng cách sử dụng tên
của nó và truyền các đối số cần thiết.
Script (Kịch bản):
•
Một script trong MATLAB là một tập hợp các câu lệnh MATLAB được thực thi
tuần tự từ đầu đến cuối.
•
Script không nhận đối số đầu vào và không trả về giá trị.
•
Script thường được sử dụng để thực hiện một loạt các thao tác hoặc tính toán mà
không cần tạo ra một hàm riêng biệt.
•
Khi script được chạy, MATLAB thực hiện các câu lệnh trong script theo thứ tự
xuất hiện.
1.8 I/O và File I/O
•
Để nhập dữ liệu từ bàn phím và xuất dữ liệu ra màn hình trong MATLAB, bạn có
thể sử dụng các hàm liên quan đến Input/Output (I/O). Đồng thời, bạn cũng có thể
tuỳ chỉnh kiểu hiển thị của dữ liệu dựa trên định dạng format.
•
Khi bạn muốn làm việc với các file văn bản trong MATLAB, bạn có thể sử dụng
các lệnh liên quan đến Input/Output như fopen, fclose, fscanf, fprintf, fgetl, fget,
fwrite, v.v. để mở, đọc, và ghi vào các file.
•
Đối với các file có định dạng đặc biệt như file âm thanh, file hình ảnh, video, bạn
cần sử dụng các hàm từ các thư viện đặc biệt để mở và làm việc với chúng.
•
Khi bạn muốn lưu trữ hoặc ghi dữ liệu ra file trong MATLAB, bạn có thể sử dụng
lệnh save hoặc dlmwrite.
10
1.9 Đồ thị
•
MATLAB là một công cụ mạnh mẽ cho việc vẽ và hiển thị dữ liệu trong các đồ thị
2D và 3D.
•
Lệnh cơ bản nhất để vẽ đồ thị 2D là plot(x, y, 'color symbol style'), trong đó x là
giá trị trục hoành của đồ thị và y là giá trị trục tung.
•
Bạn cũng có thể vẽ nhiều đường trên cùng một đồ thị bằng cách sử dụng plot(x,
y1, x, y2).
•
Để vẽ trên một hình mới hoặc vẽ trên cùng một hình, bạn có thể sử dụng figure
hoặc hold on.
•
Để vẽ nhiều hình con trong một hình lớn, bạn có thể sử dụng subplot, xác định
tổng số hình con và vị trí của hình vẽ trong grid.
•
Bạn có thể tùy chỉnh màu sắc và kiểu của các đường trong đồ thị bằng cách sử
dụng các tham số thuộc tính 'color symbol style'.
•
Các lệnh vẽ đồ thị cơ bản như plot, scatter, bar, histogram, và surf là những
công cụ quan trọng để hiển thị dữ liệu một cách trực quan và dễ hiểu.
B. Bài Tập
1. Tạo một vector hàng, có chiều dài bằng 50, giá trị tăng dần từ 15, cách đều nhau 3
% Tạo vector hàng
vector = 15:3:(15 + 3*(50-1));
% Hiển thị vector
disp(vector);
2. Tạo một vector cột có chiều dài 20, giá trị giảm dần từ 100, cách đều 2
% Tạo vector cột
vector = (100:-2:(100 - 2*(20-1)))';
% Hiển thị vector
11
disp(vector);
3. Tạo một ma trận vuông ngẫu nhiên kích thước bằng 10 × 10; hàng chéo toàn bằng 0
% Tạo ma trận vuông ngẫu nhiên kích thước 10x10
matrix = rand(10);
% Thiết lập các phần tử trên đường chéo chính bằng 0
matrix(1:11:end) = 0;
% Hiển thị ma trận
disp(matrix);
4. Viết hàm số tìm vị trí của thành phần min, max của một ma trận kích thước bất kỳ[ trả
về tất cả các vị trí thoả mãn]
function [minPositions, maxPositions] = findMinMaxPositions(matrix)
% Tìm giá trị nhỏ nhất và lớn nhất trong ma trận
minValue = min(matrix(:));
maxValue = max(matrix(:));
% Tìm các vị trí của giá trị nhỏ nhất
[minRows, minCols] = find(matrix == minValue);
minPositions = [minRows, minCols];
% Tìm các vị trí của giá trị lớn nhất
[maxRows, maxCols] = find(matrix == maxValue);
maxPositions = [maxRows, maxCols];
end
12
5. Viết hàm số vẽ đường y = x 2 , với x =[-10, 10], y = sin(0.2 ∗ π ∗ x) ; x=[-2:2], y = e x ,
x=[-10:10] sử dụng subplot và các mầu sắc, loại đường khác nhau.
function plot_functions()
% Tạo các vector x và y cho các biểu đồ khác nhau
% y = x^2 với x = [-10, 10]
x1 = -10:0.1:10;
y1 = x1.^2;
% y = sin(0.2 * π * x) với x = [-2:2]
x2 = -2:0.1:2;
y2 = sin(0.2 * pi * x2);
% y = e^x với x = [-10:10]
x3 = -10:1:10;
y3 = exp(x3);
% Vẽ các biểu đồ sử dụng subplot
figure;
% Biểu đồ y = x^2
subplot(3, 1, 1); % Chia cửa sổ hiện tại thành lưới 3x1, và chọn ô thứ nhất
plot(x1, y1, 'r', 'LineWidth', 2); % Vẽ đường màu đỏ, độ dày đường 2
title('y = x^2');
xlabel('x');
ylabel('y');
grid on;
13
% Biểu đồ y = sin(0.2 * π * x)
subplot(3, 1, 2); % Chia cửa sổ hiện tại thành lưới 3x1, và chọn ô thứ hai
plot(x2, y2, 'b--', 'LineWidth', 2); % Vẽ đường màu xanh, đường nét đứt, độ dày đường
2
title('y = sin(0.2 * π * x)');
xlabel('x');
ylabel('y');
grid on;
% Biểu đồ y = e^x
subplot(3, 1, 3); % Chia cửa sổ hiện tại thành lưới 3x1, và chọn ô thứ ba
plot(x3, y3, 'g:', 'LineWidth', 2); % Vẽ đường màu xanh lá, đường chấm, độ dày đường
2
title('y = e^x');
xlabel('x');
ylabel('y');
grid on;
end
14
Chương 2 BIỂU DIỄN VÀ PHÂN TÍCH TÍN HIỆU TRONG MIỀN THỜI GIAN
VÀ MIỀN TẦN SỐ
A. Lý Thuyết
2.1 Tín hiệu cơ bản
Trong lĩnh vực xử lý tín hiệu, các tín hiệu cơ bản là những khái niệm cơ bản và quan
trọng để hiểu về tính chất và xử lý của tín hiệu. Có hai loại chính của tín hiệu cơ bản: tín
hiệu rời rạc và tín hiệu liên tục.
2.1.1 Tín hiệu rời rạc
Tín hiệu rời rạc là loại tín hiệu mà giá trị chỉ được xác định tại các điểm rời rạc trên trục
thời gian, tức là giá trị của tín hiệu chỉ tồn tại tại các điểm thời gian cố định. Các giá trị
của tín hiệu rời rạc thường được biểu diễn bằng các số nguyên hoặc số thực.
Đặc điểm của tín hiệu rời rạc:
15
•
Giá trị chỉ xác định tại các điểm thời gian rời rạc.
•
Thường được biểu diễn bằng dãy các số hoặc một tập hợp giá trị cố định.
•
Có thể được biểu diễn bằng biểu đồ dạng đoạn thẳng (đối với tín hiệu 1D) hoặc
bản đồ màu sắc (đối với tín hiệu 2D).
Ví dụ về tín hiệu rời rạc bao gồm tín hiệu số được sử dụng trong hệ thống số, tín hiệu từ
các cảm biến kỹ thuật số, hoặc các tín hiệu được mô phỏng trên máy tính.
2.1.2 Tín hiệu liên tục
Tín hiệu liên tục là loại tín hiệu mà giá trị của nó được xác định tại mọi điểm trong một
khoảng thời gian liên tục. Điều này có nghĩa là tín hiệu không bị giới hạn trong các giá trị
rời rạc trên trục thời gian, mà thay vào đó nó là một hàm liên tục.
Đặc điểm của tín hiệu liên tục:
•
Giá trị của tín hiệu được xác định cho mọi giá trị của thời gian trong một khoảng
liên tục.
•
Thường được biểu diễn bằng các phương trình hoặc hàm số.
•
Có thể có vô hạn giá trị trong một khoảng thời gian nhất định.
Ví dụ về tín hiệu liên tục bao gồm tín hiệu âm thanh, tín hiệu video, hoặc các tín hiệu vật
lý như sóng điện từ được phát ra từ các thiết bị truyền thông.
2.2 Các phép toán trên tín hiệu
Trong xử lý tín hiệu, các phép toán đóng vai trò quan trọng trong việc biến đổi, xử lý và
phân tích tín hiệu. Các phép toán này có thể được phân loại thành hai loại chính: phép
toán không phụ thuộc vào biến thời gian và phép toán phụ thuộc vào biến thời gian.
2.2.1 Phép toán không phụ thuộc vào biến thời gian:
Phép toán không phụ thuộc vào biến thời gian là những phép toán mà kết quả không thay
đổi theo thời gian. Điều này có nghĩa là kết quả của phép toán không phụ thuộc vào biến
thời gian không bị ảnh hưởng bởi sự thay đổi trong thời gian.
Một số phép toán không phụ thuộc vào biến thời gian bao gồm:
•
Biến đổi Fourier: Chuyển đổi một tín hiệu từ miền thời gian sang miền tần số, giúp
phân tích thành phần tần số của tín hiệu.
16
•
Phép toán convolution: Là phép toán toán học thực hiện trên hai tín hiệu để tạo ra
một tín hiệu mới, thường được sử dụng trong việc xử lý tín hiệu và lọc tín hiệu.
2.2.2 Phép toán phụ thuộc vào biến thời gian:
Phép toán phụ thuộc vào biến thời gian là những phép toán mà kết quả thay đổi theo thời
gian. Điều này có nghĩa là kết quả của phép toán này phụ thuộc vào biến thời gian, và có
thể thay đổi khi biến thời gian thay đổi.
Một số phép toán phụ thuộc vào biến thời gian bao gồm:
•
Sự khác biệt (Differentiation): Tính toán đạo hàm của một tín hiệu, đo lường sự
thay đổi của tín hiệu theo thời gian.
•
Tích phân (Integration): Tính toán tích phân của một tín hiệu, tính tổng diện tích
dưới đường cong của tín hiệu theo thời gian.
Cả hai loại phép toán này đều đóng vai trò quan trọng trong việc phân tích và xử lý tín
hiệu trong nhiều ứng dụng khác nhau, từ xử lý âm thanh và hình ảnh đến truyền thông và
điện tử.
2.3 Tín hiệu trong miền tần số
Tín hiệu trong miền tần số là biểu diễn của tín hiệu không theo thời gian mà theo tần số.
Thay vì mô tả tín hiệu dựa trên biến thời gian, tín hiệu trong miền tần số cho phép chúng
ta nhìn vào thành phần tần số của tín hiệu, tức là các thành phần tần số khác nhau có
trong tín hiệu và cách chúng tương tác với nhau.
Đặc điểm của tín hiệu trong miền tần số:
1. Biến đổi Fourier (Fourier Transform): Là một công cụ quan trọng trong phân
tích tín hiệu trong miền tần số. Biến đổi Fourier chuyển đổi tín hiệu từ miền thời
gian sang miền tần số, biểu diễn các thành phần tần số của tín hiệu và mức độ
đóng góp của chúng.
2. Biến đổi Fourier ngược (Inverse Fourier Transform): Ngược lại với biến đổi
Fourier, biến đổi Fourier ngược chuyển đổi tín hiệu từ miền tần số sang miền thời
gian. Điều này cho phép chúng ta tái tạo tín hiệu gốc từ các thành phần tần số
được biểu diễn.
17
3. Biến đổi Laplace: Là một công cụ mở rộng của biến đổi Fourier, được sử dụng
đặc biệt trong phân tích và điều khiển hệ thống tín hiệu liên tục và hệ thống động.
Biến đổi Laplace cho phép phân tích cả tần số và độ phản hồi của hệ thống.
4. Phổ tín hiệu (Spectral Analysis): Là quá trình phân tích thành phần tần số của
một tín hiệu và đánh giá mức độ mà mỗi thành phần tần số đóng góp vào tín hiệu
tổng thể.
Tín hiệu trong miền tần số cho phép nhìn vào cấu trúc tần số của tín hiệu, giúp chúng ta
hiểu rõ hơn về các tính chất và đặc điểm của tín hiệu. Việc phân tích và xử lý tín hiệu
trong miền tần số là một phần quan trọng của nhiều lĩnh vực như xử lý âm thanh, xử lý
hình ảnh, truyền thông và điện tử.
B. Bài tập
1. Viết chương trình tạo xung nhảy bậc unit-signal u(n-n0), xung chữ nhật r(n-n0)
rec_sig(n, n0) và vẽ tín hiệu u(n − 3) và r(2, 4).
% Khởi tạo các thông số
n = -10:10; % Dãy giá trị của n, từ -10 đến 10
n0_u = 3; % Giá trị n0 cho xung nhảy bậc
n0_r = 2; % Giá trị bắt đầu cho xung chữ nhật
width_r = 4; % Độ rộng của xung chữ nhật
% Tạo tín hiệu xung nhảy bậc u(n-n0)
unit_step_signal = double(n >= n0_u);
% Tạo tín hiệu xung chữ nhật r(n-n0)
rect_signal = double((n >= n0_r) & (n < n0_r + width_r));
% Vẽ tín hiệu u(n-3)
figure;
subplot(2, 1, 1);
18
stem(n, unit_step_signal, 'filled');
title('Tín hiệu u(n-3)');
xlabel('n');
ylabel('u(n-3)');
grid on;
% Vẽ tín hiệu r(2, 4)
subplot(2, 1, 2);
stem(n, rect_signal, 'filled');
title('Tín hiệu r(2, 4)');
xlabel('n');
ylabel('r(2, 4)');
grid on;
% Hiển thị hình vẽ
sgtitle('Tín hiệu u(n-3) và r(2, 4)');
19
2. Viết chương trình vẽ tín hiệu liên tục sau:
• sinc(t)
• e −t
• xung chữ nhật tuần hoàn chu kỳ T=2, biên độ bằng 1.
• x(t) = sin(πt/3 + pi/4) + 2cos(πt/4)
% Khởi tạo trục thời gian
t = -10:0.01:10;
% Định nghĩa hàm sinc thủ công
sinc_manual = @(t) sin(pi * t) ./ (pi * t);
20
% Tạo tín hiệu sinc(t)
sinc_signal = sinc_manual(t);
% Sửa giá trị tại t = 0 để tránh NaN
sinc_signal(t == 0) = 1;
% Tạo tín hiệu e^(-t)
exp_signal = exp(-t);
% Tạo tín hiệu xung chữ nhật tuần hoàn chu kỳ T=2, biên độ bằng 1 thủ công
T = 2;
rect_periodic = zeros(size(t));
for i = 1:length(t)
if mod(t(i), T) < T/2
rect_periodic(i) = 1;
else
rect_periodic(i) = -1;
end
end
% Tạo tín hiệu x(t) = sin(pi*t/3 + pi/4) + 2*cos(pi*t/4)
x_t = sin(pi * t / 3 + pi / 4) + 2 * cos(pi * t / 4);
% Vẽ các tín hiệu
figure;
% Vẽ tín hiệu sinc(t)
subplot(4, 1, 1);
plot(t, sinc_signal);
21
title('Tín hiệu sinc(t)');
xlabel('t');
ylabel('sinc(t)');
grid on;
% Vẽ tín hiệu e^{-t}
subplot(4, 1, 2);
plot(t, exp_signal);
title('Tín hiệu e^{-t}');
xlabel('t');
ylabel('e^{-t}');
grid on;
% Vẽ tín hiệu xung chữ nhật tuần hoàn chu kỳ T=2, biên độ bằng 1
subplot(4, 1, 3);
plot(t, rect_periodic);
title('Tín hiệu xung chữ nhật tuần hoàn chu kỳ T=2, biên độ bằng 1');
xlabel('t');
ylabel('Rectangular Pulse');
grid on;
% Vẽ tín hiệu x(t) = sin(pi*t/3 + pi/4) + 2*cos(pi*t/4)
subplot(4, 1, 4);
plot(t, x_t);
title('Tín hiệu x(t) = sin(\pi t/3 + \pi/4) + 2cos(\pi t/4)');
xlabel('t');
ylabel('x(t)');
grid on;
22
% Hiển thị hình vẽ
sgtitle('Các tín hiệu liên tục');
3. Tương tự như hàm cộng 2 tín hiệu ở trên, hãy thực hiện hàm cộng hoặc nhân tín hiệu
với hằng số; nhân vô hướng 2 tín hiệu (sig_mult.m), cho các trường hợp (i) 2 tín hiệu liên
tục theo thời gian và (ii) rời rạc theo thời gian
4. Viết các hàm thực hiện các phép toán lật, dịch, co giãn tín hiệu cho các trường hợp (i)
2 tín hiệu liên tục theo thời gian và (ii) rời rạc theo thời gian
%Hàm lật tín hiệu liên tục
function flipped_signal = flip_signal_continuous(signal, t)
flipped_signal = flip(signal);
t = -flip(t); % Đảo ngược trục thời gian
end
23
%Hàm dịch tín hiệu liên tục
function shifted_signal = shift_signal_continuous(signal, t, shift)
shifted_signal = signal;
t = t + shift; % Dịch trục thời gian
end
%Hàm co giãn tín hiệu liên tục
function [stretched_signal, t_stretched] = stretch_signal_continuous(signal, t, factor)
t_stretched = t * factor; % Co giãn trục thời gian
stretched_signal = signal;
end
%Hàm lật tín hiệu rời rạc
function flipped_signal = flip_signal_discrete(signal, n)
flipped_signal = flip(signal);
n = -flip(n); % Đảo ngược trục thời gian
end
%Hàm dịch tín hiệu rời rạc
function shifted_signal = shift_signal_discrete(signal, n, shift)
shifted_signal = signal;
n = n + shift; % Dịch trục thời gian
end
%Hàm co giãn tín hiệu rời rạc
function [stretched_signal, n_stretched] = stretch_signal_discrete(signal, n, factor)
n_stretched = n * factor; % Co giãn trục thời gian
stretched_signal = signal;
24
end
5. Vẽ phổ biên độ và pha của tín hiệu sau:
• x(t) = sinc(t) = sin(πt) πt
• x(t) = cos(πt/3) + 2sin(πt/4)
% Khởi tạo trục thời gian
t = -10:0.01:10;
% Định nghĩa hàm sinc thủ công
sinc_manual = @(t) sin(pi * t) ./ (pi * t);
x1 = sinc_manual(t); % sinc(t) = sin(pi*t) / (pi*t)
% Sửa giá trị tại t = 0 để tránh NaN
x1(t == 0) = 1;
% Định nghĩa tín hiệu x2
x2 = cos(pi * t / 3) + 2 * sin(pi * t / 4);
% Thực hiện biến đổi Fourier cho tín hiệu x1
X1 = fftshift(fft(x1));
f1 = linspace(-pi, pi, length(X1));
% Biên độ và pha của x1
magnitude_X1 = abs(X1);
phase_X1 = angle(X1);
% Thực hiện biến đổi Fourier cho tín hiệu x2
X2 = fftshift(fft(x2));
f2 = linspace(-pi, pi, length(X2));
25
% Biên độ và pha của x2
magnitude_X2 = abs(X2);
phase_X2 = angle(X2);
% Vẽ phổ biên độ và pha cho x1
figure;
subplot(2, 2, 1);
plot(f1, magnitude_X1);
title('Phổ biên độ của x(t) = sinc(t)');
xlabel('Tần số');
ylabel('Biên độ');
grid on;
subplot(2, 2, 2);
plot(f1, phase_X1);
title('Phổ pha của x(t) = sinc(t)');
xlabel('Tần số');
ylabel('Pha');
grid on;
% Vẽ phổ biên độ và pha cho x2
subplot(2, 2, 3);
plot(f2, magnitude_X2);
title('Phổ biên độ của x(t) = cos(\pi t/3) + 2sin(\pi t/4)');
xlabel('Tần số');
ylabel('Biên độ');
grid on;
26
subplot(2, 2, 4);
plot(f2, phase_X2);
title('Phổ pha của x(t) = cos(\pi t/3) + 2sin(\pi t/4)');
xlabel('Tần số');
ylabel('Pha');
grid on;
% Hiển thị các hình vẽ
sgtitle('Phổ biên độ và pha của các tín hiệu');
27
Chương 3 LẤY MẪU TÍN HIỆU
A. Lý Thuyết
3.1 Lý thuyết lấy mẫu tín hiệu
Trong lĩnh vực xử lý tín hiệu, lấy mẫu là quá trình chuyển đổi tín hiệu liên tục thành dạng
rời rạc bằng cách lấy mẫu giá trị của tín hiệu tại các điểm thời gian cố định. Lý thuyết lấy
mẫu là một phần quan trọng của xử lý tín hiệu số và đặc biệt quan trọng trong viễn thông
và xử lý âm thanh.
3.1.1 Định lý lấy mẫu Nyquist
Định lý lấy mẫu Nyquist là một nguyên lý cơ bản trong lý thuyết lấy mẫu tín hiệu, đặt ra
điều kiện cần để đảm bảo tái tạo chính xác của một tín hiệu liên tục từ mẫu của nó.
Nội dung của định lý lấy mẫu Nyquist:
Để tái tạo chính xác một tín hiệu liên tục từ mẫu của nó, tần số lấy mẫu (fₛ) phải lớn hơn
hoặc bằng gấp đôi tần số cao nhất có trong tín hiệu.
Nói cách khác, nếu fₘ là tần số cao nhất trong tín hiệu, thì tần số lấy mẫu fₛ phải thỏa mãn
điều kiện:
Nếu tần số lấy mẫu không đạt đủ điều kiện này, hiện tượng gọi là hiện tượng aliasing có
thể xảy ra. Hiện tượng aliasing là hiện tượng khi tần số của một tín hiệu cao hơn nửa tần
số lấy mẫu và bị gấp lại, dẫn đến sự biến đổi không mong muốn trong tín hiệu tái tạo.
Do đó, việc chọn tần số lấy mẫu phù hợp là rất quan trọng để đảm bảo chất lượng tái tạo
của tín hiệu từ mẫu của nó. Định lý lấy mẫu Nyquist cung cấp một hướng dẫn cơ bản để
thực hiện điều này.
28
3.2 Lấy mẫu tín hiệu âm thanh
Lấy mẫu tín hiệu âm thanh là quá trình quan trọng trong việc biểu diễn và xử lý âm thanh
trong hệ thống số. Khi lấy mẫu tín hiệu âm thanh, ta cần cân nhắc đến các tham số quan
trọng như tần số lấy mẫu và độ phân giải âm thanh để đảm bảo chất lượng và độ chính
xác của âm thanh tái tạo.
Tần số lấy mẫu (Sampling Rate)
Tần số lấy mẫu là số lần mẫu được lấy trong một giây. Trong lấy mẫu tín hiệu âm thanh,
tần số lấy mẫu quyết định khả năng tái tạo âm thanh của hệ thống. Định lý lấy mẫu
Nyquist đã đề cập trước đó cho biết rằng tần số lấy mẫu phải lớn hơn gấp đôi tần số cao
nhất trong tín hiệu để tránh hiện tượng aliasing.
Ví dụ, nếu âm thanh có tần số cao nhất là 20 kHz, thì tần số lấy mẫu ít nhất phải là 40
kHz để đảm bảo tái tạo chính xác.
Độ phân giải âm thanh (Bit Depth)
Độ phân giải âm thanh xác định số bit được sử dụng để biểu diễn mỗi mẫu âm thanh. Độ
phân giải cao hơn cho phép biểu diễn âm thanh với độ chính xác cao hơn và độ động lớn
hơn.
Ví dụ, âm thanh 16-bit có độ phân giải thấp hơn so với âm thanh 24-bit. Đối với cùng
một tín hiệu âm thanh, sử dụng độ phân giải cao hơn sẽ tạo ra một dải động rộng hơn và
chi tiết âm thanh tốt hơn.
Quy trình lấy mẫu tín hiệu âm thanh
1. Chọn tần số lấy mẫu: Dựa trên tần số cao nhất có trong âm thanh, chọn tần số lấy
mẫu sao cho thỏa mãn định lý lấy mẫu Nyquist.
2. Chọn độ phân giải âm thanh: Quyết định số bit được sử dụng cho mỗi mẫu âm
thanh, đảm bảo độ chính xác và chi tiết cần thiết cho ứng dụng.
3. Lấy mẫu và lưu trữ dữ liệu: Áp dụng quy trình lấy mẫu tín hiệu âm thanh và lưu
trữ dữ liệu mẫu theo định dạng số, như WAV hoặc MP3.
Lấy mẫu tín hiệu âm thanh là một phần quan trọng trong việc biểu diễn và xử lý âm thanh
số, và việc chọn các tham số lấy mẫu đúng đắn rất quan trọng để đảm bảo chất lượng âm
thanh tái tạo.
29
B. Bài tập
3. Vẽ 1 đoạn của file âm thanh trong miền thời gian và miền tần số
4. Tín hiệu âm thanh này đã được lấy mẫu từ một tín hiệu âm thanh tương tự. Giả sử quá
trình lấy mẫu không bị chồng phổ, vậy tần số cực đại của tín hiệu tương tự có tần số là
bao nhiêu?
Nếu quá trình lấy mẫu không gây ra hiện tượng chồng phổ (aliasing), thì theo Nguyên lý
Nyquist, tần số lấy mẫu (fs) phải ít nhất gấp đôi tần số cực đại của tín hiệu gốc để tái tạo
tín hiệu một cách chính xác.
Vậy nếu tần số lấy mẫu (fs) là 300 Hz, thì tần số cực đại của tín hiệu tương tự ban đầu sẽ
không vượt quá 150 Hz. Điều này làm cho tín hiệu tương tự được tái tạo một cách chính
xác mà không gây ra hiện tượng chồng phổ.
5. Hãy viết chương trình giảm tần số lấy mẫu tín hiệu âm thanh trên đi 4 lần, Fs = fs/4.
Nghe thử âm thanh sử dụng sound(ynew, fs/4).
% Đọc file âm thanh
[audio, fs] = audioread('audioclip1.wav');
% Giảm tần số lấy mẫu đi 4 lần
new_fs = fs / 4;
% Tái lấy mẫu tín hiệu với tần số mới
30
downsample_factor = round(fs / new_fs);
audio_downsampled = audio(1:downsample_factor:end);
% Nghe thử âm thanh
sound(audio_downsampled, new_fs);
31
Chương 4 HỆ THỐNG TUYẾN TÍNH BẤT BIẾN RỜI RẠC
A. Lý Thuyết
4.1 Hệ thống tuyến tính bất biến
4.2 Đáp ứng xung
Đáp ứng xung là phản ứng của một hệ thống đến một tín hiệu xung đầu vào. Trong lĩnh
vực xử lý tín hiệu và điều khiển, việc hiểu và phân tích đáp ứng xung của hệ thống là rất
quan trọng để đảm bảo hiệu suất và đáng tin cậy của hệ thống.
4.2.1 Tính chất của hệ thống
Tính chất của hệ thống có thể được xác định bằng cách nghiên cứu đáp ứng của nó đến
các tín hiệu xung đầu vào khác nhau. Các tính chất chính bao gồm:
1. Thời gian phản ứng: Là thời gian mà hệ thống mất để đạt đến trạng thái ổn định
sau khi nhận được một xung đầu vào.
2. Dạng dạng của đáp ứng: Đáp ứng xung có thể có nhiều dạng khác nhau như đáp
ứng dạng dải, đáp ứng dạng hệ số, đáp ứng dạng hàm tần số, v.v.
3. Độ dốc: Độ dốc của đáp ứng xung cho biết tốc độ thay đổi của hệ thống trong quá
trình phản ứng.
32
4. Phản hồi: Các hệ thống thường có thể được thiết kế để có phản hồi âm hay dương
với các tín hiệu đầu vào xung.
4.2.2 Xác định đáp ứng lối ra của hệ thống
Để xác định đáp ứng lối ra của hệ thống đến các tín hiệu xung, ta thực hiện các bước sau:
1. Áp dụng tín hiệu xung đầu vào: Áp dụng một tín hiệu xung đầu vào mong muốn
vào hệ thống.
2. Quan sát đáp ứng lối ra: Ghi lại và quan sát sự thay đổi của tín hiệu đầu ra của
hệ thống sau khi nhận được tín hiệu xung đầu vào.
3. Phân tích đáp ứng: Phân tích các biến đổi và tính chất của đáp ứng lối ra để hiểu
rõ hơn về hành vi của hệ thống.
4. Đánh giá hiệu suất: Dựa trên đáp ứng lối ra, đánh giá hiệu suất và tính chất của
hệ thống và xem xét việc điều chỉnh hoặc cải thiện nếu cần thiết.
Xác định và hiểu rõ đáp ứng xung của hệ thống là một bước quan trọng trong việc phát
triển và vận hành hệ thống điều khiển và xử lý tín hiệu.
4.3 Phương trình sai phân và hàm truyền
Trong lý thuyết hệ thống và điều khiển, phương trình sai phân và hàm truyền là hai khái
niệm quan trọng để mô hình hóa và phân tích hệ thống.
4.3.1 Xác định đáp ứng lối ra của hệ thống
Phương trình sai phân được sử dụng để mô tả mối quan hệ giữa đầu vào và đầu ra của hệ
thống trong miền thời gian. Đáp ứng lối ra của hệ thống là giải pháp của phương trình sai
phân này với điều kiện ban đầu và điều kiện biên.
4.3.2 Xác định đáp ứng xung của hệ thống
Đáp ứng xung của hệ thống là phản ứng của hệ thống đến một tín hiệu xung đầu vào. Nó
thường được mô tả thông qua hàm truyền của hệ thống.
33
4.3.3 Hàm truyền và giản đồ điểm cực điểm không
Hàm truyền là biểu diễn của mối quan hệ giữa đầu vào và đầu ra của hệ thống trong miền
tần số. Nó thường được biểu diễn dưới dạng biểu đồ Bode hoặc biểu đồ Nyquist để minh
họa phản ứng của hệ thống tới các tín hiệu tần số khác nhau.
Giản đồ điểm cực điểm không là một công cụ khác để mô tả tính chất của hàm truyền. Nó
biểu thị vị trí của các điểm cực và không của hàm truyền trên mặt phẳng phức.
Những khái niệm này đều rất quan trọng trong việc hiểu và phân tích hệ thống từ góc độ
tín hiệu và tần số, giúp kỹ sư điều khiển và xử lý tín hiệu hiểu rõ hơn về tính chất và hiệu
suất của hệ thống.
4.4 Đáp ứng tần số
Đáp ứng tần số là phản ứng của một hệ thống đến các tín hiệu có tần số khác nhau. Trong
lĩnh vực xử lý tín hiệu và điều khiển, việc phân tích đáp ứng tần số của hệ thống là rất
quan trọng để hiểu và đánh giá hiệu suất của hệ thống.
4.4.1 Đáp ứng tần số của hệ thống
Đáp ứng tần số của hệ thống thường được biểu diễn dưới dạng biểu đồ Bode hoặc biểu đồ
điểm cực điểm không. Biểu đồ Bode minh họa phản ứng của hệ thống tới các tần số khác
nhau, bao gồm cả pha và độ lớn của đáp ứng. Trong khi đó, biểu đồ điểm cực điểm không
biểu diễn vị trí của các điểm cực và không của hàm truyền trên mặt phẳng phức.
4.4.2 Ý nghĩa của đáp ứng tần số
Đáp ứng tần số cho ta cái nhìn tổng quan về hiệu suất của hệ thống ở các tần số khác
nhau. Nó giúp chúng ta hiểu được làm thế nào hệ thống phản ứng đối với các tín hiệu có
tần số cao hoặc thấp, từ đó đưa ra các quyết định thiết kế và điều khiển hợp lý.
4.4.3 Ứng dụng của đáp ứng tần số
•
Thiết kế bộ lọc: Đáp ứng tần số giúp thiết kế và tinh chỉnh bộ lọc để loại bỏ các
thành phần không mong muốn trong tín hiệu và tăng cường các thành phần mong
muốn.
34
•
Điều khiển hệ thống: Trong điều khiển, việc hiểu và đánh giá đáp ứng tần số của
hệ thống giúp thiết kế bộ điều khiển sao cho phù hợp với yêu cầu hiệu suất và ổn
định của hệ thống.
•
Xử lý tín hiệu: Trong xử lý tín hiệu số, đáp ứng tần số giúp hiểu rõ cách hệ thống
ảnh hưởng đến tín hiệu ở các tần số khác nhau, từ đó áp dụng các biện pháp xử lý
phù hợp.
Đáp ứng tần số là một công cụ quan trọng trong phân tích và thiết kế hệ thống điều khiển
và xử lý tín hiệu, giúp tối ưu hóa hiệu suất và ổn định của hệ thống.
B. Bài tập
1. Vẽ đáp ứng lối ra của hệ thống trong các trường hợp sau:
• x(n) = {−1, −2, 3, 4, 2, 9}; h(n) = {1, 3, 2, 1}
• x(n) = {1, 2, 3, 4, 5}; h(n) = {6, 7, 8, 9}
• x(n) = (0.8)nu(n), h(n) = (−0.9)nu(n)
• x(n) = (1/4)−n [u(n + 1) − u(n − 4)], h(n) = u(n) − u(n − 5)
% Trường hợp 1
x1 = [-1, -2, 3, 4, 2, 9];
h1 = [1, 3, 2, 1];
y1 = conv(x1, h1);
% Trường hợp 2
x2 = [1, 2, 3, 4, 5];
h2 = [6, 7, 8, 9];
y2 = conv(x2, h2);
% Trường hợp 3
n = 0:20;
x3 = (0.8).^n;
h3 = (-0.9).^n;
35
y3 = conv(x3, h3);
% Trường hợp 4
n = -1:10;
u_n_plus_1 = double(n + 1 >= 0); % u(n + 1)
u_n_minus_4 = double(n - 4 >= 0); % u(n - 4)
x4 = (1/4).^(-n) .* (u_n_plus_1 - u_n_minus_4);
u_n = double(n >= 0); % u(n)
u_n_minus_5 = double(n - 5 >= 0); % u(n - 5)
h4 = u_n - u_n_minus_5;
y4 = conv(x4, h4);
% Vẽ kết quả
figure;
subplot(4, 1, 1);
stem(y1, 'filled');
title('Đáp ứng lối ra y(n) với x(n) = \{-1, -2, 3, 4, 2, 9\} và h(n) = \{1, 3, 2, 1\}');
xlabel('n');
ylabel('y(n)');
subplot(4, 1, 2);
stem(y2, 'filled');
title('Đáp ứng lối ra y(n) với x(n) = \{1, 2, 3, 4, 5\} và h(n) = \{6, 7, 8, 9\}');
xlabel('n');
ylabel('y(n)');
subplot(4, 1, 3);
36
stem(0:length(y3)-1, y3, 'filled');
title('Đáp ứng lối ra y(n) với x(n) = (0.8)^n u(n) và h(n) = (-0.9)^n u(n)');
xlabel('n');
ylabel('y(n)');
subplot(4, 1, 4);
stem(-2:length(y4)-3, y4, 'filled');
title('Đáp ứng lối ra y(n) với x(n) = (1/4)^{-n} [u(n + 1) - u(n - 4)] và h(n) = u(n) - u(n 5)');
xlabel('n');
ylabel('y(n)');
37
2. Xác định tính ổn định của các hệ thống sau. Vẽ đồ thị biểu diễn đáp ứng xung. Có thể
rút ra kết luận gì?
• h(n) = 3δ(n + 2) + 2δ(n) − δ(n − 3) + 5δ(n − 7), 5 ≤ n ≤ 10
• h(n) = 10u(n) − 5u(n − 5) − 10u(n − 10) + 5u(n − 15)
• h(n) = 2sin(0.01πn)cos(0.5πn), −200 ≤ n ≤ 200
• h(n) = (1/2)n
• h(n) = 3n
% Trường hợp 1
n1 = -10:10; % Mở rộng n để thấy các xung delta
h1 = 3*(n1 == -2) + 2*(n1 == 0) - 1*(n1 == 3) + 5*(n1 == 7);
% Trường hợp 2
n2 = 0:20;
h2 = 10*(n2 >= 0) - 5*(n2 >= 5) - 10*(n2 >= 10) + 5*(n2 >= 15);
% Trường hợp 3
n3 = -200:200;
h3 = 2*sin(0.01*pi*n3).*cos(0.5*pi*n3);
% Trường hợp 4
n4 = 0:20;
h4 = (1/2).^n4;
% Trường hợp 5
n5 = 0:10;
h5 = 3.^n5;
% Vẽ kết quả
38
figure;
subplot(5, 1, 1);
stem(n1, h1, 'filled');
title('Đáp ứng xung h(n) = 3\delta(n + 2) + 2\delta(n) - \delta(n - 3) + 5\delta(n - 7)');
xlabel('n');
ylabel('h(n)');
subplot(5, 1, 2);
stem(n2, h2, 'filled');
title('Đáp ứng xung h(n) = 10u(n) - 5u(n - 5) - 10u(n - 10) + 5u(n - 15)');
xlabel('n');
ylabel('h(n)');
subplot(5, 1, 3);
stem(n3, h3, 'filled');
title('Đáp ứng xung h(n) = 2sin(0.01\pi n)cos(0.5\pi n)');
xlabel('n');
ylabel('h(n)');
subplot(5, 1, 4);
stem(n4, h4, 'filled');
title('Đáp ứng xung h(n) = (1/2)^n');
xlabel('n');
ylabel('h(n)');
subplot(5, 1, 5);
stem(n5, h5, 'filled');
title('Đáp ứng xung h(n) = 3^n');
xlabel('n');
39
ylabel('h(n)');
3. Xác định đáp ứng lối ra hệ thống TTBB trong các trường hợp sau:
• y(n) − 0.5y(n − 1) + 0.25y(n − 2) = x(n) + 2x(n − 1) + x(n − 3), với x(n) =
cos(n.π/3)u(n), y(-1)=1 và y(-2)=0.5
• y(n) − 2y(n − 1) + y(n − 2) = x(n) + x(n − 1) với x(n) = u(n), y(-1)=-1 và y(-2)=2
% Trường hợp 1
n1 = 0:20;
x1 = cos(pi*n1/3) .* (n1 >= 0);
y1 = zeros(1, length(n1));
40
% Điều kiện ban đầu cho Trường hợp 1
y1_prev1 = 1; % y(-1)
y1_prev2 = 0.5; % y(-2)
% Tính y1(n)
for k = 1:length(n1)
if k == 1
x1k_1 = 0;
x1k_3 = 0;
elseif k == 2
x1k_1 = x1(k-1);
x1k_3 = 0;
elseif k == 3
x1k_1 = x1(k-1);
x1k_3 = 0;
else
x1k_1 = x1(k-1);
x1k_3 = x1(k-3);
end
if k == 1
y1(k) = x1(k) + 2*x1k_1 + x1k_3 + 0.5*y1_prev1 - 0.25*y1_prev2;
elseif k == 2
y1(k) = x1(k) + 2*x1k_1 + x1k_3 + 0.5*y1(k-1) - 0.25*y1_prev1;
else
y1(k) = x1(k) + 2*x1k_1 + x1k_3 + 0.5*y1(k-1) - 0.25*y1(k-2);
end
end
41
% Trường hợp 2
n2 = 0:20;
x2 = (n2 >= 0); % x(n) = u(n)
y2 = zeros(1, length(n2));
% Điều kiện ban đầu cho Trường hợp 2
y2_prev1 = -1; % y(-1)
y2_prev2 = -2; % y(-2)
% Tính y2(n)
for k = 1:length(n2)
if k == 1
x2k_1 = 0;
else
x2k_1 = x2(k-1);
end
if k == 1
y2(k) = x2(k) + x2k_1 + 2*y2_prev1 - y2_prev2;
elseif k == 2
y2(k) = x2(k) + x2k_1 + 2*y2(k-1) - y2_prev1;
else
y2(k) = x2(k) + x2k_1 + 2*y2(k-1) - y2(k-2);
end
end
% Vẽ kết quả
figure;
subplot(2, 1, 1);
42
stem(n1, y1, 'filled');
title('Đáp ứng lối ra y(n) với y(n) - 0.5y(n - 1) + 0.25y(n - 2) = x(n) + 2x(n - 1) + x(n 3)');
xlabel('n');
ylabel('y(n)');
subplot(2, 1, 2);
stem(n2, y2, 'filled');
title('Đáp ứng lối ra y(n) với y(n) - 2y(n - 1) + y(n - 2) = x(n) + x(n - 1)');
xlabel('n');
ylabel('y(n)');
43
Chương 5 THIẾT KẾ CẤU TRÚC HỆ THỐNG
A. Lý Thuyết
5.1 Cấu trúc hệ thống
Cấu trúc hệ thống đề cập đến cách mà các thành phần của hệ thống được tổ chức, kết nối
và tương tác với nhau. Cấu trúc này quyết định về cách tổ chức dữ liệu và luồng thông
tin, quy trình xử lý, và cách mà các phần của hệ thống tương tác để đạt được mục tiêu
hoạt động.
Thành phần của cấu trúc hệ thống có thể bao gồm:
1. Các module hoặc thành phần chức năng: Đây là các phần tử cơ bản của hệ
thống, mỗi cái thực hiện một chức năng cụ thể. Chẳng hạn, trong một hệ thống
quản lý đơn hàng, có thể có các module cho việc nhập đơn hàng, xử lý thanh toán,
quản lý kho, v.v.
2. Giao diện: Là cách mà người dùng hoặc các hệ thống khác tương tác với hệ
thống. Giao diện có thể bao gồm giao diện người dùng (UI), API (Application
Programming Interface), hoặc các giao thức truyền thông.
3. Luồng dữ liệu: Là cách mà dữ liệu được truyền qua các thành phần của hệ thống.
Điều này có thể bao gồm cơ chế như hàng đợi, dây chuyền xử lý, hoặc luồng dữ
liệu song song.
4. Các quy trình hoặc quy tắc kinh doanh: Các quy tắc và quy trình được thực
hiện bởi hệ thống để thực hiện các nhiệm vụ cụ thể hoặc đảm bảo tuân thủ các quy
định và tiêu chuẩn.
Mục tiêu của việc thiết kế cấu trúc hệ thống:
•
Tính linh hoạt: Hệ thống nên có khả năng thích ứng với thay đổi trong yêu cầu và
môi trường.
44
•
Tính mở rộng: Cấu trúc phải có khả năng mở rộng để đáp ứng với sự phát triển
của hệ thống.
•
Hiệu suất: Tối ưu hóa việc sử dụng tài nguyên để đạt được hiệu suất tốt nhất.
•
Dễ bảo trì và sửa chữa: Cấu trúc phải được thiết kế sao cho dễ dàng kiểm tra,
bảo trì và sửa chữa khi cần thiết.
Một cấu trúc hệ thống tốt sẽ đảm bảo rằng hệ thống hoạt động hiệu quả và có thể mở
rộng để đáp ứng với các yêu cầu và thay đổi trong tương lai.
5.2 Cấu trúc nối tiếp và cấu trúc song song
5.2.1 Thiết kế cấu trúc tối ưu kiểu nối tiếp
Trong cấu trúc nối tiếp, các thành phần của hệ thống được kết nối theo dạng chuỗi, tức là
đầu ra của một thành phần là đầu vào của thành phần tiếp theo. Thiết kế cấu trúc tối ưu
kiểu nối tiếp tập trung vào việc tối ưu hóa luồng dữ liệu và quy trình xử lý trong chuỗi
này.
Ưu điểm của cấu trúc nối tiếp:
•
Đơn giản: Dễ hiểu và triển khai.
•
Tuân thủ và ổn định: Mỗi thành phần được thực hiện tuần tự, giúp kiểm soát và
theo dõi quá trình xử lý.
Nhược điểm của cấu trúc nối tiếp:
•
Hiệu suất: Có thể gặp vấn đề về hiệu suất nếu có thành phần chậm chạp trong
chuỗi.
•
Mở rộng hạn chế: Khả năng mở rộng có thể bị hạn chế bởi sự liên kết chặt chẽ
giữa các thành phần.
5.2.2 Thiết kế cấu trúc tối ưu kiểu song song
Trong cấu trúc song song, các thành phần của hệ thống hoạt động đồng thời và độc lập
với nhau. Thiết kế cấu trúc tối ưu kiểu song song tập trung vào việc phân tách và xử lý
công việc đồng thời để tối ưu hóa hiệu suất và tính mở rộng của hệ thống.
Ưu điểm của cấu trúc song song:
•
Hiệu suất: Cải thiện hiệu suất bằng cách xử lý công việc đồng thời.
45
•
Linh hoạt và mở rộng: Dễ dàng mở rộng hệ thống bằng cách thêm các tài nguyên
song song.
Nhược điểm của cấu trúc song song:
•
Phức tạp: Thiết kế và triển khai cấu trúc song song thường phức tạp hơn so với
cấu trúc nối tiếp.
•
Đồng bộ hóa: Cần có các cơ chế đồng bộ hóa để đảm bảo tính nhất quán và độ tin
cậy của hệ thống.
Lựa chọn cấu trúc phù hợp
Lựa chọn cấu trúc phù hợp phụ thuộc vào yêu cầu cụ thể của hệ thống, bao gồm hiệu
suất, độ tin cậy, tính linh hoạt và khả năng mở rộng. Trong nhiều trường hợp, việc kết
hợp cả hai cấu trúc có thể tạo ra một hệ thống tối ưu với sự kết hợp của tính ổn định của
cấu trúc nối tiếp và tính linh hoạt của cấu trúc song song.
B. Bài tập
3. Viết chương trình thực hiện quá trình phân tích một hệ thống thành các cấu trúc tối
giản theo kiểu song song. Hàm có dạng: function [Tuso, Mauso] = cautrucsongsong[a, b]
với Tuso, Mauso là ma trận, lưu hệ số của đa thức tử số và mẫu số của các hệ thống thành
phần.
function [Tuso, Mauso] = cautrucsongsong(a, b)
% Hàm này phân tích hệ thống thành các cấu trúc tối giản theo kiểu song song
% a: hệ số của tử số đa thức
% b: hệ số của mẫu số đa thức
% Tuso: ma trận lưu hệ số của đa thức tử số của các hệ thống thành phần
% Mauso: ma trận lưu hệ số của đa thức mẫu số của các hệ thống thành phần
% Sử dụng phân tích phân số từng phần để phân tích hàm truyền
[R, P, K] = residue(a, b);
46
% Số lượng phân số đơn giản
numTerms = length(R);
% Khởi tạo các ma trận tử số và mẫu số
Tuso = zeros(numTerms, length(K));
Mauso = zeros(numTerms, length(b));
% Điền giá trị vào các ma trận tử số và mẫu số
for i = 1:numTerms
Tuso(i, :) = [R(i), zeros(1, length(K)-1)];
Mauso(i, :) = poly(P(i));
end
% Thêm phần tử K vào ma trận tử số
if ~isempty(K)
Tuso = [Tuso; K];
Mauso = [Mauso; zeros(1, length(b))];
end
end
47
Chương 6 ỨNG DỤNG CỦA XỬ LÝ TÍN HIỆU TRONG TẠO HIỆU ỨNG ÂM
THANH
A. Lý Thuyết
6.1 Âm thanh
Âm thanh là các rung động được truyền qua một môi trường, như không khí, chất lỏng,
chất rắn hoặc plasma, có tần số nằm trong phạm vi tần số mà con người có thể nghe
được, từ khoảng 20 Hz đến 20 kHz. Tuy nhiên, dải tần số âm thanh có thể khác nhau cho
các loại vật liệu và môi trường khác nhau. Âm thanh có thể được cảm nhận hoặc nghe
thấy thông qua sự thay đổi áp suất trong môi trường truyền qua màng nhĩ của tai. Biên độ
(độ lớn), tần số và pha của các thành phần của áp suất không khí (một phần của âm
thanh) quyết định cách con người cảm nhận âm thanh.
6.2 Tiếng vọng (Echo)
Tiếng vọng là hiện tượng phản xạ âm thanh mà chúng ta nghe được khi âm thanh phản xạ
từ các bề mặt cứng trong một không gian đóng (ví dụ như một hội trường hoặc hang
động) và trở lại tai người nghe. Khi đó, người nghe có thể nghe được hai hoặc nhiều
phiên bản của cùng một âm thanh, mỗi phiên bản đến tai vào một thời điểm khác nhau
một chút. Tiếng vọng xảy ra do tốc độ lan truyền của âm thanh trong không khí tương đối
chậm, khoảng 340 mét mỗi giây. Do đó, khi âm thanh gặp phải các vật cản trong môi
trường, nó có thể bị phản xạ và tạo ra nhiều phiên bản khác nhau của âm thanh mà người
nghe có thể nghe thấy.
6.3 Tiếng ngân (Reverberation)
Tiếng ngân, hay còn gọi là reverberation, là hiện tượng phản xạ và lan truyền của âm
thanh trong một không gian đóng sau khi nguồn âm đã dừng lại. Khi âm thanh phản xạ từ
các bề mặt cứng trong một không gian, nó tạo ra một loạt các phiên bản của âm thanh,
48
mỗi phiên bản đến tai người nghe vào thời điểm khác nhau, tạo ra một âm thanh phức tạp
và giàu cảm xúc. Tiếng ngân tạo ra cảm giác về không gian, âm sắc và sự sống động cho
âm thanh.
6.4 Chipmunks
Chipmunks là tên gọi phổ biến cho hiện tượng tăng tốc độ phát lại âm thanh, làm cho
giọng nói hoặc âm nhạc nghe có vẻ nhanh hơn và cao hơn so với bình thường. Hiện
tượng này thường được sử dụng như một hiệu ứng hoặc trò vui trong công nghệ âm
thanh, video hoặc giải trí.
6.5 Optimus Primes
Optimus Primes là một tên gọi hài hước được sử dụng để mô tả việc biến đổi giọng nói
của con người thành một giọng điện thoại giống như giọng của nhân vật Optimus Prime
trong loạt phim hoạt hình Transformers. Điều này thường được thực hiện bằng cách sử
dụng các phần mềm hoặc thiết bị xử lý âm thanh để thay đổi tần số và độ cao của giọng
nói, tạo ra một hiệu ứng giọng nói mạnh mẽ và trầm ấm, giống như giọng của nhân vật
Optimus Prime.
49
Chương 7 THIẾT KẾ BỘ LỌC SỐ IIR, FIR
A. Lý Thuyết
7.1 Bộ lọc số
Bộ lọc số là một công cụ quan trọng trong xử lý tín hiệu số và hệ thống điều khiển. Nó
được sử dụng để loại bỏ hoặc giảm những thành phần không mong muốn hoặc nhiễu từ
tín hiệu đầu vào, hoặc để trích xuất thông tin cần thiết từ tín hiệu.
Các loại bộ lọc số bao gồm bộ lọc FIR (Finite Impulse Response) và bộ lọc IIR (Infinite
Impulse Response). Bộ lọc số có thể được triển khai bằng phần cứng hoặc phần mềm, và
chúng có thể thực hiện nhiều chức năng xử lý tín hiệu, bao gồm lọc thông thấp, lọc thông
cao, lọc thông băng qua, và lọc thông dãn.
7.2 Lọc IIR
Lọc IIR (Infinite Impulse Response) là một loại bộ lọc số trong đó đáp ứng của hệ thống
vô hạn khi đầu vào được kích hoạt bởi một xung delta (impulse). Điều này có nghĩa là
đầu ra của hệ thống phụ thuộc không chỉ vào đầu vào hiện tại mà còn vào các giá trị
trước đó của đầu vào và đầu ra.
Cấu trúc của lọc IIR thường gồm các phần tử phản hồi (feedback) và phần tử cấp dữ liệu
(feedforward). Phần tử phản hồi cho phép thông tin từ đầu ra quay lại đầu vào, trong khi
phần tử cấp dữ liệu xử lý thông tin đầu vào theo hướng truyền thẳng.
Ưu điểm của bộ lọc IIR bao gồm:
•
Độ phức tạp thấp so với bộ lọc FIR khi cùng đạt được đáp ứng tần số mong muốn.
•
Hiệu suất tính toán cao với cùng một số lượng hệ số.
Tuy nhiên, bộ lọc IIR cũng có nhược điểm là:
50
•
Dễ gây ổn định nếu không được thiết kế cẩn thận.
•
Có thể gây nhiễu âm thanh do các vấn đề về ổn định.
7.3 fdatool và fvtool
fdatool
fdatool là một công cụ trong MATLAB được sử dụng để thiết kế bộ lọc số FIR và IIR. Nó
cung cấp giao diện đồ họa dễ sử dụng cho việc thiết kế và phân tích bộ lọc số, cho phép
người dùng tinh chỉnh các thông số của bộ lọc để đạt được yêu cầu cụ thể về phản ứng
tần số và đáp ứng thời gian. fdatool cung cấp các công cụ và chức năng để thiết kế bộ lọc
FIR và IIR, tinh chỉnh hệ số, và phân tích kết quả thiết kế.
fvtool
fvtool là một công cụ trong MATLAB được sử dụng để hiển thị và phân tích đáp ứng tần
số và đáp ứng thời gian của các bộ lọc số FIR và IIR. Nó cho phép người dùng nhập các
hệ số của bộ lọc và hiển thị biểu đồ đáp ứng tần số, biểu đồ pha, biểu đồ đáp ứng thời
gian và các đặc điểm khác của bộ lọc. fvtool cung cấp giao diện đồ họa dễ sử dụng và
cho phép người dùng tinh chỉnh các thông số hiển thị để phân tích và đánh giá bộ lọc một
cách chi tiết.
Sự kết hợp
fdatool và fvtool thường được sử dụng cùng nhau trong quá trình thiết kế và phân tích bộ
lọc số trong MATLAB. Người dùng có thể sử dụng fdatool để thiết kế bộ lọc FIR hoặc
IIR và tinh chỉnh các thông số của nó, sau đó sử dụng fvtool để phân tích và hiển thị các
đáp ứng tần số và đáp ứng thời gian của bộ lọc đã thiết kế. Sự kết hợp của hai công cụ
này giúp người dùng dễ dàng thiết kế, tinh chỉnh và phân tích các bộ lọc số một cách hiệu
quả.
7.4 Thiết kế bộ lọc số FIR
Bộ lọc số FIR (Finite Impulse Response) là một loại bộ lọc số trong đó đáp ứng của hệ
thống chỉ tồn tại trong một khoảng thời gian hữu hạn sau khi đầu vào được kích hoạt.
Thiết kế bộ lọc số FIR thường được thực hiện bằng cách sử dụng các phương pháp và
51
công cụ khác nhau, trong đó phương pháp cửa số là một trong những phương pháp phổ
biến.
7.4.1 Thiết kế sử dụng phương pháp cửa số
Phương pháp cửa số thường bắt đầu bằng việc xác định đáp ứng tần số mong muốn cho
bộ lọc, sau đó sử dụng các cửa số (window functions) như cửa số Hamming, cửa số
Blackman, hoặc cửa số Kaiser để thiết kế các hệ số của bộ lọc sao cho đáp ứng tần số của
nó gần với yêu cầu nhất có thể.
Các bước cơ bản để thiết kế bộ lọc số FIR bằng phương pháp cửa số là:
1. Xác định yêu cầu về đáp ứng tần số cho bộ lọc, bao gồm đáp ứng tần số thông qua
và tần số cắt (cutoff frequency).
2. Chọn cửa số phù hợp dựa trên yêu cầu thiết kế và ứng dụng.
3. Tính toán hệ số của bộ lọc sử dụng cửa số và phương pháp chuyển đổi Fourier
ngược (inverse Fourier transform).
4. Tinh chỉnh các thông số của bộ lọc nếu cần thiết và kiểm tra hiệu suất của nó.
7.4.2 Chuyển đổi giữa các bộ lọc
Khi cần, có thể chuyển đổi giữa các bộ lọc số FIR và IIR để đáp ứng yêu cầu cụ thể hoặc
tối ưu hóa hiệu suất của hệ thống. Có các phương pháp chuyển đổi khác nhau có thể được
sử dụng, bao gồm phương pháp tương đương (equivalence methods), phương pháp xấp xỉ
(approximation methods) và phương pháp hỗn hợp (hybrid methods).
Việc chuyển đổi giữa các bộ lọc thường đòi hỏi kiến thức sâu rộng về lý thuyết và kỹ
thuật xử lý tín hiệu số. Trong một số trường hợp, việc chuyển đổi có thể là một quá trình
phức tạp và đòi hỏi sự tinh tế và kinh nghiệm.
B. Bài tập
2. Tạo tín hiệu x dài 3 giây là tổng của 3 tín hiệu thành phần, có cùng biên độ, lần
lượt được cộng thêm vào với độ trễ 0.1 giây. Cụ thể:
• Cả 3 tín hiệu phải có tần số lấy mẫu là 8192Hz
• Tín hiệu 1 có tần số 220Hz; từ 0 <t <0.3s
52
• Tín hiệu 2 có tần số 300Hz; từ 0.1 <t <0.3s
• Tín hiệu 3 có tần số 440Hz; từ 0.2 <t <0.3s
• Tín hiệu trên được thêm nhiễu trắng Gaussian: noise = randn(size(t));
y = x + noise;
a) Vẽ tín hiệu x ban đầu và tín hiệu y sau khi bị nhiễu.
b) Thiết kế bộ phát IIR đáp ứng tùy ý để loại bỏ thành phần 300Hz khỏi tín
hiệu ba âm có nhiễu trắng y. Vẽ đáp ứng tần số của bộ lọc.
c) Lọc tín hiệu y với bộ chỉnh âm được thiết kế.
d) So sánh tín hiệu trong miền thời gian và tần số trước và sau khi lọc.
% a) Tạo tín hiệu x ban đầu và tín hiệu y sau khi bị nhiễu
Fs = 8192; % Tần số lấy mẫu
t = 0:1/Fs:3; % Vector thời gian từ 0 đến 3 giây
x1 = sin(2*pi*220*t).*((t>=0)&(t<0.3)); % Tín hiệu thành phần 1
x2 = sin(2*pi*300*t).*((t>=0.1)&(t<0.3)); % Tín hiệu thành phần 2
x3 = sin(2*pi*440*t).*((t>=0.2)&(t<0.3)); % Tín hiệu thành phần 3
x = x1 + x2 + x3; % Tín hiệu x
noise = randn(size(t)); % Tạo nhiễu trắng Gaussian
y = x + noise; % Tín hiệu y sau khi bị nhiễu
% Vẽ tín hiệu x và y
figure;
subplot(2,1,1);
plot(t,x);
xlabel('Thời gian (s)');
ylabel('Amplitude');
title('Tín hiệu x ban đầu');
53
subplot(2,1,2);
plot(t,y);
xlabel('Thời gian (s)');
ylabel('Amplitude');
title('Tín hiệu y sau khi bị nhiễu');
% b) Thiết kế bộ lọc IIR để loại bỏ thành phần 300Hz khỏi tín hiệu y
Fc = 300; % Tần số cắt
Wn = Fc/(Fs/2); % Tần số cắt chuẩn hóa
[b, a] = butter(4, Wn, 'high'); % Thiết kế bộ lọc IIR
% Vẽ đáp ứng tần số của bộ lọc
figure;
freqz(b, a, 512, Fs);
title('Đáp ứng tần số của bộ lọc IIR');
% c) Lọc tín hiệu y với bộ chỉnh âm được thiết kế
y_filtered = filter(b, a, y); % Lọc tín hiệu y
% d) So sánh tín hiệu trong miền thời gian và tần số trước và sau khi lọc
% Vẽ biểu đồ tín hiệu trong miền thời gian và tần số trước và sau khi lọc
figure;
subplot(2,1,1);
plot(t, y, 'b', t, y_filtered, 'r');
xlabel('Thời gian (s)');
ylabel('Amplitude');
54
title('Tín hiệu y trước và sau khi lọc');
legend('Trước lọc', 'Sau lọc');
subplot(2,1,2);
Y = fft(y)/length(y); % FFT của tín hiệu y
Y_filtered = fft(y_filtered)/length(y_filtered); % FFT của tín hiệu lọc
f = linspace(-Fs/2, Fs/2, length(t)); % Tạo vector tần số
plot(f, fftshift(abs(Y)), 'b', f, fftshift(abs(Y_filtered)), 'r');
xlabel('Tần số (Hz)');
ylabel('Magnitude');
title('Biểu đồ tần số của tín hiệu y trước và sau khi lọc');
legend('Trước lọc', 'Sau lọc');
55
56
Chương 8 XỬ LÝ TIẾNG NÓI
A. Lý Thuyết
8.1 Tiếng nói - Speech
Tiếng nói là cách chúng ta truyền đạt thông điệp, ý nghĩa và cảm xúc bằng cách sử dụng
các âm thanh phát ra từ miệng và cơ quan phát âm khác nhau trong hệ thống tiếng nói của
con người. Tiếng nói không chỉ là một phương tiện giao tiếp chính thống mà còn là một
phương tiện truyền đạt cảm xúc, ý định và tình cảm.
8.2 Thu tiếng nói
Quá trình thu tiếng nói là quá trình ghi lại và lưu trữ âm thanh được phát ra từ miệng của
người nói hoặc từ nguồn âm thanh khác. Đối với các ứng dụng ghi âm hoặc nhận dạng
tiếng nói, việc thu tiếng nói là một phần quan trọng để nắm bắt thông tin và xử lý sau này.
8.3 Đặc điểm của tiếng nói
Tiếng nói có nhiều đặc điểm khác nhau, bao gồm:
•
Tần số cơ bản (Fundamental Frequency): Tần số cơ bản của âm thanh được
phát ra từ dây thanh quản trong tiếng nói, quyết định giọng nói của người nói là
nam hay nữ.
•
Biên độ (Amplitude): Độ lớn của âm thanh, quyết định độ to nhỏ của tiếng nói.
•
Cường độ (Intensity): Sự mạnh yếu của âm thanh, liên quan đến năng lượng của
tiếng nói.
•
Tốc độ (Rate): Tốc độ phát âm của từng âm và từ trong tiếng nói.
•
Pha (Phase): Sự thay đổi của âm thanh theo thời gian.
8.4 Loại nhiễu trong file âm thanh
Trong file âm thanh, có thể tồn tại nhiều loại nhiễu khác nhau, bao gồm:
•
Nhiễu âm thanh (Acoustic noise): Nhiễu từ môi trường xung quanh, như tiếng ồn
từ xe cộ, tiếng gió, hoặc tiếng động từ thiết bị.
•
Nhiễu điện (Electrical noise): Nhiễu từ các thiết bị điện tử, như tiếng kêu rít từ
loa hoặc tiếng ồn từ các thiết bị điện tử trong quá trình ghi âm.
57
•
Nhiễu từ người nói (Speech interference): Nhiễu do sự giao cắt giữa các nguồn
âm thanh, như tiếng nói của người khác hoặc tiếng vang từ môi trường.
•
Nhiễu cơ học (Mechanical noise): Nhiễu từ các thiết bị cơ học, như tiếng rít từ
băng đĩa hoặc tiếng cọ xát từ micro khi di chuyển.
58
Chương 9 LỌC NHIỄU VÀ PHÁT HIỆN TÍN HIỆU ĐIỆN TIM BẤT THƯỜNG
A. Lý Thuyết
9.1.2 Hình thái học của tín hiệu điện tim
Tín hiệu điện tim được ghi lại thông qua các điện cực trên cơ thể và biểu hiện qua các
thành phần như sóng P, phức hợp QRS, sóng T và các khoảng thời gian khác nhau. Dưới
đây là một tóm tắt về các thành phần chính của tín hiệu điện tim và ý nghĩa của chúng:
Sóng P
•
Ý nghĩa: Sóng P biểu thị quá trình khử cực của tâm nhĩ trái và phải, tương ứng với
sự co thắt của tâm nhĩ.
•
Đặc điểm: Sóng P thường mịn và tròn, có chiều cao không quá 2,5 mm và thời
gian kéo dài không quá 0,11 giây.
Phức hợp QRS
•
Ý nghĩa: Phức hợp QRS biểu thị xung điện khi nó truyền qua tâm thất và đại diện
cho quá trình khử cực của tâm thất.
•
Đặc điểm: Bao gồm sóng Q, sóng R và sóng S. Thời gian của phức hợp QRS
trong trường hợp bình thường nằm trong khoảng 0,06 đến 0,10 giây.
Điểm J
•
Ý nghĩa: Điểm J là điểm mà phức hợp QRS và đoạn ST gặp nhau, có thể được sử
dụng để chẩn đoán nhồi máu cơ tim đoạn ST.
Sóng T
•
Ý nghĩa: Sóng T biểu thị tái cực của tâm thất, thường đi theo hướng tương tự như
phức hợp QRS.
•
Đặc điểm: Thường hơi bất đối xứng, với đỉnh gần điểm cuối của nó hơn so với
điểm bắt đầu. Sóng T đi theo cùng hướng với phức hợp QRS đi trước nó.
Khoảng PQ
•
Ý nghĩa: Khoảng thời gian truyền dẫn từ nhĩ đến thất, thường nằm trong khoảng
0,12 đến 0,2 giây. Kéo dài của khoảng PQ có thể gợi ý đến các bệnh lý như hội
chứng kích thích sớm.
59
Đoạn ST
•
Ý nghĩa: Đoạn ST là giai đoạn tái cực thất sớm và rất quan trọng trong việc chẩn
đoán nhồi máu cơ tim.
Đoạn QT
•
Ý nghĩa: Đoạn QT biểu thị khoảng thời gian hoạt động của tâm thất và thường
phụ thuộc vào tần số nhịp tim. Kéo dài của đoạn QT có thể liên quan đến các vấn
đề như tăng nguy cơ loạn nhịp thất.
9.1.3 Nhiễu trong ECG
Tín hiệu ECG thường bị nhiễu khi thu được, làm mất đi sự rõ ràng của các đặc điểm
trong tín hiệu. Điều này làm cho việc xác định các đặc trưng của tín hiệu trở nên khó
khăn. Do đó, quá trình xử lý và lọc nhiễu là cần thiết để tái tạo tín hiệu ECG một cách
chính xác.
Trong tín hiệu ECG, tỷ lệ công suất tín hiệu so với nhiễu (Signal to Noise Ratio - SNR)
thường đủ tốt khi người đó nằm yên. Tuy nhiên, khi người đó vận động, nhiễu có thể bao
gồm hơi thở mạnh tác động vào sự dịch chuyển của điện cực (< 5 Hz) và nhiễu từ cơ bị
rung (> 100 Hz). Ngoài ra, có thể có cả nhiễu từ dòng điện lưới (60 Hz ở châu Âu và Bắc
Mỹ, 50 Hz ở một số nước khác).
9.1.4 Rối loạn nhịp tim (Arrhythmia)
Rối loạn nhịp tim là tình trạng hoạt động điện bất thường của tim, có thể là nhanh hơn
hoặc chậm hơn hoạt động điện bình thường. Điều này có thể bao gồm nhịp tim quá nhanh
(hơn 100 nhịp/phút) hoặc quá chậm (nhỏ hơn 60 nhịp/phút), cũng như sự xen kẽ giữa
nhịp bình thường và bất thường.
Mức độ nghiêm trọng của rối loạn nhịp tim phụ thuộc vào mức độ ảnh hưởng đến hoạt
động tuần hoàn máu và sự nuôi dưỡng của tim và các bộ phận khác của cơ thể. Một nhịp
tim bất thường đơn lẻ thường không ảnh hưởng đến tuần hoàn máu, nhưng nhiều nhịp tim
bất thường với tần suất cao có thể là vấn đề nghiêm trọng và có thể dẫn đến tử vong nếu
không được điều trị kịp thời.
60
Chương 10 XỬ LÝ ẢNH
A. Lý Thuyết
10.1 Hiển thị ảnh và chuyển đổi giữa các kênh mầu khác nhau
Trong xử lý ảnh, hiển thị và chuyển đổi giữa các không gian màu khác nhau là các phần
quan trọng. Điều này giúp cho việc hiểu và thao tác với hình ảnh trở nên linh hoạt hơn,
đặc biệt là khi chúng ta muốn thực hiện các phép biến đổi hoặc phân tích dữ liệu màu sắc.
10.1.1 Đọc và hiển thị ảnh
Bước đầu tiên trong xử lý ảnh là đọc và hiển thị ảnh. Để làm điều này, chúng ta cần sử
dụng các thư viện phổ biến như OpenCV (Open Source Computer Vision Library) trong
Python hoặc MATLAB.
•
Đọc ảnh: Thư viện cung cấp các phương thức để đọc các định dạng tệp ảnh khác
nhau như JPEG, PNG, BMP, và TIFF vào một cấu trúc dữ liệu ảnh.
•
Hiển thị ảnh: Sau khi đọc ảnh, chúng ta có thể sử dụng các chức năng hiển thị để
xem ảnh trên màn hình.
10.1.2 Chuyển đổi ảnh trong các không gian mầu (colorspace)
Các hình ảnh số thường được biểu diễn trong một không gian màu cụ thể như RGB (Red,
Green, Blue), HSV (Hue, Saturation, Value), hoặc GrayScale. Việc chuyển đổi giữa các
không gian màu này có thể hữu ích trong nhiều ứng dụng.
•
RGB to HSV: Chuyển đổi từ không gian màu RGB sang HSV cho phép chúng ta
điều chỉnh các thành phần màu sắc, độ bão hòa và giá trị của một hình ảnh.
•
RGB to Gray: Chuyển đổi từ không gian màu RGB sang GrayScale làm giảm
chiều sâu màu sắc của hình ảnh, thích hợp cho một số ứng dụng như nhận diện
cạnh và phân đoạn.
•
HSV to RGB: Chuyển đổi ngược lại từ không gian màu HSV sang RGB sau khi
đã thực hiện các thao tác xử lý trên hình ảnh.
61
10.2 Độ phân giải ảnh
Đây là khả năng của hình ảnh để hiển thị chi tiết, được đo bằng số lượng điểm ảnh trên
mỗi đơn vị diện tích. Độ phân giải cao tạo ra hình ảnh rõ nét và chi tiết hơn.
10.3 Toán tử trong ảnh
Là các phép biến đổi trực tiếp áp dụng lên pixel của hình ảnh. Chúng thường được sử
dụng để cải thiện chất lượng hình ảnh, phát hiện đặc điểm, hoặc thực hiện các tác vụ khác
trong xử lý ảnh như làm mờ, làm nét, gradient, xoay, phóng to, vv.
10.4 Miền tần số
Thường ám chỉ miền tần số của biến đổi Fourier của một hình ảnh. Biến đổi Fourier phân
tích hình ảnh thành các thành phần tần số khác nhau, từ tần số thấp đại diện cho cấu trúc
lớn đến tần số cao đại diện cho chi tiết nhỏ. Xử lý trong miền tần số cho phép thực hiện
các tác vụ như lọc tần số, làm sắc nét, và nén hình ảnh.
B. Bài tập
1. Ảnh trông như thế nào, nếu ta thay đổi thứ tự các kênh mầu trong ảnh? Kiểm thử lại
bằng cách viết lệnh để thực hiện hiển thị ảnh theo thứ tự B-R-G, G-B-R
Khi thay đổi thứ tự các kênh màu trong ảnh, màu sắc của ảnh có thể thay đổi đáng
kể. Ví dụ, nếu bạn thay đổi thứ tự kênh màu từ RGB (Red-Green-Blue) sang BGR (BlueGreen-Red), màu sắc trong ảnh sẽ bị đảo ngược.
% Đọc ảnh từ file
img = imread('a.jpg');
% Hiển thị ảnh theo thứ tự kênh màu BGR
imshow(img(:,:,[3 2 1])); % BGR
% Hiển thị ảnh theo thứ tự kênh màu GBR
imshow(img(:,:,[2 3 1])); % GBR
62
2. Viết lệnh để chuyển 1 ảnh RGB sang kiểu ảnh xám, theo các cách nêu trên. Chúng ta
có thể chuyển ngược từ ảnh xám sang ảnh mầu được không?
Để chuyển ảnh RGB sang ảnh xám, bạn có thể sử dụng phương pháp trung bình
của các kênh màu hoặc sử dụng các công thức được khuyến nghị như lấy 30% màu đỏ,
59% màu xanh lá cây và 11% màu lam.
% Đọc ảnh từ file
img = imread('a.jpg');
% Chuyển ảnh sang ảnh xám theo công thức được khuyến nghị
gray_img = 0.2989 * img(:,:,1) + 0.5870 * img(:,:,2) + 0.1140 * img(:,:,3);
% Hiển thị ảnh xám
imshow(gray_img);
3. Thử chuyển 1 ảnh thành kiểu HSV hoặc YCrCb. Nhận xét kết quả nếu 1 trong các ma
trận mầu (H hoặc S hoặc V ...) bằng 0.
% Đọc ảnh từ file
img = imread('a.jpg');
% Chuyển ảnh sang không gian màu HSV
img_hsv = rgb2hsv(img_rgb);
% Hiển thị ma trận màu H (hue)
figure;
imshow(img_hsv(:,:,1));
title('Hue channel (H)');
63
% Hiển thị ma trận màu S (saturation)
figure;
imshow(img_hsv(:,:,2));
title('Saturation channel (S)');
% Hiển thị ma trận màu V (value)
figure;
imshow(img_hsv(:,:,3));
title('Value channel (V)');
% Chuyển ảnh sang không gian màu YCrCb
img_ycbcr = rgb2ycbcr(img_rgb);
% Hiển thị ma trận màu Y (luminance)
figure;
imshow(img_ycbcr(:,:,1));
title('Luminance channel (Y)');
% Hiển thị ma trận màu Cr (red chrominance)
figure;
imshow(img_ycbcr(:,:,2));
title('Red chrominance channel (Cr)');
% Hiển thị ma trận màu Cb (blue chrominance)
figure;
imshow(img_ycbcr(:,:,3));
title('Blue chrominance channel (Cb)');
64
4. Viết lệnh chuyển 1 ảnh RGB sang ảnh nhị phân với các giá trị ngưỡng khác nhau và
hiển thị ảnh đó.
% Đọc ảnh RGB
image = imread('input_image.jpg');
% Chuyển ảnh sang grayscale
gray_image = rgb2gray(image);
% Thiết lập giá trị ngưỡng
threshold_value = 127;
% Áp dụng ngưỡng nhị phân
binary_image = imbinarize(gray_image, threshold_value/255);
% Hiển thị ảnh gốc và ảnh nhị phân
figure;
subplot(1,2,1), imshow(image), title('Original Image');
subplot(1,2,2), imshow(binary_image), title('Binary Image');
65
Download