Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

What you can do with spectrum analyzers is pretty awesome. In my first year in a lab I built a program that scrapes the NIST spectral database, reads the data from a spectrum analyzer attached to the computer, and figures out which types of atoms the thing the spectrum analyzer is looking at contains. This is harder than it sounds. Essentially you're trying to match tens of thousands of sets of spectral lines of varying strength to a noisy spectrum measurement (something like this but noisier: http://upload.wikimedia.org/wikipedia/en/thumb/5/5d/Spectra-...).

The problem is that one element, say natrium, has many spectral lines of varying strength. You're trying to find a set of elements that best explains the measured spectrum. If you plotted all spectral lines from all elements on a spectrum, it would be completely black because there are so many. In the end it only worked well for fluorescent tubes, but it could tell you what's in them, even things a human would have a very hard time discovering by looking at the spectrum and manually comparing it to the NIST database (the university has all kinds of weird lamps like natrium lamps, blacklights, and fluorescent tubes in many colors all containing different stuff, and looking at computer monitor pixels is fun too).

My program output an element X who's name I forgot for many of the lamps, but when I plotted its spectral lines over the spectra I couldn't see the match clearly, so I added a parameter to the algorithm so that it would be more restrictive on the number of different elements returned. In the presentations of the lab the prof commented "many of these tubes also contain element X, but you can't see it with the spectrum analyzer you used, you need a higher quality one". Bummer.



The original posting describes a spectrum analyzer that shows the strength of radio-frequency signals. It's built by reprogramming a toy that uses the Texas Instruments CC1110F32 RF system-on-a-chip (http://focus.ti.com/docs/prod/folders/print/cc1110f32.html)

You (jules) are discussing a spectrometer, that shows the strength of optical spectral lines to identify materials (http://en.wikipedia.org/wiki/Spectrometer). These are two totally different things - radio-frequency vs optical. (Just want to keep the discussion from getting totally confused.) Also, Natrium == Sodium (Na)


You are completely right. Now that I'm reading it again they are repeating "radio" a lot of times and there are a ton of clues that this is radio frequency, but the picture of the device on the yellow peppers just triggered "oh they are measuring the light spectrum of yellow peppers". Sorry for the confusion.


    In my first year in a lab I built a program 
    that scrapes the NIST spectral database, reads the data 
    from a spectrum analyzer attached to the computer, and
    figures out which types of atoms the thing the spectrum 
    analyzer is looking at contains. This is harder than it 
    sounds.
No no, trust me, that sounds hard. :-)


It may sound hard but most of it is pretty mundane. Scraping the NIST database is just a program visiting pages for wavelength ranges 0-100, 100-200 etc. to get all the data. Then it parses the HTML tables into a hash table indexed by element name ("H", "O", "C", "Na") which gives for each element an array of pairs of floating point numbers (wavelength of spectral line, strength of spectral line).

Talking to the spectrometer is boring too: you have your program execute some other program that comes with the spectrometer, which talks to the spectrometer and saves a file containing a list of floating point numbers which describes a graph like this (http://upload.wikimedia.org/wikipedia/en/thumb/5/5d/Spectra-...) with data points. The floating point numbers come in a weird format that the standard floating point parsing function can't handle, so you munge it a bit with a regex.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: