求解离散信号数据的加权中心(杠杆平衡点)及扭矩计算方法
离散信号加权中心(杠杆平衡点)计算方案
一、直接计算平衡点(最高效解法)
杠杆平衡的核心是总力矩为0,推导后可直接得到平衡点的解析公式,无需遍历计算扭矩:
Σ(信号强度wᵢ × (Hertz值xᵢ - 平衡点x₀)) = 0
变形后得到:x₀ = (Σ(wᵢ × xᵢ)) / Σ(wᵢ)
针对180行数据,不同工具的实现方式:
Excel:直接用函数组合计算
=SUMPRODUCT(A2:A181, B2:B181)/SUM(B2:B181)(A列为Hertz数据,B列为信号强度)
Python(矩阵乘法实现):
将Hertz和信号强度转为列向量,用矩阵转置点乘完成批量计算:import numpy as np # 替换为你的真实数据 X = np.array(your_hertz_data).reshape(-1, 1) # 180×1列向量 W = np.array(your_signal_strength).reshape(-1, 1) # 180×1列向量 numerator = W.T @ X # 矩阵转置后点乘,计算Σ(wᵢ×xᵢ) denominator = W.T @ np.ones_like(X) # 计算Σ(wᵢ) balance_point = numerator / denominator print("平衡点Hertz值:", balance_point[0][0])
二、通过扭矩最小值定位平衡点
如果需要通过计算各Hertz点的总扭矩来验证结果,可按以下方式批量实现:
核心逻辑
对每个Hertz点xₖ,总扭矩为所有数据点的信号强度wᵢ × (xᵢ - xₖ)之和,平衡时该总和的绝对值最接近0。
工具实现
Excel:在第三列(如C2单元格)输入公式后下拉填充:
=SUMPRODUCT($B$2:$B$181, $A$2:$A$181 - A2)之后筛选C列中绝对值最小的行,对应的A列值即为离散数据中最接近真实平衡点的Hertz值。
Python(矩阵乘法批量计算):
构造差值矩阵,通过矩阵乘法一次性计算所有点的扭矩:# 基于上文的X和W向量 # 构造180×180的差值矩阵,第i行第k列对应xᵢ - xₖ diff_matrix = np.tile(X, (1, 180)) - np.tile(X.T, (180, 1)) # 计算每个xₖ对应的总扭矩 torque_values = diff_matrix.T @ W # 找到扭矩绝对值最小的点 closest_idx = np.argmin(np.abs(torque_values)) balance_point_discrete = X[closest_idx][0]
三、方法对比
- 直接计算加权平均:一步得到精确解析解,计算量极小,适合大规模数据
- 扭矩找最小值:适合验证结果,得到的是离散数据中最接近真实平衡点的近似值,计算量略大但180行数据完全无压力
内容的提问来源于stack exchange,提问作者Mike Christie
相关产品推荐
相关产品推荐

