如题,作为一名学术研究者,关于simulation和emulation是有必要分清楚的。
先给出一些网上的参考定义:
解释一: 模拟(Simulation)即选取一个物理的或抽象的系统的某些行为特征,用另一系统来表示它们的过程。模拟技术的高级阶段称为仿真模拟(Emulation)、系统仿真,即用一数据处理系统来全部或部分地模拟某一数据处理系统,以致于模仿的系统能想被模仿的系统一样接受同样的数据、执行同样的程序、获得同样的结果。
解释二: 模拟(Emulation)是试图模仿一个设备的内部设计;仿真(Simulation)是试图模仿一个设备的功能。
解释三: Emulation:When one system performs in exactly the same way as another, though perhaps not at the same speed. A typical example would be emulation of one computer by ( a program running on) another. You migh use emulation as a replacement for a system whereas you would use a simulation if you just wanted to analyse it and make predictions about it. Simulation: Attempting to predict aspects of the behaviour of some system by creating an approximate (mathematical) model of it. This can be done by physical modelling, by writing a special-purpose computer program or using a more general simulation package, probably still aimed at a particular kind of simulation (e.g. structural engineering, fluid flow). Typical examples are aricraft flight simulators or electronic circuit simulators. A great many simulation languages exist, e.g. {Simula}
总结下来就是
simulation是模拟,emulation是仿真。顾名思义,模拟看中是的是输入与输出是否满足要求,并不在乎中间的实现过程。而仿真则更像白盒,它要求必须设计出和系统一致的逻辑过程。
参照这个定义,说的更加直白些,那就是simulation模拟系统的行为功能,emulation模拟系统的运作过程,行为功能的实现可以自定义,但是系统的运作必须符合已知的逻辑。
如果需要给定相互关系的话,那么emulation就包含simulation。讲simulation想像成一个一个的功能块,然后将这些功能块使用逻辑链接起来,形成一套完整的方案,就是emulation。
以前的时候经常使用simulation,还不知道有emulation的存在,实在是孤陋寡闻了。不过貌似以前写的文章也都是涉及一些算法,将其封装成功能块执行的,也不涉及一整套大系统的开发。
现在要做的大型仿真,如果自己编写或者使用一些现有的仿真工具如NS3之类的,整体上应该就算是Emulation了。但是针对自己涉及的那一块,可能也就以一个模块的形式添加到现有的软件系统中,那么这部分应该就算是Simulation了。
以上仅为个人理解。