You are on page 1of 6

BO CO LAB DSP2

THIT K B LC BNG PHNG PHP CA S V LY MU TN S


1.PROBLEM.10. Thit k b lc chn di bng phng php ca s hamming:

Thng s bi:

ws1 = 0.4*pi; % lower stopband edge


wp1 = 0.3*pi; % lower passband edge
wp2 = 0.7*pi; % upper passband edge
ws2 = 0.6*pi; % upper stopband edge
Rp= 50dB;
As=0.2dB;
Code matlab:
% thanh vien nhom:
% PHAN VAN DONG 08DT3
% PHAM MINH NHUT 08DT3
% DONG NGOC VU
08DT4
% PHAN QUOC THANG 08DT3
%Proplem 7.10(hamming windows design techniques)
ws1 = 0.4*pi; % lower stopband edge
wp1 = 0.3*pi; % lower passband edge
wp2 = 0.7*pi; % upper passband edge
ws2 = 0.6*pi; % upper stopband edge
tr_width = min((ws1-wp1),(wp2-ws2)); M = ceil(6.6*pi/tr_width) + 1
n=[0:1:M-1]; wc1 = (ws1+wp1)/2; wc2 = (wp2+ws2)/2;
hd = ideal_lp(wc1,M) + ideal_lp(pi,M) - ideal_lp(wc2,M);
w_ham = (hamming(M))'; h = hd .* w_ham;
[db,mag,pha,grd,w] = freqz_m(h,[1]); delta_w = 2*pi/1000;
Rp = -min(db(1:wp1/delta_w+1)) % Actua; Passband Ripple
As = -round(max(db(ws1/delta_w+1:1:ws2/delta_w+1))) % Min Stopband
Attenuation
%Plots
subplot(2,2,1); stem(n,hd); title('Ideal Impulse Response')
axis([0 M-1 -0.4 0.8]); xlabel('n'); ylabel('hd(n)')
subplot(2,2,2); stem(n,w_ham);title('hamming Window')
axis([0 M-1 0 1.1]); xlabel('n'); ylabel('w(n)')
subplot(2,2,3); stem(n,h);title('Actual Impulse Response')
axis([0 M-1 -0.4 0.8]); xlabel('n'); ylabel('h(n)')
subplot(2,2,4);plot(w/pi,db);axis([0 1 -150 10]);
title('Magnitude Response in dB');grid;
xlabel('frequency in pi units'); ylabel('Decibels')
set(gca,'XTickMode','manual','XTick',[0;0.3;0.4;0.6;0.7;1])
set(gca,'XTickLabelMode','manual','XTickLabels',[' 0
';'0.3';'0.4';'0.6';'0.7';' 1 '],...
'fontsize',10)

Kt qu thit k.
M = 67

Rp = 0.0435
As = 50.

Ideal Impulse Response

hamming Window

0.8

0.6

w(n)

hd(n)

0.4
0.2

0.5

0
-0.2
-0.4

20

40

60

40
60
n
Magnitude Response in dB

0.30.4 0.60.7
frequency in pi units

n
Actual Impulse Response
0.8

20

0.6

Decibels

h(n)

0.4
0.2
0

-50
-100

-0.2
-0.4

20

40

60

-150

2.PROBLEM 24. THIT K B LC CHN DI BNG PHNG PHP LY MU TN


S:

Cc thng s bi:

ws1 = 0.4*pi; % lower stopband edge


wp1 = 0.3*pi; % lower passband edge
wp2 = 0.7*pi; % upper passband edge
ws2 = 0.6*pi; % upper stopband edge
Rp= 50dB;
As=0.2dB;
MATLAB CODE:
% thanh vien nhom:
% PHAN VAN DONG 08DT3
% PHAM MINH NHUT 08DT3
% DONG NGOC VU
08DT4
% PHAN QUOC THANG 08DT3
%Proplem 7.24(fre. samples design techniques)
ws1 = 0.4*pi; % lower stopband edge
wp1 = 0.3*pi; % lower passband edge
wp2 = 0.7*pi; % upper passband edge
ws2 = 0.6*pi; % upper stopband edge

M = 44; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l;


T1= 0.12902;
T2= 0.66592;
Hrs =
[ones(1,7),T2,T1,zeros(1,5),T1,T2,ones(1,13),T2,T1,zeros(1,5),T1,T2,ones(1,
6)];
Hdr = [1,1,0,0,1,1]; wdl = [0,0.3,0.4,0.6,0.7,1];
delta_w = 2*pi/1000;
k1 = 0:floor((M-1)/2); k2 = floor((M-1)/2)+1:M-1;
angH = [-alpha*(2*pi)/M*k1, alpha*(2*pi)/M*(M-k2)];
H = Hrs.*exp(j*angH); h = real(ifft(H,M));
[db,mag,pha,grd,w] =freqz_m(h,1); [Hr,ww,a,L] = Hr_Type2(h);
Rp = -min(db(1:wp1/delta_w+1)) % Passband Ripple
As = -round(max(db(ws1/delta_w+1:1:ws2/delta_w+1))) % Min Stopband
Attenuation
subplot(2,2,1);plot(wl(1:26)/pi,Hrs(1:26),'o',wdl,Hdr);
axis([0,1,-0.1,1.1]); title('Frequency Samples: M=20');
xlabel('frequency in pi units'); ylabel('Hr(k)');
subplot(2,2,2); stem(l,h); axis([-1,M,-0.3,0.5])
title('Impulse Response'); xlabel('n'); ylabel('h(n)');
subplot(2,2,3); plot(ww/pi,Hr,wl(1:26)/pi,Hrs(1:26),'o');
axis([0,1,-0.2,1.2]); title('Amplitude Response')
xlabel('frequency in pi units'); ylabel('Hr(w)')
subplot(2,2,4);plot(w/pi,db); grid
axis([0,1,-100,10]);
title('Magnitude Response'); xlabel('frequency in pi units');
ylabel('Decibels');
set(gca,'XTickMode','manual','XTick',[0;0.3;0.4;0.6;0.7;1])
set(gca,'XTickLabelMode','manual','XTickLabels',[' 0
';'0.3';'0.4';'0.6';'0.7';' 1 '],...
'fontsize',10)

Kt qu thit k:
Rp = 1.8243
As = 50

Frequency Samples: M=44

Impulse Response
0.4
0.2

h(n)

Hr(k)

0.5

-0.2

0
0

0.5
frequency in pi units
Amplitude Response

10

20
30
40
n
Magnitude Response

Decibels

Hr(w)

0.5

-50

0
0

0.5
frequency in pi units

-100

0.30.4 0.60.7
frequency in pi units

Vic tm ra gi tr T1 v T2 ti u ta da vo vng lp for di y.


ws1 = 0.4*pi;
wp1 = 0.3*pi;
wp2 = 0.7*pi;
ws2 = 0.6*pi;
M = 44; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l;
As1= 50;
Rp1= 0.2;
for T1= 0.1:0.001:0.2
for T2=0.4:0.001:0.7
Hrs =
[ones(1,7),T2,T1,zeros(1,5),T1,T2,ones(1,13),T2,T1,zeros(1,5),T1,T2,ones(1,
6)];
Hdr = [1,1,0,0,1,1]; wdl = [0,0.3,0.4,0.6,0.7,1];
delta_w = 2*pi/1000;
k1 = 0:floor((M-1)/2); k2 = floor((M-1)/2)+1:M-1;
angH = [-alpha*(2*pi)/M*k1, alpha*(2*pi)/M*(M-k2)];
H = Hrs.*exp(j*angH); h = real(ifft(H,M));
[db,mag,pha,grd,w] =freqz_m(h,1); [Hr,ww,a,L] = Hr_Type2(h);
Rp = -min(db(1:wp1/delta_w+1)); % Actua; Passband Ripple
As = -round(max(db(ws1/delta_w+1:1:ws2/delta_w+1))); % Min Stopband
Attenuation
if As1-As<2
if Rp-Rp1<1.7
T2
T1
end
break
end
end
end

s dng hm fir2 c sn:


ws1 = 0.4*pi; % lower stopband edge

wp1 = 0.3*pi; % lower passband edge


wp2 = 0.7*pi; % upper passband edge
ws2 = 0.6*pi; % upper stopband edge
N=44;
T1= 0.12902;
T2= 0.66592;
A=[ones(1,8),T2,T1,zeros(1,6),T1,T2,ones(1,8)];;
F=[0:0.04:1];
h=fir2(N,F,A)
[db,mag,pha,grd,w] =freqz_m(h,1);
Rp = -min(db(1:wp1/delta_w+1)) % Passband Ripple
As = -round(max(db(ws1/delta_w+1:1:ws2/delta_w+1))) % Min Stopband
Attenuation

Kt qu thu c khng tt bng phng php trn:


Rp = 2.3947
As = 25

3.Nhng hm con trong code:


function hd = ideal_lp(wc,M);
% Ideal LowPass filter computation
%-------------------------------% [hd] = ideal_lp(wc,M)
% hd = ideal impulse response between 0 to M-1
% wc = cutoff frequency in radians
%
M = length of the ideal filter
%
alpha = (M-1)/2;
n = [0:1:(M-1)];
m = n - alpha + eps;
hd = sin(wc*m) ./ (pi*m);

function [Hr,w,b,L] = Hr_Type2(h);


% Computes Amplitude response of Type-2 LP FIR filter
% --------------------------------------------------% [Hr,w,b,L] = Hr_Type2(h)
% Hr = Amplitude Response
% w = frequencies between [0 pi] over which Hr is computed
% b = Type-2 LP filter coefficients
% L = Order of Hr
% h = Type-2 LP impulse response
M
L
b
n
w
Hr

=
=
=
=
=
=

length(h);
M/2;
2*[h(L:-1:1)];
[1:1:L]; n = n-0.5;
[0:1:500]'*pi/500;
cos(w*n)*b';

function [db,mag,pha,grd,w] = freqz_m(b,a);


% Modified version of freqz subroutine
% -----------------------------------% [db,mag,pha,grd,w] = freqz_m(b,a);
% db = Relative magnitude in dB computed over 0 to pi radians

% mag = absolute magnitude computed over 0 to pi radians


% pha = Phase response in radians over 0 to pi radians
% grd = Group delay over 0 to pi radians
%
w = 501 frequency samples between 0 to pi radians
%
b = numerator polynomial of H(z)
(for FIR: b=h)
%
a = denominator polynomial of H(z) (for FIR: a=[1])
[H,w] = freqz(b,a,1000,'whole');
H = (H(1:1:501))'; w = (w(1:1:501))';
mag = abs(H);
db = 20*log10((mag+eps)/max(mag));
pha = angle(H);
% pha = unwrap(angle(H));
grd = grpdelay(b,a,w);
% grd = diff(pha);
% grd = [grd(1) grd];
% grd = [0 grd(1:1:500); grd; grd(2:1:501) 0];
% grd = median(grd)*500/pi;

You might also like