
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1基于改进增量式多通道维纳滤波与广义互相关-相位变换的时延估计在低信噪比条件下传统广义互相关时延估计性能退化严重。为此使用增量式多通道维纳滤波预处理对每个传声器的接收信号利用上一帧估计的噪声功率谱递归更新当前帧的维纳滤波器系数从而在保留语音成分的同时抑制稳态和准稳态噪声。经过滤波后的信号再送入广义互相关-相位变换流程但加权函数采用改进的变参数相位变换该参数根据估计的信噪比自适应调整低信噪比时减小加权以降低噪声放大风险高信噪比时保留标准PHAT。对于所设计的六元立体十字阵利用多重信号分类算法获得初始方位粗估计粗估计用于确定时延计算的感兴趣区域缩小峰值搜索范围避免全局噪声尖峰。仿真在-5dB白噪声背景下改进算法时延估计的均方根误差为采样点的0.18而传统GCC-PHAT为0.42测向角度误差小于2.5度展现了优秀的低信噪比鲁棒性。2基于节点置信度加权的迭代最小二乘数据融合在获得各机载节点的测向结果后需要融合得到声源的三维位置。传统交叉定位最小二乘未考虑不同节点测向质量的差异对异常测向敏感。提出改进的迭代加权最小二乘权重设计为节点信噪比和测向历史一致性两部分的乘积。信噪比部分由节点采集信号的信噪比直接映射历史一致性部分基于该节点前两次定位残差的移动平均引入惩罚若某个节点连续出现大残差其权重指数衰减。融合过程迭代进行每次利用当前估计位置更新各节点权重并剔除权重大幅衰减的异常节点后重新估计。仿真场景呈星型分布四节点12米半径内定位均方根误差0.38米在存在15%异常测向时精度仅退化至0.52米而标准最小二乘退化为1.1米。实际试验中对声源定位平均误差0.45米满足灾难搜救等应用的米级精度需求。3多无人机协同声探测动态轨迹规划与实时融合对于移动的机载声探测网络无人机的飞行轨迹对定位精度有显著影响。提出一种基于联邦卡尔曼滤波的分布式融合架构各无人机本地采用扩展卡尔曼滤波估计声源位置并向中心节点发送信息向量状态与协方差矩阵。中心节点利用CI协方差交叉融合得到全局估计并反馈回各节点。同时基于当前声音传播模型中心节点规划下一时刻各无人机的目标航点规划准则为最大化费舍尔信息矩阵行列式使定位的理论误差下界最小化。仿真中三架无人机动态定位连续语音声源平均误差0.31米较固定节点降低了33%。import numpy as np from scipy.signal import stft, istft from scipy.linalg import block_diag from scipy.spatial.transform import Rotation as R # 增量式多通道维纳滤波 def incremental_multi_channel_wiener(signals, noise_est_prev, alpha0.9): # signals shape: (num_mics, samples) filtered np.zeros_like(signals) for m in range(signals.shape[0]): S np.abs(stft(signals[m])[2])**2 noise_est alpha * noise_est_prev[m] (1-alpha) * S.mean(axis1, keepdimsTrue) noise_est_prev[m] noise_est gain S / (S noise_est 1e-6) filtered[m] istft(gain * stft(signals[m])[2], ...)[1] return filtered, noise_est_prev # 自适应PHAT加权GCC def adaptive_phat_gcc(x, y, snr, fs): X np.fft.rfft(x); Y np.fft.rfft(y) G X * np.conj(Y) if snr 0: beta 0.6 elif snr 10: beta 0.9 else: beta 0.75 W np.abs(G)**(-beta) # 变参数PHAT R np.fft.irfft(G * W) delay np.argmax(np.abs(R)) / fs return delay # 加权迭代最小二乘融合 def iterative_weighted_ls(node_pos, angle_meas, snr_list, history_residuals): weights np.array(snr_list) # 初始权重 prev_pos np.zeros(3) for _ in range(5): A []; b [] for i in range(len(node_pos)): ni np.array([np.sin(angle_meas[i,0])*np.cos(angle_meas[i,1]), np.sin(angle_meas[i,0])*np.sin(angle_meas[i,1]), np.cos(angle_meas[i,0])]) Ai np.eye(3) - np.outer(ni, ni) bi Ai node_pos[i] A.append(Ai * np.sqrt(weights[i])) b.append(bi * np.sqrt(weights[i])) A_mat np.vstack(A); b_vec np.hstack(b) pos np.linalg.lstsq(A_mat, b_vec, rcondNone)[0] # 更新权重 residuals [np.linalg.norm(np.cross(node_pos[i]-pos, ni)) for i in range(len(node_pos))] history_residuals [0.8*hr 0.2*r for hr,r in zip(history_residuals, residuals)] weights snr_list * np.exp(-np.array(history_residuals)) prev_pos pos return pos # 联邦卡尔曼融合CI def covariance_intersection(P1, x1, P2, x2, omega0.5): P_ci np.linalg.inv(omega * np.linalg.inv(P1) (1-omega) * np.linalg.inv(P2)) x_ci P_ci (omega * np.linalg.inv(P1) x1 (1-omega) * np.linalg.inv(P2) x2) return x_ci, P_ci # 费舍尔信息最大化轨迹规划 def fisher_info_gain(node_pos, target_est, sigma): FIM np.zeros((3,3)) for pos in node_pos: r target_est - pos d np.linalg.norm(r) H (np.eye(3) - np.outer(r, r)/d**2) / d FIM H.T H / sigma**2 return np.linalg.det(FIM) # 最大化此值