Sensors Online
www.sensorsmag.com

June 2002
  Intelligent Systems
Table of Contents

SIMULATION SOFTWARE

Imitating Life:
An Introduction to
Computer Simulation and Modeling

Part 2: Simulation Models for Systems that Change Over Time

Ed Ramsden, Lattice Semiconductor Corp.

The first part of this article, which appeared in the May 2002 issue of Sensors, described several types of static simulation models. The common characteristic of these models is that they lack any memory of past inputs or internal conditions. A change of the inputs of a static model results in an instantaneous change in its outputs.

But for many real systems, history plays a major role in determining behavior. These systems are said to exhibit dynamic behavior. In a dynamic system, the outputs are a function of both the present values of the input and internal state variables, which are themselves functions of historical data. Part 2 of this article will explore several different types of dynamic models through examples of simple dynamic systems. (Graphics are numbered consecutively from Part 1.)

Dynamic Systems
Dynamic systems with variables that vary continuously as a function of time are often described with first-order ordinary differential equations (ODEs). In this formulation, one or more state variables x describe the present condition of the system, and dx/dt represents the rate of change of each state variable. A function of both the present state x(t) and present input u(t) defines the rate of change of the state variables. Because the system’s output y(t) can be dependent on both the state and the inputs, it’s also defined as a function g( ) of the inputs and system state. This yields the following equations:

equation (10)

When you need multiple state or output variables to define the system, an additional function of the inputs and state variables defines each additional state or output variable.

To solve a first-order ODE numerically on a computer, you must approximate it using a difference equation. One simple approximation of Equation 10 is:

equation (11)

In this formulation, t is a small, finite increment in time, and x is the change in x that occurs with a change in time of t. In a numerical simulation, t is often referred to as the simulation timestep, or clock tick, because time in the simulation is advanced in discrete increments of t. Changes in the simulation model’s state occur only when simulation time advances by t.

A significant advantage of casting a dynamic model in the form of first-order ODEs, and ultimately into difference equations, is that you define the immediate future values of the state variables in terms of the present values, making it simple to compute these values algorithmically. This compute-friendly form of difference equation is:

equation (12)

In this form, it becomes straightforward to translate into a computer program to repetitively calculate new values of x(t) while advancing time in steps of t.


 X = 0

 FOR t = dt to stoptime STEP dt
    X = X + f( X, U) * dt
 NEXT t

In this program, X is changed by an amount proportional to the time step dt. As you make dt smaller, the discrete model will tend to more closely approximate the exact solution of the original ODE. Note that the first statement in the program is X = 0; this is to define the initial condition of X at t = 0. Proper consideration of initial conditions is often important in simulations because different choices of initial conditions can yield different results.

The general technique of approximately solving an ODE by summing a series of small, discrete changes is called numerical integration. The example in Equation 12 shows one of the simplest numerical integration techniques (the Forward Euler method). Many more sophisticated techniques have been developed to solve various classes of ODEs and provide more accurate solutions.

Click for larger image
Click for larger image Figure 10. The flight of a cannonball can be modeled as a set of first-order ordinary differential equations. Initial conditions (i.e., as muzzle velocity, elevation, and the position of the cannon) are required to obtain a solution. [Click for larger image]

As a simple example of a dynamic system, consider the flight of a cannonball (see Figure 10). Ignoring non-ideal effects, such as air resistance, the cannonball is subject to constant acceleration downward (–ay) from gravity, and zero acceleration horizontally (ax direction). The acceleration is the derivative in time of the velocity (vx,vy), and the velocity is the derivative in time of the position (px,py). These relationships result in four equations:

equation (13)

The initial conditions for these equations are the position of the cannon (0,0) and a function of the muzzle velocity (vm) and elevation angle ():

equation (14)

A computer program to integrate these equations could be written:


 Elevation = 0.5326
 ’ 30 degrees expressed in radians
 ’ BASIC uses radians for trig functions
 Vm = 300  ’ muzzle velocity meters/s
 ax = 0    ’ no horizontal acceleration
 ay = -9.8 ’ gravity in m/s2
 vx = Vm * Cos(Elevation)
 vy = Vm * Sin(Elevation)
 px = 0
 py = 0
 dt = 0.01 ’ 1/100 second timesteps
 Stoptime = 30 ’ seconds
 For T = 0 To Stoptime Step dt
    Print T, vx, vy, px, py
    ’ print out results
    dvx = ax * dt ’ integrate vx
    vx = vx + dvx
    dvy = ay * dt ’ integrate vy
    vy = vy + dvy
    dpx = vx * dt ’ integrate px
    px = px + dpx
    dpy = vy * dt ’ integrate py
    py = py + dpy
 Next T

