You are on page 1of 6

FILTRO PASA BAJO

• Código en Matlab

clear all
Fc=700;
wc=2*pi*Fc;
num=[wc];
den=[1 wc];
G=tf(num,den)
Fs=32000;
Ts=double(1/Fs);
H=c2d(G,Ts,'tustin')
bodemag(H)

𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑒𝑟 = 4

𝐹𝑠 = 32000𝐻𝑧

𝑓𝑐 = 700𝐻𝑧

𝑟𝑎𝑑
𝜔𝑐 = 2𝜋. 𝑓𝑐 = 2𝜋. 700 = 4398.23
𝑠𝑒𝑔

𝜔𝑐 4398.23
𝐻(𝑠) = =
𝑠 + 𝜔𝑐 𝑠 + 4398.23

𝐹𝑠 = 35000 𝐻𝑧 (𝑉𝑎𝑙𝑜𝑟 𝐸𝑣𝑎𝑙𝑢𝑎𝑑𝑜 𝑒𝑛 𝑓𝑢𝑛𝑐𝑖𝑜𝑛 𝑑𝑒 𝑙𝑎 𝑣𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑 𝑑𝑒𝑙 𝑚𝑖𝑐𝑟𝑜𝑐𝑜𝑛𝑡𝑟𝑜𝑙𝑎𝑑𝑜𝑟)

1
𝑇= 𝑠𝑒𝑔
32000

Aplicando la transformacion bilineal o de tustin:


2 1 − 𝑧 −1 1 − 𝑧 −1
𝑠= ( ) = 70000 ( )
𝑇 1 + 𝑧 −1 1 + 𝑧 −1

4398.23 4398.23
𝐻(𝑧) = =
1 − 𝑧 −1 64000 − 64000𝑧 −1
64000 ( ) + 628.31 ( ) + 4398.23
1 + 𝑧 −1 1 + 𝑧 −1

4398.23
𝐻(𝑧) =
(64000 − 64000𝑧 −1 ) + (1 + 𝑧 −1 )(4398.23 )
( )
1 + 𝑧 −1

4398.23
𝐻(𝑧) =
64000 − 64000𝑧 −1 + 4398.23 + 4398.23𝑧 −1
( )
1 + 𝑧 −1

4398.23
𝐻(𝑧) = 1
68398.23 − 59601.77𝑧 −1
( )
1 + 𝑧 −1

𝑧
4398.23 + 4398.23𝑧 −1 68398.23
H(z) = ∗( 𝑧 )
68398.23 − 59601.77𝑧 −1
68398.23

0.06430327218𝑧 + 0.06430327218
𝐻(𝑧) =
𝑧 − 0.8713934556

0.0643𝑧 + 0.0643
𝐻(𝑧) = → 𝑂𝑏𝑡𝑒𝑛𝑖𝑑𝑜 𝑚𝑒𝑑𝑖𝑎𝑛𝑡𝑒 𝑠𝑐𝑟𝑖𝑝𝑡 𝑒𝑛 𝑀𝑎𝑡𝑙𝑎𝑏
𝑧 − 0.8714

0.0643𝑧 + 0.0643
𝐻(𝑧) =
𝑧 − 0.8714
𝑌(𝑧) 0.0643𝑧 + 0.0643
=
𝑋(𝑧) 𝑧 − 0.8714

𝑌(𝑧)[𝑧 − 0.8714] = 𝑋(𝑧)[0.0643𝑧 + 0.0643]

𝑧𝑌(𝑧) − 0.8714𝑌(𝑧) = 0.0643𝑧𝑋(𝑧) + 0.0643𝑋(𝑧) ∗ (𝑧 −1 )

𝑌(𝑧) − 0.8714𝑧 −1 𝑌(𝑧) = 0.0643𝑋(𝑧) + 0.0643𝑧 −1 𝑋(𝑧)

𝑦(𝑛) − 0.8714𝑦(𝑛 − 1) = 0.0643𝑥(𝑛) + 0.0643𝑥(𝑛 − 1)

𝑦(𝑛) = 0.8714𝑦(𝑛 − 1) + 0.0643𝑥(𝑛) + 0.0643𝑥(𝑛 − 1)

CODIGO FILTRO PASA BAJO

double x=0;

double x_1=0;

double y=0;

double y_1=0;

double y_2=0;

double n=0.0643;

double d=0.8714;

const unsigned char PS_2 = (1 << ADPS0);

const unsigned char PS_4 = (1 << ADPS1);

const unsigned char PS_8 = (1 << ADPS1) | (1 << ADPS0);

const unsigned char PS_16 = (1 << ADPS2);

