You are on page 1of 25

ĐẠI HỌC BÁCH KHOA HÀ NỘI

TRƯỜNG ĐIỆN – ĐIỆN TỬ




BÁO CÁO THÍ NGHIỆM


Tín Hiệu Và Hệ Thống

Giảng viên hướng dẫn: Trịnh Hoàng Minh

Sinh viên thực hiện:


Họ và tên: Dương Bá Vượng
MSSV: 20213041
Mã lớp thí nghiệm: 724978

Hà Nội, 2023

`1
Bài 1. Tín hiệu liên tục

I. Hàm bước nhảy đơn vị (unit step) và hàm dốc đơn vị (ramp)
Bài 1:
% y=ustep(t)
function
y=ustep(t,a);
N=length(t);
y=zeros(1,N);
for i=1:N
if t(i)>=-a
y(i)=1;
end
end
Bài 2:
% y=uramp(t)
function y=uramp(t,b)
N=length(t);
y=zeros(1,N);
for i=1:N
if t(i)>=-b
y(i)=t(i)+b
end
end

`2
`3
Bài 3:
+ 5u(t+2)
>> t=[-10:0.01:10];
>> x1=5*ustep(t,-2);
>> plot(t,x1);
>> xlabel('x');
>> ylabel('y');

+ 3r(t+5)
>> t=[-10:0.01:10];
>> x2=3*uramp(t,5);
>> plot (t,x2);
>> xlabel('x');
>> ylabel('y');

`4
+y(t)=2r(t+2.5)-5r(t)+3r(t-2)+u(t-4)
>> t=[-10:0.01:10];
>> y=2*uramp(t,2.5)-5*uramp(t,0)+3*uramp(t,-2)+ustep(t,-4);
>> plot (t,y);
>> xlabel('x');
>> ylabel('y');

`5
+y(t)=sin(t)*[u(t+3)-u(t-3)]
>> t=[-10:0.01:10];
>> y=sin(t).*[ustep(t,3)-ustep(t,-3)];
>> plot (t,y);
>> xlabel('x');
>> ylabel('y');

`6
Bài 4:
+)
>> t=[-10:0.01:10];
>> y=1/2*uramp(t,4)+1/2*uramp(t,-4)-uramp(t,0);
>> plot(t,y);
>> xlabel('x');
>> ylabel('y');

`7
+)
>> t=[-10:0.01:10];
>> y=1/2*uramp(t,4)+1/2*uramp(t,-4)-uramp(t,0)+ustep(t,8)-ustep(t,-8);
>> plot(t,y);
>> xlabel('x');
>> ylabel('y');

`8
II.Tín hiệu chẵn, lẻ

Bài 1:
function [ye,yo] =
evenodd(y) yr = fliplr(y);
ye = 0.5*(y + yr);
yo = 0.5*(y - yr);
end
Bài 2:
>> t=[-10:0.01:10];
>> y=2*uramp(t,2.5)-5*uramp(t,0)+3*uramp(t,-2)+ustep(t,-4);
>> evenodd(y);
>> yr=fliplr(y);
>> ye=0.5*(y+yr);
>> yo=0.5*(y-yr);
>> plot(t,ye,'r-.','linewidth',1);
>> hold on;
>> plot(t,yo,'g--','linewidth',1);
>> xlabel('t');
>> ylabel('y');
>> plot(t,y,'k','linewidth',1);
`9
>> legend('yo','ye','y');
>> grid on;

III.Tổng của các tín hiệu tuần hoàn


a)
>> t=[-10:0.01:10];
>> x1=1+1.5*cos((2*pi*pi*t)/10)-0.6*cos((4*pi*t)/10);
>> plot(t,x1);
>> xlabel('t');

Tín hiệu x1 không phải là tín hiệu tuần hoàn


`10
b)
>> t=[-10:0.01:10];
>> x2=1+1.5*cos(6*pi*t)-0.6*cos((4*pi*t)/10);
>> plot(t,x2);
>> xlabel('t');
>> ylabel('x2');

Tín hiệu x2 là tín hiệu tuần hoàn với chu kỳ T0=5