Although the dynamic system described here is simple, the same modeling techniques can be used to simulate more complex systems. For example, consider the effect of air resistance. This effect will form a feedback loop in the model because the force on the projectile will be dependent on its velocity. Accounting for the new effect doesn’t require a different modeling paradigm but merely involves computing the air resistance force for a given velocity and modifying the expressions that integrate acceleration.

Discrete-State Dynamic Systems
While differential equations are useful for describing natural systems that vary continuously, many manmade systems are best described as varying in near-instantaneous jumps between discrete states. For example, consider a refrigerator, which can be in one of three states:


 Running (Compressor on)
 Idling (Compressor off)
 Defrosting (Compressor off and  Defroster on)

In this case, there are no significant halfway conditions between the various states; the transitions among the operating states are for all practical purposes complete and instantaneous. For this reason, you can describe a refrigerator as a discrete-state system.

A state-transition diagram (see Figure 11a) is a useful way of describing discrete-state systems.

figure
Figure 11. A refrigerator can be modeled partly as a discrete-state system, with a behavior described by a state-transition diagram (A). Changes in the refrigerator's continuous state (temperature and frost levels) trigger changes in the refrigerator's discrete state (running, idling, or defrosting) (B).

This type of diagram shows the possible states of the system (the bubbles) and the possible transitions between states (arcs). Because you can often leave a given state and head to one of several others, you must also specify the conditions under which transitions can occur.

The formulation for a discrete-state system is similar to that of the continuous systems previously described, except that instead of specifying the degree to which a state variable changes, you must specify a new value for the state variable (x(t+t)). This results in a state transition equation:

equation (15)

As in the case of a continuous-state system, you still define output variables in terms of the present value of the states and the inputs.

equation (16)

Note that this model is actually equivalent to the difference-based model based on differential equations; the difference is largely a matter of how you choose to look at the problem. The difference-based viewpoint assumes that state variables will be updated by small increments, while the discrete-state viewpoint assumes that the state can be updated to any arbitrary value. One consequence of this is that because states are expected to change in arbitrarily large jumps, the size of the timestep (dt) (assuming it is sufficiently small) may not play any part in the model formulation.

Another and perhaps more significant distinction between a difference-based and a discrete-state model is that the function being evaluated by the former will generally yield a numerical quantity that is intended to be numerically integrated, while the function being evaluated by the latter may be an abstract state. For this reason, discrete-state update functions often depend heavily on look-up tables as well as conditional and Boolean expressions. In many cases, expressions in a computer programming language are often the most straightforward way to describe them. In the case of the refrigerator, the state transition function can be described with a look-up table (see Table 4).

TABLE 4
State Transition Function Look-Up Table
 
Input Conditions
Present State
Cool enough,
not frosty

Cool enough,
frosty

Too warm
not frosty

Too warm,
frosty

IDLE
IDLE
DEFROST
RUN
DEFROST
RUN
IDLE
IDLE
RUN
RUN
DEFROST
IDLE
DEFROST
IDLE
DEFROST

You should define a state-transition function over all possible conditions of input and present state; otherwise, the model can exhibit unintended behaviors if the undefined conditions arise during a simulation. In this example, with three states and four possible combinations of input conditions involving temperature and frost, building a look-up table is straightforward. For more complex cases, however, the size of the look-up table can become prohibitive. In these circumstances, you can often better define the state-transition function using statements in a computer programming language, as shown below.


 SELECT CASE State_Present ‘ present value
 CASE IDLE
       IF Too_Much_Frost THEN
              State_Next = DEFROST
       ELSE IF Too_Warm THEN
              State_Next = RUN
       ELSE
              State_Next = IDLE
       END IF
 CASE RUN
      IF Too_Warm then
              State_Next = RUN
      ELSE
              State_Next = IDLE
      END IF
 CASE DEFROST
     IF Too_Much_Frost THEN
              State_Next = DEFROST
     ELSE
              State_Next = IDLE
     END IF
 END SELECT