const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);

const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);

const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

void setup(){

DDRD=0xFF;

ADCSRA &= ~PS_128;

ADCSRA |= PS_4;

void loop(){

x=analogRead(0)/4; //0 a 1023 / 4 =0 a 255 //1,625useg

y=(d*y_1)+(n*x)+(n*x_1); //300useg

PORTD=y; //10useg

y_1=y; //1useg

x_1=x; //1useg

}
FILTRO PASA ALTO

• Código en Matlab

clear all
Fc=700;
wc=2*pi*Fc;
num=[1 0];
den=[1 wc];
G=tf(num,den)
Fs=8000;
Ts=double(1/Fs);
H=c2d(G,Ts,'tustin')
bodemag(H)

𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑒𝑟 = 4

𝐹𝑠 = 8000𝐻𝑧

𝑓𝑐 = 700𝐻𝑧

0.7844𝑧 − 0.7844
𝐻(𝑧) =
𝑧 − 0.9822

𝑌(𝑧) 0.7844𝑧 − 0.7844


=
𝑋(𝑧) 𝑧 − 0.5688

𝑌(𝑧)[𝑧 − 0.5688] = 𝑋(𝑧)[0.7844𝑧 − 0.7844]

𝑧𝑌(𝑧) − 0.5688𝑌(𝑧) = 0.7844𝑧𝑋(𝑧) − 0.7844𝑋(𝑧) ∗ (𝑧 −1 )

𝑌(𝑧) − 0.5688𝑧 −1 𝑌(𝑧) = 0.7844𝑋(𝑧) + 0.7844𝑧 −1 𝑋(𝑧)

𝑦(𝑛) − 0.5688𝑦(𝑛 − 1) = 0.7844𝑥(𝑛) − 0.7844𝑥(𝑛 − 1)

𝑦(𝑛) = 0.5688𝑦(𝑛 − 1) + 0.7844𝑥(𝑛) − 0.7844𝑥(𝑛 − 1)

CODIGO FILTRO PASA ALTO

double x=0;

double x_1=0;

double y=0;

double y_1=0;

double y_2=0;

double n=0.7844;

double d=0.5688;

const unsigned char PS_2 = (1 << ADPS0);

const unsigned char PS_4 = (1 << ADPS1);

const unsigned char PS_8 = (1 << ADPS1) | (1 << ADPS0);

const unsigned char PS_16 = (1 << ADPS2);

const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);

const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);

const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

void setup(){

DDRD=0xFF;

ADCSRA &= ~PS_128;

ADCSRA |= PS_4;
}

void loop(){

x=analogRead(0)/4;

y=(d*y_1)+(n*x)-(n*x_1);

PORTD=y+127;

y_1=y;

x_1=x;

FILTRO PASA BANDA

• Código en Matlab

clear all
Fcinf=600;
Fcsup=1200;
wcinf=2*pi*Fcinf;
wcsup=2*pi*Fcsup;
bw=wcsup-wcinf;
wc2=wcinf*wcsup; %wc al cuadrado
num=[bw 0];
den=[1 bw wc2];
G=tf(num,den)
Fs=13000;
Ts=double(1/Fs);
H=c2d(G,Ts,'tustin')
bodemag(H)

𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑒𝑟 = 4

𝐹𝑠 = 13000𝐻𝑧

𝑓𝑐 = √600.1200

𝑓𝑐 = 848.53𝐻𝑧

0.1221 𝑧 2 − 0.1221
𝐻(𝑧) =
𝑧 2 − 1.804 𝑧 + 0.7557

𝑌(𝑧) 0.1221 𝑧 2 − 0.1221


=
𝑋(𝑧) 𝑧 2 − 1.614 𝑧 + 0.7557

𝑌(𝑧)[𝑧 2 − 0.7557 𝑧 + 1.614] = 𝑋(𝑧)[0.1221 𝑧 2 − 0.1221]

𝑧 2 𝑌(𝑧) − 0.7557 𝑧𝑌(𝑧) + 1.614𝑌(𝑧) = 0.1221 𝑧 2 𝑋(𝑧) − 0.1221𝑋(𝑧) ∗ (𝑧 −2 )

𝑌(𝑧) − 0.7557𝑧 −1 𝑌(𝑧) + 1.614𝑧 −2 𝑌(𝑧) = 0.1221𝑋(𝑧) − 0.1221𝑧 −2 𝑋(𝑧)

𝑦(𝑛) − 0.7557𝑦(𝑛 − 1) + 1.614𝑦(𝑛 − 2) = 0.1221𝑥(𝑛) − 0.12216𝑥(𝑛 − 2)

𝑦(𝑛) = −0.7557𝑦(𝑛 − 2) + 1.614𝑦(𝑛 − 1) + 0.1221𝑥(𝑛) − 0.1221𝑥(𝑛 − 2)

CODIGO FILTRO PASA BANDA

double x=0;

double x_1=0;

double x_2=0;

double y=0;

double y_1=0;

double y_2=0;

double a1=0.7557;

double a2=1.614;
double a3=0.1221;

double a4=a3;

const unsigned char PS_2 = (1 << ADPS0);;

const unsigned char PS_4 = (1 << ADPS1);

const unsigned char PS_8 = (1 << ADPS1) | (1 << ADPS0);

const unsigned char PS_16 = (1 << ADPS2);

const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);

