%% 求距离 distance = zeros(1333,13); for k = 1 : 13 load(['line_noise',num2str(k),'.mat']); reference = RFline_noise(3136:3336,1); for t = 1 : 1333 NCC = zeros(5800,1); for i = 3000 : 3200 window = RFline_noise(i:i+200,t); NCC(i) = corr(reference,window); end distance(t,k) = (3136 - find(NCC == max(NCC))) * 0.0077; end end %% 滤波 fc = 300; fs = 50000; [b,a] = butter(1,fc/(fs/2)); dis = zeros(1333,13); for i = 1 : 13 dis(:,i) = filter(b,a,distance(:,i)); end %% 求加速度 max_time = zeros(13,1); t = 0:1/1333:0.9993; a = zeros(1333,13); for i = 1:13 a(1,i) = dis(1,i); for j = 2 : 1333 a(j,i) = (dis(j,i) - dis(j-1,i)) /1333; end max_time(i) = find(a(:,i) == max(a(:,i))); % max_time(i) = find(distance(:,i) == max(distance(:,i)),1,"first"); end plot(max_time); %% [X,Y] = meshgrid(1:1:1333,1:1:13); figure;plot3(X',3*Y',distance,'k'); grid on; figure;plot3(X',3*Y',dis,'k'); grid on; figure;plot3(X',3*Y',a,'k'); grid on; save distance; 详细解释上述代码
时间: 2024-04-01 07:37:12 浏览: 104
求距离的代码
这段代码主要是对一组声波信号进行处理,包括距离计算、滤波和加速度计算等。具体解释如下:
1. 距离计算:从13个.mat文件中读入声波信号数据,取出每个文件中RFline_noise的3136-3336部分作为参考信号reference,然后在每个文件中取出5800个200个点的窗口,与参考信号进行相关系数计算(NCC),找出最大相关系数所在位置,计算该位置到参考信号位置的距离distance,并保存在大小为1333x13的矩阵distance中。
2. 滤波:对distance矩阵中每一列数据进行一阶Butterworth低通滤波,截止频率为300Hz,滤波后结果保存在dis矩阵中。
3. 加速度计算:对dis矩阵中每一列数据进行差分计算,每个采样点的加速度等于当前位置距离减去上一个位置距离除以采样间隔时间1333。找出每一列中加速度最大值所在的位置max_time,并保存在大小为13x1的矩阵max_time中。
4. 绘图:将max_time矩阵绘制成折线图,以观察信号的变化趋势。同时,将distance、dis、a三个矩阵分别绘制成3D图像,以更直观地展示声波信号的特征。
5. 存储:将distance矩阵存储到名为“distance.mat”的文件中。
需要注意的是,这段代码中还涉及一些变量的定义和初始化,如NCC、fc、fs、b、a等,这些变量的具体含义可以根据上下文理解。
阅读全文