这是大三下学期的一个嵌入式课设。记录以作反思。
一、开发环境
1、电脑端:Android Studio
2、手机端:VIVO Z3
3、开发语言:Java
4、目标:在智能手机上实现 FMCW Radar 雷达测距
二、连续调频波雷达(FMCW)
连续调频波雷达,也称FMCW(英文名字的缩写)。至于FMCW雷达的基本原理,其他不少博主都有介绍,这里我简单说一下我的理解:
1、FMCW 雷达周期性地发射 chirp 信号;
2、chirp 信号,就是频率随时间线性增长,如下图所示
3、FMCW雷达系统框架如下图所示。IF:中频信号,是Tx和Rx的频率之差。
4、测距:声波从发射到接收需要一定的时间,在这段时间内,所经过的距离是与被测目标距离的两倍。
三、实现方法
在电脑端通过Android Studio编程开发出一个能发送Chrip信号和接收被反射回来的Chrip信号的APP。源码链接:
链接:https://pan.baidu.com/s/1Q8FXurQ-aqRgQxsTaTO3bw?pwd=eda6
提取码:eda6
看懂源码后,把APP移植到手机。如何移植到手机,其他博主也有很多讲解,不会的搜一搜就好。
移植到手机后,记得打开APP的麦克风权限,不然接收不到反射回来的信号。发送信号和接收信号都被存在手机存储中固定的位置,源码中有说明,找到文件后,在电脑端用matlab分析。
Fs=48000;
fid0 = fopen('C:\Users\86151\Desktop\录音文件\5F.pcm','r');%发送信号
fid1 = fopen('C:\Users\86151\Desktop\录音文件\5J.pcm','r');%接收信号
x0 = fread(fid0,50000,'int16');%10000
x1 = fread(fid1,50000,'int16');
%sound(x,Fs);
%figure(1)
%plot(x)
x2=(x0.*x1);
fp=1.1*4000;
hlpf = fir1(256, 2 * fp / Fs);
x2_lpf = filter(hlpf,1,x2); % 差频
%x2_lpf_freq= abs(fftshift(fft(real(x2_lpf))));
subplot(2,2,1);
N = length(x0);
time = (0:N-1)/Fs;% 计算时间坐标
plot(time,x0);
xlabel('时间');
subplot(2,2,2);
spectrogram(x0,1024,512,1024,Fs);
subplot(2,2,3);
spectrogram(x1,1024,512,1024,Fs);
subplot(2,2,4);
spectrogram(x2_lpf,1024,512,1024,Fs);
figure(1)
window = 1024;
noverlap = window/2;
%f_len = window/2 + 1;
%f = linspace(0, 150e3, f_len);
[s, f, t, p] = spectrogram(x2_lpf, window, noverlap , 1024, Fs);
figure(2);
d=340*f/50000; %2*斜率=50000
imagesc(t, d, abs(s));xlabel('时间'); ylabel('距离');
colorbar;
figure(3)
plot(d,p); xlabel('距离');
接收到的信号由于手机性能,会有50ms左右的延迟。记得裁掉再通过matlab分析,不然误差会很大。我使用AU进行裁剪,对于能打开pcm文件的APP应该也可以进行裁剪。
举个例子:离被测目标1.5M左右,频率范围是16KHz~20KHz,载波速率以声速表示。通过matlab分析的结果如下:
左边的图表示中频信号,右边的图表示距离。
四、总结
也不知道总结个啥。做这个课设的过程中遇到不少问题,增长了知识,也增长了见识。祝我好运,也祝你好运。