const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);

const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

void setup(){

DDRD=0xFF;

ADCSRA &= ~PS_128;

ADCSRA |= PS_4;

void loop(){

x=analogRead(0)/4; //0 a 1023 / 4 =0 a 255 //1,625useg

y=-(a1*y_2)+(a2*y_1)+(a3*x)-(a4*x_2);

PORTD=y+127;

y_2=y_1;

y_1=y;

x_2=x_1;

x_1=x;

FILTRO RECHAZA BANDA

• Código en Matlab

clear all
Fcinf=800;
Fcsup=1200;
wcinf=2*pi*Fcinf;
wcsup=2*pi*Fcsup;
bw=wcsup-wcinf;
wc2=wcinf*wcsup; %wc al cuadrado
num=[1 0 wc2];
den=[1 bw wc2];
G=tf(num,den)
Fs=11000;
Ts=double(1/Fs);
H=c2d(G,Ts,'tustin')
bodemag(H)
𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑒𝑟 = 4

𝐹𝑠 = 11000𝐻𝑧

𝑓𝑐 = √800.1200

𝑓𝑐 = 979.79𝐻𝑧

0. 8779𝑧 2 − 1.614 𝑧 + 0.8779


𝐻(𝑧) =
𝑧 2 − 1.614 𝑧 + 0.7557

𝑌(𝑧) 0.9042𝑧 2 − 1.546 𝑧 + 0.9042


=
𝑋(𝑧) 𝑧 2 − 1.546 𝑧 + 0.8084
𝑌(𝑧)[𝑧 2 − 1.546 𝑧 + 0.8084] = 𝑋(𝑧)[0.9042𝑧 2 − 1.546 𝑧 + 0.9042]

𝑧 2 𝑌(𝑧) − 1.546 𝑧𝑌(𝑧) + 0.8084𝑌(𝑧) = 0.9042𝑧 2 𝑋(𝑧) − 1.546 𝑧𝑋(𝑧) + 0.9042 𝑋(𝑧) ∗ (𝑧 −2 )

𝑌(𝑧) − 1.546𝑧 −1 𝑌(𝑧) + 0.8084𝑧 −2 𝑌(𝑧) = 0.9042𝑋(𝑧) − 1.546 𝑧 −1 𝑋(𝑧) + 0.9042𝑧 −2 𝑋(𝑧)

𝑦(𝑛) − 1.546𝑦(𝑛 − 1) + 0.8084𝑦(𝑛 − 2) = 0.9042𝑥(𝑛) − 1.546𝑥(𝑛 − 1) + 0.9042𝑥(𝑛 − 2)

𝑦(𝑛) = −0.8084𝑦(𝑛 − 2) + 1.546𝑦(𝑛 − 1) + 0.9042𝑥(𝑛) − 1.546𝑥(𝑛 − 1) + 0.9042𝑥(𝑛 − 2)

CODIGO FILTRO RECHAZA BANDA

double x=0;

double x_1=0;

double x_2=0;

double y=0;

double y_1=0;

double y_2=0;

double a1=0.8084;

double a2=1.546;

double a3=0.9042;

double a4=a2;

double a5=a3;

const unsigned char PS_2 = (1 << ADPS0);;

const unsigned char PS_4 = (1 << ADPS1);

const unsigned char PS_8 = (1 << ADPS1) | (1 << ADPS0);

const unsigned char PS_16 = (1 << ADPS2);

const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);

const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);

const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

void setup(){

DDRD=0xFF;

ADCSRA &= ~PS_128;

ADCSRA |= PS_4;

void loop(){

x=analogRead(0)/4; //0 a 1023 / 4 =0 a 255 //1,625useg

y=-(a1*y_2)+(a2*y_1)+(a3*x)-(a4*x_1)+(a5*x_2);

PORTD=y;

y_2=y_1;

y_1=y;

x_2=x_1;

x_1=x;

You might also like