1 Problemanalyse Unified Modeling Language Problemformulering... 4

Størrelse: px
Starte visningen fra side:

Download "1 Problemanalyse Unified Modeling Language Problemformulering... 4"

Transkript

1 Indhold 1 Problemanalyse Unified Modeling Language Problemformulering Designfase Design af filtre Frekvensområde og opdeling i frekvensbånd Udregning af knækfrekvenser Program til udregning af knækfrekvenser Båndpasfiltre til analyzer Digital filterdesign Design af software Softwaredesign Fejlhåndtering CExternal System V IPC Tilfældet CExternal Test CSound Behandling af data til CSoundCard Afspilning af pink noise Fejlhåndtering Testramme for funktionerne Interface til lydkort Initialisering af lydkort Afspilning og optagelse Test CAnalyzer Båndpasfiltrenes RMS-værdier

2 2 Indhold Returnering af RMS-værdier Fejlhåndtering Testramme for funktionaliterne Implementering af filtre Test af CFilter Den grafiske brugerflade Qt Projektets grafiske brugerflade CButton GraphWindow Kodning af en speciel Qt widget CSliderWindow CPlayWindow Figurer der mangler at blive indsat Konklusion 40 5 Nomenklaturliste 41 A Mikrofon 42 A.0.1 Forsøg i lyddødt rum B Apparaturliste 45 C Komponentliste 46

3 1 Problemanalyse Projektoplægget til dette projekt henvender sig bl.a. til computerentusiaster og -interesserede, der ønsker den bedst opnåelige lyd fra en PC. Dette mål kan nås vha. et system bestående af en analyzer og en equalizer, hvorigennem frekvensindholdet i lyden korrigeres. Systemet vil være til gavn for såvel afspilning af musik og film som lyd fra spil, da systemet giver en bedre lydoplevelse for brugeren. Om systemet skal bestå af hardware og software eller være ren software er afhængigt af markedsefterspørgsel, men da PC er efterhånden bliver kraftigere og har en større ydeevne, vil det være fordelagtigt, at det er et software system, idet systemsintegration er mere enkelt end, hvis det er et system delvist af hardware og software. En ren softwareløsning kræver kun installation af et program, hvorimod en ny hardwareenhed kræver installation af såvel et program som tilslutning af en ekstern eller intern enhed. Idet Gruppen og dens medstuderende, som computerbrugere, vil være en del af målgruppen for produktet, vil det være nærliggende at opsætte kriterier for kravene udfra denne mindre gruppes ønsker til system funktioner. Til opstilling af kravene benyttes det objektorienterede designsprog, UML Unified Modeling Language UML anvendes til design af systemer, hvor der tid, arbejdskraft og succes er væsentlige faktorer for udviklingen og konstuktionen, da der med en godt UML-analyse og -design foreligger muligheden for elimeneringen af spildtid. Desuden skaber UML det fornødne overblik i projektarbejdet med henblik, således projektet former og antager de bestemte egenskaber og opfylder de fastsatte kriterier for systemet. Gennem et UML-forløb analyseres systemet, der ønskes konstrueret, først, hvorefter der foretages et design af indholdet i analysen. Udgangspunktet for analysen af problemet, og det efterfølgende design af systemet er en række Use-cases. En use-case er et værktøj der benyttes i samarbejde med en kunde, og bruges til at finde krav til et system ud fra brugerens synspunkt, og uden nogen forhåndsviden om den efterfølgende implementation. Use-cases stilles typisk op i tekstform ud fra kundernes udsagn om hvad de ønsker fra systemet. I projektgruppen fandtes følgende use-cases: Brugeren trykker på en knap og det måltes frekvensgang reguleres efter den ønskede frekvensgang. Brugeren skaber den frekvenskarakteristik han ønsker højttaleren (og rummet) skal have i målepunktet. 1 Unified Modeling Language

4 4 Problemanalyse Brugeren trykker på en knap og får vist højttalerens (og rummets) frekvenskarakteristik (ved mic. placering). Brugeren trykker på en knap og får grafisk præsenteret det måltes frekvensindhold i realtid. Brugeren skal kunne afspille lyd, således at det behandles gennem equalizeren. De fundne use-cases tegnes ind i et use-case diagram, som ses i figur??. Denne type diagram viser de enkelte use-cases, indkapslet i det system de tilhører, samt deres forbindelse til eksterne aktører. Aktører er i denne sammenhæng alle brugere eller systemer der kommunikerer med det analyserede system. To undersystemer, analyzeren og equalizeren, er ved udarbejdelse af use-case diagrammet blevet defineret, og de fem usecases er blevet samlet i systemet GUI 2, da det er dette undersystem brugeren ser. Andre use-case diagrammer for undersystemerne analyzer og equalizer vil blive udarbejdet under design. Som accepttest, for at bestemme om systemet senere opfylder de stillede krav, vil de enkelte use-cases blive gennemløbet. Hvis en given use-case, i tekstform, er sand for det konstruerede system, betragtes testen som bestået. 1.1 Problemformulering Problemet som gennem projektet skal løses kan formuleres som følger: Hvordan opbygges et system der kan kompensere for dårlig lyd i (multimedie-) højttalere? 2 Graphical User Interface

5 2.1 Design af filtre 2 Designfase For at analysere signalets frekvensindhold, sendes dette gennem et givet antal båndpasfiltre. Antallet af filtre, og båndpasbredden bestemmes af frekvensområdet der analyseres i, og båndopdelings-metoden Frekvensområde og opdeling i frekvensbånd Det hørbare område strækker sig fra 20 Hz til 20 khz[*note *], hvorfor dette frekvensområde vælges. Opdeling i frekvensbånd foretages efter konstant procentopdelt båndbredde, det vil sige, at båndbredden udgør en konstant procentdel af den enkelte centerfrekvens. Båndbredden opdeles efter oktav-princippet, dette medfører en logaritmisk frekvensskala, hvilket er i overensstemmelse med den måde, hvorpå det menneskelige øre hører. Den procentdel af centerfrekvensen som båndbredden udgør, bestemmes efter følgende formel: 2 1 N (2.1) litt. henvisning!!!, hvor 1 N angiver båndbredden i oktav. Ofte benyttede båndbredder:1 1, 1 3, 1 12 og 1 24 oktav. (?) Udregning af knækfrekvenser Ifølge afsnit XX[*Note *] skal der kunne vælges et vilkårlig antal bånd. Dette løses ved at angive 1 N oktav båndbredde som input til et program, der opdeler frekvensområdet i F antal Bånd. Desto højere værdi, der påtrykkes N desto højere F, hvormed opløsningen i frekvensområdet øges. fra samme program returnerer samtlige knækfrekvenser i frekvensområdet. ref til noget krav/design Program til udregning af knækfrekvenser Der tages i programmet udgangspunkt i en centerfrekvens på 1000Hz og 1 1 oktavs båndbredde. Udfra disse og båndbredden 1 N findes de resterende centerfrekvenser f C_x i frekvensområdet således (se figur 2.1): f C_x f C_D 2 x 1 N (2.2)

6 6 Designfase 1/1 oktav båndbredde N N N 1/N oktav båndbredde x 1/N oktavs centerfrekvenser f C_x Hz D 1/1 oktavs centerfrekvenser f C_D Hz Figur 2.1: Forhold mellem opdeling i 1 N og 1 1 oktav båndbredde., hvor f C_D D D udgør de forskellige 1 1 oktavs centerfrekvenser, og x N angiver opdeling i de nye 1 N oktavs centerfrekvenser f C_x imellem de to tilhørende 1 1 oktavs centerfrekvenser (se figur 2.1). Der gives følgende tal-eksempel ved D 0 x 2 og 1 3 oktav: f C_x Hz Udfra de fundne centerfrekvenser f C_x beregnes de tilhørende knækfrekvenser efter en modificeret version af udtrykket 2.1. Udtrykket, der er fremyndet gennem studier af figur 2.1, opdeles i to algoritmer; f HP for nedre knækfrekvens og f LP for øvre. f HP 2 1 N 2 f C_x (2.3) f LP 2 N 1 2 f C_x (2.4) Båndpasfiltre til analyzer Signalets frekvensindhold findes ved at anvende en række båndpasfiltre på signalet for at opdele dette i række frekvensbånd som omtalt i afsnit?? og frem, hvorefter RMS niveauet svarende til energien findes for hvert bånd.

7 Design af filtre 7 db 0 3 Hz f HP f C_x f HP f LP f C_x f LP f HP f C_x f LP Figur 2.2: Filtrenes overlapning. Båndpasforstærkningen skal være 0 db og ved øvre og nedre knækfrekvens skal forstærkningen være faldet til 3dB således at summen af båndpasfiltrenes overføringsfunktioner er 0 db. Filtersummen vil afvige fra 0 db idet nabofiltrene vil overlappe og derved give et yderligere bidrag. Størrelsen af dette bidrag afhænger derfor af filterordnen og båndbredden. Således at en højere orden og større båndbredde giver en mindre afvigelse. Filtreordenen kan bestemmes ud fra krav defineret i anderkendte standarder f.eks DIN. Idet analyseren skal køre i realtid kræves det at de implementerede digitale båndpasfiltre kan procesere en sample og beregne RMS hurtigere end 1 f s. Dette betyder at filterorden og antal filtre begrænses af maskinens regnekapacitet. Idet båndpasfiltrene skal være symmetriske skal høj- og lavpas filtrene være af sammme orden, dette medfører at båndpasfilterets orden altid vil være lige. Der ønskes maksimal fladhed i pasbåndet, hvilket betyder at typen skal være af Butterworth. Dette svarer til at filterets poler ligger på en cirkel med radius Ω 0 og er fordelt lige i s-planets venstrehalvplan som skitseret på figur 2.3 på den følgende side. Det generelle Butterworth lavpasfilter af N te orden hvor pasbåndsforstærkningen er 0 db kan udtrykkes som formel 2.5. H l p s Θ N Ω 0 s Ω 0 e jθ (2.5) n 1 π 2n 1 2N π 2 Af beregnings grunde opdeles det generelle Butterworth filter af N te orden i en række 2. ordens filtre med komplexkonjugerede poler samt et 1. ordens filter ved ulige filterorden. En kaskadekobling af disse 1. og 2. ordens sektioner vil give det ønskede Butterworth filter. Generelt 2. ordens filter i frekvensdomænet med Laplace operatoren s.

