Báo cáo thí nghiệm tín hiệu và hệ thống

21 600 0
Báo cáo thí nghiệm tín hiệu và hệ thống

Đ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

BÀI THÍ NGHIỆM MATLAB I TÓM TẮT LÝ THUYẾT Các toán tử Có loại toán tử toán tử unary(toán tử ngôi) binary (toán tử hai ngôi) Ví dụ kí hiệu “-” hiểu toán tử giá trị âm hiểu toán tử hai toán tử trừ - Dưới vài toán tử phổ biến sử dụng với biểu thức số học : + toán tử cộng - giá trị âm , toán tử trừ * toán tử nhân / toán tử chia lấy tử (9/3 = 3) \ toán tử chia lấy mẫu (3/12 = 4) ^ toán tử lũy thừa Vectơ và ma trận - Vector ma trận sử dụng để lưu tập giá trị có kiểu liệu Một vector vector hàng vector cột Một ma trận hình thành từ bảng giá trị Ma trận cỡ mxn bảng số chữ nhật gồm mxn số xếp thành m hàng n cột : + Nếu m = ma trận chuyển thành vector hàng + Nếu n = ma trận chuyển thành vector cột + Nếu m = n = ma trận trở thành đại lượng vô hướng - Một vector MATLAB coi mảng chiều ngôn ngữ khác Một ma trận coi mảng chiều Vì MATLAB , thực toán tử với vector ma trận coi toán tử mảng 2.1 Tạo vectơ hàng Tạo vectơ v = [1,2,3,4] v = [1 4] Dùng colon operator: v = 1:2:9 với 1: giá trị đầu, 9:giá trị cuối, 2:bước nhảy ta dùng v= 1:9 trường hợp bước nhảy bằng Dùng linspace: v = linspace(1,9,5) với 1: giá trị đầu, 9: giá trị cuối, 5: số phần tử 2.2 Tạo vectơ cột Ta dùng dấu ; để ngăn cách phần tử c = [1;2;3;4] dùng dấu ’ sau vectơ hàng để vectơ cột c = v' 2.3 Tạo ma trận Kết hợp cách tạo vectơ hàng vectơ cột mat = [1 3; 6] mat = [1:3;4:6] mat = [linspace(3,15,5);1:2:9] Tạo ma trận ngẫu nhiên mat = randint(2,3,[10,20]) với : số hàng, : số cột, [10,20] : phạm vi giá trị Ma trận không mat = zeros(2,4) với 2: số hàng, : số cột trường hợp ma trận không vuông mat = zeros(3) với : số hàng, cột Plot và subplot Lệnh plot MATLAB cho phép vẽ đồ thị từ liệu vector Ví dụ có biến t thời gian y tín hiệu , gõ lệnh plot(t,y); xuất giao diện đồ thị t y Các hàm phổ biến cho plot: title ('…') : thích tên đồ thị xlabel ('…') : thích tên trục x đồ thị ylabel('…') : thích tên trục y đồ thị grid on : hiển thị lưới ô vuông - Để hiển thị nhiều đồ thị hình , sử dụng hàm subplot Hàm gồm đối số (m,n,p) , m n chia hình thành m hàng n cột Đối số p xác định đồ thị xuất trước subplot (…,…,…): thị vùng muốn vẽ stem (signal): vẽ chuỗi liệu rời rạc angle(x): argument số phức a real(x): phần thực x ; imag(x): phần ảo x conj(x): số phức liên hợp x abs(x) :modun số phức x Điều kiện if và if – else Cấu trúc if if điều khiện câu lệnh end Cấu trúc if - else if điều khiện câu lệnh else câu lệnh end Vòng lặp for Cấu trúc: for điều khiện câu lệnh end II BÀI TẬP Bài tập : ftemp=randint(2,6,[80,100]) ; F=ftemp C=(F-32).*5/9 ; ctemp=C Bài tập : 3:6 1:0.5:3 5:-1:2 Bài tập : linspace(4,8,3) linspace(-3,-15,5) linspace(9,5,3) Bài tập : [7:-1:5;3:2:7] Bài tập : x=-2:0.1:2; plot(x, exp(x)) title('DO THI HAM e^x') xlabel('Truc x') ylabel('e^x') Bài tập : x1=linspace(0,10, 10); subplot(1,2,1) plot(x1,sin(x1)) title('Do thi ham sin(x)') xlabel('x1') ylabel('sin(x1)') x2=linspace(0,10, 100); subplot(1,2,2) plot(x2,sin(x2)) title('Do thi ham sin(x)') xlabel('x2') ylabel('sin(x2)') Bài tập : Scrip: if windx = fall; >>X = fft(x) - Lệnh fft cho tần số không nằm trung tâm.Để hiển thị kết miền tần số : hiển thị nửa kết ( phần tần số dương), hai hiển thị vùng tần số bằng lệnh fftshift Lệnh fftshift để dịch phổ vào trung tâm, đối xứng Ta sử dụng abs để hiển thị biên độ phổ tín hiệu Lưu ý rằng biến đổi Fourier tín hiệu giá trị phức, abs sử dụng để xem độ lớn (biên độ) phổ - Đoạn code sau thực cách: >> N = length(x); %Xác định kích thước x >>pfreq = [0:N/2]* Fs/N; %Khoảng tần số >>Xpos = X(1:N/2+1) ; %Khoảng giá trị x chạy >>plot(pfreq,abs(Xpos)) ; %Vẽ đồ thị >>figure; >>freq = [-(N/2+1) :N/2]*Fs/N; %Tần số đồ thị >>plot(freq,abs(fftshift(X))); - Sau thay đổi tín hiệu miền tần số,lệnh ifft dùng để chuyển lại miền thời gian mong muốn >>xnew = real(ifft(X)); + Chú ý:Chúng ta cần dùng lệnh “real” biến đổi Fourier ngược cho giá trị hỗn hợp Bộ lọc thông thấp - Bộ lọc(filter):là trình lọc liệu không cần thiết, loại bỏ liệu giữ lại thứ mà muốn - Bộ lọc thông thấp lọc cho phép tín hiệu hoạt động từ Hz -> tần số cắt (cutoff) nó, tín hiệu tần số cao lọc - Một lọc thông thấp lý tưởng loại bỏ tần số cao hoàn toàn : - Một lọc thông thấp thực tế thường có giá trị thấp không bằng với H(w) tần số cao dần dần giảm độ lớn tần số tăng Bộ lọc thông thấp đơn giản nhất(ít hiệu nhất) cho bởi: - Bộ lọc thông thấp dùng Matlab bằng cách sử dụng phép biến đổi Fourier Phép nhân miền tần số hoạt động tương tựnhư chập miền thời gian Nếu ta có hai tín hiệu lọc miền tần số ta nhân chúng để tìm đầu hệ thống: - Ví dụ cách sử dụng Matlab để thực lọc thông thấp với tín hiệu vào x,các tần số cắt lọc biểu diễn bằng hằng số a Ta cần xác định H miền tần số >> load fall % tải tín hiệu >>x = fall; >>X = fft(x); % biến đổi tín hiệu x sang miền tần số >>N = length(X); >>a = 100*2*pi; >>w = (-N/2+1:(N/2)); % Vector tần số trung tâm (rad / s) >>H = a / (a + i*w); % Tạo lấy mẫu trung tâm H >>plot(w*Fs/N,abs(H)) % w chuyển đổi trở lại Hz - Đồ thị dạng đáp ứng tần số hệ thống mà ta sử dụng >>Hshift = fftshift(H); %H không nằm trung tâm >> Y = X * Hshift'; %Bộ lọc tín hiệu - Chú ý:Khi nhân hai vector cần ý kích thước hai vector có bằng hay chưa - Ta có đầu hệ thống miền tần số, dùng Fourier ngược để chuyển miền thời gian Nghe âm gốc sửa đổi nghe khác biệt Sử dụng tần số lấy mẫu Fs >> y = real(ifft(Y)); >>sound(x, Fs) ) % âm gốc >> sound(y, Fs) % âm lọc qua thông thấp - Bộ lọc làm giảm âm tín hiệu mà nghe sử dụng lệnh sound mà không dùng lệnh soundsc tự động chia tỉ lệ - Chú ý: Đôi khi, bạn khuếch đại tín hiệu để có chiều cao giống tín hiệu ban đầu >> y = y * (max(abs(x))/max(abs(y))); Bộ lọc thông cao - Bộ lọc thông cao lọc cho phép tín hiệu hoạt động từ tần số cắt đến vô tín hiệu tần số thấp nhỏ tần số cắt lọc - Một lọc thông cao lý tưởng loại bỏ hoàn toàn tần số thấp - Bộ lọc thông cao thực tế thường có giá trị thấp không bằng với H(w) tần số thấp dần dần tăng độ lớn tần số tăng Mạch lọc thông cao cho bởi: - Mạch lọc thực giống mạch lọc thông thấp Với a tần số cắt II BÀI TẬP Bài tập : close all; clc; clear all; [x,Fs]=wavread('castanets44m.wav'); sound(x,Fs); X=fft(x); N=length(X); a=500*2*pi; w=(-N/2+1:(N/2))*Fs/N; %vector tần số trung tâm H=a./(a+i*w); %H nam o trung tam Hshift=fftshift(H); %H khong nam o trung tam Y=X.*Hshift'; % loc tin hieu y=real(ifft(Y)); subplot(2,1,1) plot(w,abs(fftshift(X))); title('Pho tin hieu') subplot(2,1,2) plot(w,abs(fftshift(Y))); title('Loc thong thap') Bài tập : clc; clear all; Fs=8000; x = repmat([zeros(1, 99) 1], 1, 5) X=fft(x); N = length(X); a=20*2*pi; %tần số lọc w = (-N/2+1:(N/2))*Fs/N; H = a / (a + i*w); Hshift=fftshift(H); Y=X.*Hshift; y=real(ifft(Y)); y = y * (max(abs(x))/max(abs(y))) subplot(2,1,1) plot(x) title('Do thi x(t)') xlabel('t') ylabel('x(t)') subplot(2,1,2) plot(y) title('Do thi y(t)') xlabel('t') ylabel('y(t)') Bài tập : clc; clear all; [x,Fs]=wavread('castanets44m.wav'); sound(x,Fs); X=fft(x); N=length(X); a=2000*2*pi; w=(-N/2+1:(N/2))*Fs/N; H=1-a./(a+i*w); Hshift=fftshift(H); Y=X.*Hshift'; y=real(ifft(Y)); subplot(2,1,1) plot(w,abs(fftshift(X))); title('Pho tin hieu') subplot(2,1,2) plot(w,abs(fftshift(Y))); title('Loc thong cao') sound(y,Fs) Bài tập : close all;clc;clear all; [x,Fs]=wavread('mixed.wav'); %sound(x,Fs); X=fft(x); N=length(X); a=100*2*pi; b=2000*2*pi; w=(-N/2+1:(N/2))*Fs/N; L=a./(a+i*w); Lshift=fftshift(L); Y=X.*Lshift'; y=real(ifft(Y)); H=1-b./(b+i*w); Hshift=fftshift(H); Z=X.*Hshift'; z=real(ifft(Z)); subplot(3,1,1) plot(w,abs(fftshift(X))); title('Tin hieu goc') subplot(3,1,2) plot(w,abs(fftshift(Y))); title('Loc thong thap') subplot(3,1,3) plot(w,abs(fftshift(Z))); title('Loc thong cao') Bài tập : close all;clc;clear all; load shake;load rainstick; x=shake+ 10*rainstick; Fs=8000; X=fft(x); N=length(X); a=100*2*pi; b=2000*2*pi; w=(-N/2+1:(N/2))*Fs/N; L=a./(a+i*w); Lshift=fftshift(L); Y=X.*Lshift'; y=real(ifft(Y)); H=1-b./(b+i*w); Hshift=fftshift(H); Z=X.*Hshift'; z=real(ifft(Z)); subplot(3,1,1) plot(w,abs(fftshift(X))); title('Tin hieu vao') subplot(3,1,2) plot(w,abs(fftshift(Y))); title('Loc thong thap') subplot(3,1,3) plot(w,abs(fftshift(Z))); title('Loc thong cao') BÀI THÍ NGHIỆM INVESTIGATION OF ALIASING EFFECTS (LẤY MẪU) Bài tập : clc;clear all;close all; f=1000; f1=1000; t=0:1/(10000):20/f; x=2*cos(2*pi*f1*t); subplot(2,1,1) plot(t,x) title('f=1000') X = fft(x); F = [-length(X)/2:(length(X)/2)-1]*1000/length(X); subplot(2,1,2) plot(F, abs(fftshift(X))); figure(2) f2=8000; t=0:1/(10000):20/f; x=cos(2*pi*f2*t); subplot(2,1,1) plot(t,x) title('f=8000') X = fft(x); F = [-length(X)/2:(length(X)/2)-1]*1000/length(X); subplot(2,1,2) plot(F, abs(fftshift(X))); figure(3) f3=500; t=0:1/(10000):20/f; x=2*cos(2*pi*f3*t); subplot(2,1,1) plot(t,x) title('f=500') X = fft(x); F = [-length(X)/2:(length(X)/2)-1]*1000/length(X); subplot(2,1,2) plot(F, abs(fftshift(X))); figure(4) f4=200; t=0:1/(10000):20/f; x=2*cos(2*pi*f4*t); subplot(2,1,1) plot(t,x) title('f=200') X = fft(x); F = [-length(X)/2:(length(X)/2)-1]*1000/length(X); subplot(2,1,2) plot(F, abs(fftshift(X))); [...]... lại - Trong Matlab thì biến đổi Fourier tín hiệu liên tục miền thời gian không thể thực hiện một cách chính xác Những sự khác biệt quan trọng giữa biến đổi Fourier rời rạc trong máy tính và biến đổi Fourier liên tục là : dải tần số hữu hạn và các tần số mẫu rời rạc Độ mịn dải tần số của tín hiệu sau khi biến đổi sẽ phụ thuộc vào tần số lấy mẫu của tín hiệu Tần số lấy mẫu càng lớn thì phổ càng... thời gian Nếu ta có cả hai tín hiệu và bộ lọc ở miền tần số thì ta có thể nhân chúng để tìm được đầu ra của hệ thống: - Ví dụ về cách sử dụng Matlab để thực hiện một bộ lọc thông thấp với tín hiệu vào là x,các tần số cắt của bộ lọc được biểu diễn bằng hằng số a Ta cần xác định H trong miền tần số >> load fall % tải tín hiệu >>x = fall; >>X = fft(x); % biến đổi tín hiệu x sang miền tần số... làm giảm âm thanh của tín hiệu mà khi nghe chỉ có thể sử dụng lệnh sound mà không dùng được lệnh soundsc tự động chia tỉ lệ - Chú ý: Đôi khi, bạn có thể khuếch đại tín hiệu để nó có chiều cao giống như tín hiệu ban đầu >> y = y * (max(abs(x))/max(abs(y))); 4 Bộ lọc thông cao - Bộ lọc thông cao là bộ lọc chỉ cho phép tín hiệu hoạt động từ tần số cắt của nó đến vô cùng các tín hiệu tần số thấp nhỏ... chỉ ra các dạng đáp ứng tần số của hệ thống mà ta đã sử dụng >>Hshift = fftshift(H); %H không nằm ở trung tâm >> Y = X * Hshift'; %Bộ lọc tín hiệu - Chú ý:Khi nhân hai vector cần chú ý kích thước của hai vector có bằng nhau hay chưa - Ta sẽ có đầu ra của hệ thống trong miền tần số, dùng Fourier ngược để chuyển về miền thời gian Nghe âm thanh gốc và sửa đổi và nghe sự khác biệt Sử dụng tần số... thấp là bộ lọc chỉ cho phép tín hiệu hoạt động từ 0 Hz -> tần số cắt (cutoff) của nó, các tín hiệu tần số cao sẽ được lọc đi - Một bộ lọc thông thấp lý tưởng loại bỏ các tần số cao hoàn toàn : - Một bộ lọc thông thấp thực tế thường có giá trị thấp nhưng không bằng 0 với H(w) ở tần số cao và dần dần giảm độ lớn khi tần số tăng Bộ lọc thông thấp đơn giản nhất(ít hiệu quả nhất) được cho bởi:... biến đổi sẽ phụ thuộc vào tần số lấy mẫu của tín hiệu Tần số lấy mẫu càng lớn thì phổ càng mịn - Ta xét ví dụ trong ở trong Lap 3: Tín hiệu có tần số lấy mẫu là Fs = 8000 Có nghĩa là dải tần số từ [-4000,4000]Hz Độ phân giải tần số phụ thuộc vào độ dài của các tín hiệu (mà cũng là chiều dài của biểu diễn tần số) - Vd: >>load fall %Tải file >>x = fall; >>X = fft(x) - Lệnh fft cho ra tần số không... số : một là hiển thị một nửa kết quả ( phần tần số dương), hai là hiển thị cả 2 vùng tần số bằng lệnh fftshift Lệnh fftshift để dịch phổ vào trung tâm, đối xứng tại 0 Ta sử dụng abs để hiển thị biên độ của phổ tín hiệu Lưu ý rằng vì biến đổi Fourier của tín hiệu là giá trị phức, abs được sử dụng để xem độ lớn (biên độ) của phổ - Đoạn code sau thực hiện cả 2 cách: >> N = length(x); %Xác định kích... chuyển tần số zero vào trung tâm phổ sound : âm thanh nghe chưa định tỉ lệ (clip đầu vào [-1,1] soundsc: âm thanh thu nhỏ (quy mô/ bình thường hóa đầu vào [-1,1] wavread: đọc, định dạng file WAV, tỉ lệ lấy mẫu của file WAV cũng có thể được lấy ra bằng câu lệnh như sau:[x,Fs] = wavread('filename.wav') (Với x là vector âm thanh và Fs là tần số lấy mẫu) load: tải file 2 Chuyển đổi tín hiệu trong miền... >>plot(freq,abs(fftshift(X))); - Sau khi thay đổi tín hiệu trong miền tần số,lệnh ifft được dùng để chuyển về lại miền thời gian nếu mong muốn >>xnew = real(ifft(X)); + Chú ý:Chúng ta cần dùng lệnh “real” vì biến đổi Fourier ngược cho ra giá trị hỗn hợp 3 Bộ lọc thông thấp - Bộ lọc(filter):là một quá trình lọc những dữ liệu không cần thiết, loại bỏ đi những dữ liệu này và chỉ giữ lại những thứ mà mình muốn... thấp nhỏ hơn tần số cắt sẽ được lọc đi - Một bộ lọc thông cao lý tưởng loại bỏ hoàn toàn các tần số thấp - Bộ lọc thông cao thực tế thường có giá trị thấp nhưng không bằng 0 với H(w) ở tần số thấp và dần dần tăng độ lớn khi tần số tăng Mạch lọc thông cao được cho bởi: - Mạch lọc này có thể thực hiện giống như mạch lọc thông thấp Với a là tần số cắt II BÀI TẬP Bài tập 1 : close all; clc;

Ngày đăng: 20/06/2016, 15:09

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

  • Đang cập nhật ...

Tài liệu liên quan