`11
IV.Năng lượng, công suất của 1 tín hiệu

>> syms t;
>> T=20;
>> u(t)=heaviside(t);
>> x(t)=exp(-t)*cos(2*pi*t)*u(t);
>> f=(abs(x(t))).^2;
>> E=int(f,t,-T/2,T/2)
E =(exp(-20)*(2*pi^2 + 1)*(exp(20) - 1))/(2*(4*pi^2 + 1))

>> P=int(f,t,-T/2,T/2)/T
P =(exp(-20)*(2*pi^2 + 1)*(exp(20) - 1))/(40*(4*pi^2 + 1))

V.Phép dịch, phép co dãn và phép đảo tín hiệu


Bài 1:
>> t=-10:0.01:10;
>> x=exp(-(abs(t)));
>> x1=exp(-(abs(t-2)));
>> x2=exp(-(abs(t+2)));
>> plot(t,x,'k','linewidth',2);
>> hold on;
>> plot(t,x1,'r','linewidth',2);
>> plot(t,x2,'g','linewidth',2);
>> legend ('x(t)','x(t-2)','x(t+2)');
>> title('x(t)=exp(-|t|)');

`12
Bài 2:
>> t=-10:0.01:10;
>> x=exp(-(abs(t)));
>> x1=exp(-(abs(t.*2)));
>> x2=exp(-(abs(t./2)));
>> plot(t,x,'k','linewidth',2);
>> hold on;
>> plot(t,x1,'r','linewidth',2);
>> plot(t,x2,'g','linewidth',2);
>> legend ('x(t)','x(2t)','x(0.5t)');
>> title('x(t)=exp(-|t|)');

`13
Bài 3:
>> t=-10:0.01:10;
>> x=exp(-(abs(t)));
>> x1=exp(-(abs(-t)));
>> plot(t,x,'k','linewidth',2);
>> hold on;
>> plot(t,x1,'g--','linewidth',2);
>> legend ('x(t)','x(-t)');
>> title('x(t)=exp(-|t|)');

-8 0

`14
Bài 2. Hàm tuyến tính

Bài 1. Tần số và nốt nhạc


Hãy viết một chương trình Matlab để chơi bản nhạc sau: CCGGAAG--,
FFEEDDC--,
% program to play the ABC song with pure tone
%
clc
clear
%clf reset
% MUSICAL SCALE
s=2^(1/12);
R=0; % This is a rest
A0=110;
A0s=A0*s;
B0=A0s*s;
C0=B0*s;
C0s=C0*s;
D0=C0s*s;
D0s=D0*s;
E0=D0s*s;
F0=E0*s;
F0s=F0*s;
G0=F0s*s;
G0s=G0*s;
A=220;
As=A*s;
B=As*s;
C=B*s; % Middle C
Cs=C*s;
D=Cs*s;
Ds=D*s;
E=Ds*s;
F=E*s;
Fs=F*s;
G=Fs*s;
Gs=G*s;
A2=440;

`15
A2s=A2*s;
B2=A2s*s;
C2=B2*s;
C2s=C2*s;
D2=C2s*s;
D2s=D2*s;
E2=D2s*s;
F2=E2*s;
F2s=F2*s;
G2=F2s*s;
G2s=G2*s;
Fs=8000;
t=0:1/Fs:0.6;
t2=0:1/Fs:1.2;
N=300;
A=2;
nC=A*exp(-0.5*t).*cos(2*pi*C*t);
nC2=A*exp(-0.5*t2).*cos(2*pi*C*t2);
nG=A*exp(-0.5*t).*cos(2*pi*G*t);
nG2=A*exp(-0.5*t2).*cos(2*pi*G*t2);
nA=A*exp(-0.5*t).*cos(2*pi*A2*t);
nF=A*exp(-0.5*t).*cos(2*pi*F*t);
nE=A*exp(-0.5*t).*cos(2*pi*E*t);
nD=A*exp(-0.5*t).*cos(2*pi*D*t);
nD2=A*exp(-0.5*t2).*cos(2*pi*D*t2);
x=[nC, nC, nG, nG, nA, nA, nG2, ...
nF, nF, nE , nE, nD, nD, nC2];
sound(x,Fs);
Bài 2: Tiến kèn Trumpet.
a. Xây dựng note B của kèn Trumpet với số liệu cho trước.
clc
clear all
Fs = 44100;
t = linspace(0,1,Fs);
B = 494;
F = [B 2*B 3*B 4*B 5*B 6*B 7*B 8*B 9*B];
C = [0.1155 0.3417 0.1789 0.1232 0.0678 0.0473 0.026 0.0045 0.002];

`16
Bài 2: Tiến kèn Trumpet.
b.Xây dựng note B của kèn Trumpet với số liệu cho trước.
clc
clear all
Fs = 44100;
t = linspace(0,1,Fs);
B = 494;
F = [B 2*B 3*B 4*B 5*B 6*B 7*B 8*B 9*B];
C = [0.1155 0.3417 0.1789 0.1232 0.0678 0.0473 0.026 0.0045 0.002];
Th = [-2.1299 1.6727 -2.5454 0.6607 -2.0390 2.1597 -1.0467 1.8581 -
2.3925];
x = C*cos(2*pi*F'*t - Th'*ones(1,Fs));
sound(x,Fs);
c. Vẽ đồ thị của x(t) trong vòng 3 chu kì đầu

Do tần số của B là 494HZ và được được lưu 44100 samples mỗi giây nên
44100 / 494 là số samples của 1 chu kì.

 Vậy 3 chu kì có số samples xấp xỉ 268

>> plot(t(1:268),x(1:268));

>>grid on

>> axis tight


>>title("Tiếng kèn trumpet");
>> xlabel t
>>ylabel x(t)

`17
d. Lặp lại a và b với góc pha = 0.
clc
clear all
Fs = 44100;
t = linspace(0,1,Fs);
B = 494;
F = [B 2*B 3*B 4*B 5*B 6*B 7*B 8*B 9*B];
C = [0.1155 0.3417 0.1789 0.1232 0.0678 0.0473 0.026 0.0045 0.002];
x = C*cos(2*pi*F'*t);
sound(x,Fs);
>> plot(t(1:268),x(1:268));
>> axis tight
>> grid on
>> title("Tiếng kèn trumpet với góc theta=0")
>> xlabel t
>> ylabel x(t)

`18
 Nhận xét:
 Pha dao động có sự thay đổi lệch hoàn toàn so tín hiệu gốc do dịch pha
ban đầu.
 Biên độ có sự thay đổi nhỏ, tần số không bị ảnh hưởng.
 Âm thanh vẫn tương tự như âm gốc.

`19
Bài 3. Tích chập, phép biến đổi Fourier và lọc tín hiệu

I. Tích chập và lọc tín hiệu âm thanh bằng bộ lọc thông thấp lý tưởng.

% doc file
[data, Fs]=audioread('female_voice.wav');
data = data(:, 1)';
% Fs: tan so trich mau; Ts: Thoi gian trich
mau Ts = 1/Fs;

% phat lai am thanh bi


hong sound(data, Fs);
% ham pause de nghe tach rieng 2
am pause(2);
% vecto thoi gian
t = -10:Ts:10;

% tan so cat cua bo loc la


1500Hz wb = 1500*2*pi;

% bo loc thong thap ly tuong voi tan so cat wb


% bien doi fourier: rect(w/wb)
ht =
wb/(2*pi)*sinc(wb*t/(2*pi));

% dau vao: du lieu, dap ung tuyen tinh, bat bien: ht


% dau ra: y = tich chap cua du lieu voi
ht y = conv(data, ht, 'same');

% chuan hoa am thanh da xu ly tranh su cat


xen y = y/max(abs(y));
% phat lai am thanh da duoc xu
ly sound(y,Fs);
=> Nhận xét: âm thanh sau khi được xử lý qua bộ lọc thông thấp nghe trầm hơn
so ban đầu
II. Phép biến đổi Fourier và lọc tín hiệu bằng bộ lọc Butterworth bậc 5
Bài 1. Tự tạo các hàm của bạn
Bạn hãy viết chương trình tạo hàm FourierTransform để tính ảnh
Fourier của một tín hiệu như dưới đây. Sau đó lưu vào với tên là
FourierTransform.m.

`20
function [f,X]=FourierTransform(t,x)
% computes the Fourier transform of signal x(t)
% ns: length(x)=number signal points
% dt: signal point spacing
%
% Transform computed with N points, where
N=2*ns ns=size(x,2); dt=t(2)-t(1);
N=2*ns; df=1/(N*dt);
xp=zeros(1,N); nns=sum(t<0);
xp(1:ns-nns)=x(nns+1:ns); xp(N-nns+1:N)=x(1:nns);
Xf=dt*fft(xp); n2=ceil(N/2);
if n2==N/2; X(1:n2-1)=Xf(n2+2:N); X(n2:N)=Xf(1:n2+1);
f=(-n2+1)*df:df:n2*df; no=n2;
else; X(1:n2-1)=Xf(n2+1:N); X(n2:N)=Xf(1:n2);
f=(-n2+1)*df:df:(n2-1)*df; end;

Viết chương trình tạo hàm IFourierTransform để tính ảnh Fourier


ngược như dưới đây. Sau đó lưu vào với tên là IFourierTransform.m.

