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

34 3 0
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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠ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 TIEU LUAN MOI download : skknchat123@gmail.com 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ả: TIEU LUAN MOI download : skknchat123@gmail.com Đơn vị 10 -1747 3766 765 37503 -94607 53484 10684 -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 TIEU LUAN MOI download : skknchat123@gmail.com end 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: TIEU LUAN MOI download : skknchat123@gmail.com u y(1,i) = 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") TIEU LUAN MOI download : skknchat123@gmail.com Đá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 TIEU LUAN MOI download : skknchat123@gmail.com 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: TIEU LUAN MOI download : skknchat123@gmail.com 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; TIEU LUAN MOI download : skknchat123@gmail.com Đá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 TIEU LUAN MOI download : skknchat123@gmail.com Đá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ả: TIEU LUAN MOI download : skknchat123@gmail.com 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") TIEU LUAN MOI download : skknchat123@gmail.com 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); TIEU LUAN MOI download : skknchat123@gmail.com 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'); TIEU LUAN MOI download : skknchat123@gmail.com 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 TIEU LUAN MOI download : skknchat123@gmail.com 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; TIEU LUAN MOI download : skknchat123@gmail.com 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") TIEU LUAN MOI download : skknchat123@gmail.com 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)') TIEU LUAN MOI download : skknchat123@gmail.com % 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ả: TIEU LUAN MOI download : skknchat123@gmail.com 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'); TIEU LUAN MOI download : skknchat123@gmail.com Phổ tín hiệu ngõ vào ngõ ra: TIEU LUAN MOI download : skknchat123@gmail.com TIEU LUAN MOI download : skknchat123@gmail.com ... h=[0.0001422 833 052 436 43 0.00180 437 346965779 -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 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...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)

Ngày đăng: 02/08/2022, 15:26

Tài liệu cùng người dùng

Tài liệu liên quan