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
There was an error while thanking
Thanking...

Go to full version
Powered by SMFPacks Advanced Attachments Uploader Mod