风噪声数值模拟(自己录制---2大节、4小节) 主要两种风噪声计算步骤 1,频域FEM法车玻璃风噪声计算 2,时域BEM法叶片风噪声计算 可以掌握基本的仿真步骤,可以绘制声压级云图、噪声频谱图等。

风噪声数值模拟在工程领域应用广泛,从汽车玻璃到风力发电机叶片都需要精准预测。最近折腾了两个典型场景的仿真方案,今天直接上干货,重点聊聊频域FEM法和时域BEM法的实现套路。

先说车窗玻璃的风噪频域仿真。这活儿核心在于把振动响应转换成声场分布,用Python的SciPy库就能搞个简易版流程。先得生成车窗网格,这里用三角形单元举个栗子:

import meshio
points = [(0,0), (1,0), (1,0.5), (0,0.5)]
cells = [("triangle", [[0,1,2], [0,2,3]])]
mesh = meshio.Mesh(points, cells)
mesh.write("windshield.vtk")

这段代码生成的是个简单梯形网格,实际项目得用专业前处理软件。但原理相通——把几何离散成有限单元。材料参数设置要注意各向异性,玻璃的杨氏模量通常在70GPa左右,泊松比取0.23比较合理。

风噪声数值模拟(自己录制---2大节、4小节) 主要两种风噪声计算步骤 1,频域FEM法车玻璃风噪声计算 2,时域BEM法叶片风噪声计算 可以掌握基本的仿真步骤,可以绘制声压级云图、噪声频谱图等。

求解环节用频域波动方程,重点处理流体-结构耦合边界。这里有个坑:声压计算必须考虑空气的阻抗匹配。用NumPy处理频域数据时,记得做窗函数处理避免频谱泄漏:

from scipy.fft import rfft
pressure_data = np.loadtxt('surface_pressure.txt')
hanning_window = np.hanning(len(pressure_data))
fft_result = rfft(pressure_data * hanning_window)

算完了别急着关程序,先看看云图长啥样。用PyVista做后处理,声压级云图直接上代码:

import pyvista as pv
mesh = pv.read('acoustic_field.vtk')
mesh.plot(scalars='SPL', cmap='jet', show_edges=False)

再来说说叶片风噪的时域仿真,这得请出边界元法(BEM)。和FEM不同,BEM只需要在表面布点,适合处理无限域问题。时间推进算法选显式差分,稳定性条件得满足CFL数小于1。

这里用Numba加速时间迭代循环,速度能提升十几倍:

@numba.jit(nopython=True)
def time_marching(pressure_old, pressure_new, dt):
    for i in range(1, len(pressure_old)-1):
        pressure_new[i] = 2*pressure_old[i] - pressure_old[i] + (c*dt/dx)**2 * (pressure_old[i+1] - 2*pressure_old[i] + pressure_old[i-1])
    return pressure_new

噪声频谱分析建议用Welch法,比直接FFT靠谱。Scipy的signal模块自带实现:

from scipy import signal
freqs, psd = signal.welch(pressure_signal, fs=5000, nperseg=1024)
plt.semilogy(freqs, psd)
plt.xlabel('Frequency (Hz)')
plt.ylabel('PSD (dB/Hz)')

几个实战经验:网格质量直接影响结果震荡,遇到发散先查单元长宽比;时域仿真总能量是否守恒是重要检验指标;做频谱对比时别忘了修正采样频率。最后提醒,别在办公室跑全尺寸模型,记得用简化模型调参——除非你想让工作站风扇比风噪还响。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