分别写一段根据桥梁GNSS加速度数据去噪并获取桥梁频率的matlab和python代码
时间: 2024-05-25 16:16:55 浏览: 23
Matlab代码:
%% 读取数据
data = load('GNSS加速度数据.txt');
t = data(:,1); % 时间
a = data(:,2); % 加速度
%% 去噪
a = medfilt1(a, 5); % 中值滤波
a = detrend(a); % 去除趋势
%% 获取频率
fs = 1 / mean(diff(t)); % 采样频率
n = length(a); % 数据点数
f = (0:n/2-1)*(fs/n); % 频率范围
A = fft(a) / n; % 傅里叶变换
P = abs(A(1:n/2)).^2; % 功率谱密度
[maxP, index] = max(P); % 找到最大功率密度对应的频率
f_bridge = f(index); % 桥梁频率
Python代码:
import numpy as np
from scipy.signal import medfilt
# 读取数据
data = np.loadtxt('GNSS加速度数据.txt')
t = data[:,0] # 时间
a = data[:,1] # 加速度
# 去噪
a = medfilt(a, 5) # 中值滤波
a = np.subtract(a, np.polyval(np.polyfit(t, a, 1), t)) # 去除趋势
# 获取频率
fs = 1 / np.mean(np.diff(t)) # 采样频率
n = len(a) # 数据点数
f = np.arange(n/2) * (fs/n) # 频率范围
A = np.fft.fft(a) / n # 傅里叶变换
P = np.square(np.abs(A[0:n//2])) # 功率谱密度
index = np.argmax(P) # 找到最大功率密度对应的频率
f_bridge = f[index] # 桥梁频率