Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 27 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
27
Dung lượng
916,72 KB
Nội dung
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆN – ĐIỆN TỬ NĂM HỌC 2021 – 2022 -* - BÁO CÁO THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU BÀI 3: THIẾT KẾ VÀ THỰC HIỆN CÁC BỘ LỌC FIR TRÊN MATLAB GVHD: Huỳnh Văn Phận Lớp L01 SV thực hiện: Nguyễn Ngọc Độ MSSV: 1913131 Ngày hoàn thành: 22/01/2022 CÁC THÍ NGHIỆM ĐÃ THỰC HIỆN: Thí nghiệm 1: Thiết kế, thực khảo sát lọc FIR chắn dải phương pháp cửa sổ Kaiser với thơng số sau: • Chiều dài đáp ứng xung: N = 63 (MATLAB hiển thị bậc lọc 62) • Tần số trung tâm: 2700 Hz • Tần số cắt: 2500 Hz 2900 Hz • Giá trị = • Tần số lấy mẫu 8000 Hz Bài làm: Thực Sptool: Kết quả: Đơn vị -1747 3766 765 37503 -94607 53484 10684 10 -5194 -4377 Lưu ý: Theo yêu cầu file hướng dẫn tất code bên viết chương trình Matlap tách để làm báo cáo: Thực lọc Matlab Để thực việc tính tốn ngõ lọc, ta sử dụng định nghĩa với đáp ứng xung vừa tìm sử dụng cơng cụ sptool mẫu tín hiệu ngõ vào Do sử dụng giải thuật xử lý mẫu để thực lọc Chương trình Matlab thực giải thuật xử lý mẫu cho lọc sau: % Matlab code % Giai thuat xu li mau Lx = length(x) M = length(h) -1 Ly = Lx + M y = zeros(1,Ly); w = zeros(1,N) t1 = Lx+1:1:Ly xk = [x zeros(size(t1))]; u = 0; for i=1:Ly w(1,1) = xk(1,i) for i1 = 1:N %he thong co nho % Voi moi x: w1=x % Ngo u end y(1,i) = u = 0; for w(1,i2)=w(1,i2-1); end end subplot(1,2,2); plot(0:1/Fs:(Ly-1)/Fs,y); xlabel('t(s)'); ylabel('y(t)') Đánh giá kết thực Sử dụng chương trình vẽ đồ thị Matlab để vẽ đồ thị giá trị đáp ứng xung lọc Chương trình Matlab vẽ đồ thị đáp ứng xung lọc: clc ; clear all; % % % ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN h=[-0.00174709654564910 0.00343223263694093 0.00314913871171463 0.000710421482553483 0.00437746218412451 0.00376664077187595 0.000330778555278004 0.00297665906401290 0.00166872303004502 -1.72704974511081e-17 0.00220275641330311 0.0116220248654656 0.0242275361286390 0.0375033940408382 0.0482007192080624 0.0534842680611123 0.0520015574471277 0.0443868144711528 0.0329698175224111 0.0208364586476874 0.0106849535445541 0.00398607038409518 0.000765675515476357 1.72704974511081e-17 0.000330778555278004 0.000710421482553483 0.000701884398853810 Fs = 8000 N = length(h) figure(1); stem(h); Ghi nhận dạng sóng đáp ứng xung lọc: i2 = Sử dụng chương trình Matlab tính FFT đáp ứng xung vẽ đồ thị đáp ứng biên pha miền tần số lọc Chương trình Matlab tính FFT vẽ đồ thị đáp ứng tần số lọc: % Dap ung tan so cua bo loc figure(2); m=1 [H_matlab, w] = freqz(h,m); H_matlab_manitude = abs(H_matlab); H_matlab_phase = angle(H_matlab); subplot(1,2,1) semilogy(w,H_matlab_manitude) xlabel("Frequency(radians)") ylabel("Magnitude(dB)") subplot(1,2,2) plot(w,H_matlab_phase) xlabel("Frequency(radians)") ylabel("Phase(degrees)") % FFT figure(3); Hk = fft(h,N) Hk_magnitude = abs(Hk) Hk_phase = angle(Hk) subplot(1,2,1) stem((0:N/2-1)*Fs/N,Hk_magnitude(1:N/2)/N) xlabel("Frequency(Hz)") ylabel("Amplitude") subplot(1,2,2) stem((0:N/2-1)*Fs/N,Hk_phase(1:N/2)/N) xlabel("Frequency(Hz)") ylabel("Phase") Đáp ứng tần số: Ghi nhận đáp ứng biên độ-tần số pha-tần số lọc: Kiểm tra lọc: Tạo mẫu tín hiệu sine đa tần có phương trình x (t ) = x1 (t )+ x (t ) với x1 ( t ) = cos ) x (t ) = cos (5400 t ) từ chương trình Matlab lưu vào biến (2000 t giá trị xn, xn1, xn2 với thông số sau: tần số lấy mẫu fs = 8000 Hz, khoảng thời gian lấy mẫu t = đến t = 0.05 s Sau xác định ngõ yn đưa xn qua lọc Thực yêu cầu sau: Vẽ đồ thị dạng sóng ngõ vào (x, x1, x2) ngõ (y) lọc Nhận xét Chương trình Matlap: % Tao mau tin hieu mien thoi gian figure(4) Ts = 1/Fs t = : Ts : 0.05 - Ts xn1= cos(2000*pi*t) xn2= cos(5400*pi*t) xn = xn1 + xn2 x = xn1 + xn2 + xn subplot(1,2,1) plot(t,x) xlabel('t(s)') ylabel('x(t)') % Giai thuat xu li mau Lx = length(x) M = length(h) -1 Ly = Lx + M y = zeros(1,Ly); w = zeros(1,N) t1 = Lx+1:1:Ly xk = [x zeros(size(t1))]; u = 0; for i=1:Ly w(1,1) = xk(1,i) for i1 = 1:N u = u + h(1,i1)*w(1,i1); end y(1,i) = u; u = 0; for i2 = N:-1:2 w(1,i2)=w(1,i2-1); end end subplot(1,2,2); plot(0:1/Fs:(Ly-1)/Fs,y); xlabel('t(s)'); ylabel('y(t)') Ngõ vào xn ngõ yn: Thực tính phổ ngõ vào (x) ngõ (y) lọc, sau vẽ đồ thị phổ biên độ ngõ vào ngõ Nhận xét Chương trình Matlap: % Ve mien tan so figure(5) X_pho = fft(x,Lx); Y_pho = fft(y,Ly); X_magnitude = abs(X_pho); Y_magnitude = abs(Y_pho); subplot(1,2,1) stem((0:Lx/2-1)*Fs/Lx,X_magnitude(1:Lx/2)/Lx) xlabel("Frequency(Hz)") ylabel("Amplitude_X") subplot(1,2,2) stem((0:Ly/21)*Fs/Ly,Y_magnitude(1:Ly/2)/Ly) xlabel("Frequency(Hz)") ylabel("Amplitude_Y") Phổ miền tần số: Tạo mẫu tín hiệu x(n) tổng tín hiệu sine có tần số từ 100 Hz đến 3900 Hz có bước nhảy 100Hz tần số lấy mẫu fs = 8000 Hz, sau cho tín hiệu xn qua lọc để tính giá trị ngõ y(n) Dùng chương trình Matlab để vẽ phổ biên độ tín hiệu ngõ vào ngõ Giải thích có dạng phổ này? Chương trính Matlap: % Tao mau tin hieu tu 100 >3900 va ve ngo vao, ngo figure(6) F=100:100:3900; xa=0; b=0; Lf=length(F); for i=1:Lf xa=xa+sin(2*pi*F(1,i)*t); end Lxa=length(xa); M=length(h)-1; k4=Lxa+M; k3=length(xa); k=length(h); ya=zeros(1,k4); xan=zeros(1,k4); t2=k3+1:1:k4; xan=[xa zeros(size(t2))]; w=zeros(1,k); for i=1:k4 w(1,1)=xan(1,i); for ii=1:k b=b+h(1,ii)*w(1,ii); end ya(1,i)=b; b=0; for e=k:-1:2 w(1,e)=w(1,e-1); end end Lya=length(ya); Ya=fft(ya,Lya); Xa=fft(xa,Lxa); Ya_mag=abs(Ya); Xa_mag=abs(Xa); subplot(1,2,1); stem((0:Lxa/2-1)*Fs/Lxa,Xa_mag(1:Lxa/2)/Lxa); xlabel('Hz'); ylabel('Amp'); subplot(1,2,2); stem((0:Lya/2-1)*Fs/Lya,Ya_mag(1:Lya/2)/Lya); xlabel('Hz'); ylabel('Amp'); Phổ tín hiệu ngõ vào ngõ ra: Nhận xét: -Bộ lọc nhóm tạo đáp ứng với yêu cầu đề -Ở phổ ngõ lọc chắn dải có fc1=2500 fc2=2900 nên phôt ngõ vùng tần số có giá trị = Thí nghiệm 2: Thiết kế, thực kiểm tra lọc FIR thông dải phương pháp Kaiser Window với thông số sau: • Chiều dài đáp ứng xung: 63 • Tần số cắt: 1500 2000 Hz • Giá trị = • Tần số lấy mẫu: kHz Đáp ứng tần số lọc thiết kế công cụ SPTool Matlab: Kết quả: for i=1:Ly w(1,1) = xk(1,i) for i1 = 1:N u = u + h(1,i1)*w(1,i1); end y(1,i) = u; u = 0; for i2 = N:-1:2 w(1,i2)=w(1,i2-1); end end subplot(1,2,2); plot(0:1/Fs:(Ly-1)/Fs,y); xlabel('t(s)'); ylabel('y(t)') Kết quả: Phổ miền số: Chương trình Matlap: % Ve mien tan so figure(3) X_pho = fft(x,Lx); Y_pho = fft(y,Ly); X_magnitude = abs(X_pho); Y_magnitude = abs(Y_pho); subplot(1,2,1) stem((0:Lx/2-1)*Fs/Lx,X_magnitude(1:Lx/2)/Lx) xlabel("Frequency(Hz)") ylabel("Amplitude_X") subplot(1,2,2) stem((0:Ly/21)*Fs/Ly,Y_magnitude(1:Ly/2)/Ly) xlabel("Frequency(Hz)") ylabel("Amplitude_Y") Kết quả: Kiểm tra lọc với ngõ vào tín hiệu tổng tín hiệu sine tần số từ 100 – 3900 Hz: Chương trình Matlap: % Tao mau tin hieu tu 100 >3900 va ve ngo vao, ngo figure(4); F=100:100:3900; xa=0; b=0; Lf=length(F); for i=1:Lf xa=xa+sin(2*pi*F(1,i)*t); end Lxa=length(xa); M=length(h)-1; k4=Lxa+M; k3=length(xa); k=length(h); ya=zeros(1,k4); xan=zeros(1,k4); t2=k3+1:1:k4; xan=[xa zeros(size(t2))]; w=zeros(1,k); for i=1:k4 w(1,1)=xan(1,i); for ii=1:k b=b+h(1,ii)*w(1,ii); end ya(1,i)=b; b=0; for e=k:-1:2 w(1,e)=w(1,e-1); end end Lya=length(ya); Ya=fft(ya,Lya); Xa=fft(xa,Lxa); Ya_mag=abs(Ya); Xa_mag=abs(Xa); subplot(1,2,1); stem((0:Lxa/2-1)*Fs/Lxa,Xa_mag(1:Lxa/2)/Lxa); xlabel('Hz'); ylabel('Amp'); subplot(1,2,2); stem((0:Lya/2-1)*Fs/Lya,Ya_mag(1:Lya/2)/Lya); xlabel('Hz'); ylabel('Amp'); Kết quả: Nhận xét: -Bộ lọc nhóm tạo đáp ứng với yêu cầu đề -Ở phổ ngõ lọc chắn dải có fc1=1500 fc2=2000 nên phổ ngõ vùng tần số có giá trị = Thí nghiệm 3: Thiết kế, thực kiểm tra lọc FIR thông cao phương pháp Kaiser Window với thông số sau: Thiết kế Sptool: • Chiều dài đáp ứng xung: 63 • Tần số cắt: 2200 Hz • Giá trị = • Tần số lấy mẫu: kHz Đáp ứng tần số lọc thiết kế dùng SPTool MATLAB: Gía trị hệ số đáp ứng xung lọc : Đơn vị 142 2327 9576 26518 93123 -45494 -3624 2915 2368 10 Đáp ứng biên độ-tần số pha-tần số lọc thực Matlab: Chương trình Matlap: clc ; clear all; h=[0.000142283305243643 0.00180437346965779 -0.00105503823230635 0.00236898929825931 0.00232783717916770 -0.00413698749921849 0.00167033758173271 0.00815538025173265 -0.00981140458140240 0.0193319503098689 0.00477607330848616 0.0430757576238980 0.314177280837310 0.0931230506131574 -0.0454949731715578 -0.0430757576238980 0.0402554521969857 0.0189073657296987 -0.0337130144049365 0.00477607330848616 0.0193319503098689 -0.00718257546114980 0.00815538025173265 0.00167033758173271 0.00236898929825931 -0.00227059504648955 0.00180437346965779 0.000238094241548619 0.000142283305243643]; Fs = 8000 N = length(h) %% Câu % % % biên độ-tần số pha-tần số figure(1); Hk = fft(h,N) Hk_magnitude = abs(Hk) Hk_phase = angle(Hk) subplot(1,2,1) stem((0:N/2-1)*Fs/N,Hk_magnitude(1:N/2)/N) xlabel("Frequency(Hz)") ylabel("Amplitude") subplot(1,2,2) stem((0:N/2-1)*Fs/N,Hk_phase(1:N/2)/N) xlabel("Frequency(Hz)") ylabel("Phase") Kết quả: Kiểm tra lọc với ngõ vào tín hiệu sin đa tần có thành phần tần số 1000 Hz 2500 Hz: Chương trình Matlap: % Tao mau tin hieu mien thoi gian figure(2) Ts = 1/Fs t = : Ts : 0.05 - Ts xn1= cos(2000*pi*t) xn2= cos(5000*pi*t) xn = xn1 + xn2 x = xn1 + xn2 + xn subplot(1,2,1) plot(t,x) xlabel('t(s)') ylabel('x(t)') % Giai thuat xu li mau Lx = length(x) M = length(h) -1 Ly = Lx + M y = zeros(1,Ly); w = zeros(1,N) t1 = Lx+1:1:Ly xk = [x zeros(size(t1))]; u = 0; for i=1:Ly w(1,1) = xk(1,i) for i1 = 1:N u = u + h(1,i1)*w(1,i1); end y(1,i) = u; u = 0; for i2 = N:-1:2 w(1,i2)=w(1,i2-1); end end subplot(1,2,2); plot(0:1/Fs:(Ly-1)/Fs,y); xlabel('t(s)'); ylabel('y(t)') % Ve mien tan so figure(3); X_pho = fft(x,Lx); Y_pho = fft(y,Ly); X_magnitude = abs(X_pho); Y_magnitude = abs(Y_pho); subplot(1,2,1) stem((0:Lx/2-1)*Fs/Lx,X_magnitude(1:Lx/2)/Lx) xlabel("Frequency(Hz)") ylabel("Amplitude_X") subplot(1,2,2) stem((0:Ly/21)*Fs/Ly,Y_magnitude(1:Ly/2)/Ly) xlabel("Frequency(Hz)") ylabel("Amplitude_Y") Trong miền thời gian: Trong miền tần số: Kiểm tra lọc với ngõ vào tín hiệu tổng tín hiệu sin tần số 100 – 3900 Hz: Chương trình Matlap: % Tao mau tin hieu tu 100 >3900 va ve ngo vao, ngo figure(4); F=100:100:3900; xa=0; b=0; Lf=length(F); for i=1:Lf xa=xa+sin(2*pi*F(1,i)*t); end Lxa=length(xa); M=length(h)-1; k4=Lxa+M; k3=length(xa); k=length(h); ya=zeros(1,k4); xan=zeros(1,k4); t2=k3+1:1:k4; xan=[xa zeros(size(t2))]; w=zeros(1,k); for i=1:k4 w(1,1)=xan(1,i); for ii=1:k b=b+h(1,ii)*w(1,ii); end ya(1,i)=b; b=0; for e=k:-1:2 w(1,e)=w(1,e-1); end end Lya=length(ya); Ya=fft(ya,Lya); Xa=fft(xa,Lxa); Ya_mag=abs(Ya); Xa_mag=abs(Xa); subplot(1,2,1); stem((0:Lxa/2-1)*Fs/Lxa,Xa_mag(1:Lxa/2)/Lxa); xlabel('Hz'); ylabel('Amp'); subplot(1,2,2); stem((0:Lya/2-1)*Fs/Lya,Ya_mag(1:Lya/2)/Lya); xlabel('Hz'); ylabel('Amp'); Kết quả: Thí nghiệm 4: Thiết kế, thực kiểm tra lọc FIR multiband gồm 63 hệ số, tần số lấy mẫu 10 kHz, dải thông [500 1000] Hz [1500 2000] Hz, độ rộng dải chuyển tiếp 100 Hz Bộ lọc cần thiết kế có đáp ứng tần số sau: 1.2 0.8 0.6 0.4 0.2 0 Đáp ứng tần số lọc thiết kế dùng MATLAB: Chương trình Matlap: %multibandfir63.m: Multiband FIR filter with 63 coefficients f = [0 0.1 0.12 0.18 0.2 0.3 0.32 0.38 0.4 1]; m = [0 1 0 1 0]; n = 63; cof = remez(n-1,f,m); % frequency response with 256 points [h w] = freqz(cof,1,256); % plot magnitude of the filter plot(5000*f,m); figure; plot(w/pi,abs(h)); Kết quả: Giá trị hệ số đáp ứng xung lọc 0.0629 -0.0002 0.0257 0.0006 -0.0652 -0.0480 0.0782 -0.0048 -0.0065 Dạng sóng đáp ứng xung lọc: Chương trình Matlap: clc ; clear all; h=[0.0629464001857862 0.0121084542071797 0.00658151214389935 0.00607547500688878 0.00481914395177860 0.00147466748429707 0.0782978474687119 0.111837915704097 0.00115779547789171 0.109793824320079 0.000877083092475094 0.00115779547789171 0.111837915704097 0.0782978474687119 0.00147466748429707 0.0257724255350128 0.0508507421030569 0.00416699727409253 0.00758870757876416 0.0232455837205856 Fs = 10000 N = length(h) figure(1); stem(h); Đáp ứng biên độ-tần số pha-tần số lọc Chương trình Matlap: figure(2); Hk = fft(h,N) Hk_magnitude = abs(Hk) Hk_phase = angle(Hk) subplot(1,2,1) stem((0:N/2-1)*Fs/N,Hk_magnitude(1:N/2)/N) xlabel("Frequency(Hz)") ylabel("Amplitude") subplot(1,2,2) stem((0:N/2-1)*Fs/N,Hk_phase(1:N/2)/N) xlabel("Frequency(Hz)") ylabel("Phase") Kiểm tra lọc với ngõ vào tín hiệu sin đa tần có thành phần tần số 500 Hz, 750 Hz 1750 Hz: Chương trình Matlap: % Dap ung tan so cua bo loc figure(2); Hk = fft(h,N) Hk_magnitude = abs(Hk) Hk_phase = angle(Hk) subplot(1,2,1) stem((0:N/2-1)*Fs/N,Hk_magnitude(1:N/2)/N) xlabel("Frequency(Hz)") ylabel("Amplitude") subplot(1,2,2) stem((0:N/2-1)*Fs/N,Hk_phase(1:N/2)/N) xlabel("Frequency(Hz)") ylabel("Phase") % Tao mau tin hieu mien thoi gian figure(3) Ts = 1/Fs t = : Ts : 0.05 - Ts xn1= cos(1000*pi*t) xn2= cos(1500*pi*t) xn3= cos(3500*pi*t) xn = xn1 + xn2 + xn3 x = xn1 + xn2 + xn3 + xn subplot(1,2,1) plot(t,x) xlabel('t(s)') ylabel('x(t)') % Giai thuat xu li mau Lx = length(x) M = length(h) -1 Ly = Lx + M y = zeros(1,Ly); w = zeros(1,N) t1 = Lx+1:1:Ly xk = [x zeros(size(t1))]; u = 0; for i=1:Ly w(1,1) = xk(1,i) for i1 = 1:N u = u + h(1,i1)*w(1,i1); end y(1,i) = u; u = 0; for i2 = N:-1:2 w(1,i2)=w(1,i2-1); end end subplot(1,2,2); plot(0:1/Fs:(Ly-1)/Fs,y); xlabel('t(s)'); ylabel('y(t)') % Ve mien tan so figure(4); X_pho = fft(x,Lx); Y_pho = fft(y,Ly); X_magnitude = abs(X_pho); Y_magnitude = abs(Y_pho); subplot(1,2,1) stem((0:Lx/21)*Fs/Lx,X_magnitude(1:Lx/2)/Lx) xlabel("Frequency(Hz)") ylabel("Amplitude_X") subplot(1,2,2) stem((0:Ly/21)*Fs/Ly,Y_magnitude(1:Ly/2)/Ly) xlabel("Frequency(Hz)") ylabel("Amplitude_Y") Kết quả: Kiểm tra lọc với ngõ vào tín hiệu tổng tín hiệu sine tần số từ 100 – 3900 Hz: Chương trình Matlap: % Tao mau tin hieu tu 100 >3900 va ve ngo vao, ngo figure(5); F=100:100:3900; xa=0; b=0; Lf=length(F); for i=1:Lf xa=xa+sin(2*pi*F(1,i)*t); end Lxa=length(xa); M=length(h)-1; k4=Lxa+M; k3=length(xa); k=length(h); ya=zeros(1,k4); xan=zeros(1,k4); t2=k3+1:1:k4; xan=[xa zeros(size(t2))]; w=zeros(1,k); for i=1:k4 w(1,1)=xan(1,i); for ii=1:k b=b+h(1,ii)*w(1,ii); end ya(1,i)=b; b=0; for e=k:-1:2 w(1,e)=w(1,e-1); end end Lya=length(ya); Ya=fft(ya,Lya); Xa=fft(xa,Lxa); Ya_mag=abs(Ya) ; Xa_mag=abs(X a); subplot(1,2,1); stem((0:Lxa/2-1)*Fs/Lxa,Xa_mag(1:Lxa/2)/Lxa); xlabel('Hz'); ylabel('Amp'); subplot(1,2,2); stem((0:Lya/2-1)*Fs/Lya,Ya_mag(1:Lya/2)/Lya); xlabel('Hz'); ylabel('Amp'); Phổ tín hiệu ngõ vào ngõ ra: ... -0.001055 038 232 30 635 0.00 236 898929825 931 0.00 232 7 837 17916770 -0.004 136 98749921849 0.00167 033 7581 732 71 0.00815 538 0251 732 65 -0.00981140458140240 0.01 933 195 030 98689 0.0047760 733 0848616 0.0 430 757576 238 980 0 .31 4177280 837 310... 0.0 430 757576 238 980 0 .31 4177280 837 310 0.0 931 230 506 131 574 -0.0454949 731 715578 -0.0 430 757576 238 980 0.0402554521969857 0.01890 736 57296987 -0. 033 7 130 14404 936 5 0.0047760 733 0848616 0.01 933 195 030 98689 -0.00718257546114980... 232 7 9576 26518 931 23 -45494 -36 24 2915 236 8 10 Đáp ứng biên độ-tần số pha-tần số lọc thực Matlab: Chương trình Matlap: clc ; clear all; h=[0.0001422 833 052 436 43 0.00180 437 346965779 -0.001055 038 232 30 635