ddd-king Skrevet 24. august 2006 Del Skrevet 24. august 2006 Jeg ønsker å lage et instrument som kan måle responstiden til LCD skjermer, kontrast, lysstyrke, osv... Til dette skal jeg bruke en 5mm diameter silisium photodiode for å måle intensiteten til lyset ut fra LCD skjermen. Fotodioden tenkes motert i et sylinder som skal holds inntil skjermen slik at kun en liten del av skjermens overflate blir målt. Videre blir strømmen som er proposjonal med intensiteten forsterket med en transimpedance forsterker. Riktig forsterkning velges slik at signalet ikke overstiger 1V. Responsen måles følgende: et videoklipp med alternerende svart/hvit bilde blir spilt (30FPS). Signalet fra forsterkeren skal ideelt være firkantpulser med duty cycle lik 50%. Men pga tregheten i LCD krystallene vil det være en rise/fall respons. Ved å måle tiden det tar fra 10% til 90% får vi rise time. Tilsvarende på fall time. Kontrasten måles følgende: samme videoklipp. Max verdi på pulsen blir dividert på min verdi. Dette tallet er kontrasten til LCD pannelet og skal ligge over 200. Intensitet måles følgende: Max verdi på pulsene blir målt. Denne verdien representerer en spenning. strømmen generert av photodioden regnes ut ved å dividere på forsterkningen. Intensiteten finnes ved å dele på responsiviteten til photodioden (A/W). Dette kan enkelt gjøres ved å bruke oscilloskop. For at dette instrumentet skal være lett å bruke og helts ingen teknisk kunnskap skal være nødvendig. Derfor ønsker jeg å digitalisere (ADC) forsterkerutgangen og benytte digital signal behandling til å finne responstiden, kontrasten og lysstyrken. Jeg ser for meg et lite program med GUI som guider deg gjennom prosessen. Helst skal programmet ha et vindu som genererer pulsene beskrevet over (med justerbar frekvens og farge). Sample verdiene kan programmet hente fra lydkortet. 10kS/s er godt nok. Da får du rundt 25 sampler i et tidsinterval på 2.5ms som skulle dekke behovet for kontrast og lysstyrke målingene. Maks samplingsfreksvens er 44.1kS/s med lydkortet. Dette burde være nok til å måle responstiden. Kan noen hjelpe med å lage en C-kode snutt som f.eks. leser henter inn 1s med rå data fra lydkortet og sette verdiene i en 44100 elementer lang vektor. Gui tror jeg det enklest å lage med JAVA (for meg da). Jeg er klar over at Matlab/Labview løser dette elegant, men Matlab og Labview er dyrt. Lenke til kommentar
lnostdal Skrevet 24. august 2006 Del Skrevet 24. august 2006 (endret) Tror jeg skulle få til dette under Linux, men du er sikkert ute etter noe til win32? edit: uhm, eller hva med å ganske enkelt kalle en ekstern prosess (altså starte et program) som gjør det for en? .. tipper det finnes et lite verktøy for dette til linux dette holder sikkert i mange tilfeller: rec --rate=44100 result.wav sox result.wav result.raw Endret 24. august 2006 av lnostdal Lenke til kommentar
ddd-king Skrevet 24. august 2006 Forfatter Del Skrevet 24. august 2006 Det er helst for bruk under win32. Tenker meg en C-kode snutt som legger rådataene i en vektor. Signal prosessering gjøres i C og Java gjør resten av plottingen. Lenke til kommentar
Giddion Skrevet 24. august 2006 Del Skrevet 24. august 2006 (endret) OpenAL er platform uavhengi og har muligheten til å ta opp lyd fra høyeste til laveste (Hvis frekvensen ikke passer et format blir det resamplet) og støtter 16 og 8 bit format (stereo og mono). Hvis du skal ha 44100 16 eller 8 bits int etterhverandre som en fil så kan jeg sikkert ordne det, men som lnostdal. Jeg kan bare lage binære filer for win32/win64, men source til det meste. EDIT: hmm nå vet jeg platformen Kan du ikke gi litt mer spesifikasjoner. Åssen formater skal se ut, båndbredde, 16/8 bit , DLL/EXE, instillinger, dll interface +++. skal se om jeg ikke får mekka det til helga Endret 24. august 2006 av Giddion Lenke til kommentar
ddd-king Skrevet 24. august 2006 Forfatter Del Skrevet 24. august 2006 Takk for svar! Hadde vært fint om du kunne lage en C-kode snutt som kontinuerlig sampler inngangen med en bestemt frekvens (8000,1180,22000,44100). la oss si at jeg har en vektor "soundSamples =[0.000 0.001 0.002 0.003 osv...]". Hvis det er mulig å lagre dette til en tekst fil med ASCII format og i rader nedover, hadde det vært veldig enkelt for signal behandling i ettertid. Første steg ønsker jeg kun en vektor som oppdaterer seg jevnlig med innsamlede data fra lydkortet. Senere må jeg finne en måte å sende disse verdiene videre til JAVA programmet med GUI. Lenke til kommentar
lnostdal Skrevet 24. august 2006 Del Skrevet 24. august 2006 (endret) (vet kanskje dette fra før, men hvorfor ikke..) 44.1kHz/s vil si hvor ofte (x-aksen) målingen blir gjort pr. sekund; tror Giddion spør om hvor høy oppløsning (y-aksen) hver måling skal ha. 8 bits oppløsning vil si at signalet kan ha 256 mulige posisjoner eller verdier (y-aksen) ved hver måling. Et eksempel her kan være verdier mellom -128 og 128, der 0 i sammenheng med en høyttaler vil si hvilestilling, -128 vil si fullt utslag inn og 128 vil si fullt utslag ut. 44.1kHz 16bit er vanlige oppløsninger for CD-lyd, noe som gir 65536 mulige posisjoner/verdier á y-aksen. edit: Egentlig bør det vel være enkelt å parameterisere disse tingene - sånn at brukeren kan spesifisere selv. Endret 25. august 2006 av lnostdal Lenke til kommentar
Giddion Skrevet 25. august 2006 Del Skrevet 25. august 2006 (endret) Det stemmer det instdal sier jeg burde skulle gjerne vist om det er 8 eller 16 bit. Jeg er også usikker på hvordan filen skal se ut. Er det slik: 12344123 1234 12332 Dvs en rekke med heltall som bruker linje slutt som separator uten noe info om hvor mange linjer det er og noe annet info. Jeg må også vite om det skal være en DLL eller exe fil. Siden jeg bruker OpenAL så må OpenAL runtime være installert, det pleier å være installert, men det burde sjekkes. Det er mulig dette fungerer bare med å legge med et par dll filer Når jeg tenker på linjeslutt så er det en windows linje slutt dvs. (CR +LF) går dette bra med coden din? Endret 25. august 2006 av Giddion Lenke til kommentar
ddd-king Skrevet 25. august 2006 Forfatter Del Skrevet 25. august 2006 (endret) To sampling rates muligheter: 22k og 44.1k 16bit oppløsning. 0 - 2^16 verdier. 8 bit har bare SNR = 48dB som er for dårlig. 16 bit har SNR = 96dB som er mer enn godt nok. To eksempel-filer er gitt under. result.txt viser rådata lagret i riktig format. result_spectrum.jpg viser tidsignal og spektrum for et signal tatt opp med lydkortet i Matlab. double[] mittfilter(double[] inn){ ret[0]=inn[0]; ret(1)=inn[1]; for (int i=2;i<length(inn);i++){ temp1 = 0.0495*inn[i] + 0.0990*inn[i-1] + 0.0495*inn[i-2]; temp2 = 1.2796*ret[i-1] -0.4776*ret[i-2]; ret[i]=temp1+temp2; } return ret; } Metoden over er et 2. ordens lavpass filter med 3dB knekkfrekvens lik 4kHz som jeg ønsker å kjøre rådataen min gjennom. Dette reduserer støy fra oppdateringene av pixlene med frekvens i MHz området. result.txt Endret 25. august 2006 av ddd-king Lenke til kommentar
Giddion Skrevet 25. august 2006 Del Skrevet 25. august 2006 Jepp da har jeg nok til å starte å jobbe Lenke til kommentar
Giddion Skrevet 25. august 2006 Del Skrevet 25. august 2006 woho det gikk kjapt, jeg kunne bruke masse kode fra mitt VOIP prosjekt, så jeg er ferdig med en test app. den har ingen innstillinger (tar opp i 44k 16bit). Den vil dumpe dataene i test.txt som skal poppe fram i samme dir. som programmet, og den vil slette all dataene i filen nestegang den kjører. programmet tar opp data i 1,5 sek men bruker bare dataene fra det første sek. Jeg har tenkt litt på settingene Fil navn Frekvens Lav klipp av signalet (klipper til 0 hvis signalet er lavere enn X) Holder det? Hvordan skal programmet få dataene? OpenAL vil bruke default recording device, se SoundSettings i cpl. Jeg har kun testet med SoundOut ikke mic. PS: Dette er en exe fil og av den grunn kan den teoretisk sett ha virus i seg. Jeg har ingen grunn til å tro det, men for å være på den sikre siden sjekk for virus. Ellers så er det bare å følge instruksene i vinduet og lykke til. YSoundPrinter.zip Lenke til kommentar
ddd-king Skrevet 25. august 2006 Forfatter Del Skrevet 25. august 2006 (endret) Nydelig! Mange takk for hurtig svar og godt arbeid. Skal se på kodene så snart jeg kommer til Trondheim. Litt hektisk nå om dagen... Endret 25. august 2006 av ddd-king Lenke til kommentar
ddd-king Skrevet 25. august 2006 Forfatter Del Skrevet 25. august 2006 kan du legge ut kildekoden og OpenAL.dll-filen. Eller må jeg installere OpenAL. Gjordet det siste og fikk ut en tekstfil med verdier slik jeg ønsker det. Ønsker kildekoden slik at jeg kan gjøre digital signal (mis)behandling direkte før jeg sender det over til et annet program. Lenke til kommentar
Giddion Skrevet 26. august 2006 Del Skrevet 26. august 2006 OpenAL må du laste ned selv jeg, mener du bare trenger OpenAL32.dll og wrap_oal.dll i det ferdige programmet. Alle må være v 1.1. Programmet må også linkes med OpenAL32.lib Når det gjelder koden, den ser ikke ut, men den funker fint. Jeg hadde planer om å finpusse litt på den, men sånn ble det ikke. YSoundPrinter.zip Lenke til kommentar
ddd-king Skrevet 26. august 2006 Forfatter Del Skrevet 26. august 2006 Takk. Jeg fant en ny metode på nattoget til trondheim igår: Nemlig at matlab kan compilere mine filer til C/C++. Samtidig blir det laget en executable fil. Denne filen og toolboxene som følger med er totalt ca. 7MB. For å kjøre exe filen på andre maskiner må de enten ha Matlab installert eller installere en "Matlab Component Runtime" som også kan generes av Matlab. Man får kun 1 self-extracting install fil. Har kompilert funksjonen "daq.m" som leser inn 1s fra lydkortet. Plotte rå lyd (spenning som funksjon av tid) og Frekvensspektrum. På neste bilde har jeg kjørt rådataen gjennom et 4.ordens lavpass filter med knekkfrekvens lik 3kHz. Den skarpe peaken rundt 3kHz er plystrelyden min. Etter filterering er den nesten borte. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå