Universidad Autónoma Metropolitana lztapalapa C , 6 ’?1 Si S" Y t S S 4 Capitulo 1 : Generalidadcs El algoritmo: E~-rorCuadritico Medio Progatna de Adquisición y Filtraje 6 10 28 Objetivo e In Objetivo Introducción Capitulo 1: es Generalidades Error Cuadrático Medio Capitulo 1 : , . + Generalidades Fuera d e la PC - - * - - - * - - tl l T r I I ECM - ' - or Generalidades Cuadritico Medio x(n+ 11 +-a, €CM Flgura 3. Generalidades Error Cuadrdtico Medio 1 S Generalidades El código es el siguiente: 11" n-tamRllfPrc" 1 ; Error Cuadrático Mcdio ,Tiempo de Grabaci6n (segundos) = nillnero de Inucstr:is a procesar / 44100 10 Generalidades Programa de Adquisición y Filtraje 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,haciendoestocon el botón C'ompnror Grhficns; finalmente S C I I I YGuíficm I~ tlcl FC.Lf, guarda cada imagen en un archivo. 13 Capitulo 2: Pruebas y Resultados Pruebas y Resultados Para rcalizar las pruebas objetib.as se implementóuncircuito sencillo (unfiltro pasobajo), donde nuestra sefial de entrada, .t-(u), esta dada por un generador cle fincioncs. ii P r u e b a s y Resultados Objetivos Primera-Prueba - ~ ~ señal de frecuencia constante ~ ~ Pruebas y Resultados Objetivos 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 al ErrorCuadrático Medio deunapruebacorno la anterior, distingi9ndose las \ x i x i o n e s de enor cuando o c ~ ~ r run e movimiento en la frecuencia de l a sefial, sicndn estas las Ixiacioncs dej,(t1) por \,ol\.er a ser como tl(tr). 17 Pruebas y Resultados Objetivos IS Pruebas y Resultados Objetivos Tercera Pi-ueba ~- seíial cor1 efecto de sonido. _ _ " " I I _ _ _ I____. 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 grifica del ECM obtenida, mostr;lda a continmcicin: Pruebas y Resultados Subjet vos Esta pr-wba es de mal... :' complejidad que las anteriores, debido a la sefial de entrada, l a voz, en comparación a una señal de banda estrecha. Pruebas y Resultados Subjetivos I Ii I LI i!j Pruebas y Resultados Subjetivos Los resultados de ~ l n atercera grabacih son e.;tos: f I Conclusio Conclwiones El progranla h x h o en el proyecto entrn en las aplicaciones n1ultimedia, siendo estas u n conjunto de mediostecnológicosquenos s i n e n para lacomunicació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-ogramasinteractivosparaaprendi/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, l acostumbrada, pero al dar nnispresentación al ya que la forma de progran~ares a 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 herramientasque se pueden utilizar además de cumplir con el propósito de dar mis 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 ya existent<,debidoacomplicacionesposteriores y retrnin~cnieríasobreunatarjeta 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,secomenzótrabajandoen un Pentium I a 166hIhz, pero sucedía que seperdíanmuestras en las grabaciones, por lotanto, la 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 otra máquina que se encontraba en el mismo requerimientos del sistema. Usando laboratorio,Pentiurn I11 a SOOhlh;l, se logró llegar al cumplimiento de los objetivos, sin tener algiln problema. Bibliografía Filtro Lagguer: Ornar Amin, Fausto Casco, Mauricio Ihpez. N C N Cnscctcitt Acltrpteci F'init Impulse Respome (FIR). Filter. Internacional Conference, on signal proces ing application and technology. Boston, Ma. U S A , Octobcr '96. pp. 43-47. Anexos Para usar cl Programa de Adq~~isición y Filtraje los requisitos son: Dos tarjetas desonido, si son iguales se recomiendausarampliamente 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 lasiguiente figura: Dichas tarjetas de sonido deben de soportar grabaciones a 34100khr a 16bits, si no el programa podría ft~ncionar mal. 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, se tienen que ver como en l a figura siguiente: El mixitno nimero de muestras quc puede. grabar es de 1000000 logrando tictnpos de grabaci6n de aprosin~aclarnt.nte22 segundos. Puede trabajar hasta con 20 coeficientes. Anexos Notas al Programa de AdqL isición y Filtraje Anexos Progr tmas .. . . . . . . . . I . " . " " ~ . . ' . " . I . . ................ ....... l_"_. Los programas fueron elaborados sobre el compilador Borland Ct-k Builder 4.0. Los códigosdelprogramadeadquisiciónson 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 Programas Anexos numPolnts= O; I I 7 - 3 Anesos Programas Anexos ! Programas Anexos Programas I*********************"*********************~****~*********~*****~~***~~~:*~~**~~, !*Guarda los coeficientes dcl filtro en un archlbo de teyto */ i**********C***r**********~********~*********~~********~*******~*~*****~~~~~~; V O I ~ I ~ fastcall TcLLlS :SaI~aCoeficlentesClicl\iTObjccr'Sender) for(int ~-O:~<Ordcn_F~ltro:i+t) L~stCoetic~ente->ltem~-~Add(Coefic~ente[~]): . Anexos Programas Anexos Programas Anexos Programas Anexos "Lrrnpla los coeficientes y dc!i!;is bartables para reallrar PI ECM normal de los datos grabados */ ;*******r*r*********+*****************~****************r*****r***~*************/ cold p-fastcall TcLMS::FlltroNorrnal() El~-rorECLl[~l= EnorLhIS; 1 .,;en este momento ya tengo la salida del L.MS y todos !)loserrores producidos para hacer el ECM EC'h1(ErrorECbI); 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 class TcL\lS public 1'Form Medio(EC3fproceso.h) " Anexos Programas Anexos extern PACKAGE 'TcLbIS *cl.CfS; // """"_"_____________________________"""""""""~ """""""" #endif Código para presentar las grá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 n0a.ner) rnt* -~ : TForm(O\r.ner) I --"""__"_"_"_."."."."....."-".""""."....".."...".."_.. Anexos Progranlas Anexos Programas 47 Programas Anexos Códizo de Adqyisición de datos de " " " las tarjetas de sonido Programas Anexos TPropertyAttributes -fastcall TWavcInDe\iceIDProperty::Get.Attrlbutes() { TPropcrty.4ttnbutes pa; pa << paMultlSelect << paValueLlst << paRevertable << paRedOnly; return pa; v o ~ d-fastc;\Il TL~'a\.elnDevIceIDPropcrtL.GetValues(C1asses::TGetStrProcProc) 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 50 Anexos TAudioLlneParameters *asp-(TAudioLineParameters*)(GetOrdValue()); If (asp"NU1,L) throw new EPropertyError(".kdio stream parameters not found"); asp->Frequency-iFreq; asp->Channels=iChannels; asp->BltsPerSample-iBlts; Modified(); Programas Programas Anexos ............................................................................ 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)Dealloc.~tel~~Vnd(hControl~~'nd); hCoiltrol~~nd-~SULI~; 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 (int ¡=O;i<hlAY-IKTEREST~S, i i - t )I f (~nterest[~]-=NCLL) ipos-i; if (~pos---l) return; le; ~nterest[~pos]z 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) { If(op- -0pRerrme) I for (Int IFO; I<>l\.1.4XY_INTERESTS;I+) I if (EutractNot~f~Sub~ect(~nterest[i])"XComponent) ~nterest[i]-NUl~L~; TCornponcnt -Notificatlon(AConmponent,op), I Anexos Programas . Programas Anexos -'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 actlkado, ha siesta no llsto regresa una notlficaclón con un fallo *I .......................................................................... votd -fastcall TRecorder:ReadyForNextBuffer() If (!lsNe\tBufferReady) return; mt justDoneBuf-(ne\tBuf-linumnufs)%nilmBufs; Int nowWorklngOnBuf=.nextBuf; neutBiuf. (nextBuf~tl)%ntlmBufs; ~avelnUnprepare~Ieader(Har~,dle,5theader[no~~~orkingOnBu~,s~~eof(~~~~~~t~DR~); headerijustDoneRufj.lpData~ &pDu~ustDoneBtlfCsij.eBuF]; header~ustnonsBufj.d\~BufferLength~si7e headerijustDoneBuq d\\Flags-O; header~ustDonel3ufl.duLoops~ O; wavelnPrep~~rcHeadtr(~~andle,&header~t~stDoneBu~,si~eof(\~AVE~lDR)); waveln.~\ddRuffer(~la~ldle,&header~ustDoneBlt~,s~~eof(~'~~~EHD~)); So. that has dlspatched the one that the merw 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; Bu~unlSamples=Bt~~u~~By~es*8,(Qual~ty-~Channels*Quality-~B~tsf'erSample); Anexos 55 Anexos Programas . vold --fastcall TWa\eVicw:.InterestProc(TObject 'Sender, TRecorderReason rr) I I f ( r r - ~ rrData) :if (nFrame>- SklpFrames) ( S a m p l e ( S o u r c e ) : n f r ~ n l eelse ~ ~ ;nFrame--~ ;I .. Anexos Programas Anexos -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 -property "property H W A V E I N Handle= iread-GctHandle) ; boo1 isStarted- (read--FlsStartcd}; HAhDLE hEbent- (read--FHEvent,\rrIte~Set~~~~ent); I, -property boo1 IsNestRufferReady= jread-GetlsNestRufferRea~y~; il to say that you're done wlth the prevlous buffer and are non ready vold __ fastcall vlrtual ReadqForScutRuffer(); io use this one Only for threaded model. property lnt lData[lnt BYTE *bData: WOKD *\\Data; rnt ButSumBqtes; -p 11:- (read-GetlDataJ; rnt B u ~ u n l S m p l e s ; I/ \old pfastcall \ ~ r t t ~ aAddIntercst(TRecordeI-Notificatior1 I 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¡e), l~c~~t~~n 'I -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,~ntbits); lni -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 I