速度信号换算位移信号

需求

振动台会产生速度信号,在已知信号的采样频率和速度信号串数据进行位移仿真

技术

采用Python的算法库进行编写,前端使用的是JS,后端采用Java接口进行调用,主要的计算内容采用Python进行计算

对照

为了判定Python算法的准确性,采用Matlab的专业信号处理工具和算法进行对照,通过误差计算判断算法的效率和优劣程度

Python的算法

  1. 此处使用导入TXT文件的数据进行模拟,TXT文件采用真实的数据,并且定义信号的采样频率
 n = len(data)
 # 过滤直流分量---------------------------------
   
 # -------------------------------------------
 # 时间变量
 L = np.arange(n)
 t = L / f_s
 # 创建新位移数组
 s_displacement = np.zeros(n)

此处的t_V是给出的速度信号,产生的幅度谱

在这里插入图片描述

  1. 将频率的频率轴定义出来
# 计算频率轴
 f = np.arange(n) * f_s / n
  1. 计算速度的频谱
 fft_data = np.fft.fft(data)
  1. 计算速度幅度谱(转化实际的纵坐标)---------------计算速度幅度,相位(b_powerSpectrum:未被归一化幅度)
 amplitude = np.abs(fft_data / (n / 2))
  1. 计算幅度谱的主频率的最大值
[powerSpectrum_max, max_index] = max(b_powerSpectrum(1:n/2));
  1. 计算符合条件的数据,value表示数据,index表示下标,遍历计算数据的极值(极大值),返回极大值数据和极大值下标
#极大值数据
 extremes = []
    index = []
    for i in range(1, len(power)//2):
        if power[i] > power[i - 1] and power[i] > power[i + 1] and power[i] >= threshold:
            extremes.append(power[i])
            index.append(i)
    # 速度的幅度值
    v_amplitude = amplitude[index]
  1. 速度的频率
 v_freq = f[index]
  1. 计算主频率的速度相位数据
 FFTang = np.angle(fft_data)
    v_w0 = FFTang[index]
  1. 位移初始值计算
 signalNum = len(v_amplitude)
    s_bn = np.zeros(signalNum)
    s_w0 = np.zeros(signalNum)
    for j in range(signalNum):
        s_bn[j] = v_amplitude[j] / (2 * f_s * np.sin(np.pi * v_freq[j] / f_s))
        s_w0[j] = v_w0[j] - (0.5 - v_freq[j] / f_s) * np.pi

    s_data0 = 0
    for k in range(signalNum):
        s_data0 += s_bn[k] * np.cos(s_w0[k])
          s_displacement[0] = s_data0
  1. 计算位移信号
 for i in range(1, n):
        s_displacement[i] = s_displacement[i - 1] + ((data[i] + data[i - 1]) / 2) * (1 / f_s)
    # 2次过滤直流分量
    s_displacement = dcPassTool(s_displacement, f_s, freq_cutoff)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光头屠手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值