8 8 Designfase a b Figur 2.3: a) 2. orden og b) 3. ordens polplacering i s-domænet H 1 H 2 P Ω 0 e jθ a Ω s 0 s P s s P Ω 2 0 jb Ω 0 s Ω 0 s P Ω 2 0 s 2 2Ω 0 cos Θ s Ω 2 0 s 2 2as a 2 Ω 2 0 b 2 (2.6) Eksempel på et 5. ordens lavpas filter som skal indgå i et 10. ordens båndpasfilter. H l p s Θ n Θ 1 Θ 2 Ω 2 0 s 2 2Ω 0 cos Θ 1 s π 2n 1 π π π 144 Ω 2 0 Ω 2 0 s 2 2Ω 0 cos Θ 2 s Ω 2 0 Ω 0 s Ω 0 (2.7) TODO?: Bestemmelse af minimum filterorden for eks. 1 og 1/3 oktav bp-filtre Digital filterdesign Udfra filtrets overføringsfunktion i det analoge s-domnæne skal dette z-transformeres. Dette kan gøres ved matched, impuls invariant eller bilineær z-transformation. I denne situration anvendes bilineær z-transformation for at udgå aliasing. Aliasing er et problem for de øvre båndpasfiltre som ikke er væsentligt dæmpet ved den halve samplingsfrekvens. Dette vil medføre en amplitude karakteristik som afviger væsentligt fra det analoge prototype filter.

9 Design af software 9 Bilineær z-transform: Ved at anvende denne transformation undgås aliaserings fejl og er derfor den beste tilnærmelse til det prototype filtret. Ved denne transformation erstates s i teorien af formel 2.8 men da ln ikke er på lukket form laves en rimelig tilnærmelse. s s 1 lnz (2.8) T d 2 T d 1 z 1 1 z 1 (2.9) Ved transformationen bliver venstre halvplan i s domænet kortlagt i z domænet inden for enhedscirklen, således bliver Ω til π ω π. Dette betyder at den analoge frekvens Ω bliver komprimeret og derfor er det nødvendigt at udføre en prewarp af knækfrekvenserne for at rette op på frekvenskarakteristikken af de digitale filtre. ω 2arctan ΩT d 2 (2.10) De fundne 1. og 2. ordens sektioner z-transformeres individuelt idet koeficienterne umiddelbart kan beregnes udfra formler udledt fra det generelle frekvens normerede 1. og 2. ordens filter i s-domænet. De digitale filtre er implementeret i C++ højniveau software og derfor er der ikke noget krav fra dedikeret DSP hardware om en given filter struktur. For at minimere mængden af lokal hukommelse til båndpasfiltrene er det samlede filter udregnet således at differensligningen for filtret kan implementeres på en enkelt programlinie. y n a 0 y n a 1 y n 1 b 0 x n 1 b 1 x n 1 RMS værdien skal findes for hvert udgangssignal fra båndpasfiltrne. RMS værdien er et kvadratiskgennemsnit for signalets niveau over perioden T. RMS værdierne skal præsenteres grafisk på analyserens brugerflade og skal derfor opdateres med en rimelig hastighed så brugeren af analyseren kan danne sig et korrekt indtryk af signalet. RMS 1 T T y n 2 n 0 (2.11) 2.2 Design af software [*Note *] skal de private metod (cleanup)

10 10 Designfase sendsignal() Trigger fra knap eller objekt. Benyttes til at starte forløb i et andet subsystem (analyzer/equalizer eller GUI). (er ikke sikker; flag, semaphore, messagequeue etc.). receivesignal() Signal fra sendsignal(). Modtager startsignal fra andet subsystem (analyzer/equalizer eller GUI). Metodekald. senddata() data:short[], target:short. Sender data fra et subsystem til et objekt (target:short) i et andet. (Kald til subsystem) data:short[], target:short receivedata() data:short[], target:short. Modtager data fra andet subsystem og foretager et metodekald ud fra target. Metodekald samt data:short[] getstatus() Henter aktuel status for system currentstatus:short setstatus() short fra knaptryk eller receivesignal() i CExternal Opdaterer currentstatus:short Tabel 2.1: Metodespecifikation for CExternal.

11 Design af software 11 quit() Tryk fra bruger på GUI-knap Sender signal til analyser/equalizer om at lukke processerne og lukker GUI Kald af sendsignal i CExternal og close showspkchar() Tryk fra bruger på GUI-knap Sender signal til analyser/equalizer om at vise højttalerens frekvenskarakteristik Kald af sendsignal og setstatus i CExternal showrtfreq() Tryk fra bruger på GUI-knap Sender signal til analyser/equalizer om at vise frekvensindholdet i realtid Kald af sendsignal og setstatus i CExternal correctspeakers() Tryk fra bruger på GUI-knap Sender signal til analyser/equalizer om at starte korrektionen af højttalerne Kald af sendsignal og setstatus i CExternal playsong() Tryk fra bruger på GUI-knap Sender signal til?????? Kald af sendsignal i CExternal og setstatus stopplaying() Tryk fra bruger på GUI-knap Sender signal til?????? Kald af sendsignal i CExternal og setstatus storewanted() Tryk fra bruger på GUI-knap Sender signal til?????? Kald af sendsignal i CExternal og setstatus setdefaults() Tryk fra bruger på GUI-knap Sender signal til?????? Kald af sendsignal i CExternal og setstatus setstatus()????? Sender signal til?????? Kald af?????? fetchstatus()????? Sender signal til?????? Kald af????? Tabel 2.2: Metodespecifikation for CButton.

12 12 Designfase playnoise() Afspiller en fil med pink noise outputsound() Sender data fra sound:signed short[] til CSoundCard Tabel 2.3: Metodespecifikation for CSound. getipointer() Henter pointer til inputbuffer signed short* getopointer() Henter pointer til outputbuffer signed short* getbufferlength() Henter in- og outputbuffernes længde int init() int bits, int sampling_frequency Initialiserer lydkortet start() Sætter lydkortet i gang med at afspille og optage pause() Pauser afspilning og optagelse stop() Stopper afspilning og optagelse cleanup() int err Lukker lydkortet, unmapper mapped memmory og kaster en fejlbesked Tabel 2.4: Metodespecifikation for CSoundCard.

13 Design af software 13 findrms() filteredseq:signed short[] Bestemmer RMS værdien af en lydsekvens rmscoeff:*char returnrms() Returnerer rmscoeff[] til brug ved grafgeneration. rmscoeff:char[] Tabel 2.5: Metodespecifikation for CAnalyzer. calcdiffkvot() correctedcoeff:double[] Finder forholdet mellem målt energi og energi i pink-noisefilen i de enkelte bånd diffkvot:double[] fetchwanted() Henter ønsket frekvenskarakteristik fra filen <slidervalues> wantedfreqchar:double[] subwantedfromdiff() diffkvot:double[], wantedfreqchar:double[] Beregner og gemmer forskellen mellem den ønskede frekvenskar. og den faktiske i bandamp:short[] og filen <bandamp>. fetchbandamp() Henter båndpasforstærkninger fra filen <bandamp> og gemmer i bandamp:short[] Tabel 2.6: Metodespecifikation for CEqualizer. drawgraph() coeff:double[] Tegner analyzer-graf ud fra modtagne værdier. getcoeff() Koefficienter fra CExternal gemmes i coeff:double[] Tabel 2.7: Metodespecifikation for CGraphWindow.

14 14 Designfase storewanted() Gemmer aktuelle sliderindstillinger i filen <slidervalues> fetchwanted() Henter ønsket frekvenskarakteristik fra filen <slidervalues> double[] Tabel 2.8: Metodespecifikation for CSliderWindow. setsliders() Indstiller sliders; hvis kaldt uden parameter nulstilles sliders og værdierne i filen <slidervalues> fetchsliders() Returnerer aktuelle slider-værdier. double[] Tabel 2.9: Metodespecifikation for CSlider. filtersamples() Filtrerer en række samples, hentet med getsequence i CSound fetchseq() sound:signed short[] Returnerer de filtrerede sekvenser signed short[] Tabel 2.10: Metodespecifikation for CFilter.

15 3.1 Fejlhåndtering 3 Softwaredesign I C++ findes en indbygget mekanisme til fejlhåndtering kaldet exception handling. Via exceptions kan et objekt, der fejler, informere sig selv eller andre i stakken højere placerede objekter om fejlen. Afhængigt af fejlens betydning for afviklingen af hovedprogrammet i main, er exception handleren i simple tilfælde placeret i det fejlende objekt og i mere alvorlige tilfælde i main; typisk dog i main. Exception handling er opbygget omkring brugen af try, throw og catch. I selve objektet indsættes throw-kommandoen på de steder i metoderne, hvor der ønskes en fejlhåndtering. I hovedprogrammets main pakkes de dele af metodekaldene, der ønskes kontrolleret for exceptions, ind i try s klammer. Og slutteligt forefindes catch i main til at opfange de afsendte exceptions fra metodekaldene indkapslet i try. For at sofistikere fejlhåndteringen kan de enkelte exceptions bestå af specifikke argumenter såsom brug af metoder. Tilsvarende opfanges specifikt de enkelte fejlobjekter, og på denne måde kan en præcis fejlbeskrivelse inddelt i forskellige fejlområder håndteres og forevises brugeren. Der findes mange forskellige måder at opbygge fejlhåndteringen på, og den i dette projekt benyttede fejlhåndtering baserer sig på brugen af klasser. Der er således oprettet følgende fire overordnede klasser: GUIErrors. AnalyzerErrors. EqualyzerErrors. MiscErrors. GUIErrors omfatter exceptions fra GUI, og disse vil blive behandlet udelukkende i GUIens egen exception handler, da GUI kører som et selvstændigt program. De resterende omfatter exceptions fra AnalyzerEqualizer-programmet, og indgår således i dette programs fejlhåndtering. Fælles for alle fire klasser er, at der udskrives fejlbeskeder både via GUI og via en konsol, da dette sikrer, at fejlbeskeden når frem. Om nødvendigt giver tekstboksen mulighed for, at brugeren skal tage stilling til hvordan fejlen skal håndteres. Der vil være specialtilfælde, hvor eksempelvis de to hovedprogrammer ikke kan kommunikere, hvilket gør at der ikke kan udskrives en fejlbesked via GUI.

