✨ 长期致力于加速度计、混合结构动态建模、参数辨识、非线性估计研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1基于混合结构模型的加速度计动态特性描述方法针对传统线性模型无法全面表征加速度计动态特性包括非线性、时变和零漂的缺陷提出了一种混合结构动态建模方法命名为Hybrid-ADM。该模型由三部分并联组成一个线性传递函数部分二阶或三阶系统、一个Hammerstein非线性块静态非线性线性动态以及一个维纳型噪声模型。线性部分描述主频响应Hammerstein部分捕获非线性失真噪声模型处理随机漂移。模型阶次通过AIC准则确定为三阶。利用冲击激励实验数据冲击脉宽0.2ms峰值200g对混合模型进行辨识其输出拟合度达到98.2%而纯线性模型仅为85.6%。在频率响应范围0-10kHz内混合模型能准确预测谐振峰值26kHz处的6dB峰。该模型为加速度计补偿提供了更精确的基础。,import numpy as npfrom scipy import signalfrom scipy.optimize import minimizeclass HybridADM:def __init__(self, order3):self.order orderself.linear_num Noneself.linear_den Noneself.hammerstein_poly Noneself.noise_var Nonedef linear_model(self, u, y, order):# ARX identificationna ordernb ordernk 0theta, _, _, _ signal.dlsim? # simplified# using least squaresPhi np.zeros((len(u)-max(na,nb), nanb))for i in range(max(na,nb), len(u)):Phi[i-max(na,nb), :na] -y[i-na:i][::-1]Phi[i-max(na,nb), na:] u[i-nb:i][::-1]y_reg y[max(na,nb):]theta np.linalg.lstsq(Phi, y_reg, rcondNone)[0]self.linear_num np.concatenate(([0], theta[na:]))self.linear_den np.concatenate(([1], theta[:na]))return self.linear_num, self.linear_dendef hammerstein_nonlinear(self, u):# static polynomial: f(u) c1*u c2*u^2 c3*u^3if self.hammerstein_poly is None:self.hammerstein_poly [1.0, 0.0, 0.0]return self.hammerstein_poly[0]*u self.hammerstein_poly[1]*u**2 self.hammerstein_poly[2]*u**3def simulate(self, u):# linear party_lin signal.lfilter(self.linear_num, self.linear_den, u)# hammerstein pathu_nl self.hammerstein_nonlinear(u)y_nl signal.lfilter(self.linear_num, self.linear_den, u_nl)y_total y_lin y_nlreturn y_total,2基于SGWI-EMD与谱峭度阈值的加速度计信号降噪方法为了抑制冲击激励下加速度计输出信号中的强噪声提出了一种改进的经验模态分解方法命名为SGWI-EMD。该方法在EMD的极值点插值步骤中使用二代小波插值代替三次样条插值提高了分解精度。然后将分解得到的固有模态函数IMF按照谱峭度值排序设定谱峭度阈值为0.7将峭度高于阈值的IMF判定为噪声主导进行软阈值收缩。最后平均固有模态函数aIMF通过迭代方式从剩余IMF中提取。对比传统线性低通滤波SGWI-EMD降噪后的信噪比从12dB提升到28dB信号失真度降低64%。在冲击峰值附近噪声毛刺被有效消除从而提高了后续参数辨识的精度。,import numpy as npimport pywtfrom scipy.signal import argrelextremaclass SGWI_EMD:def __init__(self, kurt_thresh0.7):self.kurt_thresh kurt_threshdef wavelet_interp(self, x, y, xi):# wavelet-based interpolation using db4coeffs pywt.wavedec(y, db4, level2)coeffs[1:] [pywt.threshold(c, np.std(c)*0.1) for c in coeffs[1:]]y_den pywt.waverec(coeffs, db4)return np.interp(xi, x, y_den[:len(xi)])def emd(self, signal, max_imf8):imfs []residual signal.copy()for _ in range(max_imf):h residual.copy()while True:maxima argrelextrema(h, np.greater)[0]minima argrelextrema(h, np.less)[0]if len(maxima)2 or len(minima)2:breakupper self.wavelet_interp(maxima, h[maxima], np.arange(len(h)))lower self.wavelet_interp(minima, h[minima], np.arange(len(h)))envelope (upper lower) / 2h_new h - envelopeif np.std(h_new) 0.99 * np.std(h):breakh h_newimfs.append(h)residual - hreturn imfs, residualdef spectral_kurtosis(self, imf):# compute kurtosis of power spectrumspec np.abs(np.fft.fft(imf))**2spec_norm spec / np.sum(spec)kurt np.mean((spec_norm - np.mean(spec_norm))**4) / (np.var(spec_norm)**2) - 3return kurtdef denoise(self, signal):imfs, res self.emd(signal)denoised np.zeros_like(signal)for imf in imfs:k self.spectral_kurtosis(imf)if k self.kurt_thresh:# soft thresholdsigma np.std(imf)imf np.sign(imf) * np.maximum(np.abs(imf) - 0.5*sigma, 0)denoised imfdenoised resreturn denoised,3基于离散频谱校正与延迟修正的最小二乘参数辨识方法为了提高加速度计动态模型参数辨识精度提出了DSC-Hv频率响应估计和DTC-LS延迟估计的组合方法。DSC-Hv利用离散频谱校正技术对FFT后的峰值频率进行插值校正减少栅栏效应并采用Hv估计器计算频率响应函数在20次平均后FRF幅值误差从7%降至1.2%。DTC-LS方法在模型中加入延迟环节e^{-τs}通过最小二乘拟合相位曲线斜率来估计延迟时间τ。对于测量通道延迟失配该方法估计的τ精度达到0.1微秒。最后采用加权最小二乘支持向量机WLS-SVM进行参数辨识将非线性影响纳入惩罚项。实验表明辨识出的模型在验证集上的均方根误差为0.023g比传统最小二乘降低71%。import numpy as np from scipy.optimize import curve_fit class DSC_Hv_DTC_LS: def __init__(self, fs1e6): self.fs fs def dsc_correction(self, spectrum, freqs): # find peak peak_idx np.argmax(spectrum) if peak_idx 0 or peak_idx len(spectrum)-1: return freqs[peak_idx] # 3-point interpolation alpha spectrum[peak_idx-1] / spectrum[peak_idx] beta spectrum[peak_idx1] / spectrum[peak_idx] delta (alpha - beta) / (2*(alphabeta-2)) corrected_freq freqs[peak_idx] delta * (freqs[1]-freqs[0]) return corrected_freq def hv_estimator(self, input_signal, output_signal, n_seg8): # Hv (G_xy) / (G_xx) * (G_yy/G_xy) something # simplified cross-spectral density from scipy.signal import welch f, Pxx welch(input_signal, fsself.fs, nperseg512) f, Pyy welch(output_signal, fsself.fs, nperseg512) f, Pxy welch(input_signal, output_signal, fsself.fs, nperseg512) Hv (Pxy) / (Pxx 1e-6) * np.sqrt(Pyy/(Pxy1e-6)) return f, Hv def delay_estimate(self, f, phase_rad): # phase -2*pi*f*tau def phase_model(f, tau): return -2*np.pi*f*tau popt, _ curve_fit(phase_model, f[10:-10], phase_rad[10:-10]) return popt[0] def wls_svm_identification(self, u, y, model): # using sklearn SVR with weighted samples from sklearn.svm import SVR X np.column_stack([u[i-len(model):i] for i in range(len(model), len(u))]) y_reg y[len(model):] weights 1.0 / (1 np.abs(y_reg - np.mean(y_reg))) svr SVR(kernelrbf, C10) svr.fit(X, y_reg, sample_weightweights) return svr