This code segment describes the same state-transition function as the above look-up table, but in a way that is both simpler to formulate and to understand. Once you have a suitable state-transition function (F_Refrigerator), the program implementation of a discrete-state model is nearly trivial:


 FOR k = dt to StopTime step dt
     State = F_Refrigerator(State, Too_Warm, Too_Much_Frost)
 NEXT k

A simulation of the refrigerator model might exhibit behavior like that shown in Figure 11b. Note that for this simulation to work, both temperature and frost levels must also be modeled. Because temperature and frost change continuously, these variables typically need to be simulated using difference models, such as those described in the previous section.

Discrete-Event Systems
In both differential and discrete-state models, the values of the state variables change only at simulation clock ticks. So far, we’ve assumed that the simulation clock is periodic and evenly spaced, with an interval of t; simulations built this way are said to be time driven.

For many types of discrete-state systems, time-driven models are not the most effective means of describing the system. Consider a model of a bank. Customers enter the bank at random intervals and enter a single line to wait for the next available teller. If not occupied, a teller will serve the customer at the head of the line. Each customer’s transaction will require some time to process, after which the teller can serve the next customer.

In this system, the tellers have discrete states (e.g., busy and idle), as does the line of waiting customers (the number of customers in line). Although this system could be simulated with a time-driven model, a small time step relative to the average activity level may be required to accurately model the system.

For example, all of the tellers may be occupied for several minutes with difficult customers, and then they may call up several customers within seconds of each other. If you want to model this system with a fixed-time step and maintain a degree of fidelity to the real system, the time step will have to be smaller than the smallest time interval of interest. What this means in practice is that the simulation will use most of its computational resources, repetitively evaluating the same functions over and over with relatively few significant changes in state.

An alternative approach is to perform computations only at significant changes in system state, which are often called events. In an event-driven model, you schedule events to occur at particular times in the future. The simulator then looks at the set of pending events and selects the earliest one in that set to be the next event. Once that is chosen, the simulator advances simulation time to that of the next event and then executes it.

While you can use traditional programming languages (e.g., C, Fortran, and Basic) to build event-driven models, software companies have developed specialized discrete-event simulation languages that automatically handle much of the housekeeping required to implement a model. If you use a discrete-modeling language, you can represent the bank-teller model with a collection of processes and events corresponding to the entities and activities in the system. For example, consider the process by which customers enter the line. You can model this as an event that adds a customer to the line and then schedules itself to occur sometime in the future. If there is a free teller, it also schedules the teller to take a customer from the line.


 Event Arriving_customer
    ’ Add customer to queue
    Queue_length = Queue_length+1
    ’ If teller not busy, dispatch customer- 
    ’    -Only one teller used for clarity
    If Teller_state =IDLE then schedule 
      Teller_Start in 0 ‘NOW!
    ’ schedule another customer for future
    ’ arrival
    Schedule Arriving_customer in Random_arrival_time
 End event

To continue with this example, you might represent each teller by a pair of events in which the teller periodically (at random intervals) tries to take a customer from the queue, process the transaction, and repeat the cycle. The Teller_Start routine tries to get a customer. If successful, it sets the teller state to busy and then schedules a second event (Teller_Finish), which returns the teller back to the idle state when done with the customer.


 Event Teller_Start
 
    If Queue_length =0 then
       Teller_State=IDLE
       ’ can’t take a customer
    Else
       Queue_length=Queue_length-1
       ’ take customer
       Teller_State=BUSY
       ’ become BUSY
       ’ schedule teller to get done with
       ’ customer in some time
       Schedule Teller_Finish for
          Random_Processing_time
    End if

 End Event

 Event Teller_Finish
    Teller_State = IDLE
    Schedule Teller_Start in 0
    ’ ready for new customer
 End event

Of course, at some point when the simulation starts, the Arriving_customer event must be initially scheduled or nothing will happen.

In a discrete-event model such as this one, the simulator’s clock advances in an irregular fashion, depending on the order of occurring events. In this simulation, because the events are scheduled with random intervals to simulate statistical behavior, the event sequence can vary from run to run.

A significant benefit of using a modeling language (discrete-event or otherwise) is that it frees you from having to focus on many computational details and allows you to focus the bulk of your attention on the model. Because many real-world systems map well into a discrete-event modeling paradigm, this simulation technique has found widespread use. Typical applications of discrete-event simulations include factory production planning, analysis of traffic and mass transit systems, and computer network performance estimation.

Conclusion
This article has attempted to present a survey of several representative computational techniques used to implement computer simulations, as well as some of the underlying modeling paradigms.