16 16 Softwaredesign Følgende eksempel viser et exception throw fra metoden makeerror(), der programmæssigt er placeret under Analyzer en, hvorfor fejlbeskeder fra denne hører under klassen CAnalyzerErrors. Exception-objektet kommer med to argumenter, hhv. fejlnummeret 1 og en specifik fejlbesked, der i dette tilfælde fortæller brugeren hvilken metode, der fejlede. CmakeError::makeError() {... if(error=1){ throw CAnalyzerErrors(1,"makeError() has made en error!"); }... } Den praktiske opbygning er, at der til main i de to hovedprogrammer er knyttet en fejlhåndteringsfil kaldet CErrors.cpp med en tilsvarende h-fil. Denne indeholder alle fejlhåndteringer, og objekterne oprettes fra main når en exception er opfanget. Et eksempel på et catch med efterfølgende kald af exception handling er: CmakeError err; try /**:INFO: This is the method we want to * test for errors while running. */ { err.makeerror(); } /**:INFO: Here we will catch the specific * errors coming from the CmakeError instances */ catch(canalyzererrors errorinstance){ CErrors pass_to_handler; pass_to_handler.analyzererrors --> (errorinstance.errornumber,errorinstance.errorstring); } I dette eksempel er der tale om, at et objekt af klassen CmakeError fejler med en exception af klassen CAnalyzerError. Dette objekt oprettes med udgangspunkt i følgende fejlhåndtering, som for eksemplets skyld er simpel og udelukkende håndterer fejlen ved, at udskrive fejlbeskeden til hhv. GUI og konsol: CErrors::AnalyzerErrors(int error,string s1) { CExternal outputgui1(analyzererror); CExternal outputgui2(analyzer); switch(error) { case 1: /** :INFO: Writes output to console */ /** :INFO: Standard text for the specific error * number plus the number is written to cout. */

17 CExternal 17 cout << "GUI error number " << error << ":" << endl; /** :INFO: Specific text from the thrown * exception is written to cout. */ cout << s1 << endl; /** :INFO: Writes output to GUI */ outputgui2.sendsignal(error); outputgui2.senddata((char*)s1.c_str()); break; } default: break; } Udskrivning til konsollen er simpel og ligefrem. Ved udskrivning til GUI oprettes derimod et objekt af CExternal med en parameter ANALYZER for at angive, at det er en fejl fra Analyzeren. Derudover benyttes som tidligere fejlnummeret og den specifikke fejlbesked. Selve håndteringen af dette objekt tilhører ikke dette afsnit. For overskuelighedens skyld, er der her ikke inkluderet al koden, og eksemplet er som nævnt et eksempel på opbygningen. Selve implementeringen kan ses i appendiks [*Note *] hvilket appendix indeh den? 3.2 CExternal Klassen CExternal varetager kommunikation mellem de to processer systemet gennem analyse- og designfasen er blevet opdelt i. Denne kommunikation består af to ting: Signaler og data. Signalerne benyttes til at markere hvornår en af processerne skal starte en sekvens af metodekald, for at opfylde kravene fra en specifik usecase. Under behandling af samme usecase opstår behovet for at sende data imellem processerne. Den grafiske brugerflade skal f.eks. have returneret værdier til brug for at tegne analyzer-grafen. For at muliggøre kommunikationen kan findes under Linux (og nogle Unix-systemer) benytte System V IPC 1. System V IPC er en samling af en række systemkald, som stiller følgende værktøjer til rådighed ved kommunikation mellem processer: Semaphores. Shared memory. Message queues System V IPC Semaphores Semaforer er en mekanisme der tillader styring af hvordan forskellige processer afvikles. En proces kan sættes i stå mens den venter på at en semafor får en bestemt værdi, og 1 Inter Process Communication

18 18 Softwaredesign bruger således ingen ressourcer inden dette sker. Andre processer (eller evt. andre tråde i samme proces) kan derefter sætte semaforen, hvorefter afvikling af processen tages op igen. Koordineringen af semaforerne, og de processer der afhænger af semaforerne, varetages af styresystemet, der opretter og vedligeholder en kø der indeholder de aktive semaforer. Delt hukommelse Delt hukommelse (eng. shared memory) er som navnet antyder, et stykke hukommelse som flere processer har adgang til. Ved brug af et eller flere sådanne områder, og med den rette koordinering, kan processer dele data i begge retninger. Koordineringen kan f.eks foregå ved at sætte flag direkte i den delte hukommelse, og polle på disse, eller ved brug af de førnævnte semaforer, hvorved man undgår at polle, og derfor sparer systemressourcer. Message queues e 4kB? Dave? Det tredje værktøj der stilles til rådighed via. System V IPC er message queues. En message queue kombinerer egenskaber fra de to andre værktøjer, og kan således bruges både til styring af andre processers afvikling, og til udveksling af data. En besked sendes som en struct i C++, og kan, ud over en obligatorisk beskedtype, indeholde så mange forskellige datatyper som man har brug for, så længe den samlede mængde ikke overskrider 4 kb[*note *]. Beskedtypen kan i modtagerenden benyttes til at foretage prioritering af beskederne, til at udvælge specifikke beskeder, eller den kan ignoreres, hvilket bevirker at den første besked i køen, uanset type, modtages. Det skal bemærkes at en beskedkø ikke virker efter FIFO 2 princippet. Ved prioriteret modtagelse kan det altså lade sig gøre at tage den sidst ankomne besked ud af køen, hvis den matcher kriterierne bedst Tilfældet CExternal [*Note *] For at løse de opgaver CExternal skal løfte, kan enten en kombination af de to før- ste værktøjer, semaforer og shared memory, eller det sidste værktøj, message queues, benyttes. Da message queues kan håndtere både den indbyrdes styring, der her kaldes signaler, og overførsel af data, vælges denne løsning. Der skal i CExternal-klassen findes tre sæt metoder: sendsignal og receivesignal, der står for den indbyrdes styring mellem processerne, senddata og receivedata, der som navnene antyder, håndterer dataoverførsler, og senderrortype og receiveerrortype, der tager sig af fejlhåndteringens kommunikation mellem GUI og AnalyzerEqualyzer. Følgende afsnit gennemgår implementationen af disse tre metodepar i forhold til brugen af beskedkøen som værktøj. skrift? 2 First In, First Out

19 CExternal 19 Styring Signalerne der skal flyttes med sendsignal og dennes modpart benyttes til at starte sekvenser af metodekald, der svarer til de usecases projektet fra starten er baseret på. Den eneste information der er nødvendig at sende med en besked i sendsignal er således en identifikation af den sekvens der skal startes. Denne gives i sendsignal som et nummer, og den overførte datastruktur består derfor af en long mtype der angiver beskedtypen, og en int signal der identificerer den ønskede sekvens.afhængigt af om CExternals constructor kaldes med parameteren GUI, parameteren ANALYZER, GUIERROR eller ANALYZERERROR sættes sendsignal til at sende beskeder af typen 1, 2, 3 eller 4. Modsvarende sættes receivesignal til at modtage beskeder af typerne 4, 3, 2 eller 1. Alternativt kunne metoderne være opbygget med prioriteret modtagelse, hvorved den anden del af datastrukturen, int signal, kunne spares. Dette kunne dog bevirke at den ene af processerne, hvis denne foretog et receivesignal kald efter et sendsignal, og før den anden proces, ville modtage sin egen besked. Den førstnævnte implementation blev derfor foretrukket. Dataoverførsel Metodeparret senddata og receivedata har som hovedfunktion at returnere de udregnede værdier der skal bruges til at tegne analyzergrafen på den grafiske brugerflade. Der er tale om en række talværdier, svarende i antal til de implementerede filtre. For at overføre denne række af værdier benyttes et array af typen char. Dette giver mulighed for en opløsning på grafens værdiakse på op til 256 punkter. Det skal bemærkes at værdien af en char kan ligge mellem 128 og 127, hvorfor det vil være nødvendigt at lade metoden findrms i klassen CAnalyzer returnere værdier mellem disse to grænser. Metoden receivedata skal returnere den data der modtages til en kaldende funktion. Hvis man i C++ returnerer et array fra en metode, får man reelt en pointer til adressen på dette array. Da metoden afsluttes ved kaldet af return, frigives den benyttede memory imidlertid, og den returnerede pointer er ikke længere brugbar. For at omgå dette problem oprettes et privat array i klassen, og en pointer til dette returneres. Da de to oprettede CExternal objekter ikke lukkes ned før hele programmet afsluttes, vil denne pointer også være brugbar uden for objektet. Metodeparret senderrortype og receiveerrortype fungerer i hovedtræk ligesom send- Data og receivedata, men har til formål at sende informationerne om fejltypen samt en specifik fejlbesked mellem AnalyzerEqualyzer og GUI. Fejlhåndteringen omtales yderligere i afsnittet Fejlhåndtering 3.1 på side 15. Fælles for alle metoderne er, at de med funktionen msgget opretter en message queue første gang de bliver kaldt. Køen får for Signal nøglen 0xCAFE, for Data nøglen FACE og for Error nøglen FEAC [*Note *]. Findes en kø med samme nøgle i forvejen, får msgget ingen betydning. De oprettede message queues skal nedlægges med funktionen msgctl, med kommandoen IPC_RMID ved programmets afslutning. Denne oprydning skal ligge i hhv. main-funktionen i den grafiske brugerflade, og main-funktionen i analyzer-/equalizerprogrammet. bør skrives til i fejlhånd snittet i stedet

