Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 28 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
28
Dung lượng
0,99 MB
Nội dung
1 TIẾN TRÌNH THÍ NGHIỆM 1.1 Các lọc FIR 1.1.1 Bộ lọc FIR chắn dải 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 Thiết kế lọc dùng MATLAB Thực ghi nhận lại: Tổng số giá trị là: 63 Ghi nhận lại giá trị đáp ứng xung lọc vào bảng sau: Đơn vị 10 6 -1750 1690 700 -3430 3150 710 -4380 3770 330 -2980 1670 2200 -5190 770 11620 -18130 3990 24230 -36770 10680 37500 -58650 20840 48200 -79520 32970 53480 -94610 44390 52000 901040 52000 44390 -94610 53480 32970 -79520 48200 20840 -58650 37500 10680 -36770 24230 3990 -18130 11620 770 -5190 2200 1670 -2980 330 3770 -4380 710 3150 -3430 700 1690 -1750 Thực lọc Matlab Để thực việc tính tốn ngõ lọc, ta sử dụng định nghĩa y (n) h n x n với h n đáp ứng xung vừa tìm sử dụng cơng cụ sptool x n 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 clc; close all; x = input('x = '); h = bs2700.tf.num; N = length(h); x = [x zeros(1,M-1)]; L = length(x); w = zeros(1,L+M); y = zeros(1,L); for i = 1:L w(1) = x(i); for k = 1:M y(i) = y(i)+h(k).*w(k); end for j = L:-1:2 w(j) = w(j-1); end end Đá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; close all; a=bs2700.tf.num; b=bs2700.tf.den; [H, w] = freqz(a,b); H_magnitude = abs(H); H_phase = angle(H); subplot(1,2,1); semilogy(w,H_magnitude); grid on; xlabel('w (pi)'); title('Amplitude'); subplot(1,2,2); plot(w,H_phase); grid on; xlabel('w (pi)'); title('Phase'); Ghi nhận dạng sóng đáp ứng xung lọc: 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 Fs = 8000; Ts = 1/Fs; T = 1e-6; t = 0:Ts:T - Ts; hn = bs2700.tf.num; L = length(hn); hk = fft(hn,L); hk_mag = abs(hk); hk_phase = angle(hk); % Spectrum plot subplot(1,2,1); semilogy((0:L/2-1)*Fs/L,hk_mag(1:L/2)/L); xlabel('Frequency (Hz)'); ylabel('Amplitude'); title('Magnitude'); subplot(1,2,2); stem((0:L/2-1)*Fs/L,hk_phase(1:L/2)/L); xlabel('Frequency (Hz)'); ylabel('Phase'); title('Phase'); 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 2000 t x t cos 5400 t từ chương trình Matlab lưu vào biến 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 Fs = 8000; Ts = 1/Fs; T = 0.009; t = 0:Ts:T - Ts; h = bs2700.tf.num; x1n = cos(2000*pi*t); x2n = cos(5400*pi*t); xn = x1n + x2n; L = length(xn); xk = fft(xn,L); xk_mag = abs(xk); xk_phase = angle(xk); % Signal plot figure(1); subplot(1,2,1); plot(t,x1n); xlabel('Time (sec)'); ylabel('Amplitude x1n'); title('x1n'); subplot(1,2,2); plot(t,x2n); xlabel('Time (sec)'); ylabel('Amplitude x2n'); title('x2n'); figure(2); subplot(1,2,1); plot(t,xn); xlabel('Time (sec)'); ylabel('Amplitude xn'); title('xn'); M = length(h); xn = [xn zeros(1,M-1)]; Ly = L + M; w = zeros(1,Ly); y = zeros(1,L); for i = 1:L w(1) = xn(i); for k = 1:M y(i) = y(i)+h(k).*w(k); end for j = L:-1:2 w(j) = w(j-1); end end subplot(1,2,2); plot(t,y,'r-'); xlabel('Time (sec)'); ylabel('Amplitude y'); title('y'); 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 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 Matlab thực yêu cầu: % Matlab code h=bs2700.tf.num; Fs=8000; N=length(h); %tinhieusinedatan F=100:100:3900; xa=0; b=0; M=length(h)-1; 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); figure(5); 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: 1.1.2 Bộ lọc FIR thông dải Tương tự phần trên, 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: 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 1700 Hz: 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 Matlab thực yêu cầu: % Matlab code h=bp1750.tf.num; Fs=8000; N=length(h); %tinhieusinedatan 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); figure(5); 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: 1.1.3 Bộ lọc FIR thông cao Tương tự trên, 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:: 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 thực kit DSP: 470 890 11 30 97 20 90 64 32 30 30 43 50 19 90 51 30 44 90 51 40 77 00 393 113 40 104 149 20 39 60 17 77 11 42 18 95 21 72 17 23 35 53 10 62 54 75 53 60 86 61 48 22 180 330 413 500 413 500 180 330 48 22 86 61 53 60 54 75 10 62 35 53 17 23 21 72 18 95 11 42 17 77 39 60 149 20 104 113 40 393 77 00 51 40 44 90 51 30 19 90 43 50 30 32 30 64 20 90 97 11 30 890 470 Đáp ứng biên độ-tần số pha-tần số lọc thực Matlab: 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: 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 Matlab thực yêu cầu: % Matlab code h=hp2200.tf.num; Fs=8000; N=length(h); %tinhieusinedatan 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); figure(5); 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: 1.1.4 Bộ lọc FIR multiband 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 500 1000 1500 2000 2500 3000 3500 4000 4500 5000 Hình Đáp ứng tần số lọc multiband FIR cần thiết kế Thiết kế lọc dùng MATLAB Bộ lọc mong muốn có dải thơng, biểu diễn dải sau: Dải Tần số (Hz) Tần số chuẩn hóa f/FN Biên độ – 500 – 0.1 600 – 900 0.12 – 0.18 1000 – 1500 0.2 – 0.3 1600 – 1900 0.32 – 0.38 2000 - 5000 0.4 - FN tần số Nyquist, ½ tần số lấy mẫu Chúng ta viết file m để thiết kế lọc này, lưu lại với tên multibandfir63.m Nội dung file sau: %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)); Trong đoạn chương trình trên, có số lưu ý: Dịng lệnh cof = remez(n-1,f,m) trả vector hệ số lọc FIR bậc n – 1, với f m xác định dải tần số theo bảng - Lệnh freqz để tính đáp ứng tần số lọc - Lệnh plot thứ vẽ đáp ứng tần số mong muốn dựa f m - Lệnh figure tạo cửa sổ lệnh plot thứ hai vẽ đáp ứng tần số lọc thiết kế lên cửa sổ Ở đây, kết trình thiết kế mà ta cần nhận hệ số chứa biến cof Chúng sử dụng để viết chương trình Matlab cho lọc cần thực - Đáp ứng tần số lọc thiết kế dùng MATLAB: Gía trị hệ số đáp ứng xung lọc thực kit DSP: Dạng sóng đáp ứng xung lọc: Đáp ứng biên độ-tần số pha-tần số lọc thực kit DSP: 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: 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 Matlab thực yêu cầu: % Matlab code Phổ tín hiệu ngõ vào ngõ ra: Nhận xét/Giải thích: ... 890 11 30 97 20 90 64 32 30 30 43 50 19 90 51 30 44 90 51 40 77 00 39 3 1 13 40 104 149 20 39 60 17 77 11 42 18 95 21 72 17 23 35 53 10 62 54 75 53 60 86 61 48 22 180 33 0 4 13 500 4 13 500 180 33 0 48... -79520 32 970 534 80 -94610 4 439 0 52000 901040 52000 4 439 0 -94610 534 80 32 970 -79520 48200 20840 -58650 37 500 10680 -36 770 24 230 39 90 -18 130 11620 770 -5190 2200 1670 -2980 33 0 37 70 - 438 0 710 31 50 -34 30... 500 180 33 0 48 22 86 61 53 60 54 75 10 62 35 53 17 23 21 72 18 95 11 42 17 77 39 60 149 20 104 1 13 40 39 3 77 00 51 40 44 90 51 30 19 90 43 50 30 32 30 64 20 90 97 11 30 890 470 Đáp ứng biên độ-tần