SIDEBAR 1:
Simulation via Spreadsheet
Spreadsheets have long been used for building models of business systems and are also useful for evaluating complex chains of static functions. It’s also possible to use them for performing time-driven simulations of simple dynamic systems. This can be done by creating a spreadsheet row for each timestep in the simulation, with the columns describing the state and output variables. Although filling in state-update equations into hundreds of rows may initially seem like a daunting exercise, the copy functions in spreadsheet programs can assist you by automatically making the state variable equations of a given row dependent on the values of the previous row.

For example, consider the dynamic ballistic model described in the main article. In this case, time is computed in column A, and the state variables for velocity and position are maintained in columns B through E. Note that row 6 is used to set initial conditions for both time (0) and state variables and differs from succeeding rows (see Table 5).

TABLE 5
Dynamic Ballistic Model
 
A
B
C
D
E
1
Elevation=
0.5326
(Radians, = 30°)
 
 
2
Vm=
300
(m/s)
 
 
3
Dt=
0.5
Seconds
 
 
4
 
 
 
 
 
5
T
Vx
Vy
Px
Py
6
0
=B2*cos(bl)
=B2*sin(bl)
0
0
7
= a6 + $B$3
= b6
= c6*$b$3*(-9.8)
= d6 + $b$3*b6
= e6 + $b$3*c6
8
= a7 + $B$3
= b7
= c7*$b$3*(-9.8)
= d7 + $b$3*b7
= e7 + $b$3*c7
9
= a8 + $B$3
= b8
= c8*$b$3*(-9.8)
= d8 + $b$3*b8
= e8 + $b$3*c8
10
= a9 + $B$3
= b9
= c9*$b$3*(-9.8)
= d9 + $b$3*b9
= e9 + $b$3*c9
11
= a10 + $B$3
= b10
= c10*$b$3*(-9.8)
= d10 + $b$3*b10
= e10 + $b$3*c10

A significant advantage of performing a simulation in a spreadsheet is the tools available for graphing and charting, which make it easy to visualize the system’s behavior and debug the model. An output plot of Y vs. X position for each timestep shows the characteristic parabola that you would expect to see for a ballistic trajectory (see Figure 12). Additionally, you can see a rise of ~500 ft. for the first 1000 ft. of travel, which would be expected for an elevation of 30°.

figure
Figure 12. The graphing functions in most spreadsheets make it easy to visualize numerical results.

SIDEBAR 2:
Finite-Element Modeling
H. Mark Ravenstahl, Ansoft Corp.

With Ansoft’s Maxwell electromagnetic design software, sensor designers can predict the performance, increase the accuracy, and reduce the weight and cost of a sensing system. Ansoft’s software provides integrated electromagnetic-thermal, finite-element, circuit, and system analysis in one software environment. Each analysis capability is necessary to accurately and completely analyze an electromagnetic sensing system prior to building costly and time-consuming prototypes.

The first step is to use Maxwell’s electromagnetic-field simulator to evaluate the electric and magnetic fields and analyze coil voltage and current waveforms as a function of rotor position, electromagnetic torque generated on moving parts, nonlinear variations in flux, and load circuit effects for a given sensor geometry. Maxwell is equipped with parametric-analysis capabilities that let
photo
Figure 13. Ansoft's Maxwell 3D software is well suited for the simulation of electromagnetic fields. Designs, such as this ferrite core inductor, can be designed and analyzed using the software's drawing capabilities, advanced materials library, intelligent mesh generator, macro capability, field postprocessor, and field calculator.
design engineers perform sensitivity analysis over the entire operating range of a design. Specifically, Maxwell can include in a simulation the effects of varying geometry (e.g., shape, position, and orientation), material properties (e.g., permittivity, permeability, and conductivity), and excitation (e.g., torque, voltage, and current) (see Figure 13). The ability to vary these design parameters allows engineers to include hundreds of what-if scenarios in a single simulation run and ensures that the best design for a given application is achieved.

Once the finite-element analysis is complete, an equivalent circuit model of the nonlinear device is automatically created from the parametric solutions. The model describes the inductance, resistance, torque, and flux linkage of the sensor through the range of operating conditions. Engineers can use this model in Ansoft’s Simplorer or Maxwell Spice, where the mechanical-drive parameters and electronic-load circuitry are incorporated in the model. The system-level solution yields induced current/voltage waveforms so that peak-to-peak voltage can be obtained and signal noise (caused by nonideal sinusoidal flux variations) can be evaluated.