20 20 Softwaredesign Test For at teste de metoder CExternal indeholder, benyttes to små testprogrammer, testramme1 og testramme2. De to programmer opretter hver især et CExternal objekt, i testramme1 med parameteren ANALYZER, og i testramme2 med parameteren GUI, hvorved de to seperate processer i projektet simuleres. I hvert testprogram oprettes herefter to message queues, med hhv. nøglerne 0xCAFE og 0xFACE. I testramme1 kaldes send- Signal, og i testramme2 kaldes receivesignal. Denne sekvens gentages i den modsatte retning, og de modtagne signaler skrives til cout. Samme fremgangsmåde gentages for senddata og receivedata, med et array af characters oprettet til formålet. Til slut nedlægges de oprettede message queues, og de to programmer afsluttes. Testen forløb tilfredsstillende, CExternal anses for afsluttet og tages i brug i de andre klasser. 3.3 CSound Klassen CSound varetager fortolkning af instruktioner fra CPlayWindow og internt i klassen, til brug ved forsendelse af lyddata til CSoundCard. Funktionen består i modtagelse af instruktioner fra CPlayWindow og playnoise, der henholdvis er i GUI og klassen selv. Instruktionerne fra CPlayWindow kalder outputsound med parameteren const char, hvori stien til lydfilen er defineret, som skal håndteres og videresendes. Instruktionen for playnoise består i kaldet med en statisk sti til filen for pink noise Behandling af data til CSoundCard Afspilning af pink noise Ved korrektion af højttalerne skal der afspilles et kendt signal, der dækker hele frekvensområdet for mikrofonen. Til dette formål anvendes pink noise, men white noise kan også anvendes, hvor gengivelsen af pink noise sker ved afspilning af en wave-filer, som skal ligge i samme mappe som filerne for klassen. Af hensyn til kaldet af filen skal det sikres, at filens placering er korrekt. Idet kaldet af playnoise vil fejle, hvis filens placering ikke stemmer overens med stien angivet i koden. /** :INFO: Play a pink noise file through outputsound */ CSound::playNoise(){ } /** :NB: Make sure the file "pink.wav" is placed in * the same directory as the CSound.* files */ CSound noise = CSound(); noise.outputsound("pink.wav");

21 Interface til lydkort Fejlhåndtering Testramme for funktionerne 3.4 Interface til lydkort En instans af klassen CSoundCard ligner ikke et typisk objekt med en række instansvariable og metoder til at manipulere disse - i stedet er objektets primære formål at styre lydkortets optagning og afspilning. For at tilgå lydkortet anvendes en driver. Der er til linux/unix lavet et sæt drivere, der giver et ensartet API 3 kaldet OSS 4. Det er således muligt at tilgå et givent OSSkompatibelt lydkort i en computer kørende linux med de samme kald; programmet der implementerer disse er således portabelt. Ud over OSS findes ALSA 5, der giver mulighed for flere avancerede funktioner, men da disse ikke er nødvendige i dette projekt, og da OSS er den standard der pt. er til linux, anvendes ALSA ikke. Til at understøtte kodningen af CSoundCard anvendes de to internetsider (?) og (?) samt et konkret kodeeksempel af Søren K. Olesen. [*Note *] For at være i stand til at optage og afspille skal man kunne: skal søren nævnes her? Initialisere lydkortet. Skrive til og læse fra lydkortet Initialisering af lydkort Lydkortet sættes op med en række ioctl-kald; ioctl-funktionen manipulerer med et givent device s parametre - se manualsiderne for ioctl[*note *]. I disse sider står ok? int ioctl(int d, int request,...); hvor d er file descriptor 6, og hvor request fortæller hvilke parametre, der skal ændres (de forskellige requests anvendt kan findes på internetsiderne (?) og (?)). Det sidste felt kan bruges til at fortælle, hvordan parametrene skal ændres. Et eksempel på brugen af ioctl er ved opsætning af bitopløsningen: int actual_value = bits; if(ioctl(audio_fd, SNDCTL_DSP_SAMPLESIZE, &actual_value) == -1) clean\ Up(0x0030); if(actual_value!= bits) cleanup(0x0031); 3 Application Programming Interface 4 Open Sound System 5 Advanced Linux Sound Architecture 6 Et systemspecifikt nummer der bruges til at identificere den åbne fil for systemet

22 22 Softwaredesign Her forsøges bitopløsningen (eller sample-størrelsen) sat til actual_value. Hvis det ikke er muligt at sætte en bitopløsning, returnerer ioctl -1. Efter bitopløsningen er sat, kontroleres om det er den rigtige opløsning der er sat (da actual_value videregives som en reference, er ioctl i stand til at ændre dens værdi). Sker der en fejl under initialiseringen, lukkes lydkortet og der kastes en fejlbesked. På lignende vis sættes andre parametre for optagelse og afspilning: Fuld duplex 7 Bitopløsning: 16 bit sample 2 kanaler (optagelse og afspilning) Samplingsfrekvens: 44 1 khz Afspilning og optagelse er det: optagelse, op- vnt før? [*Note *] Efter lydkortet er sat op, er det muligt at begynde at optage og afspille lyd. CSoundCard er lavet således, at det er muligt at hente pointerne til optagebufferen og til afspillebufferen samt længden af bufferne; længden er det halve af størrelsen, da hver sample er to bytes stor. Der anvendes et såkaldt[*note *] dobbeltbuffer-system (to buffere i indgangen og to i udgangen), hvor det er muligt for applikationen at læse/skrive til den buffer, lydkortet ikke er i gang med at bruge. En illustration af dette ses på figur 3.1 Hvis man anmoder CSoundCard-objektet om pointere til input- og output-bufferen, IN B1 B2 in_ptr1 lk_in_ptr in_ptr2 OUT B1 B2 out_ptr1 out_ptr2 Figur 3.1: Dobbeltbuffer-systemet kontrollerer objektet først, hvor lydkortet er i gang med at skrive og læse fra (lk_in_ptr). Derefter returneres pointere til starten af de ubenyttede buffere (in_ptr2 og out_ptr2). Anmodes om pointere til input- og output-bufferen hvor lk_in_ptr stadig er ved B1, venter objektet med at returnere pointerne in_ptr1 og out_ptr1, indtil lydkortet begynder på B2. Da lydkortet læser og skriver fra/til input- og output-bufferen med det samme offset fra begyndelsen af bufferne, og da bufferne har samme længde, er det nok bare 7 Mulighed for at optage og afspille på samme tid.

23 Interface til lydkort 23 at bestemme hvor lydkortet skriver i inputbufferrummet for at returnere en pointer til inputbufferen og outputbufferen. Dataene til lydkortet er formateret som vist på figur 3.2. Et standard konsumer-lydkort 16 bit L R L R L R n = 0 n = 1 Figur 3.2: Således er data til lydkortet formateret anvender little endian-formaterede 16 bit samples. På en x86-maskine kan således anvendes en signed short til at indeholde en enkelt sample. Til tiden n 0 er der i stereo to samples, en til højre og en til venstre kanal (venstre før højre). Da mikrofonen optager i mono, og applikationen i stereo, vil der således kun komme brugbare data i den ene af de to kanaler Test Til test af CSoundCard er lavet en testramme. Hvad der sker i den opridses her: 1. Lydkortet initialiseres 2. Start optagelse og afspilning 3. - og output-pointer hentes 4. bufferen kopirers over i outputbufferen 5. goto gange; (her anvendes en for-løkke) 6. Luk lydkortet Med denne testramme er det altså muligt at fastslå, om CSoundCard virker. Da testprogrammet blev kørt første gang, viste det sig, at der var hørbare klik i lyden. Det viste sig at denne sammenligning var forkert info_in.ptr>input_buffer_length, da info_in.ptr er af typen char og input_buffer_length af typen short (den rigtige sammenligning kan ses [*Note *]). Resultatet af det var, at dobbeltbuffer-systemets første buffer (B1 figur 3.1) havde 1 4 af bufferrummet og den anden (B2 figur 3.1) 3 4. Efter fejlen er rettet, er det muligt at høre, hvad der kommer ind i mikrofonen gennem højttalerne med en bufferlængdes forsinkelse. hvor??

24 24 Softwaredesign 3.5 CAnalyzer Klassen CAnalyzer varetager fortolkning af data fra CFilter, til videre brug i eksempelvis CGraphWindow. Funktionen består i at omforme de data, der modtages til en samlet mængde data indeholdende informationer om RMS-værdierne på på de i afsnit?? beskrevne 1 N oktavs bånd. Dette udføres ved at modtage data fra et forudbestemt antal båndpasfiltre og dernæst beregne RMS-værdien for hver af disse. Dernæst samles og sendes til CGrphWindow. Metoderne til håndtering af ovenstående er beskrevet i afsnit 2 og består af findrms(filteredseq[]) og returnrms() Båndpasfiltrenes RMS-værdier Til beregning af RMS-værdien for et bånd skal den lydsekvens, som modtages i et array af typen signed short, gennemgå en procedure. Denne procedure består i at udføre følgende beregning, der er omtalt i afsnit??: RMS 1 T T y n 2 n 0 (3.1). For at udføre denne beregning er det nødvendigt at inkludere <math.h> der bla. omfatter funktionerne sqrt() og pow(x,y), der henholdsvis uddrager kvadratroden og opløfter x i potens af y. Værdierne tilhørende de enkelte elementer i omtalte array repræsenteres ved y n og omtales i koden som filteredseq[i], et lokalt array, hvor int i går fra 0 til og med T, der i koden benævnes number og udgør antallet af array-elementer.number beregnes ud fra bufferlængden bufferlength, som angiver antallet af samples. Hver beregnet RMS-værdi lagres som et element i et lokalt array rmscoeff[rmsnr]af klassen, hvor rmsnr angiver i hvilket element der skal lagres. rmsnr er en lokal variabel af klassen CAnalycer, og initialiseres til 0, når der oprettes et nyt objekt af klassen. Desuden tæller rmsnr een op hver gang metoden findrms(filteredseq[]) kaldes. rmsnr re-initialiseres når antallet af forudbestemte bånd(nrofband) er nået, hvorved de næste RMS-værdier påny placeres fra første element i rmscoeff[rmsnr]. Dette ser på kode form således ud: for (int i=0; i<number; i++) { sum = sum + pow(filteredseq[i], 2); } rms = sqrt(sum) / number;

25 CAnalyzer Returnering af RMS-værdier Når de udregnede RMS-værdier, ønskes returneret, foregår det ved at kalde metoden returnrms(), der blot sender en pointer til startadressen på det lokale array rmscoeff[rmsnr], hvor RMS-værdierne ligger. Dette foregår gennem klassen CExternal, indebærer følgende kode, hvor external er et tidligere oprettet CEXternal(GUI)-objekt: CAnalyzer::returnRMS(){ external.senddata(rmscoeff); } Figuren 3.3 illustrerer, hvorledes RMS-værdierne for de enkelte båndpasfiltre placeres i output-array et rmscoeff og det kald, der foretages inden værdierne er beregnet. Båndpasfiltre CAnalyzer rmscoeff[] F 1 CAnalyzer::findRMS() i = 0 F 2 CAnalyzer::findRMS() F 3 CAnalyzer::findRMS() F N CAnalyzer::findRMS() i = (nr_og_bands 1) N = nr_og_bands Figur 3.3: Illustration af placering af RMS-værdier i rmscoeff(). Metodekald af findrms(filteredseq[]), foregår sekventielt fra main[*note *]svarende til antallet af bånd, for til sidst at kalde returnrms() for at få RMS-værdierne sendt videre. navn eks ændres Fejlhåndtering I denne klasse inddrages, under fejlhåndtering, en undersøgelse af bufferlength, der ikke må være nul eller derunder. Dette kriterie er opstillet da denne indgår som nævner i en division, og da en negativ bufferstørrelse ikke giver mening.

