Professional Documents
Culture Documents
Filtro Digitales
Filtro Digitales
• 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
1
𝑇= 𝑠𝑒𝑔
32000
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
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_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
void setup(){
DDRD=0xFF;
ADCSRA |= PS_4;
void loop(){
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
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_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
void setup(){
DDRD=0xFF;
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;
• 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
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_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
void setup(){
DDRD=0xFF;
ADCSRA |= PS_4;
void loop(){
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;
• 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𝐻𝑧
𝑧 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 𝑋(𝑧)
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_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
void setup(){
DDRD=0xFF;
ADCSRA |= PS_4;
void loop(){
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;