H. Mark Ravenstahl is Product Marketing Manager, EM Products, Ansoft Corp., 4 Station Square, Ste. 200, Pittsburgh, PA 15219; 412-261-3200, mravenstahl@ansoft.com.

SIDEBAR 3:
Finite-Element Modeling
Elizabeth Callanan, The MathWorks

MathWorks’ Matlab is a powerful, comprehensive, and easy-to-use environment for performing technical computations. It provides a single interactive system that integrates mathematical computation and scientific visualization. 3D graphics let you visualize complex objects using perspective viewing, multiple light sources, and simulated fly-through views.

Matlab has a large family of products, making it easy to customize the Matlab Technical Computing Environment. You can use the product set in a variety of application areas, including signal and image processing, control-systems design, applied physics, and medical research.

Matlab integrates computation, data analysis, visualization, and programming in an open environment. The software handles a range of computing tasks in engineering and science, from data acquisition and analysis to application development. Built-in interfaces let you access and import data from instruments, files, and external databases and programs. In addition, Matlab lets you integrate external routines written in C, C++, Fortran, and Java with Matlab applications.

Editor’s Note
MATLAB is a registered trademark of The MathWorks.

Elizabeth Callanan is the Media Relations Manager, The MathWorks, 3 Apple Hill Dr., Natick, MA 01760; 508-647-7417, lcallanan@mathworks.com.

SIDEBAR 4:
Modeling and simulation of Dynamic Systems
Elizabeth Callanan, The MathWorks

MathWorks’ Simulink is an interactive tool for modeling and simulating a variety of dynamic systems, including linear, nonlinear, discrete-time, continuous-time, and hybrid systems. The software combines the power and ease of use of an application package with the flexibility and extensibility of a language. Simulink is built on top of the Matlab Technical Computing Environment, and together they provide an integrated environment for developing models, performing dynamic system simulations, and designing and testing new ideas.

After building a block diagram in Simulink, you can debug it using the interactive debugger. Then you can run interactive simulations and view the results live. For modeling, Simulink provides a GUI for building models as block diagrams, using click-and-drag mouse operations. With this interface, you can draw the models just as you would with pencil and paper (or as most textbooks depict them).

Click for larger image
Click for larger image [Click for larger image]
Simulink comes with more than 200 built-in blocks that implement commonly required modeling functions. The blocks are grouped according to their behavior: sources, sinks, discrete, continuous, nonlinear, math, functions and tables, and signals and systems. In addition, Simulink has features for creating customized blocks and block libraries. You can customize not only the functionality of a block but also its user interface using icons and dialog boxes. In addition to Simulink, several blocksets for specialized use are also available from The MathWorks.

Elizabeth Callanan is the Media Relations Manager, The MathWorks, 3 Apple Hill Dr., Natick, MA 01760; 508-647-7417, lcallanan@mathworks.com.

SIDEBAR 5:
Modeling and simulation of Dynamic Systems
Nicolas Williams, Tanner Research

When Gordon Moore made his now-famous prediction that computer speeds would double every 12–18 months, few expected that it would have held for more than 30 years. A key reason Moore’s Law remains true is the development of advanced circuit simulation tools that speed the design process.

In digital design, such integrated circuits (ICs) lend themselves to reasonably straightforward, logic-based simulation. Because the circuit consists of a single basic element (the transistor) plus interconnects, a simulation tool can reduce the transistor model to a few parameters. Unlike the yes-no logic of digital ICs, however, analog circuits handle the infinitely varying signals used in everything from remote sensing to home stereos. To accurately model analog systems, a simulation program must solve complex device equations at every node in the circuit. With up to 200 parameters describing a single transistor, the task is formidable.

Tanner Research’s T-Spice is an enhanced version of SPICE. The sophisticated analog IC simulation software uses a nonlinear solver to
Click for larger image
Click for larger image Screen 1. T-Spice is a software tool for simulation of analog and mixed-signal integrated circuits (ICs). Using circuit descriptions in the Spice language, T-Spice executes both standard simulations (e.g., AC, DC, transient, and noise) and complex analyses, such as Monte Carlo, design optimization, and parameter sweeping. The Command Tool shown in the illustration lets you quickly design simulations in Spice syntax. [Click for larger image]
analyze electrical equations at each node in the circuit. In mixed-signal designs, digital elements can be modeled using look-up tables instead of direct analysis.