26 26 Softwaredesign slet ikke stå der!!!!!! Der kan udover ovennævnte fejl, opstå uhensigtsmæssigheder, iform af for tidlig kald af returnrms(), dette resulterer i at de sendte RMS-værdier kan bestå af en blanding af gamle og nye, tilhørende de respektive bånd. Dette vil ikke være synlig for brugeren, og undgåes ved kalde returnrms() efter sidste bånd.[*note *] Testramme for funktionaliterne Klassen testes ved at kode en testramme, der opretter et test-objekt af klassen CAnalyzer og kalder klassens Constructer med antallet af bånd som parameter. Herefter genereres et givet antal array s indeholdende både positive og negative værdier. Hvert array benyttes derefter som parameter ved kald af metoden test.findrms(short x-array[]). Dernæst oprettes et CExternal-objekt, hvorefter test.returnrms() kaldes, der sender RMS-værdierne til CExternal. Til sidst kaldes CExternal-objekt.receiveData(), der modtager en pointer til RMS-værdierne, hvorefter værdierne skrives ud gennem en for-løkke. Denne test forløb uden konplikationer og minimal debugging. Der kan i appendiks XX[*Note *] findes en samlet integrationstest hvor CAnalyzer er inkluderet. 3.6 Implementering af filtre Følgende afsnit er en beskrivelse af klassen CFilter s implementering i C++ på baggrund afsnit 2.1 på side 5 om teorien bag digitale filtre. Klassen har to hovedopgaver, henholdsvis i forbindelse med kalibrering og filtrering. Alt efter antal bånd frekvensspektret opdeles i, samt filterordenen for de tilsvarende antal filtre, udregnes forskellige overføringsfunktioner for hvert filter. Ved opstart af programmet vælges disse parametre, hvorefter et objekt indeholdende de udregnede overføringsfunktioner oprettes. Fra CAnalyzer ændres koefficienterne i overføringsfunktionerne, ved multiplicering med en konstant, til de under kalibreringen fundne korrigerede værdier. Til beregning af koefficienterne til overføringsfunktionerne er udarbejdet en række metoder, der i C++ gengiver de i afsnit 2.1 på side 5 opstillede formler for udregning af polværdierne, samt første- og andenordenskoefficienterne for henholdsvis højpas- og lavpasfiltrene: calcpolevalues calc1filterlowpass calc1filterhighpass calc2filterlowpass calc2filterhighpass Som det fremgår af metoderne herover, er der udelukkende tale om første- og andenordens højpas- og lavpasfiltre, der under filtreringen kaskadekobles. Selve filtreringen

27 Den grafiske brugerflade 27 forestås af metoden filtersamples, der sekvensvis gennemløber et filter og lader outputværdien blive inputværdi for det næste filter i kaskaden. Filtreringen foretages både ved CAnalyzer s analysering af signalet og ved CEqualyzer s afspilning af lyd. For at få størst mulig præcision i udregningerne foretages disse med variable af typen double, som til sidst castes til typen signed short Test af CFilter Klassen er opbygget omkring kravet til brugerens mulighed for at kunne forskellige antal filtre og filterordener. Testen opdeltes naturligt i to dele, henholdsvis udregning af filterkoefficienterne og dernæst selve filtreringen. Til udregning af filterkoefficienterne benyttedes filterordenen og filtrenes båndpasknækfrekvenser som input til oprettelsen af objektet. Der er ingen krav til hastigheden for disse udregninger, men testet med udregning af 30 tyvendeordens båndpasfiltre tog det kun en brøkdel af et sekund, hvilket må siges at være tilfredsstillende. De resulterende koefficienter blev kontrolleret med Matlab og fundet valide. Tilpasningen af filterantal og -orden er set i forhold til brugervenlighed en fordel, men i forhold til hastighed en ulempe, hvilket skyldes et større antal metodekald for at hente koefficienterne i et array [*Note *] hver eneste gang et nyt filter skal processere signalet. Der er derfor gennemført test med dynamisk udregnede koefficienter og manuelt udregnede faste koefficienter for forskellige filterantal og filterordener. Beregningstiderne er meget maskinafhængige, men forholdsmæssigt metoderne imellem blev resultatet, at filtreringen med faste koefficienter er omtrent dobbelt så hurtig som dens modpart. Til trods for dette har gruppen bibeholdt kravet om, at brugeren skal kunne tilpasse filterantal og -orden til sin egen maskine. Et endnu mere slående resultat var dog, at med denne metode er det muligt på en standard pentium III 1GHz pc, at kunne filtrere signalet med op til seks andenordens båndpasfiltre indenfor halvdelen af længden på samplebufferen. Konkluderende kan det siges, at det umiddelbart ikke er muligt, at opfylde kravet til Analyzeren/Equalyzeren om at kunne filtrere i 1/3 oktav båndpasfiltre. Derfor benyttes i den endelige integrationstest som udgangspunkt seks andenordens båndpasfiltre. VEKTORER? 3.7 Den grafiske brugerflade Softwaren i projektet udvikles efter objektorienterede principper, og skrives i C++. For at implementere en grafisk brugerflade 8 til analyzer- og equalizerprogrammet var det derfor nødvendigt at vælge et grafikbibliotek til brug med C++. Valget faldt på Qt, et professionelt softwareudviklingsværktøj, som er gratis tilgængeligt for Unix/Linux systemer under GPL 9. Qt tilbyder et omfattende bibliotek af funktioner og objekter (kaldet widgets) til brug ved konstruktion af en GUI, og nyder derudover popularitet fordi en 8 GUI: graphical user interface 9 Gnu Public License; se for yderligere licensinformation.

28 28 Softwaredesign applikation udviklet i Qt kan benyttes på kryds af de tre store platforme, Unix/Linux, Windows og MacOS. Et godt eksempel på brugen af Qt kan findes i Linux desktoppen KDE. Det følgende afsnit gennemgår nogle koncepter og metoder i forbindelse med Qt, præsenterer et udkast til projektets GUI, og går derefter i dybden med implementationen af de enkelte elementer i denne Qt - et kort overblik [*Note *] Qt er som nævnt et grafikbibliotek til C++. Brugen af de funktioner og klasser der findes i Qt tillader at projektets GUI kan udvikles uden det bliver nødvendigt at sætte sig ind i de indre virkemåder af X11, Unix og Linux graphics-engine. To ting er centrale for Qt: Widgets, og Qt s signal/slot fremgangsmåde, til at kommunikere mellem forskellige elementer af en applikation. Widgets En widget er i Qt (og i andre sammenhænge) et element af en GUI, som giver brugeren information, eller en mulighed for at kommunikere med systemet. Definitionen kan udvides til at omfatte elementer af GUI en som har den funktion at indeholde andre widgets, og dermed tjener et layoutmæssigt formål. Som eksempler på widgets kan f.eks. nævnes en simpel trykknap, eller et vindue. Trykknappen tillader brugeren at kommunikere med systemet; når et tryk på knappen registreres kan forskellige forløb i systemet startes eller stoppes. Vinduet er en såkaldt container-widget, som kun giver information eller mulighed for interaktion gennem de widgets den indeholder. Vinduet giver en ramme om en applikations GUI, og tillader evt. at applikationen minimeres, eller at størrelsen ændres. I en Qt-applikation består alt synligt således af widgets. Selve vinduet, trykknapper, scrollbars og tekstvinduer er alle widgets, og kan i vid udstrækning findes som standardelementer i Qt. De enkelte widgets er defineret som C++ klasser, og indgår i et nedarvningshierarki, der for de flestes vedkommende starter med klassen QWidget. Fra QWidget nedarves en lang række af de mest almindeligt brugte egenskaber og metoder til at tegne et objekt på skærmen, og de enkelte underklasser specialiceres derefter ned gennem hierarkiet. Signals and slots For at give f.eks. en trykknap mening, skal den forbindes til noget. Hvis der intet sker når der trykkes på knappen kan den lige så godt udelades. For at opnå forbindelse mellem de enkelte widgets der udgør en GUI, benytter Qt signals og slots. En widget kan indeholde et arbitrært antal signals og slots. Et signal kan udsendes (emittes) enten på baggrund af en event, som er en handling fra systemets bruger, eller et eksternt system, eller det kan udsendes som følge af en intern ændring i den pågældende widget. Udefrakommende events håndteres internt af Qt, og det er som bruger af Qt kun nødvendigt at specificere hvilke events en widget skal reagere på, og implementere koden for de ønskede reaktioner. Når en widget har modtaget en event, og har udsendt

