EX2: Basic Signals-SinusoidsaChúng ta tạo các tín hiệu hình sin rời rạc trong MATLAB bằng cách lập hàm sau >> title'x[4]=cospi/sqrt23*n'; Nhận xét:... Cụ thể , công thức đưa ra có dạng:
Trang 1Project 1:basic signals EX1: Basic Signals-Impulsesa)Chúng ta tạo các xung tín hiệu trong MATLAB bằng cách lập hàm sau đây:
% ung voi xung x[4]=4.5 δ[n+7] trong khoang -10 ≤ n ≤ 0
Ta có kết quả ở trang sau:
xung x[1]=0.9 δ[n-5] trong khoảng 1 ≤ n ≤ 20 xung x[2]=0.8 δ[n] trong khoảng -15 ≤ n ≤ 15
Trang 2xung x[3]=1.5 δ[n-333] trong khoảng 300 ≤ n ≤ 350 xung x[4]=4.5 δ[n+7] trong khoảng -10 ≤ n ≤ 0
Nhận xét: -Ta sử dụng 2 vector nn và imp để tạo tín hiệu rời rạc và vẽ đồ thị.Trong
hàm new_impulse ta có 4 tham số vào là A(độ lớn của xung ), n0 (vị trí của xung trong dãy) , n1,n2(điểm bắt đầu và điểm kết thúc quá trình tạo xung ).Phải chú ý trong thực hiện lập trình vì imp bắt đầu từ 1 đến (n2-n1+1) trong khi nn bắt đầu
từ 0 đến (n2-n1) để khi thức hiện không có lỗi.Trong phần này ta không sử dụng
hàm title để dán nhãn chú tích cho mỗi hình vẽ do MATLAB không in ra kí hiệu δ
Error: Unexpected MATLAB operator.
b)Tín hiệu rời rạc có dạng (1.1) theo giả thiết đề bài là tín hiệu tuần hoàn có chu kì P=5, có chiều dài PM= 50 , bắt đầu từ n=0, kết thúc tại n=49 Để tạo tín hiệu trên
Trang 3Nhận xét:
Dựa vào đồ thị ta thấy có 10 xung trong chuỗi tín hiệu rời rạc hữu hạn tương ứng
với các giá trị của l =(0 9) Ta tạo ra tín hiệu trên bằng 2 vector nn và x.Trong đó
x được xây dựng bằng cách nối tiếp nhau 10 lần 1 vector có dạng [1;0;0;0;0] Đây
là cách làm hiệu quả khi ta đã hiểu rõ được bản chất của tín hiệu.Tuy nhiên có 1 cách làm khác là sử dụng 1 vòng for như sau:
Ta cũng đạt được kết quả tương tự
c)Ta sử dụng đoạn mã trong ví dụ:
x=[0;1;1;0;0;0]*ones(1,7);
x=x( : );
size(x)
ans =
Trang 442 1
stem(x);
Ta có đồ thị:
Dựa vào đồ thị thu được ta có thể xây dựng công thức dạng (1.1) như sau:
Nhật xét: -Đây chính là tổng của hai dãy tín hiệu thành phần s1(n) và s2(n) có dạng công thức như (1.1).
Trong đó s1(n) =
s2(n) =
Trang 5EX2: Basic Signals-Sinusoidsa)Chúng ta tạo các tín hiệu hình sin rời rạc trong MATLAB bằng cách lập hàm sau
>> title('x[4]=cos(pi/sqrt(23)*n)');
Nhận xét:
Trang 6Ta xây dựng hàm tạo chuỗi hình sin rời rạc có các giá trị đầu vào là biên độ A, tần
số góc omega0, pha ban đầu phi và các giá trị bắt đầu và kết thúc n1 và n2 Khi gọi
hàm sẽ tự động vẽ đồ thị của tín hiệu.Sau đó ta gán cho mỗi đồ thị 1 tên riêng dựa
vào lệnh title
Ta có kết quả:
Dựa vào đồ thị ta thấy ta có thể biểu diễn x[3](n) không theo công thức dạng
lượng giác do:
sin(3*π*n+ π/2) = sin(3* π*n)*cos(π/2)+cos(3*π*n)*sin(π/2) = cos(3* π*n) = ±1
phụ thuộc vào n
Trang 7Đó là tổng của 2 chuỗi xung có chu kì P là 2,có độ dài tương ứng lần lượt là 21 và
19
Cụ thể , công thức đưa ra có dạng:
b)Dựa vào hàm số đã xây dựng ở trên bao gồm 5 tham số: biên độ A, tần số góc omega,pha ban đầu ɸ và 2 vị trí bắt đầu và kết thúc tín hiệu.Ta chính sửa 1 số cấu
trúc trong đoạn mã để hàm sau khi thức hiện trả về các giá trị là vector chứa các
giá trị của sóng hình sin(thêm sinx,nn vào sau function để hàm trả về vector
sinx).Thử với tín hiệu rời rạc 2*sin(π*n/11) với n từ -20 đến 20.Ta có kết quả sau:
function [sinx,nn ] = new_sin(A,omega0,phi,n1,n2 )
Trang 8EX3: Sampled Sinusoidsa)Ta có các công thức tín hiệu sin s(t) và tín hiệu sau khi lấy mẫu s[n]:
S(t)=A *cos(2*π*f0*t+ɸ)
S[n] = s(t)|t=n*T = A*cos (2*π*f0/fs*n+ɸ)
Đây chính là quá trình lấy mẫu tín hiệu , hay là việc nhân tín hiệu cần lấy mẫu với 1
xung dirac có chu kì là Te Ta lập hàm lấy mẫu tín hiệu hình sin có các tham số: biên độ A, tần số của tín hiệu hình sin,tần số của xung lấy mẫu tslm ,pha ban đầu
ɸ và 2 thời gian bắt đầu và kết thúc quá trình lấy mẫu.
function [sintg] = lay_mau_th( A,tsm,phi,t1,t2,tslm )
temptg=t1:1/tslm:t2; % chia theo cac moc don vi theo thoi gian voi buoc nhay 1/tslm
>> lay_mau_th(50,1200,pi/4,0,7*10^-3,8000)
sin_lay_mau =
Columns 1 through 9
35.3553 -7.8217 -44.5503 -44.5503 -7.8217 35.3553 49.3844 22.6995 -22.6995
Trang 9Columns 10 through 18
-49.3844 -35.3553 7.8217 44.5503 44.5503 7.8217 -35.3553 -49.3844 -22.6995 Columns 19 through 27
22.6995 49.3844 35.3553 -7.8217 -44.5503 -44.5503 -7.8217 35.3553 49.3844 Columns 28 through 36
22.6995 -22.6995 -49.3844 -35.3553 7.8217 44.5503 44.5503 7.8217 -35.3553 Columns 37 through 45
-49.3844 -22.6995 22.6995 49.3844 35.3553 -7.8217 -44.5503 -44.5503 -7.8217 Columns 46 through 54
35.3553 49.3844 22.6995 -22.6995 -49.3844 -35.3553 7.8217 44.5503 44.5503 Columns 55 through 57
Trang 10Ta nhận thấy chiều dài của tín hiệu lấy mẫu là 57, bao gồm 8 chu kì hoàn chỉnh
Trang 11b)Lấy mẫu 1 tín hiệu cosin với thời gian lấy mẫu =n+3/4*T ,khi = 1/T ta có biến
đổi:
y[n]=A*cos(ω* (n+3/4*T)+ɸ) = A*cos(ω*n+ ω*3/4*T+ɸ)
y[n]= A*cos(ω*n+3/4*T*2*π/T+ɸ) = A*cos(ω*n+π/2 +π+ɸ )
Vậy y[n]= -A*sin(2*π*n/T+π+ɸ) = A*sin(2*π*n/T+ɸ)
Vậy với = 1/T ta có tín hiệu lấy mẫu là 1 hàm sin với chu kì T đã chọn.
Sử dụng hàm lay_mau_th đã viết ở phần a, ta sử dụng các tham số đầu vào như sau: A=50 , =n+3/4*T(ms) vậy từ đó ta tính được f( lấy mẫu) = 1/1(ms) = 1/10^3(s) = 1000 Hz,chọn T=0.1s ,vậy f(tín hiệu) =1 /T= 10Hz ,chọn khoảng thời gian theo n: 0 ≤ n ≤ 200 (ms) Starting time =0+3/4*T = 0.075s , ending time =
Trang 12a)Ta sử dụng đoạn mã theo mẫu để xây dựng tín hiệu rời rạc suy giảm theo hàm
mũ có dạng trong đoạn 0 20(có độ dài là 21)
Đồ thị đã thể hiện rõ 1 tín hiệu rời rạc suy giảm theo hàm mũ
b) Công thức toán học tính tổng của 1 chuỗi lũy thừa:
( a≠1) (1.2)
Để so sánh công thức (1.2) và giá trị tổng của các xung trong phần a ta sử dụng đoạn mã:
Trang 13Ta xây dựng lại hàm genexp như sau để tiện tính toán tổng: hàm trả về biến tong
là tổng của các giá trị tín hiệu tại các điểm n=(1,2, ,L+1) trong tín hiệu rời rạc vừa
xây dựng, phương pháp tính toán là sử dụng 1 vòng for Đầu vào bao gồm cơ số b, điểm bắt đầu n0 và đồ dài L:
function [tong ] = genexp( b,n0,L)
y[n]=a*y[n-1] over the range 1 ≤ n ≤L-1 (1.3)
Lý do 1 dãy tín hiệu dạng mũ được tìm thấy thường xuyên trong DSP là thời giankhi bị dịch chuyển không làm thay đổi tín hiệu.Do đó 1 tín hiệu mũ rời rạc tỏa mãnquan hệ dịch chuyển như công thức (1.3)
Ta lấy dữ liệu đầu vào của phần trước: b=0.9 , L=21
Trang 14Đồ thị kết quả:
Trang 15Cách 1: sử dụng đoãn mã phía trên
Cách 2: sử dụng genexp
d)Ta sử dụng hàm filter thay vì xây dựng hàm genexp đã xây dựng để tạo dãy tín
hiệu rời rạc suy giảm theo hàm mũ ở phần trước với việc sử dụng công thức đệ
quy: y[n]-a*y[n-1]=x[n] và điều kiện ban đầu y[-1]=0
Trang 16Cách sử dụng hàm lọc dữ liệu filter:
=>Trong SIGNAL PROCESSING TOOLBOX, hàm y =filter(b,a,x) lọc dữ liệu trong vector x với bộ lọc mô tả bởi các vectơ a và b, tạo ra dữ liệu y đã lọc Cấu trúc lọc
là bộ lọc dãy tổng quát mô tả bởi phương trình vi phân:
y(n) = b(1)x(n) + b(2)x(n-1) + + b(nb)x(n-nb+1) - a(2)y(n-1) - -a(na)y(n-na+1)
hoặc tương đương phép biến đổi Z:
Trang 17Nhận xét:
-Sử dụng hàm filter, ta có kết quả tương tự như dãy tín hiệu đã tạo bằng hàm
genexp ở phần trước.
-Ta sử dụng hàm filter trong bài này do công thức đệ quy y[n] -a*y[n-1]=x[n]
tương ứng với bộ lọc được mô tả bởi phương trình sử dụng trong hàm trên(xem cách sử dụng ở trên) có thể tạo ra được tín hiệu rời rạc theo yêu cầu đề bài:
y[-1]=0 y[0]= x[0]=1 y[1]=a y[2]=a^2
y[n]=a^nPROJECT 2 : COMPLEX-VALUED SIGNALS
EX 1:Complex Exponentials
Trang 18a)Để biểu diễn tín hiệu phức theo công thức Euler :==*(cos(θ*n)+j*sin(θ*n))
Ta xây dựng hàm như sau:
function [ ] = ham_phuc( r,phi,n1,n2)
Ta có kết quả:=> đồ thị bao gồm 2 phần, phần thực và phần ảo của tín hiệu
b)Để vẽ đồ thị hàm số của phần ảo đối với phần thực , ta sử dụng hàm sau, áp
dụng với z=(0.9 ,π/4) ,chiều dài xung 0≤n≤20 :
function [ ] = ham_xoan_oc( r,phi,n1,n2)
nn=n1:n2;
for i=1:1:(n2-n1+1)
Trang 19Ta có đồ thị như hình vẽ, tuy nhiên đồ thị chưa thể hiện rõ được hình xoắn ốc như
yêu cầu bài toán, ta hiệu chỉnh các giá trị r và θ như sau: z=(0.9 ,π/10) ,chiều dài
xung 0≤n≤100.Ta sử dụng đoạn mã sau:
>> ham_xoan_oc(0.9,pi/10,0,100)
Ta có đồ thị kết quả rõ ràng hơn:
Trang 20Nhận xét:đồ thị đã thể hiện rõ ràng được hàm xoắn ốc theo yêu cầu đề bài
c)Để thể hiện rõ hơn 1 tín hiệu phức,có đầy đủ pha ban đầu,biên độ, ta sử dụng
công thức thứ 2:
==*(cos(θ*n+ɸ)+j*sin(θ*n+ɸ))
Với G=A* A là biên độ, là pha ban đầu.
Trang 21Áp dụng với 4 xung hình sin được yêu cầu,ta sử dụng đoạn mã cùng với hàm được xây dựng bởi hàm exp như sau:
function [ xx ] = new_ham_phuc_o( A,r,ro,phi,n1,n2)
Trang 24d)Trong phần này ta sẽ xây dựng tín hiệu phức sử dụng hàm filter, với cách sử
dụng tương tự đã nêu ở phần trên, nhưng với hệ số a phức Ta dựa vào công thức
>> title('IMAG PART BY FILTER')
>>% tao lai bang ham mu
Trang 25Nhận xét:
Dựa vào đồ thị ta thấy cách xây dựng tín hiệu phức theo cách thông thường( hàm
exp) và theo cách sử dụng bộ lọc ( hàm filter) cho kết quả hoàn toàn giống nhau.
Trang 26e)Dựa vào công thức đệ quy: y[n]=*y[n-1]+x[n] ta có biến đổi sau để có thể biểu
diễn phần thực và phần ảo của tín hiệu y[n] 1 cách đệ quy, tức là và theo , ,x[n]
Ta có công thức đệ quy nhu yêu cầu đề bài
f) Từ lý thuyết phần e, ta xây dựng hàm tạo tín hiệu mũ phức theo kiểu đệ
quy.Hàm có tham số vào là A, r, θ,ɸ,n1,n2 và trả về dãy tín hiệu.So sánh với công thức sử dụng hàm filter đã xây dựng ở phần d.
Thử với A=1,ɸ=0,r=0.5,θ = 0 hoặc π/4
Trang 27stem(nn,real(th_phuc_filter (1,0.5,0,0,0,20))); title('REAL PART BY FILTER')
subplot(211)
stem(nn,th_phuc_dequy(1,0.5,pi/4,0,0,20)); title('REAL PART BY RECURSION')
subplot(212)
stem(nn,real(th_phuc_filter (1,0.5,pi/4,0,0,20))); title('REAL PART BY FILTER')
Ta có các đồ thị:
Trang 28Qua bài tập lớn trên chúng ta đã có 1 số kĩ năng cơ bản trong việc sử dụng phần
mềm MATLAB để xây dựng cũng như thao tác trên các dạng tín hiệu rời rạc, qua
đó có thể mở rộng hơn trong các công việc sau này.Ta cũng có những hình dung rõhơn về hình dạng của các dạng tín hiệu mà chúng ta thường sử dụng trong quá trình học