I first discovered in this Applied Science video, that it’s possible to measure relative velocity by performing an FFT on the amplitude of the mixed signal of a laser and it’s reflection against a surface.
Math
Explained more clearly here, this equation relates the frequency of amplitude pulses to the relative velocity of the emitter and reflecting surface, with the beam-travel angle as a constant:
For a DL-7140-201 laser diode mounted at 60 degrees:
The diode also has varying wavelength as a function of both power and temperature: (from the datasheet)
Here’s an equation which approximates the wavelength as a function of the power in w and temperature in C. This assumes that the temperature→wavelength coefficient is unaffected by the power and vise-versa.
This will be useful in improving accuracy without having active temperature control (which I may still do with a small peltier)
Maximum output frequency
With the conditions
- Here’s a plot of interference frequency as a function of speed in m/s:

- At 35m/s (~80mph), the frequency is 44.5 MHz
- At 2m/s (~4mph), the frequency is 2.5 MHz
- If speed changes at 9.8 m/s (1g), the frequency changes at 12.5Mhz/s
Sampling Circuit Thoughts
My initial idea was to directly sample the output of a trans-impedance amplifier based on a random op-amp with an stm32 ADC directly… that clearly won’t work.
My immediate thought after calculating the peak frequency to be 45MHz was to use SDR… There’s a project which scans the tuning frequency of an RTL-SDR or HackRf to produce a wider spectrum graph, and it’s capable of plenty fast tuning. But this would necessitate an expensive HackRf (or upconverter), and a Linux system, since no commercially available SDR’s (which I know of) have simple SPI or similar interfaces.
Instead of a discrete SDR, I think an SI5351A combined with some mixer… maybe a pre-integrated ADE-1.
Here’s a quick diagram of what I have in mind:

I’m not sure what kind of SNR to expect, but at least I can be pretty sure an smt32g4 clocked ~150Mhz will be plenty fast at fft. The ADC can sample at 5Ms/s, and (at least on an H7) a 512 sample FFT takes ~37,000 clock cycles… Even excluding overhead, the FFT will not be able to keep up with the ADC running at full speed. The FFT’s can only be run at a maximum of ~4Khz. It will at best be able to keep up with the ADC running at ~2.1Ms/s. It’s probably better to have the dead time and run the ADC at full speed to increase the bandwidth of each FFT.
The FFT range will be 0-2.5Mhz in 512 bins under this circumstance. Assuming a more conservative FFT run-frequency of 2Khz, maximum frequency of 50Mhz, and desired output rate of 100hz:
- Speed resolution of 0.00488 m/s
- Time to run ~100 FFT’s on the same frequency segment to be averaged to improve accuracy
If we set a minimum number of averages at 5, there’s technically a 40x margin in compute speed.
This might also leave some time in each cycle to allocate to capture ride height (any maybe compensate for it’s change’s impact on overall velocity), or to a second laser on each “sensor” board.
This could also be further reduced by “tracking” the signal by assuming that the acceleration of the car will not be very fast and reducing the scanning range, keeping it centered around the current velocity. If the car’s maximum acceleration is (it’s far less than this), then it’s velocity can only change by 20% of the full range every reporting period, and 1% every FFT, which is a 5x and 100x optimization, respectively.
Components Cost Estimation
| Thing | Part | Total Cost: 35$ |
|---|---|---|
| MCU | stm32g441 | 4 |
| LNA(s) | BGA427 | 1..2 |
| Clock Generator | Si5351 | 2 |
| Mixer | ADE-1+ | 5 |
| TIA Optimized Op-Amp | LTC6560 | 6 |
| Laser Diode | DL-7140-201 | 2 |
| General use Op-Amp for current source | TLV9062 | 3 |
| Passives for filters n stuff | Misc. | 5 |
| Power Supply | Standard DC-DC and two 3.3v Regulators | 6 |
- Mini-Circuits has sent me free stuff before, so mixers can probably be acquired for free along with some passives from them
- We can chose alternative op-amps from AD since they have sent us stuff before?