29 Den grafiske brugerflade 29 et signal, er dens rolle i forløbet reelt udspillet. En widget sikrer sig ikke at signalet modtages af nogen, og det kan derfor lade sig gøre at implementere dele af et system, uden at der opstår fejl pga. manglende modtagere. Når modtageren til et signal tilføjes til systemet, forbindes det udsendte signal til et slot i modtagerwidget. I modtagerwidget er det pågældende slot implementeret som et stykke kode, der køres hver gang det specificerede signal modtages Projektets grafiske brugerflade Designprocessen tager udgangspunkt i en række usescases, som også danner grundlag for et udkast til GUI en: 1. Brugeren trykker på en knap og det måltes frekvensgang reguleres efter den ønskede frekvensgang. 2. Brugeren skaber den frekvenskarakteristik han ønsker højttaleren (og rummet) skal have i målepunktet. 3. Brugeren trykker på en knap og får vist højttalerens (og rummets) frekvenskarakteristik (ved mic. placering). 4. Brugeren trykker på en knap og får grafisk præsenteret det måltes frekvensindhold i realtid. 5. Brugeren skal kunne afspille lyd, således at det behandles gennem equalizeren. Usecase 1 kræver en knap til regulering af systemets frekvensgang. Ligeledes kræves fra usecases 3 og 4 knapper til start af hhv. måling af systemets frekvensgang, og visning af frekvensindhold i realtid. For at kunne stoppe de enkelte processer igen kræves derudover en stopknap. Disse knapper tildeles et område på den grafiske brugerflade. Ud over de fire nævnte trykknapper kommer to fra usecase 2, som bruges til hhv. at gemme den indstillede frekvenskarakteristik, og til at gendanne default-værdierne for denne. Fra usecase 5 kommer en play og en stop knap til brug ved afspilning af lyd gennem equalizeren. Alle disse trykknapper samles i en klasse, CButton, og er beskrevet i afsnit Usecase 2 lægger op til at brugeren skal kunne indstille en række værdier gennem GUI. Denne funktionalitet er oplagt at implementere med en række sliders, som tildeles et område på GUI, sammen med de to knapper til at gemme, og nulstille. Implementation af sliders og knapper samles til en enhed i klassen CSliderWindow, med underklassen CSlider, og dokumenteres i afsnit Fra usecase 3 og 4 kan udledes et krav om en grafisk præsentation af data fra analyzeren. Denne repræsentation håndteres i klassen CGraphWindow, som beskrevet i afsnit Usecase 5 lægger ud over knapperne til play og stop op til at brugeren skal kunne vælge en fil fra en liste på displayet. Implementationen af denne funktion er lagt i klassen CPlayWindow, og dokumenteret i afsnit Ud fra de fundne elementer er udkastet i figur 3.4 udarbejdet.

1 Problemanalyse Unified Modeling Language Problemformulering... 4

1 Problemanalyse Unified Modeling Language Problemformulering... 4 Indhold 1 Problemanalyse 3 1.0.1 Unified Modeling Language................... 3 1.1 Problemformulering............................ 4 2 Designfase 5 2.1 Design af filtre.............................. 5

Læs mere

Analyzer & Equalizer. Afdeling for kommunikations teknologi 19. december 2002 Aalborg Universitet. Gruppe 506

Analyzer & Equalizer. Afdeling for kommunikations teknologi 19. december 2002 Aalborg Universitet. Gruppe 506 Analyzer & Equalizer Afdeling for kommunikations teknologi 19. december 2002 Aalborg Universitet Gruppe 506 AALBORG UNIVERSITET INSTITUT FOR ELEKTRONISKE SYSTEMER AFDELING FOR KOMMUNIKATIONSTEKNOLOGI

Læs mere

Analyzer & Equalizer. Afdeling for kommunikations teknologi 19. december 2002 Aalborg Universitet. Gruppe 506

Analyzer & Equalizer. Afdeling for kommunikations teknologi 19. december 2002 Aalborg Universitet. Gruppe 506 Analyzer & Equalizer Afdeling for kommunikations teknologi 19. december 2002 Aalborg Universitet Gruppe 506 AALBORG UNIVERSITET INSTITUT FOR ELEKTRONISKE SYSTEMER AFDELING FOR KOMMUNIKATIONSTEKNOLOGI

Læs mere

PC-baseret analyzer og equalizer

PC-baseret analyzer og equalizer PC-baseret analyzer og equalizer Projekteksamen Gruppe 506 Institut for elektroniske systemer Aalborg Universitet PC-baseret analyzer og equalizer p. 1/53 Præsentation Systempræsentation Filterdesign Mikrofonkorrektion

Læs mere

PC-baseret analyzer og equalizer

PC-baseret analyzer og equalizer PC-baseret analyzer og equalizer Institut for elektroniske systemer 19. december 2002 Aalborg Universitet Gruppe 506 AALBORG UNIVERSITET INSTITUT FOR ELEKTRONISKE SYSTEMER AFDELING FOR KOMMUNIKATIONSTEKNOLOGI

Læs mere

Testsignaler til kontrol af en målekæde

Testsignaler til kontrol af en målekæde 20. marts 2007 RL 12/07 OFC/THP/CB/lm MILJØSTYRELSENS Testsignaler til kontrol af en målekæde Resumé Der er udarbejdet testsignaler, som gør det muligt at kontrollere en samlet målekæde. Testsignalerne,

Læs mere

ELCANIC A/S. ENERGY METER Type ENG110. Version 3.00. Inkl. PC program: ENG110. Version 3.00. Betjeningsvejledning

ELCANIC A/S. ENERGY METER Type ENG110. Version 3.00. Inkl. PC program: ENG110. Version 3.00. Betjeningsvejledning ELCANIC A/S ENERGY METER Type ENG110 Version 3.00 Inkl. PC program: ENG110 Version 3.00 Betjeningsvejledning 1/11 Generelt: ELCANIC A/S ENERGY METER Type ENG110 er et microprocessor styret instrument til

Læs mere

Systemkald DM14. 1. Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111

Systemkald DM14. 1. Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111 DM14 1. Obligatoriske opgave Systemkald Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111 Side 1 af 5 Intro: Formålet med opgaven at et lave en system kald

Læs mere

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Merging og hashing Mål Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Dette emne er et uddrag af kurset DM507 Algoritmer og datastrukturer (2. semester). Mål

Læs mere

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt. Merging og hashing Mål Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt. Dette emne er et uddrag af kurset DM507 Algoritmer og datastrukturer

Læs mere

Indholdsfortegnelse for kapitel 2

Indholdsfortegnelse for kapitel 2 Indholdsfortegnelse for kapitel 2 Kapitel 2. Analyse.......................................................... 2 Analyse af 2.1...................................................... 2 Analysen af Database.................................................

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1 Spørgsmål 1 Grundlæggende objektorienterede begreber o Klasse (class) o Objekt (object) o Metode (method), herunder return type og parametre o Instansvariable (instance variables) & egenskaber (properties),

Læs mere

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing Kursusgang 11 Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing Design af brugerflader 11.1 Samme sted Forskellige steder Sidste kursusgang Samtidigt

Læs mere

Vejledning til Teknisk opsætning

Vejledning til Teknisk opsætning Vejledning til Teknisk opsætning v. 1.0 Adm4you, 2010. Indhold Kort om denne vejledning... 3 Generelt om easyourtime... 3 Installation af databasen... 3 Sikkerhed og rettigheder... 4 SQL Login... 4 Rettigheder

Læs mere

4. Semesterprojekt System Arkitektur. MyP3000 I4PRJ4 E2004

4. Semesterprojekt System Arkitektur. MyP3000 I4PRJ4 E2004 Ingeniørhøjskolen i Århus 20. december 2004 IKT Dalgas Avenue 2 8000 Århus C 4. Semesterprojekt System Arkitektur MyP3000 I4PRJ4 E2004 Gruppe 4: Benjamin Sørensen, 02284 Tomas Stæhr Berg, 03539 Nikki Ashton,

Læs mere

Piano Tuning & String Analyzing Tool

Piano Tuning & String Analyzing Tool Piano Tuning & String Analyzing Tool Læs mig indeholder oplysninger om bedst brug af sitet samt oplysninger om Piano Tuning & String Analyzing Tool, operativsystemer og lydkort. Programmet vil herefter

Læs mere

Daglig brug af JitBesked 2.0

Daglig brug af JitBesked 2.0 Daglig brug af JitBesked 2.0 Indholdsfortegnelse Oprettelse af personer (modtagere)...3 Afsendelse af besked...4 Valg af flere modtagere...5 Valg af flere personer der ligger i rækkefølge...5 Valg af flere

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 20. april, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Online billede filtrering

Online billede filtrering Online billede filtrering Eksamensprojekt 2014 Andreas Lorentzen, klasse 3.4 Roskilde Tekniske Gymnasium Programmering C 09-05-2014 I dette projekt vil jeg demonstrerer en af de mange ting moderne browsere

Læs mere

Hassansalem.dk/delpin User: admin Pass: admin BACKEND

Hassansalem.dk/delpin User: admin Pass: admin BACKEND Hassansalem.dk/delpin User: admin Pass: admin BACKEND 1/10 Indledning Dette projekt er den afsluttende del af web udvikling studiet på Erhvervs Lillebælt 1. semester. Projektet er udarbejdet med Del-pin

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Øvelsesvejledning. Frekvenskarakteristikker Simulering og realisering af passive filtre.

