Abaqus仿真数据感知--用耳朵听你的仿真数据
所谓五感是指:视觉、嗅觉、味觉、听觉、触觉。Abaqus跟五感能扯上什么关系?
当然有些人据说有第六感,能够感知到即将要发生的事情。这个不太普遍的能力太神奇了,如果笔者有幸拥有该能力。。。“是不是能很快实现更多的自由,比如财务自由!哈哈哈,大早上的,不要太兴奋啊!”--“快醒醒吧!这个月账单该还了。。。”所以,白日梦做多了,有益身体健康。
我们还是继续说五感吧。五感是安身立命之本,缺少哪个都会严重影响我们的日常生活,这里就不详细展开了,接下来我们聊聊工作中相关的思考,本文将主要探讨一下听觉相关思考。
CAE工程师大部分工作就是:建模、调模型、仿真计算以及仿真数据获取、仿真数据后处理。大部分的仿真结果的主要呈现形式为:图片、动画、曲线、仿真结论等。
所以,在查看仿真报告时主要调用了我们的视觉系统以及大脑逻辑判断(大脑逻辑与知识判断这里不讨论)。普通人一般都有五觉啊,我们能不能调用其他的感知来对仿真结果的安全性、舒适性、或者品质进行判断呢?应该怎么实现呢?
这里我们简单介绍一下仿真数据的听觉处理--用耳朵感受你的仿真数据。
有这个想法的出发点是,对于一些与振动相关的数据,如果以曲线的形式展现,我们看到的是如下图一样的样式,我们眼睛能直观的看到这三组数据的直观过程:“嗯,从时间历程曲线上看,多久就衰减到百分之多少。。。”
或者,我们可以借助时频变换,把数据中的频率特征提取出来进行定性分析,比如采用Abaqus线性动力学SSD分析得到某系统的频响特征曲线,可以直观的判断该系统需要控制的频段,以避免系统奔放的如脱缰的野马,即使你拥有一片广袤的草原。
时频变换的确是傅里叶大神留给后人的宝贵神器,但是作为一个普通人,我们可能更希望用耳朵听一听某个系统的品质到底是什么感受,因为单单通过眼睛观察以上两种曲线,我们的大脑并不能告诉我们这个系统到底是什么样的用户体验。
听感真那么重要么?告诉你听感真的很重要。前几天同学王富贵去买了个耳机,本来计划买个5块钱放耳朵上有动静就行的耳机,结果去体验店带上各种耳机一顿体验,结果最终满意的花了2000多RMB满足了自己的需求;还有村里的翠花本来打算买个自行车作为出行代步工具,结果被拉去4S店,看着销售轻轻关上车门,就因为仔细地多听了几声“嘭”、“嘭”的关门声,结果心满意足的多花了几万块买了一辆心仪的高档轿车。
商品或者结构的听感是关乎品质、关乎用户体验的,真的很重要!在我们上段“科普(Hu You)”之后,相信大家都有同感可以聊聊哈。
事情要这样讲:Abaqus基于Python语言开发了GUI交互界面以及众多Python API接口,大家都知道Python是开源面向对象的脚本语言,拥有海量的开源科学计算工具库,好好地利用这些科学计算包,就相当于给你的仿真工作插上翅膀,工程师可以浪漫的在工作空间中翱翔。
如何把仿真数据转换成音频文件呢?直接上代码:(转成wav格式)
import time
print'''
This script is used for converting data from simulation into audio (.wav) files
prepaired by Hongxin ZHAO of DS SIMULIA
'''
time.sleep(1)
import wave
import struct
import os
TxtFiles=[]
CurPath=os.path.abspath(os.curdir)
FileNames=os.listdir(CurPath)
for file in FileNames:
if '.txt' in file:
TxtFiles.append(file)
for file in TxtFiles:
RawDataLeft=[]
RawDataRight=[]
RawTime=[]
RawDataFile=open(CurPath+'\\'+file ,'r')
for line in RawDataFile.readlines():
try:
RawTime.append(float(line.split(',')[0]))
RawDataLeft.append(float(line.split(',')[1]))
except:
pass
try:
RawDataRight.append(float(line.split(',')[2]))
except:
pass
RawDataFile.close()
ChannelNumber=1
if len(RawDataLeft)+len(RawDataRight)==len(RawTime)*2:
ChannelNumber=2
SampleRate=int(len(RawTime)/RawTime[-1])
FrameNumber=len(RawTime)
try:
MaxValueLeft=max( abs(max(RawDataLeft)),abs(min(RawDataLeft)) )
except:
pass
try:
MaxValueRight=max( abs(max(RawDataRight)),abs(min(RawDataRight)) )
except:
pass
AudioString=''
for i in range(len(RawDataLeft)):
try:
RawDataLeft[i]=struct.pack('h',int(RawDataLeft[i]/MaxValueLeft*32767))
AudioString=AudioString+RawDataLeft[i]
except:
pass
try:
RawDataRight[i]=struct.pack('h',int(RawDataRight[i]/MaxValueRight*32767))
AudioString=AudioString+RawDataRight[i]
except:
pass
AudioFile=wave.open(CurPath+'\\'+file.replace('txt','wav') ,'w')
AudioFile.setnchannels(ChannelNumber)
AudioFile.setsampwidth(2)
AudioFile.setframerate(SampleRate)
AudioFile.setnframes(len(RawDataLeft))
AudioFile.setcomptype('NONE','not compressed')
#AudioFile.setparams(1, 2, 44100, 220500, 'NONE', 'not compressed')
AudioFile.writeframes(AudioString)
AudioFile.close()
print 'finished process '+file
以上文件能够直接把当前工作目录(英文工作路径)中的数据文件转换成wav格式的音频文件。
三个数据分别为小球掉落鼓面后,鼓面中心点的:位移、速度、加速度。
最后,欢迎大家使用Abaqus!