Universidad Autónoma Metropolitana
lztapalapa
Si
Y
t
S
S
Capitulo 1 : Generalidadcs
El algoritmo: E~-ror Cuadritico Medio
Progatna de Adquisición
y
Filtraje4
6
10
Objetivo
Capitulo
1:
Generalidades Error Cuadrático Medio
Capitulo
1
:
, . +
Generalidades
Fuera d e la PC
- - * - - - * - - - '
-t
l l T r
I
Generalidades Error Cuadritico Medio
x(n+
11
+-a,
€CM
Generalidades Error Cuadrdtico Medio
1
Generalidades Error Cuadrático Mcdio
El código es el siguiente:
,Tiempo de Grabaci6n = nillnero de Inucstr:is a procesar / 44100
(segundos)
Generaiidades Programa de Adquisición y Filtraje
Grtifico, pone en blanco las pantallas de los grificos ya sea para colocar l a gráfica de l a
prueba m i s reciente o porque se han estado combinando las grificas para hacer
comparaciones entre ellas, haciendo esto con el botón C'ompnror Grhficns; finalmente
S C I I I Y I ~ Guíficm tlcl FC.Lf, guarda cada imagen en un archivo.
Capitulo 2:
Pruebas
y
Resultados
Para rcalizar las pruebas objetib.as se implementó un circuito sencillo (un filtro
pasobajo), donde nuestra sefial de entrada, .t-(u), esta dada por un generador cle fincioncs.
P r u e b a s y R e s u l t a d o s O b j e t i v o s
Pruebas y Resultados Objetivos
Es decir cada t'ez que se registra un cambio en la frecuencia la seiial se actualiza para
cumplir con el requisito de ser como d ( / l ) y el tiempo que tarda en hacer esto se nota en el
cambio de l a atnplitud.
La siguiente figura correspondc a l Error Cuadrático Medio de una prueba corno la
anterior, distingi9ndose las \ x i x i o n e s de enor cuando o c ~ ~ r r e un movimiento en la
frecuencia de l a sefial, sicndn estas las Ixiacioncs dej,(t1) por \,ol\.er a ser como tl(tr).
Pruebas y Resultados Objetivos
Pruebas y Resultados Objetivos
Pruebas y Resultados Subjetivos
S e destaca la similitud de las señales JYt1) tanto e11 el FIR como en el Lagguer (ver figura 18) a l a sefial ~ ( I I ) . por tanto se ha identi ficaclo y- simulado. Corroborurldo esto cot1 la
Pruebas y Resultados Subjet vos
Esta pr-wba es de mal... :' complejidad que las anteriores, debido a la sefial de entrada, l a
Pruebas y Resultados Subjetivos
I
I
iI
Pruebas y Resultados Subjetivos
Los resultados de ~ l n a tercera g r a b a c i h son e.;tos:
f
Conclwiones
El progranla h x h o en el proyecto entrn en las aplicaciones n1ultimedia, siendo estas u n
conjunto de medios tecnológicos que nos s i n e n para la comunicación entre l a PC
(hardu.are y s o f t n x e ) y nosotros. El uso de esta herramienta facilita hacer aplicaciones,
como las que manejan sonido, \.ideo, jugar en red, nxanejo d e irnigenes, sonidos en 3D,
pi-ogramas interactivos para aprendi/ajc, etc. y en este caso ayudo a que fuera Factible
adquirir datos con dos tarjetas de soniclo igualcs y al mismo tiempo.
AI comienm del proyecto se programó en ambiente
DOS,
no hubo muchas dificultades,ya que la forma de progran~ar es al acostumbrada, pero al dar nnis presentación al
progranla se introdujo el sistema de adquisición a ambiente Windon,s, conociendo clue la
forma de progranlar en algunas cosas importan?es es distinta, creando un nuevo estilo de
programación. Despuis de todo, resultó m11c11o más f k i l programar en anlbiente Windows
que en
DOS.
debido a l a variedad de herramientas que se pueden utilizar además decumplir con el propósito de dar m i s presentación al sistema de adquisición y filtrado, es
decir, el Ilaccr los programas miis amigables para ek usuario final.
En un principio se comenró realizando la tarjeta de adquisición para la PC, haciendo
retrnin~cniería sobre una tarjeta ya existent<, debido a complicaciones posteriores y
o b s e n m d o las prestaciones y faci1idadi.s de tarjetas de sonido conlercial se optó por hacer
uso de ellas.
Conclusiones
E! renclimicnto de la PC fue importante, se comenzó trabajando en un Pentium I a
166hIhz, pero sucedía que se perdían muestras en las grabaciones, por lo tanto, l a
infonnación adquirida no era buena para realizar el proceso. Esto se notó con el sólo hecho
de comenzar a adquirir datos de dos tarjetas de sonido al mismo tiempo, implemcntando
ahora el sistema completo, no iba a funcionar adecuadanlente pues se iban a pedir aun m i s
requerimientos del sistema. Usando otra máquina que se encontraba en el mismo
laboratorio, Pentiurn I11 a SOOhlh;l, se logró llegar al cumplimiento de los objetivos, sin
Bibliografía
Filtro Lagguer:
Ornar Amin, Fausto Casco, Mauricio I h p e z . N C N Cnscctcitt Acltrpteci F'init Impulse
Respome (FIR). Filter. Internacional Conference, on signal proces ing application and
Anexos
Para usar cl Programa de A d q ~ ~ i s i c i ó n y Filtraje los requisitos son:
Dos tarjetas de sonido, si son iguales se recomienda usar ampliamente el sistema
operatiL.o U'indons Milcnium. En otro caso primero instale una y renombrcla,
posteriomlente instale la segunda tarjeta. Para renombrar la tarjeta valla a las propiedades
de sonido y multimedia en l a p e s t a h de dispositkos, conlo se nluestra en la siguiente
figura:
Dichas tarjetas de sonido deben de soportar grabaciones a 34100khr a 16bits, si no el
Anexos Notas al Progrrtrtla de Adquisición y Filtraje
Las tarjetas de sonido instaladas deben ser las tarjetas principales de l a
PC,
es decir, setienen que ver como en l a figura siguiente:
Anexos Progr tmas
.. ...I.".""-~..'."-.I . ... . l _ " _ . ...
Los programas fueron elaborados sobre el compilador Borland Ct-k Builder 4.0. Los
códigos del programa de adquisición son los siguientes, dividikndose en tres partes
principales, código del Error Cuadrático Medio, en el que los nombres están dispuestos en
ingles, Least Mean Square
(LMS)
para diferenciarlos del código que realiza las grificas,utilizando la Ibrekiatura ECM. Y en la tercera parte, el código de adquisición de datos dc la
tarjeta de sonido.
Código del Error Cuadritico
Medio
En el comienzo del proyecto se manejaron dos tarjetas de sonido diferentes
(SoundBlaster y EssAudio), pero.se dejaron los nombres para seguir identificando a las
tarjetas siendo l a principal, .-c(n), la SoundRlaster y d(t1), l a EssAudio.
...
=Inciudc' ,<\cl h>
-p:"1y13 i?iir.top
...
Anexos
numPolnts= O;
I I
7 -
Anexos Programas
Anexos Programas
I * * * * * * * * * * * * * * * * * * * * * " * * * * * * * * * * * * * * * * * * * * * ~ * * * * ~ * * * * * * * * * ~ * * * * * ~ ~ * * * ~ ~ ~ : * ~ ~ * * ~ ~ ,
!*Guarda los coeficientes dcl filtro en u n archlbo de teyto */
i * * * * * * * * * * C * * * r * * * * * * * * * * ~ * * * * * * * * ~ * * * * * * * * * ~ ~ * * * * * * * * ~ * * * * * * * ~ * ~ * * * * * ~ ~ ~ ~ ~ ~ ;
V O I ~ ~ fastcall TcLLlS :SaI~aCoeficlentesClicl\iTObjccr 'Sender)
I
for(int ~-O:~<Ordcn_F~ltro:i+t)
L ~ s t C o e t i c ~ e n t e - > l t e m ~ - ~ A d d ( C o e f i c ~ e n t e [ ~ ] ) :
Anexos
"Lrrnpla los coeficientes y dc!i!;is bartables para reallrar P I ECM normal d e
; * * * * * * * r * r * * * * * * * * * + * * * * * * * * * * * * * * * * * ~ * * * * * * * * * * * * * * * * r * * * * * r * * * ~ * * * * * * * * * * * * * /
cold p-fastcall TcLMS::FlltroNorrnal()
los datos grabados */
El~-rorECLl[~l= EnorLhIS;
.,;en este momento ya tengo l a salida del L.MS y todos !)los errores producidos para hacer el ECM
1
Anexos Programas
f * * * * * * * C * * * * * * * * C * * * * * * * * * * * * * * ~ * * * * * * ~ ~ * ~ * * * * * * * * * * ~ ~ * * * * * * * * ~ * * * * * * ~ * * ~ * * * i
;*Nos da 12 ventana de los grcificos *I
. . .
vold -fastcall TcLMS::ShonECMCltck(TObJect *Sender) EC'RlCr3ph->Sho\\.();
I
Arcl1iL.o de cabecera:
En-or
Cuadrático Medio
(EC3fproceso.h)
"Anexos
extern PACKAGE 'TcLbIS *cl.CfS;
// """" """" """"_"_____________________________"""""""""~
#endif
Código
para presentar
lasgráficas
del ECM en
pantalla
Error Cuadr-itico Medio
-Gráficas
(EChlgraficos.cpp)
' * * * * * * * * * * * * * * * * f + C * * * * * * * * * * * * * * * * * $ * * * * + * * * * ~ * * ~ * ~ * ~ * ~ ~ * ~ * * * ~ * ~ * * * * ~ * * ~ * * * * ~ '
;ipragma packag~(snlart_lnIt)
*pragma resource "*.dfm" TEC'MGraph *ECXIGraph; extern TcLMS *cLXlS;
-~ fastcall T E C I \ / I G r a p h : . T E C ~ l ~ r a ~ h ( T C o m p o n r n t * 0a.ner)
: TForm(O\r.ner)
I
Anexos Programas
Anexos Programas
Anexos Programas
TPropertyAttributes -fastcall TWavcInDe\iceIDProperty::Get.Attrlbutes() { TPropcrty.4ttnbutes pa;
pa << paMultlSelect << paValueLlst << paRevertable << p a R e d O n l y ; return pa;
v o ~ d -fastc;\Il TL~'a\.elnDevIceIDPropcrtL. GetValues(C1asses::TGetStrProc Proc)
I GenerateDeLIcel.ist();
for ( l n t I : O ; I.rndc\s ~ I , I- - ) Proc(de1 ~cel_~st->Str~ngs[i]);
I
Ant:xos Programas
Anexos Programas
TAudioLlneParameters *asp-(TAudioLineParameters*)(GetOrdValue()); If (asp"NU1,L) throw new asp->Frequency-iFreq; asp->Channels=iChannels; asp->BltsPerSample-iBlts;
Modified();
Anexos Programas
. . .
I* Realila l a detcrnmlnaclón de l a función que va a a estar en l a interrupclón *I
. . .
__ fastcall 7'Recorder.--TRecorder()
{ Stop(): Destroqtlandle();
If (hControlLl'nd- NULL) D e a l l o c . ~ t e l ~ ~ V n d ( h C o n t r o l ~ ~ ' n d ) ; h C o i l t r o l ~ ~ n d - ~ S U L I ~ ; If (FWaLelnT)e\~ce!-NUl~L) delete FlVavelnDe\lce; FlVavelnDe\lce-NIJLL.;
If(FQuallt>' \ L l , I , ) delete FQuality; FQuallty-NULL.;
I
void "fastcall TRecorder::Xddlnterest(TRecorderNotification ¡e)
{ Int ~pos--l;
for ( i n t ¡=O; i<hlAY-IKTEREST~S, i i - t ) I f (~nterest[~]-=NCLL) ipos-i;
if (~pos---l) return; ~nterest[~pos]z le;
FreeNotificationiEvtraet~otifyStlbJect(1e));
vold - fastcall TRecorder-::Renmo~elnterest(TRecorderNotification ie)
I for ( m t 1-0; I<bfAX-INTEKESTS; I + - & ) If (interest[~]z-=z~e) ~nterest[i]~--NLLL.;
1
I
void -Fdstc:tll 1Recorder Notlficatlon(TC'omponent *XComponent,TOperatlon op)
{ I f ( o p - - 0 p R e r r m e )
I for (Int IFO; I<>l\.1.4XY_INTERESTS; I + ) if ( E u t r a c t N o t ~ f ~ S u b ~ e c t ( ~ n t e r e s t [ i ] ) " X C o m p o n e n t ) ~ n t e r e s t [ i ] - N U l ~ L ~ ;
I
TCornponcnt -Notificatlon(AConmponent,op),
Anexos Programas
Anexos Programas
-'e
vold -fastcall TRecorder::Stop()
1 If (FHandle!-NULL) wavelnStop(Hand1e); FlsStarted--faise;
FClveUpTrylng-false;
\.old - fastcall TRecorder -Reset()
{ If (Ftlandle'z-NULL) uaveInReset(Hand1e); FlsStxted-fdse;
FGlvel:pTrylng;false,
I
' * i * * * * t * * * * * * * t * * * * t * * * * * * * * * * * * * t * * * * * * t * * * * * t ~ * * * * * * * * * ~ ~ t ~ * ~ ~ ~ * * * * * * * J
i*Checa SI ya se esta Ilsto para leer el siguiente buffer despues de que la intcrrupclon se
. . .
votd -fastcall TRecorder:ReadyForNextBuffer()
ha actlkado, si no esta llsto regresa una notlficaclón con un fallo *I
If (!lsNe\tBufferReady) return;
mt justDoneBuf-(ne\tBuf-linumnufs)%nilmBufs; Int nowWorklngOnBuf=.nextBuf;
neutBiuf. (nextBuf~tl)%ntlmBufs;
~ a v e l n U n p r e p a r e ~ I e a d e r ( H a r ~ , d l e , 5 t h e a d e r [ n o ~ ~ ~ o r k i n g O n B u ~ , s ~ ~ e o f ( ~ ~ ~ ~ ~ ~ t ~ D R ~ ) ; headerijustDoneRufj.lpData~ &pDu~ustDoneBtlfCsij.eBuF];
h e a d e r ~ u s t n o n s B u f j . d \ ~ B u f f e r L e n g t h ~ s i 7 e headerijustDoneBuq d\\Flags-O;
header~ustDonel3ufl.duLoops~ O;
w a v e l n P r e p ~ ~ r c H e a d t r ( ~ ~ a n d l e , & h e a d e r ~ t ~ s t D o n e B u ~ , s i ~ e o f ( \ ~ A V E ~ l D R ) ) ; w a v e l n . ~ \ d d R u f f e r ( ~ l a ~ l d l e , & h e a d e r ~ u s t D o n e B l t ~ , s ~ ~ e o f ( ~ ' ~ ~ ~ E H D ~ ) ) ;
So. that has dlspatched the one that the mer w a s preL1ously \\orking on
ii nextBuf 1s the one that the computer 1s cur-rently fillmg
li and \ve can now manipulate the data In nevtBt1f.
bData-(LPBYTE)header[no\v\\'orkingOnBufl,lpData;
wData=(LPWORD)header[no~vLf'orkingOnBufl IpData;
BufNumRytes- header[nouL\'orkingOnBufj.dwBytesRecorded;
Anexos
Anexos Programas
. ..
vold --fastcall TWa\eVicw:.InterestProc(TObject 'Sender, TRecorderReason rr)
Anexos Programas
- property TNotifyEvent Onchange= fread=FOnChange,write:FOnChange/;
public:
- fastcall TAudioI~inePa?~nleters(); - fastcall virtual -TAudioLinePararneters();
ridefine UCLI_BUFS S
=define h l X - I N T E R E S T S 6 class TKecorder,
enum TKecorder Reason Irrnata,rrClose,rrOpen/;
typedcf \.old - - fastcall (---closure *TRecorderUot~ficat~on)(TOb~ect* Scndcr.TRecurderRea~on rr). class TRecorder. public TComponent
Anexos Programas
void "fastcall virtual Stop(); vold -_.fastcall vlrtual Reset();
If
-property boo1 isStarted- (read--FlsStartcd};
"property H A h D L E h E b e n t - ( r e a d - - F H E v e n t , \ r r I t e ~ S e t ~ ~ ~ ~ e n t ) ;
- property H W A V E I N Handle= iread-GctHandle) ;
I ,
- property boo1 IsNestRufferReady= jread-GetlsNestRufferRea~y~;
vold __ fastcall vlrtual ReadqForScutRuffer(); il to say that you're done wlth the prevlous buffer and are non ready
-p property lnt lData[lnt 11:- (read-GetlDataJ;
B Y T E *bData:
WOKD *\\Data;
rnt ButSumBqtes;
rnt B u ~ u n l S m p l e s ;
I /
\old pfastcall \ ~ r t t ~ a I AddIntercst(TRecordeI-Notificatior1 le);
\,old - -fastcall virtual R c r ~ l o \ e i n t c r e s t ( T R e c ~ ~ d e r ~ o t l ~ c ~ ~ t ~ ~ n ¡ e ) ,
'I
lni -fastcall wrttlal G e t N u m D e \ ~ c e s ( ) ;
boo1 - fastcall virtual lsTh~sQualityPoss~Dle();
boo1 -_fastcall clrtual IsQtralrt~Poss~ble(rnt freq,rnt channels,~nt bits); io use this one Only for threaded model.
- published.
-property TWa\elnDevlcelD * D e c . i c e = - ~ r e a d - F ~ ~ a v e l n ~ c c ~ c e . ~ c r ~ t e - S e t U ' a \ e l n ~ e v ~ c e . n o d e f a u l t j ;
- proper-ty TAudiol.~neParclnleters *QualIty'iread. f.'Quslrty.~~r~te=SetQual~ty,nodefault),
" property Int BtrfSl/e- (read: FSamplesPerntIffer,\\rrte- SctSarnplesPerBuffer,defatrlt=~56~; " property TNotIfyELent OnSampie- ~ r e a d = F O n S a m p l e , ~ c r ~ t e = F O n S ~ m p l e ~ ;
" property unsigned i n t SamplcPos= [readz GetSamplePosl :
- property boo1 4utoS~ar-t-~read--FXt1toStart,\vrite-F.4t~t~St~1~,defat1lt-true~;
1 .
I .
class TWaLeVlew : public TGraphicControl