Øvelsesvejledning. Frekvenskarakteristikker Simulering og realisering af passive filtre. ELT2, Passive filter, frekvenskarakteristikker Øvelsesvejledning Frekvenskarakteristikker Simulering og realisering af passive filtre. Øvelsen består af 3 dele: 1. En beregningsdel som du forventes at

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 10. april, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer.

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer. Merging og Hashing Tilgang til data To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer. API for sekventiel tilgang (API =

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2017 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 6. april, 2017 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Matlab script - placering af kran

Matlab script - placering af kran Matlab script - placering af kran 1 Til at beregne den ideelle placering af kranen hos MSK, er der gjort brug af et matlab script. Igennem dette kapitel vil opbygningen af dette script blive gennemgået.

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Kursus i brug af Pinnacle Studio 9

Kursus i brug af Pinnacle Studio 9 Bent Sehested Odense Video Klub Side 20 Ved at markere en sekvens og med markøren peger på den blå linje i lydsporet, ændres markøren til en højttaler med en pil. I berøringspunktet opstår der en lille

Læs mere

Streame fra Winamp til Dreambox/pc på netværk.

Streame fra Winamp til Dreambox/pc på netværk. Streame fra Winamp til Dreambox/pc på netværk. 1. Formål 2. Forudsætninger og installationer 3. Opsætning 4. Start streaming 5. Aflyt streaming 6. Kontakt 1. Formål Mange benytter Winamp ( Nullsoft, Inc.)

Læs mere

Klasse 1.4 Michael Jokil 03-05-2010

Klasse 1.4 Michael Jokil 03-05-2010 HTX I ROSKILDE Afsluttende opgave Kommunikation og IT Klasse 1.4 Michael Jokil 03-05-2010 Indholdsfortegnelse Indledning... 3 Formål... 3 Planlægning... 4 Kommunikationsplan... 4 Kanylemodellen... 4 Teknisk

Læs mere

AVR MP3 29-05-08 05576 Ingeniørhøjskolen i Århus Michael Kaalund

AVR MP3 29-05-08 05576 Ingeniørhøjskolen i Århus Michael Kaalund AVR MP3 29-05-08 Indholdsfortegnelse 1 Introduktion...2 2 Udviklingsmiljø...2 3 Beskrivelse af systemet...3 3.1 VS1001k...3 3.2 MP3 file formatet...6 4 Konklusion...6 5 Litteratur liste...6 6 Illustrations

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

Læs mere

Automatisk Vandingssystem

Automatisk Vandingssystem Automatisk Vandingssystem Projektdokumentation Aarhus Universitet Gruppe 6-3. Semester - F15 vejleder: Michael Alrøe dato: 28-05-2015 Lærke Isabella Nørregård Hansen - 201205713 - IKT Kasper Sejer Kristensen

Læs mere

Signalbehandling og matematik 1 (Tidsdiskrete signaler og systemer)

Signalbehandling og matematik 1 (Tidsdiskrete signaler og systemer) Signalbehandling og matematik 1 (Tidsdiskrete signaler og systemer) Session 1. Sekvenser, diskrete systemer, Lineære systemer, foldning og lineære tidsinvariante systemer Ved Samuel Schmidt sschmidt@hst.aau.dk

Læs mere

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (key, nøgle) for dataelementer.

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (key, nøgle) for dataelementer. Merging og Hashing Tilgang til data To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (key, nøgle) for dataelementer. API for sekventiel tilgang (API = Application

Læs mere

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Programmering Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Oversigt Undervisningen Hvad er programmering Hvordan er et program organiseret? Programmering og fysik Nobelprisen

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2013 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 5. marts, 2013 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

Fable Kom godt i gang

Fable Kom godt i gang Fable Kom godt i gang Vers. 1.3.1 Opdateret: 29-08-2018 Indholdsfortegnelse 1. Installer programmet 3 2. Pak robotten ud 5 3. I gang med at programmere 6 4. Programmér Fable til at køre fra 90 til -90

Læs mere

Call Recorder Apresa Brugermanual

Call Recorder Apresa Brugermanual Call Recorder Apresa Brugermanual Version. 1.100.11 Vidicode Pleje og vedligeholdelse: CR Apresa må ikke blive våd. Hvis den bliver våd, tør den omgående af med en blød, ren klud. Væsker kan indeholde

Læs mere

KOMPONENT BESKRIVELSE

KOMPONENT BESKRIVELSE Beskrivelse : S12-20-8A tegningsnummer 630014 Program som styrer 5 individuelle trykforløb på samme tid. Kan køre med intern tryk-reservoir. Kommunikerer med PC-program 714014 Dato Sign. Beskrivelse af

Læs mere

PID2000 Archive Service

PID2000 Archive Service PROLON CONTROL SYSTEMS Herstedvesterstræde 56 DK-2620 Albertslund Danmark Tlf.: (+45) 43620625 Fax: (+45) 43623125 PID2000 Archive Service Bruger vejledning Juni 2002 Denne manual beskriver brugen af softwaren

Læs mere

Fable Kom godt i gang

Fable Kom godt i gang Fable Kom godt i gang Opdateret: 26-03-2018 Indholdsfortegnelse 1. Først skal du installere programmet på din computer 3 2. Når programmet er installeret er du klar til at pakke robotten ud 4 3. Nu er

Læs mere

Kom godt i gang med Fable-robotten

Kom godt i gang med Fable-robotten Kom godt i gang med Fable-robotten 1. Først skal du installere programmet på din computer. Gå ind på shaperobotics.com og under support vælger du download: Her vælger du, under PC App om du kører Windows

Læs mere

Ruko SmartAir. Updater installation

Ruko SmartAir. Updater installation Ruko SmartAir Updater installation Introduktion. Updateren er en speciel enhed som giver os mulighed for at tilføje, læse og skrive funktioner i en offline installation. Med læse og skrive funktionen kan

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

2. De 7 signaler skal kodes til en 3-bit kode. Enkodningen skal prioriteres som beskrevet i afsnit?? på side??.

2. De 7 signaler skal kodes til en 3-bit kode. Enkodningen skal prioriteres som beskrevet i afsnit?? på side??. 01 FORUDSÆTNINGER 01 Forudsætninger Dette kapitel tager udgangspunkt i processerne beskrevet i afsnit?? på side?? Hver enkelt proces tildeles et afsnit, hvorunder det beskrives hvilke hardware moduler,

Læs mere

User Guide AK-SM 720 Boolean logic

User Guide AK-SM 720 Boolean logic User Guide AK-SM 720 Boolean logic ADAP-KOOL Refrigeration control systems Anvendelse Funktionen er indeholdt i Systemmanager type AK-SM 720, og kan anvendes til brugerdefinerede funktioner. Funktionerne

Læs mere

VEJLEDNING. Hastigheden for afspilning kan ændres og det er muligt at lave hurtig spring frem og tilbage

VEJLEDNING. Hastigheden for afspilning kan ændres og det er muligt at lave hurtig spring frem og tilbage VEJLEDNING DANDAS-TV Viewer er lavet til håndtering af TV-inspektion. (Skærm billeder og funktionalitet kan afvige fra den seneste version af programmet. DB adgang er ikke inkluderet) Programmet kan Indlæse

Læs mere

Proces Styring STF-1 til BalTec Radial Nittemaskine med RC 20 STYRING

Proces Styring STF-1 til BalTec Radial Nittemaskine med RC 20 STYRING [Skriv tekst] [Skriv tekst] Proces Styring STF-1 til BalTec Radial Nittemaskine med RC 20 STYRING Brugsanvisning Introduktion Styringen og overvågningen af processer med henblik på kvalitetssikring er

Læs mere

Datatransport... 2. Import & Eksport af data... 2. Generelt... 2. Import/eksport... 4. Felter i Import og Eksport... 5

Datatransport... 2. Import & Eksport af data... 2. Generelt... 2. Import/eksport... 4. Felter i Import og Eksport... 5 Indhold Datatransport... 2 Import & Eksport af data... 2 Generelt... 2 Import/eksport.... 4 Felter i Import og Eksport... 5 Trykknapper til Import og Eksport... 7 1 Alle... 7 2 Slet... 7 3 Editor... 7

Læs mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

MANUAL. Præsentation af Temperaturloggerdata. Version 2.0

MANUAL. Præsentation af Temperaturloggerdata. Version 2.0 MANUAL Præsentation af Temperaturloggerdata Version 2.0 Indholdsfortegnelse FORORD...3 INTRODUKTION...3 KRAV OG FORUDSÆTNINGER...3 INSTALLATION...4 OPSÆTNING...8 PROGRAMOVERBLIK...10 PROGRAMKØRSEL...11

Læs mere

dmasark Aflevering - Uge 50

dmasark Aflevering - Uge 50 dmasark Aflevering - Uge 50 Michael Lind Mortensen, 20071202, DAT4 Michael Dahl, 20073943, DAT4 Katalog: http://www.daimi.au.dk/ u073943/dmasark/uge6/ 13. december 2007 Indhold 1 PingClient implementation

Læs mere

IT opgave. Informationsteknologi B. Vejleder: Karl. Navn: Devran Kücükyildiz. Klasse: 2,4

IT opgave. Informationsteknologi B. Vejleder: Karl. Navn: Devran Kücükyildiz. Klasse: 2,4 IT opgave Informationsteknologi B Vejleder: Karl Navn: Devran Kücükyildiz Klasse: 2,4 Dato:03-03-2009 1 Indholdsfortegnelse 1. Indledning... 3 2. Planlægning... 3 Kommunikationsplanlægning... 3 Problemstillingen...

Læs mere

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden Sortering 1 / 34 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 2 / 34 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden

Læs mere

Brugermanual Netværkoptager (NVR)

Brugermanual Netværkoptager (NVR) Brugermanual Netværkoptager (NVR) Indholdsfortegnelse Login på videooptageren...2 Brugerkonti...2 Afspilning og Søgning i optagelser...3 Visnings vindue...3 Optagelses søgetype...4 Optagelses kalender...4

Læs mere

Sider og segmenter. dopsys 1

Sider og segmenter. dopsys 1 Sider og segmenter dopsys 1 Lokal vs global sideallokering (1) Med (a) som udgangspunkt giver (b) lokal hhv. (c) global allokering forskellige resultater dopsys 2 Lokal vs global sideallokering (2) Den

Læs mere

Måle og test I. Lasse Kaae 2012

Måle og test I. Lasse Kaae 2012 Måle og test I Lasse Kaae 2012 Plan for de næste 2 uger Uge 1 grundlæggende VEE NI Labview (Torsdag) Anders Meisner Uge 2 Workshop VEE VEE instrument-styring Labview NI USB 6008 Måle øvelser Lasse Kaae

Læs mere

Advanced Word Template Brugermanual

Advanced Word Template Brugermanual Advanced Word Template Brugermanual Forord: Advanced Word Template er et værktøj, der anvendes sammen med Microsoft Word til at opbygge ensartet beskrivelser på en mere intelligent måde end Copy and Paste

Læs mere

Michael Jokil 11-05-2012

Michael Jokil 11-05-2012 HTX, RTG Det skrå kast Informationsteknologi B Michael Jokil 11-05-2012 Indholdsfortegnelse Indledning... 3 Teori... 3 Kravspecifikationer... 4 Design... 4 Funktionalitet... 4 Brugerflade... 4 Implementering...

Læs mere

Hurtig Start Guide 1

Hurtig Start Guide 1 Hurtig Start Guide 1 Kamera Tilslutnings Diagram Telefon Tablet OBS: I den indledende opsætning, tilslut kameraet til routeren med Ethernet kablet, følg derefter de næste trin 2 1. Installer Reolink APP

Læs mere

MSI pakke til distribution af AutoPilot komponenter.

MSI pakke til distribution af AutoPilot komponenter. MSI pakke til distribution af AutoPilot komponenter. Hermed følger en basal dokumentation for installation af AutoPilot msi pakken. Der vil i det følgende blive forklaret brugen af 4 programmer fra Microsoft,

Læs mere

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden Sortering 1 / 32 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 2 / 32 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden

Læs mere

MP3 player med DMX interface.

MP3 player med DMX interface. Jægergårdsgade 152/05A DK-8000 Aarhus C DENMARK WWW.WAHLBERG.DK MP3 player med DMX interface. Funktion: En avanceret Mp3spiller med forskellige styringsmuligheder, velegnet til brug i museer, teatre, udstillinger

Læs mere

Macab ST2300 IP. Gert Kaae Hansen

Macab ST2300 IP. Gert Kaae Hansen Macab ST2300 IP Gert Kaae Hansen 2012 Den nye software indeholder nye funktioner som gør det muligt at afspille filer direkte fra et NAS drev, kigge på video klip fra Youtube og se eller høre POD cast

Læs mere

Software Dokumentation

Software Dokumentation Software Dokumentation Jan Boddum Larsen Teknologi B og A på HTX Dokumentation af software i Teknologi I samfundet sker der en bevægelse mod mere digitale løsninger i teknologi. Det betyder at software

Læs mere

Easy Guide i GallupPC

Easy Guide i GallupPC Easy Guide i GallupPC Version. 6.00.00 Gallup A/S Masnedøgade 22-26 DK 2100 København Ø Telefon 39 27 27 27 Fax 39 27 50 80 Indhold SÅDAN KOMMER DU I GANG MED AT ANVENDE GALLUPPC... 2 TILFØJELSE AF UNDERSØGELSER

Læs mere

Arduino Programmering

Arduino Programmering Microcontroller, Arduino I teknologi skal vi lære at lave programmer til uc for at have muligheden til eksamen at kunne lave intelligente el-produkter. I hvert fald skal vi have set mulighederne, og forstået

Læs mere

wwwdk Digital lydredigering på computeren grundlæggende begreber

wwwdk Digital lydredigering på computeren grundlæggende begreber wwwdk Digital lydredigering på computeren grundlæggende begreber Indhold Digital lydredigering på computeren grundlæggende begreber... 1 Indhold... 2 Lyd er trykforandringer i luftens molekyler... 3 Frekvens,

Læs mere

Sortering af information er en fundamental og central opgave.

Sortering af information er en fundamental og central opgave. Sortering Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 Mange opgaver er hurtigere i sorteret information (tænk på ordbøger, telefonbøger,

Læs mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

Lærer nye styresystemer Installerer programmer som kun kan bruges i ældre versioner

Lærer nye styresystemer Installerer programmer som kun kan bruges i ældre versioner Virtuel PC Fordele/ulemper Fordele: Lærer nye styresystemer Installerer programmer som kun kan bruges i ældre versioner Ulemper: Reserverer RAM (Windows 7) Problemer med at ureglementeret lukke ned Mister

Læs mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

AgroSoft A/S AgroSync

AgroSoft A/S AgroSync AgroSoft A/S AgroSync AgroSync er et AgroSoft A/S værktøj, der bliver brugt til filudveksling imellem WinSvin og PocketPigs. Fordele ved at bruge AgroSync: Brugeren bestemmer overførsels tidspunktet for

Læs mere

Installation af GPS med tilslutning til USB port

Installation af GPS med tilslutning til USB port Indholdsfortegnelse Opsætning af GPS-tilslutning... 1 1: Installation af driver... 2 2: Opsætning af COM-port... 2 3: Vælg COM-port i DLS NG... 3 4: Brug af GPSViewer testprogram... 5 5: Hvis COM-port

Læs mere

Merging og Hashing (del I)

Merging og Hashing (del I) Merging og Hashing (del I) Tilgang til data To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer. API for sekventiel tilgang

Læs mere

DMX styring med USB-interface

DMX styring med USB-interface DMX styring med USB-interface Introduktion...2 DMX bibliotek...3 Programmering af kanaler...7 Sådan skabes et show/en lyssekvens...11 Introduktion DMX LightPlayer er en avanceret men meget brugervenlig

Læs mere

Start af nyt schematic projekt i Quartus II

Start af nyt schematic projekt i Quartus II Start af nyt schematic projekt i Quartus II Det følgende er ikke fremstillet som en brugsanvisning der gennemgår alle de muligheder der er omkring oprettelse af et Schematic projekt i Quartus II men kun

Læs mere

Design Systemkald. User-mode Linux, The Linux kernel/325-2004

Design Systemkald. User-mode Linux, The Linux kernel/325-2004 Tracing tråden afbryder systemkaldet via ptrace Systemkaldet til værten ændres til getpid Processens stak manipuleres til at kalde kernen Kernen returnerer til processen Design Systemkald Design Startup/shutdown

Læs mere

Viditronic NDVR Quick Guide. Ver. 2.0

Viditronic NDVR Quick Guide. Ver. 2.0 Viditronic NDVR Quick Guide Ver. 2.0 1 Indholdsfortegnelse 1. HOVEDMENU 3 1.1 START 5 1.2 AKTIVITETSINDIKATOR: 7 1.3 INFORMATIONS VINDUE: 7 1.4 PTZ KAMERA KONTROL: 7 1.5 SKÆRMMENU 8 1.5.1 AKTIVER BEVÆGELSE:

Læs mere

SÅDAN BRUGER DU REGNEARK INTRODUKTION

SÅDAN BRUGER DU REGNEARK INTRODUKTION SÅDAN BRUGER DU REGNEARK INTRODUKTION I vejledningen bruger vi det gratis program Calc fra OpenOffice som eksempel til at vise, hvordan man bruger nogle helt grundlæggende funktioner i regneark. De øvrige

Læs mere

Total systembeskrivelse af AD1847

Total systembeskrivelse af AD1847 Total systembeskrivelse af AD1847 Af Anna Hampen Jens Jørgen Nielsen Johannes Bjerrum Johnny Nielsen 3.semester HIH Anna Hampen, Jens Nielsen, Johannes Bjerrum, Johnny Nielsen 1 Indholdsfortegnelse Indledning...3

Læs mere

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen Programmering C Eksamensprojekt Lavet af Suayb Köse & Nikolaj Egholk Jakobsen Indledning Analyse Læring er en svær størrelse. Der er hele tiden fokus fra politikerne på, hvordan de danske skoleelever kan

Læs mere

Visualiseringsprogram

Visualiseringsprogram Visualiseringsprogram Programmering C - eksamensopgave Rami Kaddoura og Martin Schmidt Klasse: 3.4 Vejleder: Karl Bjarnason Roskilde Tekniske Gymnasium Udleveringsdato: 02-03-2012 Afleveringsdato: 11-05-12

Læs mere

Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX

Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX IT -Eksamen Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX [Vælg en dato] Indhold Indledning... 2 Teori... 3 Hvorfor dette design... 4 Produktet... 4 Test og afprøvning... 9 Konklusion... 10 Indledning

Læs mere

\ \ Computerens Anatomi / /

\ \ Computerens Anatomi / / HTX Roskilde - mat-it-prog, 1.4 \ \ Computerens Anatomi / / Introduktion En PC ( personlige computer ) eller computer er bygget op af forskellige komponenter. Vi vil hermed gennemgå størstedelen af computerens

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

METODER ARV KLASSER. Grundlæggende programmering Lektion 5 METODER KLASSER ARV Grundlæggende programmering Lektion 5 1 METODER Sekvenser af kode om samme emne 2 REPETITION Række af statements der udfører en handling Mindst én metode der hedder main Forskellen

Læs mere

Opgave: BOW Bowling. Rules of Bowling. danish. BOI 2015, dag 1. Tilgængelig hukommelse: 256 MB. 30.04.2015

Opgave: BOW Bowling. Rules of Bowling. danish. BOI 2015, dag 1. Tilgængelig hukommelse: 256 MB. 30.04.2015 Opgave: BOW Bowling danish BOI 0, dag. Tilgængelig hukommelse: 6 MB. 30.04.0 Byteasar er fan af både bowling og statistik. Han har nedskrevet resultaterne af et par tidligere bowling spil. Desværre er

Læs mere

EG Data Inform. Byggebasen. WCF og webservices. Jens Karsø

EG Data Inform. Byggebasen. WCF og webservices. Jens Karsø EG Data Inform Byggebasen WCF og webservices Jens Karsø 10 Indholdsfortegnelse Byggebasen Services indledning... 2 Målsætning... 2 Valg af teknologier... 3 Kommunikationsmodel for byggebasen... 3 Services.byggebasen.dk...

Læs mere

C R. Figur 1 Figur 2. er eksempler på kredsløbsfunktioner. Derimod er f.eks. indgangsimpedansen

C R. Figur 1 Figur 2. er eksempler på kredsløbsfunktioner. Derimod er f.eks. indgangsimpedansen Kredsløbsfunktioner Lad os i det følgende betragte kredsløb, der er i hvile til t = 0. Det vil sige, at alle selvinduktionsstrømme og alle kondensatorspændinger er nul til t = 0. I de Laplace-transformerede

Læs mere

3 Overføringsfunktion

3 Overføringsfunktion 1 3 Overføringsfunktion 3.1 Overføringsfunktion For et system som vist på figur 3.1 er overføringsfunktionen givet ved: Y (s) =H(s) X(s) [;] (3.1) Y (s) X(s) = H(s) [;] (3.2) Y (s) er den Laplacetransformerede

Læs mere

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer: Sortering Sortering Input: Output: n tal De n tal i sorteret orden Eksempel: Kommentarer: 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 Sorteret orden kan være stigende eller faldende. Vi vil i dette kursus

Læs mere

Kom godt i gang. Audacity 1.3.x Windows Foreløbig version. Danmarks Medie- og Journalisthøjskole / Radioafdelingen

Kom godt i gang. Audacity 1.3.x Windows Foreløbig version. Danmarks Medie- og Journalisthøjskole / Radioafdelingen Kom godt i gang Audacity 1.3.x Windows Foreløbig version Danmarks Medie- og Journalisthøjskole / Radioafdelingen Revision september 2009 side 2 Indhold Indstillinger side 4 Værktøjer side 7 Åbne nyt projekt

Læs mere

GSM port styring 400 brugere

GSM port styring 400 brugere 1 GSM port styring 400 brugere SMS alarm, temperatur og fjernkontrol system 16 brugere til at modtage alarmbeskeder via SMS Software vejledning SSIHuset Svane Electronic ApS Arildsvej 27, Gråmose, DK-7442

Læs mere

Sider og segmenter. dopsys 1

Sider og segmenter. dopsys 1 Sider og segmenter dopsys 1 Lokal vs global sideallokering (1) Med (a) som udgangspunkt giver (b) lokal hhv. (c) global allokering forskellige resultater dopsys 2 Lokal vs global sideallokering (2) Den

Læs mere