The T-Spice simulator includes all of the model equations necessary to analyze active devices (e.g., bipolar and field-effect transistors). Input files for simulation include a netlist, or circuit description file, and supporting model definitions (see Screen 1). Designers can export the netlist from a schematic entry program, which converts the schematic to a text file in SPICE format. The semiconductor foundry typically provides device model definitions. For system-level simulation, designers can use an external C interface to create black box behavioral models.

Nicolas Williams is Product Manager, T-Spice Pro, Tanner Research, 2650 E. Foothill Blvd., Pasadena, CA 91107; 626-792-3000, info@tanner.com.

SIDEBAR 6:
Modeling and simulation of Dynamic Systems
Ana Marjanski, CACI Products Co.

C.A.C.I.’s Simscript II.5 is a simulation package for discrete-event and combined discrete-event/continuous simulation. In discrete-event models, the simulated time progresses in steps from one significant event to the next. The time between significant events is skipped, increasing the computational efficiency. The most frequently studied and optimized real-world systems—such as factories, networks, devices, telecommunications, transportation, inventory control, and health care—are modeled as discrete-event systems. Models that involve chemical reactions, fluid flows, or nonlinear motion can require that the continuously changing variables be accurately computed as time progresses. Simscript II.5 supports both discrete-event and combined discrete-continuous modeling by coupling the differential equation integrator with the simulation timing mechanism.

Simscript II.5 is a powerful simulation language with English-like syntax. In addition to the standard features of general-purpose high-level languages, it provides a timing mechanism and concurrent process management. Such features as entities, attributes, sets, events, processes, and resources facilitate mapping real-world physical processes to computer-based simulation models.

Entities are user-defined objects that can be dynamically instantiated, scheduled, and destroyed during a simulation run. Entities represent components of a real-world system being modeled. Their properties are defined by attributes, and processes and events capture their behavior. Processes run concurrently and can activate or interrupt each other and be queued for limited resources. As simulation time progresses, statistical measures of changing quantities, such as queue lengths, can be automatically collected and reported. During a simulation run, several checkpoints can be created, and simulation can be restarted from any one of them, facilitating multiple what-if scenarios.

Simscript II.5 has built-in graphical capabilities that let you represent entities by animated icons. Graphical icons are created offline with Icon Editor or are imported as bitmaps. You can create realistic graphical representations by displaying a geographical map, airport, or factory layout in the background while the entities are displayed in a foreground. Input parameters can be interactively entered through dialog boxes, and the model variables can be displayed dynamically by using line or bar graphs, trace plots, pie charts, dials, and level meters.

Click for larger image
Click for larger image Screen 2. The screen shows a project tree and elements of the Pacific Shipping model inside Simscript II.5 Simulation Studio, an integrated development environment with an automatic project builder and point-and-click graphical editors. Simscript II.5 can build prototypes or high-fidelity discrete-event simulation models. [Click for larger image]
Input or output of the model can be stored in a database. Simscript II.5 provides Simscript Data Base Connectivity APIs for major database systems on the market (e.g., Microsoft Access, SQL Server, Oracle, IMB DB2, and IBM Informix). Models created in the software are portable across a variety of platforms. They’re also open and can be interfaced with libraries written in C/C++ or FORTRAN.

Simulation models are built using Simscript II.5 Simulation Studio, an integrated programming development environment that includes all the necessary tools for building nongraphical and graphical simulation models (see Screen 2). More information can be found at www.caciasl.com or by e-mail at simscript@caci.com.

Editor’s Note
SIMSCRIPT II.5 is a registered trademark of CACI Products Co.

Ana Marjanski is Technical Manager for Simscript II.5, CACI Products Co., Advanced Simulation Laboratory, 1011 Camino Del Rio South, Ste. 230, San Diego, CA 92108; 619-542-5224, fax 619-692-1013, amarjanski@caci.com.


Ed Ramsden is Senior Applications Engineer, Mixed Signal Products, Lattice Semiconductor Corp., 5555 NE Moore Ct., Hillsboro, OR 97124-8347; 503-268-8648, fax 503-268-8693, ed.ramsden@latticesemi.com.

MORE!
For further reading on this and related topics, see these Sensors articles.

"Rapid Prototyping for Control," March 2002
"Enabling the Design and Use of MEMS Sensors," April 1998
"Simulating Inertia and Gear Box Performance for Automotive Testing," April 1997