信号检测基于matlab MVDR算法多个人体生命体征检测含Matlab源码 2417期
Posted 海神之光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了信号检测基于matlab MVDR算法多个人体生命体征检测含Matlab源码 2417期相关的知识,希望对你有一定的参考价值。
⛄一、微弱信号检测
空间信号环境复杂,在强信号背景下,微弱信号很难被检测到。若能从接收信号中消除强信号,则该问题便可迎刃而解。
1 问题分析
空间谱估计技术具有分辨率高、抗噪声能力强的优点,但是也具有一定不足。当入射信号中存在强信号时,微弱入射信号很容易被“淹没”,难以检测。主要表现在两个方面:一是由于微弱信号对应特征值较小,在式(13)中被误认为是小特征值,造成信号源数目J估计不准确,微弱信号被当作噪声处理;二是在强信号背景下,微弱信号在式(14)中对应的谱峰不明显、不准确,难以辨识。
在强信号背景下有效检测微弱信号,是本文的研究目的。
2 检测方法
本文方法的思想是从阵列信号中消除强信号,保留微弱信号,然后再进行谱估计检测微弱信号。具体分析如下:
假设s V(t)是强入射信号,入射方向为φV,则其对应的导向矢量为
阵元m接收信号为
为消除强信号,本文构建新的阵列信号
其中
3 方法步骤
根据2.2小节分析,本文提出的检测方法步具体骤如下:
(1)计算阵列信号的协方差矩阵,并进行特征分解;
(3)依次按式(18)构建新的阵列输出信号,分别消除强信号s1(t),s2(t),…,s v(t);
(4)按步骤(1)-(2)再次进行空间谱估计,检测微弱信号及其入射方向。
⛄二、部分源代码
close all;clc;clear all;
%
% %% 雷达参数
% %参数设定
% f0=77e8;%起始频率
% numADCSamples = 200;%采样点数
% Doppler_Number = 200;%多普勒通道数
% freqSlopeRate = 70.006e12;%调斜率,单位:MHz/us
% adcSampleRate = 4e6;%快时间ADC采样率,单位:Ksps
% numChirps = 128;%一个frame的chirp数
% Ts = 50e-3;%每个frame之间的时间
% vc = 3e8;%光速,单位:m/s
% lambda = vc/f0;%波长,以77GHz计算,单位:m
% % dmax = (adcSampleRate * 1e3) * vc / (2 * freqSlopeRate * 1e12);%最大不模糊距离(这里将参数转成国际制计算)
% d = lambda / 2;%阵元间距
% NofPules = 1;
% xunni_annate=2*4;
% Q=180;
% Tc=64e-6; %chirp总周期
% %% 算法参数
% rangeFFTNum = 256;%距离维FFT点数
% useFramesNum = 1200;%useFramesNum个frame计算一次
load channel_data %1200x200x8 (每帧取一个chirp)帧采样点
%% 数据处理
loop_cnt = floor(length(channel_data(:,1,1)) / useFramesNum);
% loop_cnt = 1;
for k = 1:loop_cnt
use_channel_data = channel_data((k - 1) * useFramesNum + 1 : k * useFramesNum,:😅;
%-----------------均值对消和脉冲压缩
rangeProfile = MTI_PulseCompression(use_channel_data,0,rangeFFTNum); % 1024x256x8 complex double
sum_rangProfile = sum(abs(rangeProfile(:,:,1)),1);
[~,targetIndex] = max(sum_rangProfile);
%-----------------计算角度谱
searchAngleRange = 60;%角度谱搜索范围为±searchAngleRange度
% data=rangeProfile;
% save targetIndex.mat targetIndex ;
[~,azimuSpectrogram,Rxv] = IWR1642ODS_DOA(rangeProfile,2,useFramesNum,searchAngleRange);
%------------------寻找不同角度的目标
maxAzimu = max(azimuSpectrogram,[],2);% 121x1 max(A,[],2)返回包含每行最大值的列向量
[values,peaks_index] = findpeaks(maxAzimu,‘minpeakheight’,3000000);%findpeaks(maxAzimu);
% [peaks_values,peaks_index] = findpeaks(maxAzimu);
figure(9); hold on; box on;
plot(1:length(maxAzimu),maxAzimu);
plot(peaks_index,maxAzimu(peaks_index),‘bd’)
% -------------------加权得到不同的目标心跳呼吸
target_rangeProfile = zeros(useFramesNum,length(peaks_index));%存放目标经过角度滤波后的距离像数据,后续呼吸心跳针对这个数据来处理,一列是一个目标的距离像数据
% xt = [rangeProfile(:,targetIndex,2),rangeProfile(:,targetIndex,3),rangeProfile(:,targetIndex,6),rangeProfile(:,targetIndex,7)];%1024x4 complex double,rangeProfile(:,targetIndex,2),rangeProfile(:,targetIndex,3),rangeProfile(:,targetIndex,6),rangeProfile(:,targetIndex,7)
xt = squeeze(rangeProfile(:,targetIndex,:));%提取8通道里面每个targetIndex=49的1024x8 complex double,rangeProfile(:,targetIndex,2),rangeProfile(:,targetIndex,3),rangeProfile(:,targetIndex,6),rangeProfile(:,targetIndex,7)
for m = 1:length(peaks_index)
detAngle = -searchAngleRange + peaks_index(m) * (searchAngleRange * 2 / length(azimuSpectrogram(:,1)));
fai = 2 * pi * sin(detAngle / 180 * pi) * d / lambda;
aTheta = [1,exp(-1j*1*fai),exp(-1j*2*fai),exp(-1j*3*fai),exp(-1j*4*fai),exp(-1j*5*fai),exp(-1j*6*fai),exp(-1j*7*fai)].';%
Wopt = (Rxv * aTheta) / (aTheta' * Rxv * aTheta);
target_rangeProfile(:,m) = xt * Wopt;%target_rangeProfile 1024x2 循环两次
end
[breathRate,heartRate] = get_heartBreath_rate(target_rangeProfile,1/Ts);
figure(22);
imagesc([0 , rangeFFTNum],[-searchAngleRange +searchAngleRange],abs(azimuSpectrogram));xlabel(' Distance(m) ');ylabel(' Angle(°)');
pause(0.1);
end
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]张兴良,方晓飞,王天一.一种基于空间谱估计的微弱信号检测方法[J].通信与信息技术. 2020(01)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
以上是关于信号检测基于matlab MVDR算法多个人体生命体征检测含Matlab源码 2417期的主要内容,如果未能解决你的问题,请参考以下文章
心电信号基于matlab心率检测含Matlab源码 1993期
m基于GRNN广义回归神经网络和HOG特征提取的人体姿态检测识别matlab仿真,样本集为TOF深度图
心电信号基于matlab Simulink胎儿心电信号提取含Matlab源码 1550期
心电信号基于matlab GUI自适应滤波+平滑滤波+小波滤波心电信号处理含Matlab源码 1809期