| Electronics > Beginners |
| Making a sound camera |
| (1/13) > >> |
| daslolo:
Hello, Wouldn't it be nice to see sound, like this? The common way to do that is with a FPGA pulling FFT of each microphone and calculating some phase delta. Is it possible to do that without resorting to programming, maybe even using analog components? In other word: M-M-M | | | M-M -M | | | M-M-M for each M determine the phase shift with the neighbor M of the frequency with the highest amplitude light up the LED on the other side of the PCB for each M with (phase shift if it's positive, meaning the sound is ahead of the neighbor mics) * amplitude EDIT: changed the title, since we're still figuring out how to make this thing. |
| Sparker:
The dumbest solution to this problem coming to my mind is: If you have a sinewave with frequency w and a delayed sinewave with same frequency phi, you multiply them and: cos(w*t)*cos(w*t + phi) = 0.5*cos(2*w*t + phi) + 0.5*cos(phi) then you can low-pass filter it to get rid of the high frequency part, and the low-frequency part depends only on to the phase difference of the sinewaves :-+. Now here comes a problem, for different frequencies the same phase shift means different distance traveled: delta-phi = 2*pi*distance/wavelength, so you must have some way to differentiate different frequencies. Really this thing is just asking for DSP and FFT. :) |
| daslolo:
I like your solution, it sings. I'd really like to not use chips that I have to program so maybe have each microphone go through N filters that barely overlap before going to their own phase detectors. M-F(n)-PHD(n) \ -F(n+1)-PHD(n+1) - combine to form RGB - LED -F(n+2)-PHD(n+2) / .... |
| MasterT:
--- Quote from: daslolo on April 30, 2018, 11:27:42 pm ---M-M-M for each M determine the phase shift with the neighbor M of the frequency with the highest amplitude --- End quote --- The problem that, each M has it's own highest magnitude frequency. FFT is the only solution, not necessarily FPGA - small uCPU board like stm32 , sam3x or atmega328 would be sufficient |
| daslolo:
--- Quote from: MasterT on May 01, 2018, 01:22:35 am --- --- Quote from: daslolo on April 30, 2018, 11:27:42 pm ---M-M-M for each M determine the phase shift with the neighbor M of the frequency with the highest amplitude --- End quote --- The problem that, each M has it's own highest magnitude frequency. FFT is the only solution, not necessarily FPGA - small uCPU board like stm32 , sam3x or atmega328 would be sufficient --- End quote --- In my experience with the esp32 ADC conversion takes time, 1uS on the spec sheet, way more if accessed via Arduino lib (1K sample take 10 ms!!!) and I think (haven't figured out how to test that) that if I ADC one pin, then another one, the other one will be sampled 1uS after the first one, so there will be already phase shift caused by sampling. Now I may be wrong and maybe there is a way to freeze all the ADC buckets at the same time. |
| Navigation |
| Message Index |
| Next page |