function [t, x] = IFourierTransform(f, X)


% computes the inverse Fourier transform of X(f)
% ns: length(X)=number of transform points
% df: transform point spacing
%
% Signal computed with N points, where
N=ns ns=length(X); df=f(2)-f(1);
N=ns; dt=1/(N*df);
Xp=zeros(1,N); Xp(1:ns)=X;
nns=sum(f<0);
Xpp(1:ns-nns)=Xp(nns+1:ns); Xpp(N-nns+1:N)=Xp(1:nns);
xf=N*df*ifft(Xpp); n2=ceil(N/2);
if n2==N/2; x(1:n2-1)=xf(n2+2:N); x(n2:N)=xf(1:n2+1);
t=(-n2+1)*dt:dt:n2*dt;
else; x(1:n2-1)=xf(n2+1:N); x(n2:N)=xf(1:n2);
t=(-n2+1)*dt:dt:(n2-1)*dt; end;

Bài 2. Lọc tín hiệu điện tim


1. Vẽ tín hiệu điện tim và phổ biên độ của nó.

`21
% doc file
[data, Fs]=audioread('female_voice.wav');
data = data(:, 1)';
% Fs: tan so trich mau; Ts: Thoi gian trich
mau Ts = 1/Fs;

% phat lai am thanh bi


hong sound(data, Fs);
% ham pause de nghe tach rieng 2
am pause(2);
% vecto thoi gian
t = -10:Ts:10;

% tan so cat cua bo loc la


1500Hz wb = 1500*2*pi;

% bo loc thong thap ly tuong voi tan so cat wb


% bien doi fourier: rect(w/wb)
ht =
wb/(2*pi)*sinc(wb*t/(2*pi));

% dau vao: du lieu, dap ung tuyen tinh, bat bien: ht


% dau ra: y = tich chap cua du lieu voi
ht y = conv(data, ht, 'same');

% chuan hoa am thanh da xu ly tranh su cat


xen y = y/max(abs(y));
% phat lai am thanh da duoc xu
ly sound(y, Fs);

`22
Hình 1
=> Nhận xét:

 Từ độ thị ta thấy hầu hết năng lượng phân bổ ở vùng có tần số thấp.
 Phần có tần số cao được coi là nhiễu và cần loại bỏ

2. Bộ lọc tín hiệu

h=(568*exp(-300*t)-485*exp(-243*t).*cos(176*t)...
+668*exp(-243*t).*sin(176*t)-83*exp(-93*t).*cos(285*t)...
-255*exp(-
93*t).*sin(285*t));
[f,Hf]=FourierTransform(t,h)
; figure(2)
subplot(2,2,[1 2])
plot(t,h,'linewidth',1)
; grid;
axis([0 0.5 -50 150]);
title("Bo loc tin hieu dien tim");
xlabel('t (sec)'); ylabel('h(t)');
subplot(2,2,3)
plot(f,abs(Hf),'k','linewidth',1);
grid; axis([-150 150 0 1.2]);
xlabel('f (Hz)'); ylabel('|H(j2\pi
f)|'); subplot(2,2,4)
angleH=unwrap(angle(Hf))+2*pi;
`23
plot(f,angleH,'k','linewidth',1);
grid; axis([-150 150 -10 10]);
xlabel('f (Hz)'); ylabel('\angle H(f)');

Hình 2
=> Nhận xét:

 Bộ lọc được sử dụng ở đây là 1 bộ lọc thông thấp.


 Bộ lọc nhằm mục đích lọc lấy tín hiệu dưới 50Hz tuy nhiên do tính
"không lý tưởng" của bộ lọc nên cho tín hiệu từ dưới 100Hz thông qua.

3. Tín hiệu sau khi lọc

Yf=Xf.*Hf;
figure(3)
subplot(2,1,1)
plot(f,abs(Yf),'r','linewidth',1);
grid; `24
axis([-150 150 0 0.12]);
title("Tin hieu dien tim sau xư
ly"); xlabel('f (Hz)'); ylabel('|
[t2,y]=IFourierTransform(f,Yf);
subplot(2,1,2)
plot(t2,y,'r','linewidth',1);
grid;
axis([0 2.5 -0.5 1.5]);
xlabel('t (sec)'); ylabel('y(t)');

Hình 3
=> Nhận xét:

 Sau khi qua bộ lọc, hầu hết nhiễu với tần số cao đều đã được khử đi.
 Đồ thị tín hiệu theo thời gian trông rõ ràng hơn so hình 1.

`25

You might also like