Professional Documents
Culture Documents
trong đó b0i, b1i, b2i là các hệ số tử số hàm truyền của phần bậc 2 thứ i và 1,
a1i, a2i là các hệ số mẫu số của hàm truyền của phần bậc 2 thứ i.
Các phần tử của ma trận sos này sẽ được sử dụng để thực hiện bộ lọc IIR. Ghi nhận
các giá trị b và a vào bảng sau
function y = IIR(a,b,x,Ly)
L = length(b);
M = length(a);
Lx = length(x);
v = zeros(1,L);
w = zeros(1,M);
xn = [x zeros(1,Ly-Lx)];
for i = 1:Ly
c1 = 0;
c2 = 0;
v(1,1) = xn(1,i);
for k = 2 : M
c1 = c1 - a(1,k)*w(1,k);
end
for k = 1 : L
c2 = c2 + b(1,k)*v(1,k);
end
w(1,1) = c1 + c2;
y(1,i) = w(1,1);
for k = L:-1:2
v(1,k) = v(1,k-1);
end
for k = M:-1:2
w(1,k) = w(1,k-1);
end
end
end
- Kết quả:
- Ngõ vào có 2 vạch phổ ở tần số 1000 Hz và 1750 Hz đúng với lý thuyết.
- Bộ lọc IRR chắn dải có tần số trung tâm 1750 Hz, nên ngõ ra chỉ còn 1
vạch phổ ở tần số 1000 Hz, vạch phổ 1750 Hz bị loại bỏ.
2. Kiểm tra bộ lọc với ngõ vào tín hiệu tổng của các tín hiệu sin tần số 100 – 3900
Hz:
Chương trình Matlab thực hiện yêu cầu:
% Matlab code
clc;
clf;
Fs = 8e3;
Ts = 1/Fs;
t = 0 : Ts : 0.05 - Ts; %Signal duration in 50 ms
xn = 0;
for k = 100 : 100 : 3900
xn = xn + sin(2*pi*k*t);
end
N = length(xn)
a = bs1750.tf.den;
b = bs1750.tf.num;
yn = IIR(a,b,xn,400);
N1 = length(yn);
Xn = fft(xn);
X_mag = abs(Xn);
Yn = fft(yn);
Y_mag = abs(Yn);
figure(1)
n = 0 : N/2 - 1;
n1 = 0 : N1/2 - 1;
subplot(121)
plot(n*(Fs/N),X_mag(1:N/2)/N)
title('Pho bien do ngo vao');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
subplot(122)
plot(n1*(Fs/N1),Y_mag(1:N1/2)/N1)
title('Pho bien do ngo ra');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
function y = IIR(a,b,x,Ly)
L = length(b);
M = length(a);
Lx = length(x);
v = zeros(1,L);
w = zeros(1,M);
xn = [x zeros(1,Ly-Lx)];
for i = 1:Ly
c1 = 0;
c2 = 0;
v(1,1) = xn(1,i);
for k = 2 : M
c1 = c1 - a(1,k)*w(1,k);
end
for k = 1 : L
c2 = c2 + b(1,k)*v(1,k);
end
w(1,1) = c1 + c2;
y(1,i) = w(1,1);
for k = L:-1:2
v(1,k) = v(1,k-1);
end
for k = M:-1:2
w(1,k) = w(1,k-1);
end
end
end
- Ngõ vào gồm các vạch phổ có tần số từ 100 – 3900 Hz giống với lý thuyết.
- Bộ lọc IIR thông dải có tần số cắt là 1700 Hz và 1800 Hz, nên các vạch phổ nằm trong
vùng tần số đó bị lọc bỏ.
Lưu các chương trình Matlab trong mục này với tên Bai_2
_IIR_bs_1700_1800_NHOMx.m
2. Gía trị các hệ số đáp ứng xung mỗi tầng bậc 2 của bộ lọc thực hiện trên kit
DSP:
3. Kiểm tra bộ lọc với ngõ vào tín hiệu sin đa tần có các thành phần tần số
1000 Hz và 1700 Hz:
- Code:
clc;
clf;
Fs = 8e3;
Ts = 1/Fs;
t = 0 : Ts : 0.06 -Ts;
xn = sin(2000*pi*t) + sin(3500*pi*t);
a = lp1600.tf.den;
b = lp1600.tf.num;
yn = IIR(a,b,xn,480);
N = length(xn);
N1 = length(yn);
n = 0 : N/2 - 1;
n1 = 0 : N1/2 - 1;
Xn = fft(xn);
Yn = fft(yn);
X_mag = abs(Xn);
Y_mag = abs(Yn);
subplot(121)
plot(n*(Fs/N),X_mag(1:N/2)/N)
title('Pho bien do ngo vao');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
subplot(122)
plot(n1*(Fs/N1),Y_mag(1:N1/2)/N1)
title('Pho bien do ngo ra');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
function y = IIR(a,b,x,Ly)
L = length(b);
M = length(a);
Lx = length(x);
v = zeros(1,L);
w = zeros(1,M);
xn = [x zeros(1,Ly-Lx)];
for i = 1:Ly
c1 = 0;
c2 = 0;
v(1,1) = xn(1,i);
for k = 2 : M
c1 = c1 - a(1,k)*w(1,k);
end
for k = 1 : L
c2 = c2 + b(1,k)*v(1,k);
end
w(1,1) = c1 + c2;
y(1,i) = w(1,1);
for k = L:-1:2
v(1,k) = v(1,k-1);
end
for k = M:-1:2
w(1,k) = w(1,k-1);
end
end
end
- Kết quả:
- Ngõ vào có 2 vạch phổ ở tần số 1000 Hz và 1750 Hz đúng với lý thuyết.
- Bộ lọc IRR thông thấp có tần số cắt 1600 Hz, nên ngõ ra chỉ còn 1 vạch
phổ ở tần số 1000 Hz, vạch phổ 1750 Hz bị loại bỏ.
4. Kiểm tra bộ lọc với ngõ vào tín hiệu tổng của các tín hiệu sin tần số 100 –
3900 Hz:
Chương trình Matlab thực hiện yêu cầu:
% Matlab code
clc;
clf;
Fs = 8e3;
Ts = 1/Fs;
t = 0 : Ts : 0.05 - Ts; %Signal duration in 50 ms
xn = 0;
for k = 100 : 100 : 3900
xn = xn + sin(2*pi*k*t);
end
N = length(xn)
a = lp1600.tf.den;
b = lp1600.tf.num;
yn = IIR(a,b,xn,400);
N1 = length(yn);
Xn = fft(xn);
X_mag = abs(Xn);
Yn = fft(yn);
Y_mag = abs(Yn);
figure(1)
n = 0 : N/2 - 1;
n1 = 0 : N1/2 - 1;
subplot(121)
plot(n*(Fs/N),X_mag(1:N/2)/N)
title('Pho bien do ngo vao');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
subplot(122)
plot(n1*(Fs/N1),Y_mag(1:N1/2)/N1)
title('Pho bien do ngo ra');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
function y = IIR(a,b,x,Ly)
L = length(b);
M = length(a);
Lx = length(x);
v = zeros(1,L);
w = zeros(1,M);
xn = [x zeros(1,Ly-Lx)];
for i = 1:Ly
c1 = 0;
c2 = 0;
v(1,1) = xn(1,i);
for k = 2 : M
c1 = c1 - a(1,k)*w(1,k);
end
for k = 1 : L
c2 = c2 + b(1,k)*v(1,k);
end
w(1,1) = c1 + c2;
y(1,i) = w(1,1);
for k = L:-1:2
v(1,k) = v(1,k-1);
end
for k = M:-1:2
w(1,k) = w(1,k-1);
end
end
end
- Ngõ vào gồm các vạch phổ có tần số từ 100 – 3900 Hz giống với lý thuyết.
- Bộ lọc IIR thông thấp có tần số cắt là 1600 Hz, nên các vạch phổ nằm trong vùng tần số
lớn hơn 1600 Hz bị lọc bỏ.
Lưu các chương trình Matlab trong mục này với tên Bai_2
_IIR_lp_1600_NHOMx.m
2. Gía trị các hệ số đáp ứng xung mỗi tầng bậc 2 của bộ lọc thực hiện trên kit
DSP:
3. Kiểm tra bộ lọc với ngõ vào tín hiệu sin đa tần có các thành phần tần số
1000 Hz và 2000 Hz:
- Code:
clc;
clf;
Fs = 8e3;
Ts = 1/Fs;
t = 0 : Ts : 0.06 -Ts;
xn = sin(2000*pi*t) + sin(4000*pi*t);
a = bp2000.tf.den;
b = bp2000.tf.num;
yn = IIR(a,b,xn,400);
N = length(xn);
N1 = length(yn);
n = 0 : N/2 - 1;
n1 = 0 : N1/2 - 1;
Xn = fft(xn);
Yn = fft(yn);
X_mag = abs(Xn);
Y_mag = abs(Yn);
subplot(121)
plot(n*(Fs/N),X_mag(1:N/2)/N)
title('Pho bien do ngo vao');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
subplot(122)
plot(n1*(Fs/N1),Y_mag(1:N1/2)/N1)
title('Pho bien do ngo ra');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
function y = IIR(a,b,x,Ly)
L = length(b);
M = length(a);
Lx = length(x);
v = zeros(1,L);
w = zeros(1,M);
xn = [x zeros(1,Ly-Lx)];
for i = 1:Ly
c1 = 0;
c2 = 0;
v(1,1) = xn(1,i);
for k = 2 : M
c1 = c1 - a(1,k)*w(1,k);
end
for k = 1 : L
c2 = c2 + b(1,k)*v(1,k);
end
w(1,1) = c1 + c2;
y(1,i) = w(1,1);
for k = L:-1:2
v(1,k) = v(1,k-1);
end
for k = M:-1:2
w(1,k) = w(1,k-1);
end
end
end
- Kết quả:
- Ngõ vào có 2 vạch phổ ở tần số 1000 Hz và 2000 Hz đúng với lý thuyết.
- Bộ lọc IRR thông dải có tần số cắt 1600 Hz và 2400 Hz, nên ngõ ra chỉ
còn 1 vạch phổ ở tần số 2000 Hz, vạch phổ 1000 Hz bị loại bỏ.
4. Kiểm tra bộ lọc với ngõ vào tín hiệu tổng của các tín hiệu sin tần số 100 –
3900 Hz:
Chương trình Matlab thực hiện yêu cầu:
% Matlab code
clc;
clf;
Fs = 8e3;
Ts = 1/Fs;
t = 0 : Ts : 0.05 - Ts; %Signal duration in 50 ms
xn = 0;
for k = 100 : 100 : 3900
xn = xn + sin(2*pi*k*t);
end
N = length(xn)
a = bp2000.tf.den;
b = bp2000.tf.num;
yn = IIR(a,b,xn,400);
N1 = length(yn);
Xn = fft(xn);
X_mag = abs(Xn);
Yn = fft(yn);
Y_mag = abs(Yn);
figure(1)
n = 0 : N/2 - 1;
n1 = 0 : N1/2 - 1;
subplot(121)
plot(n*(Fs/N),X_mag(1:N/2)/N)
title('Pho bien do ngo vao');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
subplot(122)
plot(n1*(Fs/N1),Y_mag(1:N1/2)/N1)
title('Pho bien do ngo ra');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
function y = IIR(a,b,x,Ly)
L = length(b);
M = length(a);
Lx = length(x);
v = zeros(1,L);
w = zeros(1,M);
xn = [x zeros(1,Ly-Lx)];
for i = 1:Ly
c1 = 0;
c2 = 0;
v(1,1) = xn(1,i);
for k = 2 : M
c1 = c1 - a(1,k)*w(1,k);
end
for k = 1 : L
c2 = c2 + b(1,k)*v(1,k);
end
w(1,1) = c1 + c2;
y(1,i) = w(1,1);
for k = L:-1:2
v(1,k) = v(1,k-1);
end
for k = M:-1:2
w(1,k) = w(1,k-1);
end
end
end
- Ngõ vào gồm các vạch phổ có tần số từ 100 – 3900 Hz giống với lý thuyết.
- Bộ lọc IIR thông dải có tần số cắt là 1600 Hz và 2400 Hz, nên các vạch phổ nằm trong
vùng tần số đó được giữ lại ở ngõ ra, các vạch phổ ở các vùng tần số khác bị lọc bỏ.
Lưu các chương trình Matlab trong mục này với tên Bai_2
_IIR_bp_1600_2400_NHOMx.m
1.1.4. Thiết kế bộ lọc IIR multiband
Trong thí nghiệm này, chúng ta thiết kế, thực hiện và kiểm tra một bộ lọc IIR
multiband có đáp ứng mong muốn như bộ lọc ở phần II.1.4.
Các bước thiết kế giống như ở phần II.1.4 với nội dung file multibandiir63.m dùng
để thiết kế như sau:
%multibandiir63.m: Multiband IIR 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 0 1 1 0 0 1 1 0 0];
n = 63;
[num, den] = yulewalk(n-1,f,m);
- Code:
clc;
clf;
Fs = 1e4;
Ts = 1/Fs;
t = 0 : Ts : 0.06 -Ts;
xn = sin(1000*pi*t) + sin(1500*pi*t) + sin(3500*pi*t);
f = [0 0.1 0.12 0.18 0.2 0.3 0.32 0.38 0.4 1];
m = [0 0 1 1 0 0 1 1 0 0];
n = 63;
a = den;
b = num;
[num, den] = yulewalk(n-1,f,m);
yn = IIR(a,b,xn,400);
N = length(xn);
N1 = length(yn);
n = 0 : N/2 - 1;
n1 = 0 : N1/2 - 1;
Xn = fft(xn);
Yn = fft(yn);
X_mag = abs(Xn);
Y_mag = abs(Yn);
subplot(121)
plot(n*(Fs/N),X_mag(1:N/2)/N)
title('Pho bien do ngo vao');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
subplot(122)
plot(n1*(Fs/N1),Y_mag(1:N1/2)/N1)
title('Pho bien do ngo ra');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
function y = IIR(a,b,x,Ly)
L = length(b);
M = length(a);
Lx = length(x);
v = zeros(1,L);
w = zeros(1,M);
xn = [x zeros(1,Ly-Lx)];
for i = 1:Ly
c1 = 0;
c2 = 0;
v(1,1) = xn(1,i);
for k = 2 : M
c1 = c1 - a(1,k)*w(1,k);
end
for k = 1 : L
c2 = c2 + b(1,k)*v(1,k);
end
w(1,1) = c1 + c2;
y(1,i) = w(1,1);
for k = L:-1:2
v(1,k) = v(1,k-1);
end
for k = M:-1:2
w(1,k) = w(1,k-1);
end
end
end
- Kết quả:
- Ngõ vào có 3 vạch phổ tại các tần số 500 Hz, 750 Hz, 1750 Hz giống với
lý thuyết.
- Bộ lọc IIR multiband có dải thông [500 1000] Hz và [1500 2000] Hz, nên
ngõ có cả 3 vạch phổ nhưng vạch phổ tại tần số 500 Hz gần tần số cắt nên
biên độ giảm đáng kể.
3. Kiểm tra bộ lọc với ngõ vào tín hiệu tổng của các tín hiệu sin tần số 100 – 3900
Hz:
Chương trình Matlab thực hiện yêu cầu:
% Matlab code
clc;
clf;
Fs = 1e4;
Ts = 1/Fs;
t = 0 : Ts : 0.05 - Ts; %Signal duration in 50 ms
xn = 0;
for k = 100 : 100 : 3900
xn = xn + sin(2*pi*k*t);
end
f = [0 0.1 0.12 0.18 0.2 0.3 0.32 0.38 0.4 1];
m = [0 0 1 1 0 0 1 1 0 0];
n = 63;
[num, den] = yulewalk(n-1,f,m);
N = length(xn)
a = den;
b = num;
yn = IIR(a,b,xn,400);
N1 = length(yn);
Xn = fft(xn);
X_mag = abs(Xn);
Yn = fft(yn);
Y_mag = abs(Yn);
figure(1)
n = 0 : N/2 - 1;
n1 = 0 : N1/2 - 1;
subplot(121)
plot(n*(Fs/N),X_mag(1:N/2)/N)
title('Pho bien do ngo vao');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
subplot(122)
plot(n1*(Fs/N1),Y_mag(1:N1/2)/N1)
title('Pho bien do ngo ra');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
function y = IIR(a,b,x,Ly)
L = length(b);
M = length(a);
Lx = length(x);
v = zeros(1,L);
w = zeros(1,M);
xn = [x zeros(1,Ly-Lx)];
for i = 1:Ly
c1 = 0;
c2 = 0;
v(1,1) = xn(1,i);
for k = 2 : M
c1 = c1 - a(1,k)*w(1,k);
end
for k = 1 : L
c2 = c2 + b(1,k)*v(1,k);
end
w(1,1) = c1 + c2;
y(1,i) = w(1,1);
for k = L:-1:2
v(1,k) = v(1,k-1);
end
for k = M:-1:2
w(1,k) = w(1,k-1);
end
end
end
- Ngõ vào gồm các vạch phổ có tần số từ 100 – 3900 Hz giống với lý thuyết.
- Bộ lọc IIR multiband có dải thông [500 1000] Hz và [1500 2000] Hz, nên các vạch phổ
trong tần số thuộc dải thông được giữ lại. Các vạch phổ của các tần số còn lại có gần như
bị loại bỏ hoàn toàn.
Lưu các chương trình Matlab trong mục này với tên Bai_2 _IIR_mb_NHOMx.m