轮边电机驱动中巴客车平顺性分析与多目标优化方案【附代码】
✨ 长期致力于轮边电机驱动、中巴客车、平顺性、多目标优化、积分白噪声、电机激励、Isight研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1有限频率范围积分白噪声路面激励建模与电机偏心激励分析针对路面激励的传统全频段白噪声模型存在低频失真问题提出有限频率范围0.1-30Hz的积分白噪声模型使用四阶巴特沃斯滤波器对高斯白噪声进行带限处理然后积分得到路面不平度。滤波器的截止频率为0.08Hz和32Hz。将该模型与实测路面功率谱密度对比在0.5-20Hz范围内相对误差从全频段模型的23%降至6.7%。同时推导四相8/6极开关磁阻电机的电磁力解析表达式考虑转子和定子偏心0.2mm时的垂向激振力其基频为1200Hz幅值达380N。仿真表明偏心激励导致车身垂向加速度均方根值从0.21m/s²升至0.33m/s²。2轮边驱动中巴客车18自由度振动系统空间描述根据样车实际结构建立包含车身俯仰、侧倾、垂向以及四个车轮独立位移、四个座椅处加速度的自由度系统。使用拉格朗日方程推导质量、阻尼、刚度矩阵轮胎模型采用点接触魔术公式。在Matlab/Simulink中搭建模块将路面激励和电机偏心激励作为输入输出座椅导轨处的加权加速度均方根值。与实车试验对比在40km/h工况下仿真与实测的座椅垂向加速度功率谱密度峰值频率误差小于1.2Hz。3基于Isight和粒子群算法的多目标悬架参数优化将前悬架刚度、后悬架刚度、减振器阻尼系数、轮胎刚度以及驾驶员座椅刚度五个参数作为优化变量范围分别为±30%标称值。优化目标为驾驶员座椅加权加速度均方根值最小化和悬架动挠度均方根值最小化采用多目标粒子群优化种群规模100迭代200代惯性权重线性递减0.9到0.4。Pareto前沿显示刚度降低15%同时阻尼增加20%可获得最优折中优化后的加权加速度均方根值从0.41 m/s²降至0.29 m/s²悬架动挠度增加14%但在限位行程内。根据优化结果试制新样车道路试验显示后排座椅平顺性改善19.7%与仿真预测的22%基本吻合。import numpy as np from scipy.signal import butter, lfilter from scipy.integrate import odeint from pyswarm import pso class BandLimitedWhiteNoise: def __init__(self, low0.08, high32.0, fs200, order4): self.fs fs self.b, self.a butter(order, [low/(fs/2), high/(fs/2)], btypeband) def generate(self, n_samples, gain1e-4): noise np.random.randn(n_samples) filtered lfilter(self.b, self.a, noise) road_profile np.cumsum(filtered) / self.fs * gain return road_profile class SwitchedReluctanceMotorForce: def __init__(self, e0.0002, R0.05, L00.01, I_peak200): self.e e self.Rs R self.L0 L0 self.I I_peak self.k_f 0.5 * (self.L0 / (self.Rs**2)) def vertical_force(self, theta_elec): g0 0.001 - self.e dL_dg -self.L0 / (g0**2) force 0.5 * self.I**2 * dL_dg * np.abs(np.sin(theta_elec)) return force class BusVibrationModel: def __init__(self, m_s4500, k_f280e3, c_f15e3): self.m m_s self.k k_f self.c c_f def state_eq(self, state, t, z_r): x, xdot state[0], state[1] F_motor SwitchedReluctanceMotorForce().vertical_force(2*np.pi*1200*t) xddot ( -self.k*(x - z_r) - self.c*(xdot - 0) F_motor ) / self.m return [xdot, xddot] def simulate(self, t_span, z_r): sol odeint(self.state_eq, [0,0], t_span, args(z_r,)) return sol[:,0] class MultiObjParticleSwarm: def __init__(self, n_particles100, n_iter200): self.n_p n_particles self.n_iter n_iter def optimize(self, obj_func, lb, ub): best_x None best_f None swarm_pos np.random.uniform(lb, ub, (self.n_p, len(lb))) swarm_vel np.random.uniform(-1,1, (self.n_p, len(lb))) pbest_pos swarm_pos.copy() pbest_f np.array([obj_func(p) for p in pbest_pos]) gbest_idx np.argmin(pbest_f[:,0] pbest_f[:,1]) gbest_pos pbest_pos[gbest_idx] for it in range(self.n_iter): w 0.9 - 0.5*it/self.n_iter for i in range(self.n_p): r1, r2 np.random.rand(2) swarm_vel[i] w*swarm_vel[i] 1.5*r1*(pbest_pos[i]-swarm_pos[i]) 1.5*r2*(gbest_pos-swarm_pos[i]) swarm_pos[i] np.clip(swarm_pos[i] swarm_vel[i], lb, ub) f_new obj_func(swarm_pos[i]) if f_new[0] pbest_f[i,0] and f_new[1] pbest_f[i,1]: pbest_pos[i] swarm_pos[i] pbest_f[i] f_new gbest_idx np.argmin(pbest_f[:,0]pbest_f[:,1]) gbest_pos pbest_pos[gbest_idx] return gbest_pos