Professional Documents
Culture Documents
Bài tiểu luận này tập trung vào nghiên cứu và giải quyết các bài toán
trong lĩnh vực Xử lý số tín hiệu. Bằng cách sử dụng các công cụ và phần
mềm hỗ trợ trong Matlab, chúng tôi đều hướng tới hiểu rõ bản chất của một
số thuật toán và kỹ thuật được sử dụng. Nhờ vào Matlab, tôi dễ dàng thực
hiện các phân tích và mô phỏng tín hiệu số, từ đó giúp xác định cách hoạt
động của các thuật toán và phương pháp xử lý số. Tôi xin gửi lời cảm ơn
chân thành đến giảng viên thầy Võ Nguyên Sơn đã tạo điều kiện tốt nhất, hỗ
trợ và cung cấp kiến thức nền tảng cần thiết cho tôi trong quá trình nghiên
cứu. Trong quá trình nghiên cứu, tôi đã cố gắng tránh sai sót và hoàn thiện
kết quả, nhưng không thể tránh khỏi những khuyết điểm và sự thiếu sót. Tôi
mong nhận được sự góp ý và hỗ trợ từ giảng viên để bài tiểu luận có thể
được hoàn thiện và đạt được kết quả tốt nhất.
NHẬN XÉT CỦA GIÁO VIÊN
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
TpHCM, ngày ….. tháng …… năm ……
Giáo viên hướng dẫn
(Ký tên và ghi rõ họ tên)
MỤC LỤC
VẤN ĐỀ 1: Vẽ x(n) và YAMSC (n) với 10s lấy mẫu.................................................2
VẤN ĐỀ 2: Vẽ X(w) và YAMSC (w) dưới miền tần số.............................................4
VẤN ĐỀ 3: Quy luật của fc là gì ?, điều gì sẽ xảy ra nếu thay đổi fc ?..............6
VẤN ĐỀ 4: Điều gì sẽ xảy ra nếu chúng ta thay đổi N (tăng hoặc giảm) ?........9
VẤN ĐỀ 5: Điều gì sẽ xảy ra nếu Yamsc(t) = [1 + x(t)] cos(2πfct) ?.................12
VẤN ĐỀ 6: Tại bộ nhận phục hồi, x(t) được phục hồi từ yAMSC(t) theo công
thức yr(t) = YAMSC (t) cos(2πfct), phân tích yr(t) sau đó thiết kế một bộ lọc thông
thấp x(t) từ yr(t)?....................................................................................................15
VẤN ĐỀ 7: Điều gì sẽ xảy ra nếu T = 2 ?............................................................18
TÀI LIỆU THAM KHẢO.....................................................................................21
1
Phân tích tín hiệu x(t):
Xét 3 điểm A, B , C như hình dựa vào công thức y = ax+b có thể suy ra được
{1−t (t ≤ T )
X(t) = t−1(T <t)
2
subplot(2,1,1)
plot(t, x_n);
xlabel('t (seconds)');
ylabel('x(n)');
title('Đồ thị x(n) trong 10 giây sau khi được lấy mẫu');
grid on;
yn = x_n.*cos(2*pi*Fc*t);
subplot(2,1,2)
plot(t, yn);
xlabel('t (seconds)');
ylabel('x(n)');
title('Đồ thị y(n) trong 10 giây sau khi được lấy mẫu');
grid on;
Hình 2.
3
Hình 3.Kết quả đồ thị trong 10 giây sau khi được lấy mẫu
Kết luận: Vì tín hiệu đã được lấy mẫu N=200 lần trong khoảng thời gian 10
giây, ta có thể tính bước nhảy giữa các thời điểm lấy mẫu (tương ứng với giá trị
của n) là T = 10/200 = 0.05 giây.
Vì tín hiệu tồn tại trong khoảng từ 0 tới 2 (T =1s) => tín hiệu trong khoảng từ 2
đến 10 sẽ bằng 0
4
VẤN ĐỀ 2: Vẽ X(w) và YAMSC (w) dưới miền tần số
* Ý tưởng:
- Sau khi giải quyết xong vấn đề 1 ta có x(n) và YAMSC (n)
- Sử dụng biến đổi fourier để được x(w) và YAMSC (w) trong miền tần số ;
* Mô phỏng trên Matlab:
- Phần mã lập trình:
N = 200; %Số lượng lấy mẫu
Fc = 50; %Tần số sóng mang
Fs = 400; %Tần số lấy mãu
% Thời gian tối đa
Tmax = 10;
% Bước nhảy giữa các thời điểm lấy mẫu
T = Tmax / N;
% Tạo một mảng thời gian từ 0 đến 10 với bước nhảy T
t = 0:T:10;
% Khởi tạo mảng để lưu giá trị x(n)
x_n = zeros(1, length(t));
yn = x_n.*cos(2*pi*Fc*t);
5
% Tính tần số tương ứng với các mẫu DFT
f2 = [-N/2: N/2-1]*Fs/N; % Trục tần số ;
% Vẽ phổ X(w)
subplot(2, 1, 1);
plot(f2, abs(X_shifted),'r');
xlabel('Frequency (Hz)');
ylabel('Biên độ');
title('Phổ X(w)');
% Vẽ phổ Y(w)
subplot(2, 1, 2);
plot(f2, abs(Y_shifted),'r');
xlabel('Frequency (Hz)');
ylabel('Biên độ');
title('Phổ Y(w)');
- Phần kết quả mô phỏng:
6
VẤN ĐỀ 3: QUY LUẬT CỦA FC LÀ GÌ ?, ĐIỀU GÌ SẼ XẢY RA NẾU THAY
ĐỔI FC ?
Trong phương pháp AMSK, tín hiệu baseband (x_n) được nhân với một sóng
mang (cos(2 π fc*t)) có tần số fc để tạo ra tín hiệu modulatd mới (y_n). Sự thay đổi
biên độ của sóng mang phụ thuộc vào giá trị của tín hiệu baseband, và điều này
cho phép truyền thông tin theo cách dựa vào biên độ của sóng mang.
Tần số sóng mang (fc) quyết định tần số tín hiệu modulated cuối cùng và cũng là
một trong những tham số quan trọng trong hệ thống AMSK. Nếu thay đổi giá trị
của fc, tần số sóng mang sẽ thay đổi, và do đó, tần số tín hiệu modulated sẽ thay
đổi theo tần số sóng mang.
Để quan sát rõ ràng hơn về vấn đề này, tôi sẽ mở rộng tầm quan sát của phổ bằng
cách thay đổi số lượng lấy mẫu N.
* Kiểm chứng bằng matlab khi thay đổi fc:
- Phần mã lập trình:
N = 2000; %Số lượng lấy mẫu
Fc = 50; %Tần số sóng mang
Fc_giam = 25; %Tần số sóng mang giảm
Fc_tang = 100; %Tần số sóng mang tăng
Fs = 400; %Tần số lấy mãu
% Thời gian tối đa
Tmax = 10;
% Bước nhảy giữa các thời điểm lấy mẫu
T = Tmax / N;
% Tạo một mảng thời gian từ 0 đến 10 với bước nhảy T
t = 0:T:10;
% Khởi tạo mảng để lưu giá trị x(n)
x_n = zeros(1, length(t));
% Tính giá trị của x(n) tại mỗi thời điểm n
for i = 1:length(t)
if (t(i) >= 0 && t(i) <= 1)
x_n(i) = 1 - t(i);
elseif (t(i) > 1 && t(i) <= 2)
7
x_n(i) = t(i) - 1;
end
end
yn = x_n.*cos(2*pi*Fc*t);
yn_1 = x_n.*cos(2*pi*Fc_giam*t);
yn_2= x_n.*cos(2*pi*Fc_tang*t);
% Vẽ phổ Y(w)
subplot(3, 1, 1);
plot(f2, abs(Y_shifted),'r');
xlabel('Frequency (Hz)');
ylabel('Biên độ');
title('Phổ Y(w) khi fc = 50');
% Vẽ phổ Y(w) khi fc giảm
subplot(3, 1, 2);
plot(f2, abs(Y_shifted1),'r');
xlabel('Frequency (Hz)');
ylabel('Biên độ');
title('Phổ Y(w) khi fc = 25');
% Vẽ phổ Y(w) khi f tăng
subplot(3, 1, 3);
plot(f2, abs(Y_shifted2),'r');
xlabel('Frequency (Hz)');
ylabel('Biên độ');
title('Phổ Y(w) khi fc = 100');
8
- Phần cửa sổ kết quả mô phỏng:
9
VẤN ĐỀ 4: ĐIỀU GÌ SẼ XẢY RA NẾU CHÚNG TA THAY ĐỔI N (TĂNG
HOẶC GIẢM) ?
N là số lượng mẫu (samples) được sử dụng trong quá trình lấy mẫu và biến
đổi Fourier.
Khi tăng giá trị của N, số lượng mẫu sử dụng trong DFT sẽ tăng, do đó, độ
phân giải tần số sẽ tăng. Điều này có nghĩa là chúng ta có thể phân tích tín hiệu với
độ chi tiết cao hơn trong không gian tần số. Tuy nhiên, việc tăng N cũng đồng
nghĩa với việc tăng thời gian tính toán và tốn nhiều tài nguyên tính toán hơn.
Ngược lại, khi giảm giá trị của N, số lượng mẫu sử dụng trong DFT sẽ giảm,
dẫn đến độ phân giải tần số thấp hơn. Khi độ phân giải tần số thấp, chúng ta có thể
mất đi một số chi tiết nhỏ trong phổ, nhưng thời gian tính toán sẽ giảm đi và tài
nguyên tính toán cũng được tiết kiệm.
* Kiểm chứng bằng matlab khi thay đổi N:
- Phần mã lập trình:
%N = 200; %Số lượng lấy mẫu
N = 2000; %Số lượng lấy mẫu tăng
%N = 100; %Số lượng lấy mẫu giảm
yn = x_n.*cos(2*pi*Fc*t);
yn_1 = x_n.*cos(2*pi*Fc_giam*t);
yn_2= x_n.*cos(2*pi*Fc_tang*t);
% Vẽ phổ Y(w)
subplot(3, 1, 1);
plot(f2, abs(Y_shifted),'r');
xlabel('Frequency (Hz)');
ylabel('Biên độ');
title('Phổ Y(w) khi fc = 50');
% Vẽ phổ Y(w) khi fc giảm
subplot(3, 1, 2);
plot(f2, abs(Y_shifted1),'r');
xlabel('Frequency (Hz)');
ylabel('Biên độ');
title('Phổ Y(w) khi fc = 25');
% Vẽ phổ Y(w) khi f tăng
11
subplot(3, 1, 3);
plot(f2, abs(Y_shifted2),'r');
xlabel('Frequency (Hz)');
ylabel('Biên độ');
title('Phổ Y(w) khi fc = 100');
- Kết quả mô phỏng:
Khi thay đổi N thì tầm quan sát của phổ cũng sẽ thay đổi.
12
VẤN ĐỀ 5: ĐIỀU GÌ SẼ XẢY RA NẾU YAMSC(T) = [1 + X(T)] COS(2ΠFCT) ?
Để thuận lợi cho việc quan sát kết quả trong vấn đề 5, tôi sẽ thay đổi tầm
quan sát của phổ để có độ phân giải tần số tốt hơn và chi tiết phổ tín hiệu được
hiển thị rõ ràng hơn.
* Kiểm chứng bằng matlab khi thay N thành 100:
- Phần mã lập trình:
N = 2000; %Số lượng lấy mẫu
Fc = 50; %Tần số sóng mang
Fs = 400; %Tần số lấy mãu
% Thời gian tối đa
Tmax = 10;
% Bước nhảy giữa các thời điểm lấy mẫu
T = Tmax / N;
% Tạo một mảng thời gian từ 0 đến 10 với bước nhảy T
t = 0:T:10;
yn = x_n.*cos(2*pi*Fc*t);
yn1 = (1+ x_n).*cos(2*pi*Fc*t);
figure;
subplot(2,1,1)
plot(t, yn);
xlabel('t (seconds)');
ylabel('x(n)');
title('Đồ thị y(n) trong 10 giây sau khi được lấy mẫu');
grid on;
yn = x_n.*cos(2*pi*Fc*t);
subplot(2,1,2)
plot(t, yn1);
xlabel('t (seconds)');
ylabel('y(n)');
title('Đồ thị y(n) khi + 1 cho x(n) trong 10 giây sau khi
được lấy mẫu');
grid on;
figure;
% Vẽ phổ X(w)
subplot(2, 1, 1);
plot(f2, abs(Y_shifted),'r');
xlabel('Frequency (Hz)');
ylabel('Biên độ');
title('Phổ Y(w)');
% Vẽ phổ Y(w)
subplot(2, 1, 2);
plot(f2, abs(Y_shifted1),'r');
xlabel('Frequency (Hz)');
ylabel('Biên độ');
title('Phổ Y2(w)');
14
- Kết quả mô phỏng:
15
VẤN ĐỀ 6: TẠI BỘ NHẬN PHỤC HỒI, X(T) ĐƯỢC PHỤC HỒI TỪ
YAMSC(T) THEO CÔNG THỨC YR(T) = YAMSC (T) COS(2ΠFCT), PHÂN TÍCH
YR(T) SAU ĐÓ THIẾT KẾ MỘT BỘ LỌC THÔNG THẤP X(T) TỪ YR(T)?
* Mô phỏng trên Matlab:
- Phần mã lập trình:
N = 2000; %Số lượng lấy mẫu
Fc = 50; %Tần số sóng mang
Fs = 400; %Tần số lấy mãu
% Thời gian tối đa
Tmax = 10;
% Bước nhảy giữa các thời điểm lấy mẫu
T = Tmax / N;
% Tạo một mảng thời gian từ 0 đến 10 với bước nhảy T
t = 0:T:10;
% Khởi tạo mảng để lưu giá trị x(n)
x_n = zeros(1, length(t));
% Tính giá trị của x(n) tại mỗi thời điểm n
for i = 1:length(t)
if (t(i) >= 0 && t(i) <= 1)
x_n(i) = 1 - t(i);
elseif (t(i) > 1 && t(i) <= 2)
x_n(i) = t(i) - 1;
end
end
yn = x_n.*cos(2*pi*Fc*t);
yr = yn.*cos(2*pi*Fc*t);
figure;
% Vẽ phổ X(w)
subplot(2, 1, 1);
plot(f2, abs(X_w),'r', f2, abs(Y_w),'b');
xlabel('Frequency (Hz)');
ylabel('Biên độ');
legend('X_w','Y_w');
title('Phổ');
subplot(2,1,2)
plot(f2, abs(X_w),'r', f2, abs(Y_rw),'b');
xlabel('t (seconds)');
ylabel('Biên độ');
legend('X_w','Y_rw');
grid on;
18
Hình 11. Kết quả mô phỏng trong vấn đề 6
Kết luận: tín hiệu đầu ra bị trễ tuy nhiên tín hiệu được phục hồi gần đúng với
tín hiệu mẫu đầu vào và có biên độ giảm một nửa.
19
VẤN ĐỀ 7: ĐIỀU GÌ SẼ XẢY RA NẾU T = 2 ?
* Mô phỏng trên Matlab:
- Phần mã lập trình:
N = 200; %Số lượng lấy mẫu
Fc = 50; %Tần số sóng mang
Fs = 400; %Tần số lấy mãu
% Thời gian tối đa
Tmax = 10;
% Bước nhảy giữa các thời điểm lấy mẫu
%T = 1;
T = 2;
% Tạo một mảng thời gian từ 0 đến 10 với bước nhảy T
t = 0: Tmax/N:10;
yn = x_n.*cos(2*pi*Fc*t);
subplot(2,1,2)
plot(t, yn);
20
xlabel('t (seconds)');
ylabel('y(n)');
title('Đồ thị y(n) trong 10 giây sau khi được lấy mẫu');
grid on;
figure;
% Vẽ phổ X(w)
subplot(2, 1, 1);
plot(f2, abs(X_shifted),'r');
xlabel('Frequency (Hz)');
ylabel('Biên độ');
title('Phổ X(w)');
% Vẽ phổ Y(w)
subplot(2, 1, 2);
plot(f2, abs(Y_shifted),'r');
xlabel('Frequency (Hz)');
ylabel('Biên độ');
title('Phổ Y(w)');
21
Hình 12. Kết quả mô phỏng khi T = 1
- kết quả với T = 2:
22
TÀI LIỆU THAM KHẢO
1. Giáo trình và tài liệu của TS Võ Nguyên Sơn
2. https://dadorran.wordpress.com/2014/02/20/plotting-frequency-spectrum-
using-matlab/#2
23