This picture below shows the setup. The two white speakers emit the waveform. The microphone is a small electret wired microphone and is sitting on the laptop keyboard. The big wooden disk is a target.
The program plays a pre-recorded waveform on the speakers while simultaneously recording audio from the microphone. In essence, the program implements two GStreamer pipelines. A transmit pipeline
gst-launch filesrc location=<whatever.wav> ! wavparse ! pulsesink
which gets restarted every time it finishes, and a receive pipeline
gst-launch pulsesrc ! fakesink
from which the recorded data are snatched from the fakesink using signal handoffs right before the data are deleted. Once the data are recorded, they're sliced into equal pulses (the pulse durations are known beforehand) and aligned so that the peaks are all at the start of the recorded pulses. Consecutive blocks of pulses are averaged sample-by-sample to reduce noise without impacting resolution. The result looks like the following screenshot, in which the target's echo appears between 77 cm and 166 cm.
Next steps for this project:
1. Apply a constant false alarm rate (CFAR) detector to the data with a user-defined trigger and window.
2. Locate targets using the centroid of CFAR detection blobs. From that,
3. Estimate target velocity.
4. (Farther out.) Switch to a dual pulse repetition frequency (PRF) waveform to improve velocity and range resolution simultaneously.
No comments:
Post a Comment