00 Use TAB or  to move cursor, ENTER to go to cursor topic,
 ESC to go back, PgUp/PgDn or  to scroll.

 CONTENTS:

 Index
 0GGetting Started
 10Quick Key Usage Guide
 H0Help System
 OmOperation
 m0Miscellaneous
 G0Glossary
 a0Applications
    Distortion Theory and Measurement
    Sound / Event-Triggered Sequences
 rhRevision History
 SRRegistering Daqarta

Om OPERATION:

 B0ADC Board / Virtual Source
 Spectrum (FFT) / Waveform Modes
    F?Theory
    FiOperation
 R0Real-Time vs Sequential Mode
 X0X-Axis and Sample Rate Control
 A0Averager ATTheory and AOOperation
 T0Triggering
 M0Trace Memory
 foFile Operations
 ImTrace Information
 UCUnits Control and Y-Axis Calibration
 K0Key Macros
 kiKeyboard Response Control
 E0Comment Editing
 CcColor Control
 PsPrinting the Screen
 Q0Quitting Daqarta

10                    KEY USAGE SUMMARY

 Unshifted Alpha:
 A1Avg    Average start / stop      NpNpts   256 / 512 / 1024 pts
 BiBoard  Board / Virtual Source    O0OutDt  Output binary to file
 CxCursX  Cursor eXchange           P0Pause  Pause trace
 D0DDisk  Direct-to-Disk on/off     Q0Quit   Quit Daqarta
 EmEdit   Edit comment line         RtRTime  Real-time / Sequential
 F0FFT    FFT / Waveform mode       SsSingl  Do Single data sweep
 03Grid   Grid display on/off       TtTrig   Trigger / Free-run
 H0Help   This Help system          UuUnits  User Units & labels
 I0InDat  Input binary file data    VtView   View Trace
 A2JntAv  Joint Wave / FFT avg      WtWindo  Window function
 KRKeyRn  Run Key Macro             XtXpand  eXpand trace
 L0Line   Line / Point / Bar        F2Y-log  FFT Log Y-axis
 MrMemRd  Read trace from memory    ZaZero   Trace Auto Zero

 Other Unshifted Keys:
 0r     Trace cursors             KRINS    Run Key Macro (Text)
 0M     Menu cursors              A\\      Avg \ Inst trace
 FmPg   Y-axis magn               H1TAB    Help cursor
 H3ESC    Escape item               H1=      Go to Help topic
 Dk<>     DDisk read posn           H1BackSp Prior Help topic
 DkHOME   DDisk read start          H4?      Context Help
 DkEND    DDisk read end            SLScroll Lock  Sticky Shift
 0MENTER  Menu item select          CxGrey Minus   Cursor eXchange
 ka; or Num-5  Reset Cursor Avgs    PsPrint Screen
 DsSPACE  DDisk Skip
 KhNUM-LOCK or Pause/Break    Halt/Step Macro


 SHIFT-Alpha:
 AsAvSub  Subtract Average          KLLoop   Macro auto-repeat
 F1CPM    Cycles Per Minute         MsMemSv  Save trace to memory
 EsEdSav  Editor to file            OsOutSc  Output Screen to .BMP
 FeFFT32  High Dynamic Range FFT    F3PSD    Power Spectral Density
 06GrayS  VGA Gray-Scale            UrU-RMS  RMS Units for FFT
 H2Help   Help top / bottom         VcViewC  View Cursors, readout
 icIntCr  Cursor "Run" Response     wSWaitS  Wait Seconds delay
 KSKeySt  Store Key Macro           XcXCurs  eXpand on Cursors

 SHIFT-Other:
 mA7 (&)  Alert                     kf     Cursor fixed step
 uT8 (*)  User Tone                 CiINS/DEL  Sgram color high
 Dk<>     DDisk read posn fast      FsHOME/END Full-Scale / Restore
 FmPg   Slide Y-log range


 CTRL-Alpha (Control Menus):
 A3Avg    Averager Control menu     MmMemAr   Memory Array menu
 B1Board  Board/Test Ctrl menu      SmSgram   Spectrogram menu
 CMColor  Color Control menu        TmTrig    Trigger Ctrl menu
 DmDDisk  DDisk Control menu        UmUnits   User Units menu
 StSGGen  Stimulus Generator        WmWindo   Window menu
 H0Help   Control Help system       XmXaxis   X-axis Ctrl menu
 A4JntAv  Joint avg menu            Y0Y-Cal   Y-axis calibration
 kmKeybd  Kbd response menu

 CTRL-Other:
 Ed1 - 5  Copy Value to Field       0M       Menu cursors
 mA7      Alert Setup               0PPg     Alternate menu page
 uT8      User Tone Setup           CiINS/DEL  Sgram color low
 H4?      Menu Context Help         E1INS      Text Insert toggle
 0cESC    Escape menu item


 ALT-Alpha:
 AaAvAdd  Add Average               MAMemAr    Memory Array
 DVDskRd  Read DDisk file           O1OutTx    Text file Output
 EaEdAux  Edit Auxiliary text       SgSgram    Spectrogram mode
 H5Help   Plug-In Help              BTTimed    Virtual Source pacer
 InIncNm  File Name auto-Inc        KPWaitP    Wait for Pause
 KOKeyOn  Force next Key On         FxX-log    FFT log X-axis

 ALT-Other:
 r## (3)  Random value              H7?      Key Preview Help
 Dk<>     DDisk read page           KSINS    Store Key Macro (text)
 J\\      Joint Avg \ Inst FFT      H1=      Help Contents
 H1ENTER  Help Contents             MA     Memory Array select


 Special Disaster Management Combinations:
 mDCTRL-ALT-HOME  Disaster Recovery Attempt - CAUTION!
 mBCTRL-ALT-DEL   System Warm Reboot - CAUTION!
 mCCTRL-ALT-INS   CPU Register Display

H0
 HELP SYSTEM:

 H1Help Key Summary
 H2Display Formats (5-line and 25-line)
 H3General Hypertext Help Operation
 H6Main vs. Control Help
 H8Index Operation
 H4Context-Sensitive Help
 H7Key Preview Help
 H5Plug-In Help
 H9Help Files

H1
 HELP KEY SUMMARY:

 ────────────────── INVOKING HELP ──────────────────────
 H-key              This Main Help system
 SHIFT-H            Toggles H25 / 25 line Help displays.
 CTRL-H             H6Control Help for the active menu.
 ALT-H              H5Installed module Help select list.
 ? (or /)           H4Context-sensitive Help.
 ALT-? (ALT-/)      H7Key Preview Help for next key.
 CTRL-? (CTRL-/)    H4Control Help for cursor item.

 ──────────────── NAVIGATING IN HELP ───────────────────
 TAB or            Move cursor to next topic on page.
 SHIFT-TAB or      Move cursor to prior topic on page.
 ENTER or =         Jump to topic indicated by cursor.
 ESCape             Return to prior topic or location.
 BACKSPACE          Same as ESCape.
 ALT-EQUALS         Jump to 00Contents of active Help system.
                  Scroll screen up or down 1 line.
 PgUp, PgDn         Scroll screen up or down 1 page.


H2
 HELP DISPLAY FORMATS:

 There are two formats for viewing Help information:
 UPPER HELP shows 25 lines at a time, in place of the trace.
 LOWER HELP shows only 5 lines, but allows ongoing operation.
 To toggle between these formats, use SHIFT-H.

 In UPPER or LOWER HELP formats, the PgUp/Dn keys move between
 Help pages, instead of changing Fmtrace magnification as they
 normally do.  Note that a "page" in the lower format is only 5
 lines.  There is no trace magnification to change with the
 upper Help format, but in the lower you can always use the
 SHIFT-PgUp/Dn keys to do the same thing.  (But note that in
 F2Y-log mode this will change the Yrfull-scale reference, not the
 normal full-scale range that you change with the unshifted
 page keys.)

 In either Help mode, the  cursor keys scroll the text within
 the Help window by single lines, instead of controlling the
 menu cursor as they usually do.  You can always use CTRL-
 for the menu cursor.

 Scrolling text with the  cursor keys only works within a
 topic.  If you try to scroll past the beginning or end of the
 current topic, the cursor will move instead... just as though
 you had used the TAB or  keys.

 The page keys are not limited to the current topic, and will
 allow you to move through the entire Help text, just like a
 book.

 There is a separate Cpcolor palette for the upper Help mode, but
 the lower mode uses the same colors as the current active
 palette.  You will probably want to CRexperiment to find the
 colors you prefer, and save them in your Cvpalette file.

 The default MAIN.PAL file that comes with Daqarta contains a
 few ideas to get you started.  To try these, activate upper
 Help (if it's not already in that mode), then use CTRL-C to
 select the CMColor control menu.  Move the cursor to the Palette
 item at the top using the CTRL-Up/Dn cursor keys.  (You have
 to add the CTRL to indicate control menu operations only when
 upper Help is active, since Help operations are the default in
 this mode.)

 Hit (CTRL-) ENTER to select the Palette item, and use (CTRL-)
 Up/Dn cursors to change from the 'Help' palette to one of the
 others.  The palette called 'Helpd' is the default for Help
 if you hadn't loaded any main palette file.


H3
 GENERAL HYPERTEXT HELP OPERATION:

 Use the TAB or  key to move the cursor to any highlighted
 topic on the page.  SHIFT-TAB or  moves the cursor backwards
 on the page.  ENTER or EQUALS moves to the topic indicated by
 the cursor position, while ESCape or BACKSPACE returns to the
 prior location.  The ENTER / ESC method is probably more
 natural for occasional use, especially by those familiar with
 "other" Help systems.  For extensive browsing, however, you
 can place two fingers of your left hand over EQUALS /
 BACKSPACE while your right hand operates TAB.  This allows
 smooth, rapid navigation without lifting your hands from the
 keyboard.

 The EQUALS / BACKSPACE keys are dedicated to Help use, while
 ENTER / ESC are also used for menu operations when Help is not
 active.  CTRL-ENTER / CTRL-ESC are dedicated to menu use, and
 may be used for this at any time... but they MUST be used to
 control the menu when Help is active.

 ┌─────────────────────────────────────────────────────────┐
 │  NOTE:  Throughout this Help system, ENTER and ESC      │
 │  will be used to refer to the normal operation of       │
 │  control menus when Help is not active, rather than     │
 │  saying "ENTER or CTRL-ENTER" at every reference.  If   │
 │  you are going to try a menu operation while you are    │
 │  reading about it here, be sure to use the CTRL key     │
 │  prefix.                                                │
 └─────────────────────────────────────────────────────────┘


H6 MAIN vs. CONTROL HELP:

 The H-key toggles this Main Help system on and off, and
 CTRL-H toggles Control Help specific to each menu.  Control
 Help allows access to special Help text provided for U0plug-in
 modules, describing unique features of installed board drivers
 or other special or user-written applications.

 The Main Help and each Control Help system are independent,
 and each allows up to 64 levels of backtracking.  The path
 through each system is remembered from prior accesses, even if
 there are intervening accesses of other help systems.

 EXAMPLE:
 ■  CTRL-C will bring up the CMColor menu at right.
 ■  CTRL-H flips to Color menu Control Help, which you can
    explore as desired.
 ■  The H-key returns to this Main Help page.

 Although normal paging and scrolling is always allowed, the
 ESC or Backspace key only returns to prior ENTER or Equals key
 selections.

 This Main Help system actually includes the Control Help text
 for menus that are part of the main Daqarta program (as
 opposed to U0plug-in modules), so the same text may be accessed
 in different ways.  The path will be associated with the
 initial system.  In the example above, after CTRL-H flipped to
 Color menu Control Help, more jumping and paging might move
 eventually through A0Averager Help topics, etc.  After the
 H-key flipped back to this Main Help area, CTRL-H would flip
 back to Averager topics (if that was the last entered topic)
 even though the Color menu is still active.  ESCaping or
 backspacing would then lead back to Color topics.  If you go
 back far enough you can exit the help system completely, in
 which case when you next invoke it you will be at the start.

 Changing to a new menu while Control Help is active does NOT
 automatically jump to a new Control Help section.  To do this,
 hold down CTRL and hit H twice.  This exits Control Help and
 re-enters it for the current menu.

 For GAADC boards, you normally need to have the board installed
 in order to be able to load its associated driver and hence
 bring up its control menu and Control Help system.  However,
 you can 0Aforce the installation of a driver without the board,
 or without activating it, in order to use its Control Help.

 ALT-EQUALS moves to the 00Contents of whatever Help system is
 currently active, just as though it was a topic jump.

 If Main Help is active, the H-key will deactivate all help.
 If Control Help is active, CTRL-H will deactivate all help.


H8 INDEX OPERATION:

 For this Main Help system or any Control Help system, the
 Index will be the first topic link on the 00Contents page.
 When you hit ALT-EQUALS to jump to that page, the cursor will
 thus automatically be on the Index item, so you can then just
 hit ENTER to jump into the Index.

 The Index can be navigated just like any other part of the
 Help system, with one difference:  While you are in the Index
 the alphanumeric keys no longer invoke normal 0KKey Options, but
 instead take you to the section of the Index starting with
 that letter.  Once there, each additional press of that key
 advances one entry through that section, rolling to the top
 after the last entry.  Hitting any other key jumps to the
 entries starting with that letter... you don't "spell out" an
 individual entry.

 If you are in the normal 25-line Help display mode, the
 0mMessage Line will show
    Help Index topic letter:
 to remind you of this use of the alphanumeric keys.  (Since
 this area is hidden in the 5-line Help mode, you will have to
 remember this on your own.)

 In a normal paper book, index entries are typically indented
 within groups, such as:

    Key Macros
        Auto-Initialization
        Creating and Storing
        ...

 But to remind you that the same first letter moves you through
 this group, Daqarta uses this form instead:

    KEY MACROS:
    K.  Auto-Initialization
    K.  Creating and Storing
    K.  ...

 This reduces the visual clutter of the more typical form:
    Key Macros
    Key Macros, Auto-Initialization
    Key Macros, Creating and Storing
    Key Macros, ...

 While you are in the Help Index system, you can still use the
 CTRL-key with the Up, Dn, PgUp, PgDn, ENTER, or ESCape keys to
 perform menu operations.  However, you can't 0ddirectly enter a
 value for a menu item, since the text keys are dedicated to
 index navigation.

H4
 CONTEXT-SENSITIVE HELP:

 The ?-key (shifted or unshifted) is used to obtain
 context-sensitive help.  Daqarta will assume you want help
 with the most recent key hit.  For example, if you are looking
 at a F0spectrum and use the Y-key to flip to F2Y-Log display,
 the ?-key will then take you to the Help area for this option.

 This method will work even for an 0Koption key that is crossed
 out to show that it is unavailable.  If it is not clear WHY
 it's unavailable, hit its key and then the ?-key to find out
 more.  If there is a key you are curious about but you don't
 actually want to hit it, use the H7Key Preview Help method
 below.

 If the prior key operation was a movement of the menu cursor
 via the up or down arrow keys, the ?-key will take you to the
 Control Help text for the item at the new cursor position.
 CTRL-? (actually CTRL-/) will take you to that help text even
 if the prior operation was not a menu cursor motion.

 Once context-sensitive help is invoked, the Help topic does
 NOT automatically change as the context changes further.
 The ?-key or CTRL-? must be hit again to move to Help for a
 new context.

 For option key contexts, the ?-key invokes the same Main Help
 system otherwise invoked by the H-key, and for menu cursor
 contexts the ?-key or CTRL-? invokes the same Control Help
 normally invoked via CTRL-H... the only difference is how you
 get there.  You are free to move through either system in all
 the usual ways once you are there.

 To exit from context help, toggle off the relevant system via
 the H-key or CTRL-H.  Since the ?-key can take you to either
 the Main Help or Control Help systems depending on context,
 one simple way to exit is to always hit the unshifted H-key:
 If you were in Main Help, you will exit completely, and if you
 were in Control Help you will toggle to Main Help, from which
 another hit of the H-key will exit completely.  You could also
 use the ESC key to "back out" of the help system, but if you
 have followed a number of links you would have to ESC from
 each one.

H7
 KEY PREVIEW HELP:

 If you want information about a 0Kkey option without actually
 using it, hit ALT-? (actually ALT-/) and you will be prompted
 for the desired key.  As soon as you hit it, the Help system
 will be activated (if it's not already) and jump to the proper
 topic.  The option for that key will NOT be invoked, so this
 is a "safe" way to check things out first if you are afraid of
 commitments.

 Just as for H4context-sensitive Help, you can get information in
 this way even if the option is crossed out to show that it is
 not available.

 For help with control menu items without activating them, use
 CTRL-? (actually CTRL-/) to get context-sensitive help about
 the item at the current menu cursor position.

H5
 PLUG-IN HELP:

 ALT-H shows a list of all U0plug-in modules installed, and
 allows normal TAB or cursor operation to move the highlight
 through the list.  Note that this list is always in 25-line
 mode.

 ENTER or EQUALS displays a single-page description or summary
 for the selected module.  This will typically show any current
 settings that might have been changed by parameters in the
 UfDQA.CFG file.  For example, if the module is an GAADC board
 driver, the summary page will show the base I/O address, RdDMA
 channel, if any, and RiIRQ hardware settings, along with other
 relevant information about switch settings like input range or
 differential versus single-ended mode.

 You can 0Aforce the installation of a board driver even when the
 board is not present in your system (or without activating it
 if it is) in order to view its parameter requirements or other
 Control Help information.

 Some very simple modules may not provide any more help than
 this single page of text.  That fact will be indicated at the
 end of the page.  Hit ESC to go back to the module list to
 select another module summary.

 If the module also has its own Control Help system, however,
 you may hit ENTER or EQUALS from the summary page to invoke
 the main menu for the module and simultaneously bring up its
 help system.  You can then navigate through that as though you
 had entered it with the conventional CTRL-H.

 You can exit this by toggling CTRL-H off to get directly back
 to the trace, in which case if you later hit CTRL-H with this
 menu active you will go right back to the point where you left
 off.  Alternatively, if you choose to exit via repeated
 ESC-key hits, you will go back to the module list and can then
 select another module to look at.  Backing out this way will
 bypass the single-page summary for the module, so if you want
 to see it again you must go back to the module list first.

H9
 HELP FILES:

 Daqarta Help files have an .HLP extension.  These include this
 main DQA.HLP file plus the individual H5Help files for plug-ins
 such as the SGSTIM3A Advanced Stimulus Signal Generator
 (STIM3A.HLP) and 0BADC board drivers like SB16.HLP, DAS8X.HLP,
 etc.

 These .HLP files use Daqarta's own hypertext format for fast
 access.  They are NOT COMPATIBLE with any other .HLP files you
 may be familiar with.  Daqarta .HLP files can be viewed with
 most plain mEASCII text editors, but do NOT try to modify or
 even simply re-save them:  They contain internal link tables
 and checksums for validation, and will be rejected by Daqarta
 unless they have been processed by Daqarta's own Help
 compiler.


0G
 GETTING STARTED:

    12General Description and Features
    13System Requirements
    0NNetwork Incompatibility
    S!Reminder - Free Trial Period
    SRShareware Registration
    14Contact Interstellar Research
    0TNew User Screen Tour
    0BLoading Board Drivers
    0aAttenuator Drivers
    0DWarranty Disclaimer

12
 DAQARTA - GENERAL DESCRIPTION:

 Daqarta is a general-purpose Data AcQuisition And Real-Time
 Analysis system.  It allows waveforms and spectra to be viewed
 WHEN THEY OCCUR, rather than after separate collection and
 analysis steps.  The extra-large display area allows maximum
 visibility for fine detail or distant viewing, and both axes
 are completely marked with unit divisions in a 1, 2, 5
 sequence... not odd-ball steps or ends-only markings.
 Logarithmic X- and/or Y-axis scales may be used for spectrum
 display... all in real-time.

 FEATURES:
 ■  FAST on ANY CPU, uses NO math coprocessor.
 ■  Real-time spectral and waveform analysis with
    inexpensive hardware.
 ■  Waveform and/or spectrum A0averaging.
 ■  S0Spectrogram frequency-time plots, full range control.
 ■  Simultaneous SGstimulus generation, including GOoversampling.
 ■  Full pre- and post-Tdtrigger delay control.
 ■  Dual continuous-readout 0rtrace cursors.
 ■  Disk fofile types include D0Direct-to-Disk (DDisk), binary,
    binary array, and text.
 ■  Multiple M0trace memory buffers and MAMemory Arrays for quick
    comparisons.
 ■  BvVirtual Source and/or 0BDEMO driver for experiments without
    GAADC boards.
 ■  Complete K0Key Macro facility for automation.
 ■  Full control of screen Cccolors, with Csmulti-palette files.
 ■  Open architecture allows third-party and user U0plug-in
    modules for addition of custom functions and drivers.
 ■  Extensive H4context-sensitive pop-up hypertext H0Help system.


13 SYSTEM REQUIREMENTS:

 ■  PC-compatible system running any x86-type CPU or
    equivalent, including original 4.77 MHz 8088 PC/XT.
    Math coprocessor not used.
 ■  MS-DOS operating system or equivalent.  Windows 9x allows a
    "shortcut" icon to true MS-DOS mode that works very well...
    complete step-by-step instructions appear in the README.TXT
    file.  For Windows 3.x you must exit the Windows session
    first.  Daqarta WILL NOT run under Windows 3.x or Windows
    9x by simply clicking on the normal MS-DOS icon.
 ■  EGA, VGA, or better video, with at least 256K of video RAM.
 ■  640K system RAM recommended.  Daqarta typically uses less
    than 300K.  Extended memory above 1 Meg can be used for
    Direct-to-Disk (DDisk) DMMemory mode, if desired.  It can
    also be used by SGSTIM3A to Play WAV files as signal sources
    with modulation and rate control.
 ■  Hard drive is recommended but not mandatory except for
    D0DDisk recording.


0N NETWORK INCOMPATIBILITY:

 (This section is duplicated in the README.TXT file for your
 convenience in copying .BAT files.)

 Daqarta is not intended for network use.  Networks cause
 excessive system interrupts that can disrupt critical data
 acquisition tasks.  Although some simple DMA-based operations
 like ordinary viewing of sound card inputs may appear to work
 just fine, you should not depend upon this.  Increased usage
 due to stimulus generation, DDisk recording, or even pulse
 generation or external triggering, may result in distortions
 or timing jitter in your data.

 And many laboratory-type boards don't support DMA operation,
 or don't support it for simultaneous stimulus generation.  In
 these cases, where aquisition is via an interrupt on each
 sample, the network interrupts will cause serious problems.

 If you feel you must run with an active network connection,
 you should take care to test for proper operation under all
 operating conditions.  This is not easy to do, since it can
 be hard to simulate high network traffic.

 Networks have been found to be a particular problem with
 Windows 3.x, since the drivers load at boot-up.  Windows 9x
 drivers are released when you 'Restart in MS-DOS Mode' or use
 the direct shortcut method to start Daqarta, so they are
 typically not a problem.

 The best bet for Windows 3.x is to simply not load the network
 drivers when you will be running Daqarta.  Note that it is OK
 to leave the network card installed, as long as the drivers
 are not loaded.  However, if the drivers are loaded, even if
 you don't log on to the network, there will be interrupt
 activity.

 You can use a simple batch file to swap between two different
 setups.  Create files called CONFIG.DQA and AUTOEXEC.DQA that
 have no network drivers or other things Daqarta doesn't need.
 (Just copy your normal CONFIG.SYS and AUTOEXEC.BAT, then
 delete all the superfluous drivers.)

 Now create a batch file called RUN-DQA.BAT in whatever
 directory is convenient to start from.  (It doesn't need
 to be your DQA directory, since AUTOEXEC.DQA will change
 to that.)

    REN C:\CONFIG.SYS CONFIG.TMP
    REN C:\AUTOEXEC.BAT AUTOEXEC.TMP
    REN C:\CONFIG.DQA CONFIG.SYS
    REN C:\AUTOEXEC.DQA AUTOEXEC.BAT
    C:\UTIL\REBOOT

 At the end of your AUTOEXEC.DQA file, add these lines:
    CD DQA
    AUTO-DQA

 And in the C:\DQA\ directory create this AUTO-DQA.BAT file:
    DQA
    REN C:\CONFIG.SYS CONFIG.DQA
    REN C:\AUTOEXEC.BAT AUTOEXEC.DQA
    REN C:\CONFIG.TMP CONFIG.SYS
    REN C:\AUTOEXEC.TMP AUTOEXEC.BAT
    C:\UTIL\REBOOT

 When RUN-DQA runs, it will save the normal configuration to
 .TMP files (make sure these names are not already in use),
 then automatically reboot.  When the new AUTOEXEC.BAT (former
 AUTOEXEC.DQA) runs, it will proceed to run AUTO-DQA.  This
 will run Daqarta, then when you Q0Quit it will automatically
 restore the normal configuration and reboot again.

 This example assumes that you have the REBOOT.EXE utility in a
 directory called C:\UTIL.  This tiny program (15 bytes)
 performs a "warm boot", just like CTRL-ALT-DEL.  You can
 download it from the Utilities section of the 14Daqarta Website.

 This same general approach can be used for any circumstance
 that requires a configuration change, such as to eliminate
 EMM386 or other Protected mode drivers.


S!
 REMINDER - FREE TRIAL PERIOD:

 Daqarta's free trial period is 30 sessions.  After that, users
 are requested to register.  Daqarta will still continue to
 function, but the KIAuto-Initialization Key Macro will no longer
 work... you'll see this message instead.  In addition, the
 SGSTIM3A Advanced Stimulus Signal Generator will no longer load,
 though you can still use the older STIM3 version.  (You'll need
 to download that separately.)

 The free trial period can be extended indefinitely, including
 the Auto-Initialization macro and STIM3A operation, by use of
 the 0BDEMO driver instead of a real ADC board.


SR SHAREWARE REGISTRATION:

 Daqarta is SHAREWARE.  Unregistered copies may be freely
 distributed as long as no fees are charged beyond a reasonable
 and customary copying fee, not to exceed US $10.

 Daqarta is a major development, requiring over 11 years
 (16000+ hours) of effort to date.  It easily outperforms
 products that cost over US $1000, yet runs well on older
 machines and has minimal memory needs.  You can't buy
 performance like this anywhere else, at any price.

 Yet the whole point of Daqarta is to demonstrate that high
 performance can be affordable.  Daqarta has deliberately been
 priced so low that the cost of registration should not be an
 obstacle to anyone.  Interstellar Research thus hopes to put
 Daqarta into the hands of as many users as possible.  But if
 you try Daqarta and STILL don't feel that it's worth the
 registration fee, please USE DAQARTA ANYWAY.  We hope that you
 will come to appreciate Daqarta better, and that you will show
 it to friends and associates who may become users as well.

 Because the performance needs of individual and hobby users
 can be just as demanding as those of business and research
 users with more financial resources, Daqarta uses a two-tier
 pricing structure.  The software is exactly the same, but a
 special price break is offered to encourage personal users to
 register:

 COMMERCIAL / INSTITUTIONAL REGISTRATION........... US $99.00
  Includes site license for 5 users, plus telephone and 1st
  priority E-mail support.
    ■  For all business, professional, or research users.
    ■  For college and university intructors, site license
       includes all machines in one classroom.

 PERSONAL / HOBBY REGISTRATION..................... US $29.00
  Includes 2nd priority E-mail support.
    ■  For hobby or other non-commercial users.
    ■  For all college and university students.
    ■  For secondary school instructors, includes site license
       for all machines in one classroom.

 SECONDARY SCHOOL STUDENTS:
  Registration not required.
  3rd priority E-mail support.

 UNREGISTERED USERS:
  3rd priority E-mail support.

 ┌───────────────────────────────────────────────────────────┐
 │  ALL E-MAIL IS ANSWERED PROMPTLY, usually within 24 hrs.  │
 └───────────────────────────────────────────────────────────┘

 ALL USERS:  Free updates from our 14Website, with update
 announcements via E-mail.  (Even if you have not yet
 registered, just 14send us E-mail to get on the announcement
 list... there is no obligation to register and all addresses
 are confidential.)

 REGISTRATION:

 ■  ON-LINE - You may use PayPal (www.paypal.com) to submit
    payment.  Payment should be directed to:

        paypal@daqarta.com    or   tech@daqarta.com

    Your registration file (see below) will be sent upon receipt
    of Email confirmation from PayPal, usually within 24 hours.


 ■  MAIL (US and CANADA) - Please remit in US funds by check or
    money order.


 ■  MAIL (ALL OTHERS) - Please remit in US funds by a check
    drawn on a US bank, or by an International Money Order
    payable at a US bank.


    Interstellar Research
    2247 Prairie St.
    Ann Arbor, Michigan 48105-1441

 Please include your full name, business/institution name, and
 street address, plus an E-mail address if you have one.  This
 information will NEVER be released outside of Interstellar
 Research.  You will be notified of new developments, special
 drivers, etc, via E-mail unless you specifically decline.

 It would also be helpful to know as many details as possible
 about the system your are using, including CPU type and speed,
 data acquisition board or sound card, graphics card, hard
 drive model or capacity, and a brief description of your
 application.  This will help us improve Daqarta and better
 serve your needs with future versions and special plug-in
 modules.  As always, all information is strictly confidential.

 Registered users will be sent a small file called REGUSER.DAT
 containing encrypted registration information.  When this is
 placed in the normal Daqarta directory, it will be found on
 start-up and the user name and registration number will be
 displayed instead of the default 'UNREGISTERED SHAREWARE
 EVALUATION COPY' text.


14 CONTACT INTERSTELLAR RESEARCH:

 Via E-mail:
    tech@daqarta.com

 Via the Web:
    http://www.daqarta.com

 Via regular mail:
    Interstellar Research
    2247 Prairie St.
    Ann Arbor, Michigan 48105-1441


0T
 NEW USER SCREEN TOUR:

          ┌───────────────────────────────────┐
          │0YmV  0tTRIG  0lTitle  0CCount  0sSpd ┌─────┐│
          │ ┌─────────────────────────┐│0MMENU ││
          │ │ . . / \ . . . . . . . / ││     ││
          │ │ . / . . \ . . . . . / . ││     ││
          │ │ / . . 0wTRACE AREA  / . . ││     ││
          │ │ . . . . . \ . . / . . . ││     ││
          │ │ . . . . . . \ / . . . . ││     ││
          │ └─────────────────────────┘└─────┘│
          │ ┌────────────┐            0Xmsec    │
          │ │  0rReadouts  │                    │
          │ └────────────┘                    │
          │ 0mMessage Line          0SStatus      │
          ├───┬───┬───────────────────┬───┬───┤
          ├───┼───┼─  0KKey Options  ───┼───┼───┤
          └───┴───┴───────────────────┴───┴───┘




 Page Down for Screen Tour Index...


 SCREEN TOUR INDEX:
    0YY-Axis Units
    0XX-Axis Units
    0tTrigger Status
    0lTitle Line
    0CAverager Sweeps Count
    0sSpeed
    0wTrace Area
        VtView Trace (View)
    0MControl Menu
        0pPick List ("Radio Button") Menu Items
        0xToggle Menu Items
        0cCursor-Adjust Menu Items
        0dDirect Entry Menu Items
        0_Submenus
        0PAlternate Menu Pages
    0rCursor Readouts
        CxCursor Exchange
        VcView Trace Cursors and Readouts
    0mMessage Line
        EmComment Editor (Edit)
        E1Standard Editor Key Usage
        EdCopy Parameter to Comment Field
        EsSaving Comments to a Log File (EdSav)
        EaSaving Auxiliary Text (EdAux)
    0SDaqarta System Status
    0KKey Options

0Y
 Y-AXIS UNITS:

 The Y-axis units are controlled by the input range of the data
 acquisition Board and by the current Fmtrace magnification set
 by PgUp and PgDn.  At start-up, the magnification is set to
 show the full-scale input range of the board.  For example, if
 your board is set to 1 Volt full scale, the waveform axis will
 extend from -1.0 to 1.0 and the units will read 'Volt'.  If
 the range is 100 mV full scale, the axis will run from -100 to
 100 and the units will read 'mVolt'.

 You can Fsforce the magnification back to full scale (or a
 preset value) at any time via SHIFT-HOME, and return to where
 you were via SHIFT-END.

 When the UuUnits option is active, the 'Volt' will change to
 correspond to whatever units you set in the UmUser Units Control
 Menu, such as PSI, g, or Nt, with the appropriate prefix.

 The B0Virtual Source, which is active at start-up instead of
 Board, always assumes the same range as the board.

 When the F0FFT option is active the Y-axis becomes unipolar.
 If the UrRMS option is also active, the axis will be rescaled
 and 'RMS' will be appended to 'Volt' or to the user unit.

 If the FFT F2Y-log option is active the axis is 'dBr:FS', which
 is short for 'GadB re: Full Scale'.  This changes to 'dB PSD' if
 the F3PSD option is also active.

 If YMMic Cal is active, the units are typically 'dB SPL'.  If
 YSSpkr Cal is active, they typically show 'dB:V/Pa' for use in
 calibrating an unknown microphone.  Other units than SPL and
 Pa can be used if they are specified when Yfcreating the Mic Cal
 file.  When both Mic Cal and Spkr Cal are active (to show the
 Yxtransfer function of a probe tube or electrical network, for
 eaxmple), the units are simply dB.

 See also SySPECTROGRAM Y-AXIS.


0X
 X-AXIS UNITS:

 The X-axis depends on the Xfsample rate and number of points
 displayed.  For an unXteXpanded waveform display, the total time
 shown will be the Npnumber of points N times the Xpsample period.
 The units will typically be in µsec, msec, or sec, as
 appropriate.  If Tdtrigger delay is used, the X-axis will be
 shifted by the delay amount.  If the delay is T-negative, a
 solid CXaxis-color bar will appear below the negative
 portion of the axis, with the time labels shown in inverse
 video.  The end of the bar is thus an easy way to tell the
 Titrigger sample point at a glance.

 In F0FFT mode, the uneXpanded spectrum X-axis shows frequencies
 from 0 to half of the sample rate, with units typically in kHz
 or Hz.  If the F1CPM option is active, the units are CPM with
 the appropriate prefix.  For example, 10 kHz = 600 kCPM.

 If the FxX-log option is active, the same frequency range is
 shown with a logarithmic scaling.

 In S0Spectrogram mode, the X-axis shows time units.  The exact
 duration of a spectrogram sweep depends on sample rate, number
 of points N, and processing time.  Daqarta calibrates this
 "on-the-fly" by timing the first column of the display sweep
 and extrapolating, so the true overall axis may be slightly
 different due to changing conditions during the sweep.  In
 particular, T0Triggered operation may produce unpredicatable
 timing variations that can result in substantial errors if
 the triggers come infrequently.

0t
 TRIGGER STATUS:

 This will show TRIG if the TtTrig option is active, or FREE if
 it is not.  It may seem redundant, since you can usually see
 if the Trig option is active in the 0KKey Options area, but it
 is included on the top line with other pertinent information
 because this same line is shown as a header for text output
 files.  Also, the Key Options area may be covered by the
 mini-Help screen if you are trying to view Help text while
 acquiring data.

 The Trigger Status will also change from TRIG to FREE if the
 TfFree option is selected from the TmTrigger control menu.

0w
 TRACE AREA:

 This is where the action is:  F0Waveform, Spectrum, or
 S0Spectrogram displays are shown here.


Vt VIEW TRACE (View):

 When you toggle this off via the V-key, the 0wtrace is not
 updated until you enter P0Pause mode or change some other mode
 like going from F0waveform to spectrum display.  Although this
 is not an option you will normally want to turn off, there are
 times when that is desireable.

 If you are collecting A0averages of many ASsweeps on a slow CPU,
 this will allow the average to run faster by avoiding the time
 otherwise used to draw each trace.  (This is also a "cheater"
 method some programs use to claim high performance, especially
 if they have poor screen update routines.)  As soon as the
 average is A1Done and Pause mode is automatically entered, the
 final result will be displayed.

 If you are generating stimuli in RsSequential mode, either with
 a SGStimulus Generator module or with the TPPulse source, you may
 sometimes require high repetition rates for the proper
 operation of the experiment.  There will be some lower limit
 to the TcCycle time you can set and still obtain the desired
 (0sSPEC) presentation rate, due to the total of all processing
 time needed between sweeps.  Turning View off reduces the
 minimum Cycle time, allowing more stimulus presentations per
 second.  Although the difference is of course greatest on slow
 machines, faster systems can still benefit, especially if the
 trace is very dense or "busy".  Also, if the trace is quite
 variable in density from one sweep to the next (due to
 spurious noise bursts, for instance), turning View off can
 help assure that the SPEC stimulus rate is maintained when you
 are running near the minimum Cycle time.

 While View is off, the most recent trace will remain visible.
 A 'VIEW OFF' reminder will appear in the upper right corner of
 the trace as a reminder that this is not the true incoming
 data.  The 0rcursor readouts will continue to function properly
 on this "old" trace data.

 The true data will be shown whenever activity is P0Paused,
 either manually via the P-key or at the completion of an
 A0average or Sssingle-sweep.  In the Paused condition the
 'VIEW OFF' message will not be shown, since the screen display
 is correct.

0l
 TITLE LINE:

 A typical title line (above the 0wtrace area) is:

    '512 pt PsS Rect Waveform'

 '512 pt' is the Npnumber of points N used to compute the trace,
 either 256, 512, or 1024.

 'PsS' is the source of the incoming data, here shown as the
 B0Virtual Source.  If the data acquisition Board is active, this
 changes to show the input channel, such as Ch0 or Ch1.

 'Rect' is the active data W0window function.  Here a Rectangular
 window indicates that there is no window in use.  If the WtWindo
 option is active, this changes to whatever Wnwindow type has
 been set in the WmWindow control menu, such as 'Hamm',
 'Hann', etc.

 'Waveform' is the display mode.  If the F0FFT option is active
 this changes to 'Magn Spectrum', or 'Powr Spectrum' if the
 F2Y-log option is also active.  It changes to 'S0Spectrogram' if
 that mode is active.

0C
 AVERAGER SWEEPS COUNT:

 When either waveform or spectrum A0averager is running, this
 shows the number of ASsweeps accumulated so far.  The count is
 labeled to show which averager is in use, such as '32 Wave'
 or '64 FFT', since it is possible to toggle the display
 between modes while the average continues in its original
 mode.

 If instantaneous data is displayed during an average, the
 count is shown surrounded in parentheses, like '(   32 FFT)'.
 This will be the case when using the A\\-key to toggle to INST
 mode, or when toggling F0FFT off to view the waveform while an
 FFT average is running.  (When a waveform average is running
 you can toggle FFT on and see the FFT of the waveform average,
 but there is no provision to show the analogous inverse FFT of
 a spectrum average.)


0s
 SPEED:

 The Speed readout gives an indication of the relative
 performance of Daqarta and your system with respect to the
 Xfsample rate.  When the B0Virtual Source is active, this tells
 how fast Daqarta can generate data, compared to how fast it
 could be acquired by sampling a real source:

    FAST    Data generation faster than real sampling.
    SLOW    Data generation slower than real sampling.
    SPEC    Data generation takes same time as real sampling.

 No matter what the Speed indication, all Daqarta displays and
 data will be correct... only the screen update rate is
 affected.  If Speed is FAST, you can enable the BTTimed option
 with ALT-T to add just the proper delay to get SPEC.

 When TcTrigger Cycle is active to acquire data (and/or produce
 stimulus outputs) at a selected rate, the speed readout will
 show SLOW when running in RsSequential mode if the time to
 acquire and process each sweep is longer than the indicated
 Cycle value.  Otherwise, it will add as much dead time as
 needed to get SPEC... it will never show FAST.

 When the B0Board and R0RTime options are active, the Speed display
 shows a value followed by GAP or OVL.  GAP values indicate the
 samples skipped while waiting for a Titrigger or due to slow
 processing.  OVL values (possible only in untriggered FREE
 mode) indicate the number of samples from the end of the last
 sweep that are included in the current one due to fast
 processing.

0M
 CONTROL MENU:

 Control Menus pop up to the right of the trace area, in
 response to hitting a 0KKey Options CTRL-key combination.
 The BvVirtual Source menu appears by default at start-up.
 Hold the CTRL key down to see the other menus available.

 Certain menus will respond appropriately to the current state
 of other key options.  For example, if B0Board is active, CTRL-B
 brings up the data acquisition Board menu, otherwise you'll
 get the Virtual Source menu.  Similarly, CTRL-A gives the
 A3Waveform Averager or the Spectrum Averager menu depending on
 whether the F0FFT option is active.  The CTRL-T TmTrigger menu
 differs if Virtual Source or Board is active, and also if
 R0RTime is active.

 The menu variables are mostly "live", in the sense that
 changes are reflected immediately in ongoing operation.  This
 is why menus don't pop up over the trace area as in certain
 "other" systems... the trace and menu are BOTH active, so you
 can scroll values and observe changes immediately.

 To change an item, move the menu cursor to it with the  or
 CTRL- cursor keys and hit ENTER or CTRL-ENTER.  (You will
 need to use the CTRL- keys when this Help system is active.)
 There are several types of menu items, and each has a slightly
 different action as noted below:


0p PICK LIST ("RADIO BUTTON") MENU ITEMS:

 This is a stack of adjoining item boxes, only one of which can
 be active at a time, as shown by an inverse video highlight.
 Move the menu cursor to another item in the group and hit
 ENTER (or CTRL-ENTER), and the highlight moves to the new
 item.


0x TOGGLE MENU ITEMS:

 These are simple two-state (On/Off, Yes/No, etc) items that
 can be toggled between the two states just by hitting ENTER.
 One of the states (On, Yes, etc) is usually shown highlighted
 when it is active to make it easy to tell at a glance.  There
 are also certain three-state items that step through the
 sequence of states via repeated hits of ENTER.  Toggle options
 really do the same sort of thing as 0ppick list items, but they
 take up less menu space.  They are also simpler to use than a
 0_submenu that pops up with a pick list.


0c CURSOR-ADJUST MENU ITEMS:

 Hitting ENTER on one of these items changes the menu cursor to
 double arrows (), allowing the item to be changed by
 scrolling the same  or CTRL- keys that normally move the
 cursor.  Hit ENTER again to accept the current state or value
 and restore the normal menu cursor, or ESCape to restore the
 original state or value.


0d DIRECT ENTRY MENU ITEMS:

 These items allow scrolling of values as with the above cursor
 items, and also direct keyboard entry.  When you hit ENTER,
 the menu cursor changes to double triangles (like the  cursor
 without the arrow "shaft").  You may then proceed to scroll
 the value as desired with the  or CTRL- keys.  At any
 time, you may enter a new value directly.  As soon as you hit
 the first numeral key (or minus key), an 'Enter value: '
 prompt appears on the message line and the menu cursor changes
 to a filled-in D shape to indicate Direct entry in progress.
 Type in the complete number on the message line and hit ENTER,
 and the new value will replace the old one in the item.

 If you hit ESCape before you hit ENTER, that will restore
 cursor adjust mode and the prior value.

 If you hit CTRL-1 to CTRL-5 instead of ENTER, the new value
 will also be Edcopied to the associated field of the comment
 line as a convenient way to label the trace.

 The direct entry system is not available while the H8Help Index
 is active, since the text keys are dedicated to navigating
 the index.

 If you wish to enter a decimal fraction less than 1, it must
 be preceded with 0 to trigger the direct entry mode since the
 period alone is not recognized as a numeral:
    '0.1234'   NOT   '.1234'

 For very large or small values, direct entry allows allows
 either exponential notation or Spstandard scientific prefixes.
 The following are all equivalent:
    0.000000001234
    1.234e-9
    1.234E-9
    0.001234u
    1.234n
    1234p

 You can use 'u' as a shortcut instead of µ for the 'micro'
 prefix, although ALT-u will enter it directly.  You can also
 use either 'k' or 'K' for 'kilo'.  There must be no spaces in
 the entered number, and the base units are not entered.  For
 example, you enter 1.234m for 1.234 mV, or 100k for 100 kHz.

 If you don't enter a prefix or exponent, Daqarta may prompt
 you for one in cases where you might have forgotten it, such
 as if you enter 50 for the Xpsample period... you probably DON'T
 want a period of 50 seconds!  Likewise if you enter 500
 instead of 500m for the Tltrigger level, you probably don't mean
 500 Volts.  If this really IS what you want, when you get the
    'Enter prefix:'
 prompt, just hit ENTER and that's what you'll get.

 Note also that if you are trying to use exponential notation
 and enter E but forget the exponent value, Daqarta will
 assume that you mean Exa or 10^18... probably not what you
 intended!


0E "European" notation:

 Daqarta also supports another form of notation that is popular
 in Europe, whereby the decimal point is replaced with the
 prefix character.  This saves space when printing values on
 small electronic components or schematic diagrams, and
 eliminates any international ambiguity over the use of a
 period versus a comma as the decimal point.  In Daqarta, it
 also saves one keystroke.  The following columns are
 equivalent:

    1.234m     <===>      1m234
    12.7k                 12k7
    1.02M                 1M02


0_ SUBMENUS:

 Certain menus, such as CMColor menus, have upper item pick lists
 that allow adjustment of values in a submenu that appears
 lower on the same menu "page".  The submenu is identified by
 having a "drop-shadow" box around it, to make it look like it
 is at a different level.  Hitting ENTER to select an upper
 item leaves a place-mark (*) there and moves the cursor to the
 submenu, where the items to be adjusted will apply to the
 selected upper item.  You can then adjust the submenu items
 just as for any other menu item.

 For example, if you are in the main Colors menu and move the
 cursor to the TRACE item, hitting ENTER will leave the *
 place-mark there and the cursor will jump down to the submenu
 box.  There you may adjust the Color value or the Red, Grn,
 Blu values and the trace color will change.  When you are done
 adjusting any item there and have hit ENTER to allow movement
 between the submenu items, you can hit ESCape to jump back to
 the TRACE item.

 There are also submenus that pop up over part or all of the
 main menu in response to hitting ENTER on a main menu item,
 allowing for extended options.  As with the same-page
 submenus, they are denoted with a drop-shadow box surround.
 Within a submenu, operation is the same as for the main menu.
 ESCape while the cursor is not in an adjust mode will remove
 the submenu and return to the main menu.


0P
 ALTERNATE MENU PAGES:

 Sometimes there are "parallel" main menu or submenu pages that
 you can access via CTRL-PgUp and CTRL-PgDn.  A  symbol
 appears at the upper right in such menus to let you know that
 these other pages are present, as in the DmDDisk Write and
 DRDDisk Read menus.

 When you are in the CwSgram Colors menu, CTRL-PgDn brings up the
 CaColorMap menu page.  In this case, however, you must hit
 CTRL-PgDn again to return to the Sgram Colors menu because
 CTRL-PgUp has a special function in any Color menu:  It pops
 up the CsPalette Operations submenu.

 The SGAdvanced Stimulus Signal Generator menu (CTRL-G for StGen
 if you have installed the STIM3A module in your UfDQA.CFG file)
 makes abundant use of alternate menu pages, since there are
 multiple parallel generator functions for each GDDAC analog
 output, and 8 parallel bit functions for the digital output.

0r
 CURSOR READOUTS:

 The trace cursors are the solid and dashed vertical lines that
 are superimposed on the trace.  The solid cursor is moved by
 the  cursor keys, and the dashed cursor by ALT .  The
 solid cursor readout is the left column, indicated by a solid
 horizontal line between the upper Y-value block and the lower
 X-value block.  Similarly, the dashed cursor readout column
 next to it has a dashed line between the blocks.  The right 
 column shows the vertical and horizontal differences between
 the two cursors.

 The cursors and readouts are not shown when Help is active, or
 if you toggle the VcViewC option off.  They are also not shown
 in S0Spectrogram (Sgram) mode.

 You can use the C-key (CxCursX) or grey minus-key to exchange
 which cursor moves with the ALT  and which moves with the
 unshifted  keys.

 Cursor action is "dynamic", in that the longer you hold the
 key down the faster the cursor moves.  You can use the CTRL-K
 kmKeyboard control menu to adjust the kcacceleration rate and the
 ksmaximum speed, as well as the kdhardware auto-repeat action
 built into your AT keyboard controller, to suit your own
 preferences.

 You can also use the Keyboard menu to adjust the kaaveraging
 time of the readouts themselves, so the numbers don't become a
 blur with noisy data.


Vc VIEW TRACE CURSORS and READOUTS (ViewC):

 The trace cursors and the 0rreadout box may be removed by
 turning off the ViewC (View Cursors) option via SHIFT-V.  This
 is done automatically under certain situations, such as during
 S0Spectrogram display, or when the Help system is active.

 You will probably want to keep the cursors active most of the
 time, but you may want to turn them off to reduce trace
 clutter when Psprinting the screen, for instance.


0m
 MESSAGE LINE:

 This line serves multiple purposes:
    Shows error messages.
    Shows the current SHIFT, CTRL, or ALT key status.
    Prompts for user input.
    Accepts prompted 0ddirect input values, fAfile names, etc.

 When not in use for any of the above, the message line shows
 any comment text you have entered via the E0Edit option.  If
 the comment is temporarily replaced with an error message, it
 will be restored by the next key press.  If you save data to a
 fofile or to M0trace memory, the comment will be saved along with
 it.



E0
 COMMENT EDITING FUNCTIONS:

    EmComment Edit
    E1Standard Editing Keys
    EdCopy Parameter to Comment Field
    EsSaving Comments to a Log File (EdSav)
    EaSaving Auxiliary Text (EdAux)

Em
 COMMENT EDITOR (Edit):

 To EDIT or enter a comment, hit the E-key and a cursor will
 appear on the 0mmessage line.  Any normal keyboard text may be
 entered here.  Comments are limited to 64 characters, which
 will be saved along with the data for fofile operations or for
 M0trace memory operations.  You can use the EaEdAux and EsEdSav
 options to append additional comment lines to a running
 comment log file.

 The comment line may be regarded as five separate "fields",
 each 12 characters wide with a single character space between
 fields.  Values may be Edsent to any selected field directly
 from parameter entry operations to become part of the
 permanent record of that trace.  Multiple-trace MAMemory Arrays
 may be sorted based upon the contents of any field.

 Although the comment is normally considered a permanent part
 of the trace record, there may be times when you need to
 change it after the trace is already saved to file or memory.
 To do this, recall the trace using I0InDat or MrMemRd as needed,
 Edit the comment normally, and resave it to the same file
 name with O0OutDt, or to the same Mimemory ID with MsMemSv.  Note
 that when you do this, however, the ITtrace time and IDdate will
 be updated as though you had just recorded this as new data.
 You may also want to update the DQALOG.TXT file created by
 EsEdSav by inserting a note using any mEASCII text editor.

 There is no comparable way to change the comment for a DiDDisk
 file, so you will need to rely on DQALOG.TXT editing alone.


E1
 Standard editor key usage is:

    ENTER       Accepts the text and exits the Edit mode.
    ESC         Exits the Edit mode and restores original text.
    DEL         Deletes a single character and moves text left
                to fill in.
    ALT-DEL     Deletes from cursor location to end of line.
    HOME        Moves cursor to left end of text.
    END         Moves cursor to right end of text.
    ALT-2       Enter ² (superscript 2) character.
    ALT-u       Enter µ (small mu) character.
    CTRL-INS    Toggles between INSERT mode (block cursor)
                and OVERSTRIKE (underscore cursor).
    INS         Insert a text macro string at the cursor.
    ALT-INS     Start/end storing a text macro string.
    TAB         Move right one parameter field (13 characters).
    SHIFT-TAB   Move left one parameter field.

 Caps-lock, backspace and left-right cursor keys behave as for
 any mEtext editor.  Caps-lock only applies to text entry, and
 will be turned off on exit from Edit mode.  It will be
 restored to its former state whenever text entry is again
 active, either for Edit mode of for file name entry, etc.
 The keyboard LED will indicate the status when text mode is
 active.

 Note that NUM-LOCK is not available for text editing.


Ed COPY PARAMETER TO COMMENT FIELD:

 If you are collecting multiple traces, each with different
 values of key parameters like stimulus frequency or level, you
 will probably want to include these values in the Emcomment
 line for the trace, to aid in later identification.  This is
 especially important if you want to use the MAMemory Array
 option to view multiple traces on the screen at one time,
 since traces can be sorted based on comment field contents.

 Rather than manually entering each parameter when you change
 it, you can automatically direct a copy of the value to any of
 the five 12-character (plus spacer) parameter fields.  To do
 this, replace the ENTER or CTRL-ENTER (which would normally
 conclude value entry) with CTRL-1 to CTRL-5.  The value will
 be accepted as usual for the menu item, and a copy will be
 sent to the selected field, complete with a relevant unit such
 as 'kHz' or 'msec' where applicable.

 This is particularly useful when used with K0Key Macros that
 collect and save data automatically with different parameter
 settings, allowing a complete annotated record for each trace
 without operator intervention.

 Copy-to-Field works with all menu items except those of the
 "0ppick list" and "0xtoggle" type.  It also works with certain
 non-menu options like KLLoop count, wSWaitS delay, and uTUser Tone.
 (Basically, anywhere that you directly key in or scroll a
 parameter value before hitting ENTER.)

 If you just hit ENTER to change a menu item, but then you
 don't do anything like 0cscrolling or 0ddirect entry to change it,
 then this technique will not work... something must change.
 You can scroll up one and back down to the same value if you
 really want to record a value without changing it.

 ┌─────────────────────────────────────────────────────────┐
 │  NOTE:                                                  │
 │  Any errors in direct value entry will cause an Alert,  │
 │  and return to the value entry system with the cursor   │
 │  at the offending character.  But if you had ended      │
 │  your initial entry with CTRL-1 to CTRL-5 to designate  │
 │  a field copy, you will need to repeat that after the   │
 │  corrected entry.                                       │
 └─────────────────────────────────────────────────────────┘

 Values sent to the comment field are in a slightly different
 format from the way you enter them.  For example, the field
 entry will show:
    1.2345 mV
 for entries of:
    1.2345m
    1m2345              (0EEuropean notation)
    1.2345e-3           (Exponential notation)
    .0012345

 The copy will reflect the value accepted by Daqarta, which
 may be different from the one you entered due to internal
 limits and quantization.

 If you use exponential notation to enter a value that is
 outside of the range of standard prefixes, the copy will use
 a prefix of 'ε' for anything under 'y' (yocto = 10^-24), or
 '!' for anything over 'Y' (Yotta = 10^+24).

 Note especially that there is always a space before the units
 prefix for clarity of display, but you are not allowed to
 have any embedded spaces during direct parameter entry.
 Further, if there is no prefix there will be a space reserved
 for it anyway before the units label, if present, as in:
    10000  Hz

 If you enter values "manually" to the comment field using the
 normal Emcomment editor instead of parameter copy, you
 should follow this same prefix space convention.  That's
 because the MAMemory Array expects this spacing when MSsorting
 values with the unit prefix after the number.  It will also
 accept normal Euro or exponential notation.

 If you do use manual entry of exponential notation and want
 the Memory Array to be sorted on this field, there are a
 couple of caveats that you don't normally have to worry about
 for parameter direct entry:  You MUST use a lower-case 'e' to
 indicate exponential here, whereas parameter entry will accept
 either 'e' or 'E'.  Also, while the parameter entry will
 reject exponents with more than two significant digits, the
 sort will simply ignore any extra digits.

 It's perfectly OK for different traces to use different types
 of notation for field entries... the Memory Array will still
 be sorted properly.

 Be sure to use TAB and SHIFT-TAB to insure any manual field
 entries are properly aligned.

Es
 SAVING COMMENTS TO A LOG FILE (EdSav):

 SHIFT-E toggles EdSav mode.  When this is active, every time
 you save a trace to fofile or M0memory a text line is appended to
 the DQALOG.TXT file.  The line includes the trace file name or
 Mimemory ID number, the complete Emcomment line, and the trace
 ITtime and IDdate.

 This can serve as a record of your work, and as a handy
 reference to help you keep track of files by providing more
 information than a simple directory listing of file names.

 If you are saving MAMemory Array files, each trace saved to
 memory will appear in the log file in sequence, followed by
 the final save of the array to file.  The log file can thus
 serve as an index of array files.

 The DQALOG.TXT file format is standard ASCII text, which
 should be readable by any mEtext editor or word processor.
 Each entry is a single line of 97 characters, with the time
 and date extending beyond the end of a standard 80-column
 display.

 The time and date formats used for the log lines are set via
 the ImTrace Info menu.

 The log file will be maintained in the directory from which
 you invoke Daqarta.  Since you will probably want to keep the
 log file with the data files to which it refers, be sure to go
 to the relevant directory before starting Daqarta.  If you
 have different directories for different types of experiment
 sessions, you can thus keep a separate log file for each type.


Ea
 SAVING AUXILIARY TEXT TO THE LOG FILE (EdAux):

 There may be occasions when you need more space for comment
 text than will fit in the single 64-character 0mcomment line.
 ALT-E will bring up the Auxiliary comment system, which will
 allow up to 128 additional lines of text.  E1Text operations
 are identical to the normal comment EmEdit option, with the
 addition of up and down arrow keys to scroll to earlier or
 later lines.

 In the EdAux system, ESCape only applies to the current line.
 Once you scroll to another line, the prior line is accepted
 and any changes to it will not be restored by ESCape.

 ENTER accepts the current text line, exits the EdAux mode, and
 restores the normal comment display without advancing the
 current line.  When you go back to EdAux mode you will still
 be on the same line until you scroll up or down.

 If EsEdSav is active at the next file or memory save, all the
 text in the EdAux buffer will be appended to the DQALOG.TXT
 log file, right after the usual name-comment-time-date line.
 The EdAux lines will not include file name or time-date
 information, but will be indented to align with the comment of
 the preceding file/memory line.  The EdAux buffer will then be
 cleared, ready for the next use.

 If EdSav is off, the EdAux buffer will continue to accept
 lines of text until the next save with EdSav active.

 Any text left in the EdAux buffer when you Q0Quit the session
 will be appended to the log file automatically.  In this case
 it will NOT be indented, allowing you to distinguish it from
 text associated with file or memory saves.

 There may be occasions where you are not saving traces, but
 still need to record observations.  In these cases, you may
 prefer to just leave EdSav off for the entire session if all
 your data will fit in the 128 EdAux lines.  Everything will
 then be saved at the end of the session.

 EdAux is also useful for recording running observations during
 extended DiDDisk acquisition.

 Note that EdAux text is only saved to the log file.  It is not
 included with data files or memory traces, in order to
 preserve a uniform and compact format.


0S
 DAQARTA SYSTEM STATUS:

 This shows the current state of the trace:
    LIVE    Incoming data.
    PAUSE   Operation is suspended via the P0Pause key.
    AVG     Running A0average.
    INST    Live data during an average.
    DONE    The completed average.
    FILE    Data from a non-DDisk fobinary file.
    PLAY    "Video" replay of a DiDDisk file.
    SKIP    Live data while DDisk recording is suspended.
    MEM n   Data from M0trace memory "n".


0K
 KEY OPTIONS:

 At the bottom of the screen are 26 boxes corresponding to
 options selected by unshifted letter keys.  If you hold down
 a shift key (SHIFT, CTRL, or ALT) the options will change to
 correspond to the appropriately-shifted letter keys.

 When an option is active, it is shown highlighted with inverse
 colors.

 When an option is unavailable, it is shown crossed out.  This
 indicates that you can't change the state of the option at
 that time:  You can't turn it on if it is off, and you can't
 turn it off if it is on.  This is used to prevent incompatible
 option combinations, and also to lock out changes that could
 corrupt an A0average or other process in progress.

 The options shown when the CTRL key is down call up various
 0MControl Menus at the right side of the screen.  Unlike all the
 other options, they don't change anything else themselves.
 For example, the unshifted A-key starts and stops Averaging,
 whereas A3CTRL-A allows you to control the parameters relevant
 to the averager operation, like number of ASsweeps requested.

0B LOADING BOARD DRIVERS:

 Daqarta is designed to work with a wide selection of data
 acquisition boards and sound cards.  The second line of the
 DQA.CFG Ufconfiguration file specifies the board to be used.
 When Daqarta is first installed, the default DQA.CFG file
 specifies the DEMO.ADC driver.  This driver doesn't require a
 "real" board for operation, yet can still provide a good feel
 for operation beyond the built-in B0Virtual Source.

 You may want to keep the DEMO.ADC driver here until you have
 checked out some of its features, since it can function with
 the STIM3A SGAdvanced Stimulus Signal Generator to simulate
 analog and digital outputs, whereas some real boards may lack
 certain output capabilities.  Plus, it does not count against
 Daqarta's 30-session S!free trial period whenever it is in use,
 and can extend the trial period indefinitely, including use of
 STIM3A, after that limit.

 When you are ready to install a "real" board driver, just
 replace the DEMO.ADC line with the one appropriate for your
 board.  First find the appropriate driver name, based upon the
 type of board you have.  Current drivers (all with the .ADC
 file name extension) are:

    DEMO            Default driver, no board required.

    ESS             Boards using ESS chips, especially
                    ES1868.

    SB16            Creative Labs Sound Blaster 16/32/64 series
                    including PnP models.  GdFull duplex support
                    allows STIM3A Stimulus Generator use.

    SBPRO           Creative Labs Sound Blaster Pro (8-bit).

    SB8             Creative Labs Sound Blaster (8-bit)
                    DSP version 2.xx only.
                    Version 1.xx not yet supported.

    THUNDER         Media Vision Thunder Board.

    DAS16X          DAS-16, DAS-16F, DAS-16G1, DAS-16G2,
                    DAS16, DAS16F, DAS16/330, DAS16/Jr, etc.
                    from Keithley Metrabyte, Computer Boards,
                    CyberResearch, etc.

    DAS20           Keithley Metrabyte DAS-20.

    DAS8X           Keithley Metrabyte DAS-8, DAS-8/LT,
                    DAS-8PGA, DAS-8PGA/G2, and DAS-8/AO.
                    Computer Boards (CIO-) DAS08, DAS08-PGL,
                    DAS08-PGH, DAS08-AOL, and DAS08-AOH.
                    CyberResearch CYDAS 8, CYDAS 8PGL,
                    CYDAS 8PGM, CYDAS 8PGH, CYDAS 8AOL,
                    CYDAS 8AOM, and CYDAS 8AOH.

    DAS8JR          Computer Boards (CIO-) DAS08/Jr,
                    DAS08/Jr-AO, DAS08/Jr/16, and
                    DAS08/Jr/16-AO.
                    CyberResearch CYDAS 8JR, CYDAS 8JRAO,
                    CYDAS 8JRHR, and CYDAS 8JRAOHR.

    DT2821          Data Translation DT2821 family, including
                    DT2823, DT2824, DT2825, DT2827, DT2828,
                    DT2829, DT21-EZ, DT23-EZ, and DT24-EZ.

    LPTX            Data acquisition / stimulus generation with
                    a standard LPT printer port, using simple
                    hardware you can build yourself... from
                    just a few resistors, to a small multi-chip
                    circuit board.  Includes theory, design,
                    and general printed circuit fabrication
                    instructions.  Perfect for classroom use!

 If your board is not included here, consider if it may be a
 "clone" of one of these.  The "industry standard" DAS-16 and
 DAS-8 boards, for example, were originated by Keithley
 Metrabyte but have been widely cloned and enhanced by makers
 such as Computer Boards and CyberResearch.  Among sound cards,
 many suppliers claim "Sound Blaster compatible"... and some of
 their boards actually are!

 Daqarta requires boards to be "hardware", "register", or
 "low-level" compatible... they must look just like the target
 board for all register operations.  This is a fairly stringent
 requirement.

 However, many manufacturers claim compatibility even when
 their product is completely different.  They supply drivers to
 replace those of the target board, intercepting high-level
 function calls from programs and translating them to the
 relevant low-level routines needed.  Daqarta can't use these
 drivers, however, since they only support certain basic
 functions, and even those are often not well suited for the
 kind of operations needed here.  Daqarta makes no attempt to
 conform to any high-level function protocol.  Compatibilty is
 a nice goal, but not when it requires you to put tractor tires
 on your race car!

 Daqarta drivers also contain their own B1control menus and
 processes, as well as H4context control and invocation of
 their own H0Help systems.  Filenames with the same first part as
 the driver name but an extension of .HLP are Help files for
 those drivers.  For example, SB16.HLP is the Help file for the
 SB16.ADC driver.

 Boards often have jumper-selectable parameters such as base
 address, RiInterrupt Request (IRQ), and RdDMA levels.  You will
 need to tell the driver which ones to use if they are not
 the same as the defaults built into the driver.  Parameters
 are given on the Ufconfiguration file line after the driver
 name, and are typically in the format X:n where X is a letter
 to identify the parameter and n is the value to set.  If the
 value is given in hexadecimal notation, precede it with 'h',
 as in A:h220 to set the base Address to 220h.

0a ATTENUATOR DRIVERS:

 Besides data acquisition boards, Daqarta supports the control
 of external attenuators via the U0plug-in module system.  These
 are needed with 0Blaboratory-type acquisition boards, which have
 no built-in attenuators.

 An attenuator is essentially a volume control with discrete,
 calibrated steps, usually in GadB (decibels).  Its main use with
 Daqarta is for precise and repeatable control of stimulus
 levels, whether those signals are generated externally, or
 internally via the SGSTIM3A Advanced Stimulus Signal Generator.

 Like all digital signal generators, STIM3A can provide limited
 control of signal levels by simply scaling the numerical
 values that make up the waveform, using its Level controls.
 The problem with this approach is that as levels get smaller,
 less bits are used to represent the signal.  For example, to
 get the equivalent of 48 dB of attenuation, the Level control
 would have to be set to 0.40%.  The 16-bit values that STIM3A
 uses internally would then be effectively scaled to only
 8 bits for output... assuming the output DACs were 16-bit
 devices to begin with.

 With 8-bit DACs the output range would be less than a single
 bit... making it essentially a rectangular wave!  Even with
 the 12-bit DACs common on lab-type boards, the output would
 only cover a 4-bit range.  This means a sine wave would have
 only 16 different steps, which is pretty poor fidelity... and
 auditory tests commonly require much more than 48 dB of
 attenuation.

 So the best option is to generate the signals using the full
 range of the DACs, and attenuate them separately.

 Daqarta allows you to use a separate Sound Blaster 16/32/64
 sound card as an attenuator (ignoring its data acquisition
 capabilities).  This will work with the STIM3A Output dB
 control to give 0.01 dB resolution over the full range.

 There are also drivers for two "legacy" laboratory-type
 programmable attenuator systems from Tucker-Davis and
 Wilsonics.

 At first glance, it may seem redundant to use a laboratory-
 type board for acquisition, and a separate Sound Blaster just
 to provide attenuation.  Since the Sound Blaster contains its
 own built-in attenuators, and the normal 0BSB16.ADC driver can
 control those completely, why not do everything with the
 Sound Blaster and skip the lab-type board?

 The main reason is that Sound Blasters can only generate or
 record signals in the normal audio range.  They don't allow
 sample rates above 48 kHz, for either input or output.  So if
 you need to work at higher frequencies, you will need a
 lab-type board.

 Even if you only need to acquire data at 48 kHz or less, there
 is a problem if you need to generate stimuli at frequencies
 above about 20 kHz:  The tANyquist limit applies to generated
 signals as well as to acquired signals, so you can't generate
 anything with a frequency above half the sample rate... and
 even at frequencies quite a bit lower, the waveform may have
 rather few samples per cycle.

 But lab-type boards allow you to use the Stimulus Factor
 option to provide stimulus oversampling with STIM3A.  So even
 if you are using a low acquisition sample rate, you can use a
 very high stimulus sample rate for good waveform fidelity at
 high output frequencies.

 Note that the ATN-SB16 module uses only the mixer chip of the
 Sound Blaster, bypassing the digital signal processor
 completely.  This results in much better high-frequency
 response, often up to 100 kHz or more depending upon the
 model and output used (Line output is better than Speaker).
 The Tucker-Davis and Wilsonics legacy systems were typically
 limited to about 20 kHz unless they were special orders.

    ATN-SB16.ATN    Creative Labs Sound Blaster 16/32/64 series
                    including PnP models and ViBRA 16X.  Two
                    independent channel controls, plus Line /
                    CD selection.  0 to 138 dB and Off in 2.0
                    dB steps (0 to 90 in 1.5 dB steps for
                    ViBRA).  Compatible with SGSTIM3A Output dB
                    control, giving 0.01 dB resolution over the
                    full range.  Adjustable 0 dB reference.
                    For all new systems.

    TDT1.ATN        Tucker-Davis PA3 Programmable Attenuator.
                    Only the System 1 version using the IM3
                    Interface Module is supported.  Requires
                    a separate 8255-type parallel port for
                    control.  Controls up to 4 PA3 modules,
                    0 to 99 dB and Off in 1 dB steps.
                    (Legacy only.)

    WILSONIC.ATN    Wilsonics PATT Programmable Attenuator.
                    Supports either direct parallel control or
                    GPBA (General Purpose Bus Adaptor)
                    interface.  Requires a separate 8255-type
                    parallel port for control.  With GPBA,
                    controls up to 4 PATT modules.  0 to 99 dB
                    and Off, in 1 dB steps. (Legacy only.)


 These drivers are NOT to be confused with 0BADC board drivers.
 The .ATN module must appear after the 4th line of your
 UfDQA.CFG file.

 Use the TDT1 or WILSONIC only if you already have that legacy
 hardware... these devices are no longer being made.  New
 systems should use the ATN-SB16 where possible.  Besides
 better high-frequency response, the SB16/32/64 systems are
 much more convenient to install (they don't require separate
 rack mounts, bus interfaces, or power supplies), and they are
 much less expensive and much more readily available than the
 legacy systems ever were.

 The downside of Sound Blaster use is that the noise level may
 be a bit higher, not only because of the wider bandwidth, but
 also because these are consumer-grade products, and because
 they are installed inside the computer, where electrical noise
 is high.  Nevertheless, they should be adequate for the vast
 majority of uses, including auditory threshold measurements.

 All of these drivers allow you to specify the preferred sense
 of their controls when scrolling, with the default being that
 up gives increasing output level.  The maximum output will be
 at 0 GadB, and all lower outputs will show as negative dB.

 Optionally, you can use a configuration parameter to specify
 that up gives increasing attenuation.  The maximum output is
 still shown as 0 dB, but as you scroll up the output levels
 decrease and the dB values are positive and increasing.

 In either case, you can always enter a dB value directly...
 the sign is ignored.  Likewise, all systems always start
 at maximum attenuation, for safety.


0A VIEWING DRIVER HELP WITHOUT A BOARD:

 Since each board may be different, board-specific parameter
 information is included in the driver Help files.  To allow
 you to see this information before you actually set the
 parameters, Daqarta includes a "trick" to allow the driver to
 load without the proper parameters:  Use a base Address
 parameter of 0 for the board, as in the following:
    SB16.ADC    A:0
 All drivers use the A: parameter to specify base Address, and
 no board can actually reside at an address of 0, so Daqarta
 interprets this a request to load in "disabled" mode.

 With the A:0 parameter, the driver will appear to load
 normally but no hardware-specific operations will take place.
 You can activate the Board option and bring up the Board
 Control Menu.  Now CTRL-H will enter the driver H0Help system,
 or CTRL-? will provide H4context Help for the menu item at the
 cursor location.  You can move the cursor to any menu item
 just as if the driver were really active, but you will not be
 able to change any of the values or states... hitting ENTER
 will have no effect.  If the driver has 0Palternate menu pages,
 the CTRL-Pg keys will move to them as usual.  0_Submenus,
 however, can not be activated due to the disabled ENTER key.

 To see a short summary of the board's parameters and defaults,
 use H5ALT-H to bring up a list of all resident drivers.  The
 Board driver will be first.  With the Help cursor highlight on
 that line, hit ENTER to see a one-page summary for that
 driver.

 When the board driver has been disabled with A:0, the trace
 will continue to show B0Virtual Source operation.  Other menus
 like TmTrigger will behave as though Board had not been
 activated and Virtual Source was still in effect by default.

 In addition to allowing you to access setup information for
 your board and driver, this A:0 disabled mode can be used to
 help you decide which board to buy if you don't already own
 one.  You can see what features can be controlled by each
 board menu, and read about performance and specifications
 in the Help system.


0D

    WARRANTY DISCLAIMER:
    INTERSTELLAR RESEARCH DISCLAIMS ALL WARRANTIES
    PERTAINING TO THIS SOFTWARE, WHETHER EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED
    WARRANTY OF MERCHANTABILITY OR FITNESS FOR A
    PARTICULAR PURPOSE.

    IN NO EVENT SHALL INTERSTELLAR RESEARCH BE LIABLE FOR
    ANY CONSEQUENTIAL, INDIRECT, OR INCIDENTAL DAMAGES
    WHATSOEVER (INCLUDING BUT NOT LIMITED TO DAMAGES FROM
    LOSS OF PROFITS, DATA, PROPERTY, OR HUMAN LIFE)
    RESULTING FROM THE USE OR INABILITY TO USE THIS
    PRODUCT, EVEN IF INTERSTELLAR RESEARCH HAS BEEN
    ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

    SOME STATES DO NOT ALLOW THE EXCLUSION OF IMPLIED
    WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO
    YOU.

    This agreement shall be governed by the laws of the
    State of Michigan and shall inure to the benefit of
    Interstellar Research.  Any action brought by either
    party against the other arising out of or related to
    this agreement shall be brought only in a STATE or
    FEDERAL COURT of competent jurisdiction located in
    Washtenaw County, Michigan.  The parties hereby
    consent to in personam jurisdiction of said courts.


fo
 FILE OPERATIONS:

 fAFile Access System
 InFile Name Auto-Increment
 fOFile Overwrite Confirmation
 fBBinary Data File Formats
 O0Output Binary Data to File
 O1Output Text Data to File
 OsOutput Screen Image to Bitmap File
 I0Input Binary Data from File
 fpParameters Saved
 DiDirect-to-Disk (DDisk) Recording
 DVReading Direct-to-Disk Files

fA
 FILE ACCESS SYSTEM:

 Daqarta reads and writes several different file types:
 ■  Spectrogram and main multi-palette files, which may be
    saved or loaded from the CTRL-PgUp Cssubmenu in Main or
    Spectrogram CMColor menus.
 ■  Binary files of the current main mode, either Waveform or
    F0Spectrum, Instantaneous or A0Averaged, which can be saved
    with O0OutDt and recalled with I0InDat.
 ■  MAMemory Array files consisting of numerous traces all of the
    same mode, also saved with OutDt and recalled with InDat.
 ■  Long binary waveform data files created by DiDDisk, which may
    be recalled with DVDskRd or fBstandard .WAV editors.
 ■  ASCII text file listings of X and Y values for the current
    mode, written by O1OutTx.  These are not read by Daqarta,
    but may be read by any mEASCII text editor, word processor,
    or other data plotting or analysis program that accepts
    ASCII.
 ■  Screen-capture bitmaps in standard .BMP format, written by
    OsOutSc.  These are not read by Daqarta, but may be read
    and modified by image manipulation software such as Windows
    Paint.

 Binary data files are used where saved data will be accessed
 again by Daqarta.  This file type includes a header that
 preserves all fpmajor parameter settings.  When reading these
 files, the parameters will be shown in the appropriate menus,
 just as though P0PAUSE had been hit right after the data was
 recorded originally.

 When the proper key is hit to request file input or output,
 a prompt appears on the 0mmessage line along with a default
 file name, such as:
    Load binary file: C:DATA.000
 The text input cursor will be positioned at the beginning of
 the file name.  If this is the desired file, ENTER will load
 it.  Otherwise, use the E1text editor keys to change to the
 desired file path and name.  Since the prompt takes up part
 of the message line, the editor will restrict text entry to
 42 characters for the file specification.

 Certain characters are forbidden in DOS filenames, and
 Daqarta will reject them after ENTER by giving an mAalert and
 placing the cursor on the offending character.  Forbidden
 characters are  " + , / ; < = > [ ] | and embedded spaces.

 If DOS wildcard characters * or ? are used in the file name,
 a list of matching files will will pop up in the trace area.
 Use the normal  or  cursor keys to move the highlight to
 the name desired.  The currently highlighted name is also
 shown as the message line prompt as the highlight is moved.
 If there are more possible matching files than will fit on one
 screen (96), use the page keys to see more.  HOME and END will
 take you to the the start or end of the current page, while
 CTRL-HOME and CTRL-END will move to the start or end of the
 entire file display.

 Any directory entries in the list will be noted with <DIR>
 after them, including the .. <DIR> entry that indicates the
 parent of a current subdirectory.

 ENTER will cause the highlighted file to be selected.  If a
 directory is selected, all files in that directory will be
 displayed for further selection (or retreat via .. <DIR>).

 If only a path is entered initially, the file display will
 show all files in the indicated directory as though you had
 given the path with '*.*' for the file name.  If you provide
 no file name or path (for example, by clearing the default
 prompt with E1ALT-DEL), all files for the current directory
 will be shown.

 With any wildcard search, you can use the alphanumeric keys
 to jump to the "wild" section starting with that character.
 For a general search, this is similar to the way the Help
 Index system works:  Hit 'A' to see all the entries that start
 with 'A', and so forth.  But what if you had entered 'DATA.*',
 so that all the entries started with the same letter?  When
 this happens, Daqarta switches strategies and assumes you
 are interested in the first column that shows a difference.
 For example, if you had files DATA.000 through DATA.037 and
 you hit '1', you would see all the files starting from
 DATA.010 onward.

 Hitting ESC during the file list display will return to the
 prompt line, and hitting ESC from the prompt line will exit
 the file operation.  This allows simple viewing of your
 files:  Hit any file operation key (like I for binary Input),
 use ALT-DEL to clear the default filename, and hit ENTER
 to see the files.  Hit ESC twice to exit the file operation.

 Note that it is perfectly acceptable to navigate the entire
 drive by selecting appropriate <DIR> and .. <DIR> entries.

 If the initial name entry is a specific file without wildcard
 characters, ENTER will select it directly without further
 file display.  You can use the InIncNm option to have Daqarta
 offer sequential file names automatically.

 If the file operation is to write a file, you will be asked
 to fOconfirm overwriting of any file that already exists.

 ┌─────────────────────────────────────────────────────────┐
 │  TIP:                                                   │
 │  Since only 42 characters are allowed for the total     │
 │  file name, including the path, don't nest directories  │
 │  too deeply (or else keep their names short) if you     │
 │  wish Daqarta to access them.                           │
 └─────────────────────────────────────────────────────────┘

In
 FILE NAME AUTO-INCREMENT (IncNm):

 The file name prompt offered by Daqarta starts off with a
 standard name for each file type:
    DATA.000 for O0OutDt or I0InDat
    ARRAY.000 for MAMemory Array OutDt or Indat.
    LIST.000 for O1OutTx
    SAMPLE.000 for DiDDisk files
    SCRN000.BMP for OsOutSc screen capture.
 If you access a file of another name, either by entering it at
 the prompt or scrolling through the fAfile access system, that
 name becomes the default prompt for the next operation of that
 type.

 If you will be saving many files in succession, however, you
 have to give each a different name.  You can have Daqarta
 auto-increment the prompted name by activating the IncNm
 option with the ALT-I key.  Under this scheme, only the
 right-most digits of the name will be incremented, wherever
 those digits appear in the overall name-plus-extension.
 (Daqarta versions prior to 1.13 only acted upon the
 3-character file extension.)

 Typically, you would begin a session by entering a descriptive
 name for the first 8 characters, plus your desired first
 extension digits.  Then on each subsequent write of that type
 (DDisk, OutDt, or OutTx), Daqarta will prompt with the next
 higher extension, as in:
    SPEAKER.000     will increment to   SPEAKER.001
    FRACTURE.001                        FRACTURE.002
    EABR.N00                            EABR.N01

 However, if the saved file will be used by other software that
 expects a certain extension, like .BMP for screen images, you
 may want to move the active digits to the 8-character portion
 of the name.  Daqarta searches from right to left for digits,
 and considers the active portion to be all adjacent digits in
 the right-most group found.  These will all be considered free
 to change as needed.  For example:
    SCRN1999.BMP    will increment to   SCRN2000.BMP
    S2999999.BMP                        S3000000.BMP
    SC399ABC.BMP                        SC400ABC.BMP
    99FEB499.BMP                        99FEB500.BMP

 Besides .BMP screen image files, you may want to use this
 approach with DDisk files that will later be read as .WAV
 files by other software.

 The period separating the 3-character extension from the
 8-character file name will act to end the active portion.
 For example, in the name 12JUN01.59A only the 59 in the
 extension is free to change.

 When the active portion is in the 8-character part of the file
 name, IncNm uses only digits 0-9 just like a car's odometer.
 However, it will not advance beyond the "all nines" state in
 the right-most group of digits.

 Special rules apply when the active portion is in the
 3-character file extension.  Daqarta will use extensions from
 000 to 999, then A00 to A99, and so on up to Z99.  Only the
 most significant digit of the extension rolls through the
 alphabet.

 This scheme was chosen to avoid possible conflicts with file
 name extensions for unrelated files, since most of those have
 3-letter mnemonics like .EXE, .COM, .CFG, .BAT, etc.  Daqarta
 will thus never try one of these names.  In the unlikely event
 that a conflict does arise, you will be required to verify any
 fOoverwrite, as usual.

 Starting with Daqarta version 1.13 you can use IncNm with
 Cppalette files (which typically use a .PAL extension) for
 Cvsaving and CLloading series of many different palette files,
 each of which can hold several different palettes.

 IncNm is ignored for the default of KFDQA.MAC when you Q0Quit
 after changing any K0Key Macro.  You will need to manually enter
 a different name, if desired.

 The IncNm option, when used with I0InDat, is also very handy to
 quickly review the contents of all files in a series...
 hitting just two keys, 'I' followed by 'ENTER', will bring each
 successive file (which may itself be an array of traces) onto
 the screen.


fO
 FILE OVERWRITE CONFIRMATION:

 For operations that save data to a file, Daqarta checks the
 specified file name to see if a file of that same name already
 exists in the specified location.  If so, you will be prompted
 with a message of the form:
    'Hit Y to overwrite C:\DATA\FILENAME.XXX'
 where the specified path and file will be shown.  Hitting any
 key other than Y (shifted or unshifted) will cancel the file
 operation.

 Only a file that is actually about to be overwritten will
 cause an overwrite confirmation request, not a file with the
 same name in a different directory.

 For safety, the write confirmation key normally can't be
 included in a K0Key Macro.  In addition, if write confirmation
 is needed during a KRrunning macro, the macro is immediately
 exited at that point.  This prevents any possibility of a
 misguided macro trashing your data.

 There is one exception to the above rule:  If file extension
 auto-increment (InIncNm) is inactive and no changes have been
 made to the prompted file name, then write confirmation will
 work with Key Macros.  This still protects your data files,
 except one default file of each type (with .000 extension),
 or the last file saved.

 The purpose of this exception is to allow macros to repeatedly
 save and read a "scratch" file.  A typical use is with a D0DDisk
 file where you want to see near-real-time S0spectrograms with
 more Rooverlap than can be supported in real-time with any given
 system speed.  You can write a macro that records to a single
 file, possibly on a DDRAM drive for speed, then read it back in
 spectrogram mode with any desired overlap set via the
 DoDskRd overlap control.  This macro can then be executed
 repeatedly without filling up your drive with temporary files.


fB
 BINARY DATA FILE FORMATS:

 DiDDisk and O0OutDt files will be written using the RIFF .WAV
 format.  In addition to the standard header and data areas,
 the Daqarta format includes a LIST INFO section with all
 relevant parameters and the 64 character Emcomment line.

 The Memory Array file format is equivalent to a concatenation
 of all the individual files, each with its own .WAV format and
 LIST INFO section, and all in a single RIFF "wrapper".

 DDisk files should be readable by any software that adheres to
 the RIFF rules for handling file "chunks" it doesn't
 understand.  There is a possible exception to this, however,
 depending upon the native data format of the board used for
 acquisition:  The standard .WAV file format expects values
 over 8 bits to be recorded in high-justified two's complement
 binary format, and those of 8 bits and less as offset binary.

     BITS           VALUE RANGE              ZERO VALUE
    8-bit            0 to 255                   128
    16-bit      -32768 to +32767                  0
    12-bit      -32768 to +32752 (by 16s)         0

 Makers of sound cards adhere to this convention, but makers of
 laboratory-grade acquisition boards often don't.  Laboratory
 boards are most commonly 12-bit boards.  Some of these are
 incompatible with the .WAV format because they justify their
 12 data bits to the low end of each 16 bit word, so the range
 runs from -2048 to +2047.  Others use offset binary as well,
 so the value range runs from 0 to 4095 with 2048 representing
 a zero input.

 A stand-alone format conversion utility is planned for use
 with Daqarta, to allow you to convert DDisk files from boards
 with these non-compliant data formats into standard .WAV data
 formats.  Although this could have easily been done during
 DDisk recording via special drivers for those boards that use
 Riinterupt-driven RTime sampling, this would have slowed the
 maximum Xfsample rate.  Boards that use RdDMA would have fared
 even worse.


O0
 OUTPUT BINARY DATA TO FILE (OutDt):

 Hit the O-key to save the current trace or MAMemory Array to a
 file for later recall by I0InDat.  You will be prompted for the
 file name to save as.  You may accept the default with ENTER,
 or enter another file name directly.  You may also use the
 Daqarta fAFile Access system to navigate your directories if
 you want to replace a file you have used previously, or just
 see what else is there.  If you enter or select a file name
 that is already in use, fOoverwrite confirmation will be
 required.

 Separate file name series are maintained for individual or
 Memory Array files.  If you have an individual trace on the
 screen when you invoke OutDt, the default file name prompt
 will be DATA.000 or whatever name you last used for an
 individual trace in the current session.  If you have a Memory
 Array on the screen, however, the default prompt will be
 ARRAY.000 or whatever array name you last used there.  If
 InIncNm is active, each prompt will be one more than its prior
 value, but the two prompt systems will always be kept
 separate.

 The trace must be P0Paused for this option.  If you hit the
 O-key while the trace is 0SLive, the Pause state will be
 invoked automatically.

 The file will contain all relevant internal fpparameter settings
 and any current Emcomment line, and all will be viewable when
 the file is later read by InData.  The fBfile format is a
 modified form of the standard .WAV format, but don't expect to
 be able to read it with other programs.  A simple waveform may
 be readable, but waveform A0averages and simple FFTs use 32 bits
 per sample and FFT averages use 48... all according to the
 .WAV standards, but more than most other programs are probably
 expecting.

 If you are saving a MAMemory Array file, the MFFile item in the
 MmMemory Array control menu determines whether you save only the
 traces in the current View, or All comparable traces in
 memory.

 ┌───────────────────────────────────────────────────────┐
 │  TIP:                                                 │
 │  If you are collecting lots of traces in memory and   │
 │  saving them in a series of Memory Array files, you   │
 │  must make sure that you don't run out of memory.     │
 │  After each array file is safely saved, re-use that   │
 │  memory area by resetting the trace ID on your next   │
 │  MemSv.                                               │
 └───────────────────────────────────────────────────────┘

 If you are saving data after a A2Joint Average, note that OutDt
 only saves the currently displayed trace.  To save both the
 waveform and spectrum averages you will need to use OutDt
 separately for each.


O1
 OUTPUT TEXT DATA TO FILE (OutTx):

 ALT-O will prompt you for a file name to save as.  You may
 accept the default with ENTER, enter another directly, or use
 the fAFile Access system to replace an existing file or review
 names.  You will be asked for fOoverwrite confirmation of any
 file that already exists.  The trace must be P0Paused to use
 this option.

 OutTx saves data from the currently displayed trace, so if you
 want to save both waveform and spectrum A0averages after a
 A2Joint Average, you will need to use OutTx separately for
 each.

 The file will be in plain mEASCII text, suitable for use by many
 other programs.  The actual data appears in two columns, with
 header information lines above so you can identify the data.
 A typical example is shown below for an FFT average:

     0tTRIG   0l512 pt PsS Rect Magn Spectrum     0C32 FFT sweeps
    Your Emcomment line appears here.

        kHz          mVolt
     0.000000       9.798049
     0.039062       9.681928
     0.078125      10.005226
      ...            ...

 This is a good way to get data into programs that prepare
 publication-quality charts and graphs, or for any other
 advanced analysis.  Most plotting and analysis programs allow
 plain ASCII text input, though you may need to provide the
 program with a "template" or otherwise instruct it as to what
 to expect.

 Some programs evidently assume that you can store all the
 information you need about your data in the file name, and
 won't accept the header text (or will make it very difficult).
 If you must use one of these, first see if it supports some
 method for automatically deleting the 4 header lines, maybe
 with a keyboard macro.  If not, see if there is some simple
 way to edit the data from within the program, and delete these
 lines manually with the program's internal editor.  If all
 else fails, you can always use a mEseparate editor to prepare a
 copy of the file that has the header lines removed.  Be sure
 you DON'T just remove the header from your original and resave
 with the same name, or you will no longer have a record of the
 contents of the file... it will just be two strings of numbers
 that will be really hard to identify later.

Os
 OUTPUT SCREEN IMAGE TO BITMAP FILE (OutSc):

 SHIFT-O captures an image of the screen to a standard Windows
 (tm) .BMP bitmap file.  Other programs such as Windows Paint
 can then be used to manipulate the image as needed for
 publications or presentations.

 Even if you simply want to print the screen directly, this is
 often a better option than PsPrint Screen because Windows
 supports more printers than the GRAPHICS.COM driver used by
 Print Screen, and you don't have to bother with loading the
 driver first.  In addition, Windows 9x and later systems no
 longer supply that driver for DOS applications.

 The OutSc file save only takes a second or two, compared to
 the time for printing an entire graphics screen, so you can
 save many images rapidly during a volatile experiment and
 print them out later.  (Of course, you could also save the
 data with O0OutDt and later recall it with I0InDat for printing.)

 As soon as you hit SHIFT-O, the system enters P0Pause mode if it
 wasn't there already, "freezing" the screen image to be saved.
 You will be prompted for a file name for the saved image,
 starting with SCRN000.BMP as the default.  You can accept this
 default with ENTER, use another name by editing the default
 name, or use the fAFile Access system to review prior names or
 overwrite an existing file (with fOoverwrite confirmation).

 Even though the file prompt overwrites the 0mcomment line,
 and the File Access system may overwrite the 0wtrace area,
 the initial Paused image is what is sent to the file.

 The standard file name auto-increment system (InIncNm) can be
 used to simplify repeated screen captures.  Note that the
 default filename uses the .BMP extension expected by other
 programs.  IncNm will preserve that part (since it is not
 numerical) and instead work on the right-most digits of the
 8-character portion.  You are free to change the base name as
 desired (IMG00000.BMP, MYTEST00.BMP, etc.).

 These .BMP files use no compression (which makes them more
 widely accepted by other software) and are each 112118 bytes
 in length.  The current color Cppalette is preserved in the
 file.


I0
 INPUT BINARY DATA FROM FILE (InDat):

 Hitting the I-key will prompt for the name of a previously
 saved file to load.  You may accept the default with ENTER,
 enter another directly, or use the fAFile Access system to
 select an existing file or review names.

 You may enter or select either an individual trace file such
 as DAT.000, or a MAMemory Array file such as ARRAY.000.  Name
 prompts for each file type are maintained separately, and
 incremented separately if InIncNm is active.  Daqarta
 determines what sort of file to load based upon reading the
 file itself, not the name.  If you intermingle individual and
 array files within the same name series, like DAT.000 for an
 individual and DAT.001 for an array, Daqarta will still load
 them properly, but IncNm operation might get confusing.

 After you enter or select the name, the trace will change to
 show the contents of the file.  The P0Pause option will be
 highlighted but the Status display will show 'File' instead of
 'Pause'.  Various readouts and fpparameter settings will take on
 the values at the time the file was saved, including the
 averager 0Csweeps count if the original was an A0average.  The
 original Emcomment line will be shown.  The cursor will be
 locked out of some 0Mcontrol menus to tell you that the values
 shown are those of the trace data, not those that would be in
 effect during 0SLive operation.  Previous settings will be
 restored when you go back to Live by toggling Pause off.

 If you load a MAMemory Array file, all of its individual traces
 must fit into trace memory.  You will be asked if you wish
 to Add to any existing memory traces if there is room, or
 Replace them with the new array.

 The InDat option only applies to files previously saved with
 the O0OutDt option, not those saved with DiDDisk.  However, if you
 try to load a file that Daqarta determines to be a DDisk
 file, Daqarta will automatically exit InDat and attempt to
 invoke DVDskRd instead.  Since the DskRd option is only
 available when B0Board is inactive (Virtual Source active),
 you may get the following error message:
    'No DskRd from this mode.'

fp
 PARAMETERS SAVED (for Files and Memory Traces):

 The comment line and all major internal parameters are saved
 with each DiDDisk or O0OutDt data file and M0memory trace, and are
 temporarily installed in the appropriate places in Daqarta
 when the trace is recalled.  Thus the 0XX and 0YY axes will show
 the proper scaling, the 0ltitle will show the channel, number of
 0Caverager sweeps, and so forth.  Other values may be seen by
 invoking the relevant menu, just as if you were going to
 adjust that parameter on a 0SLive trace.  For example, to see
 what Xfsample rate was used, invoke the X0X-axis menu.  The cursor
 will be "locked out" to prevent you from changing these
 recalled parameters.

 Parameters that are set via U0plug-in modules (those modules
 that appear in the UfDQA.CFG file) are not saved in the standard
 header.  Important parameters can be Edsent to the comment line
 instead for reference.

 The saved parameters include:
    Complete Emcomment line (64 characters)
    NpNumber of Points N
    IBData bits and format
    Various status settings
    TaTrigger Mode
    TCTrigger Source
    TlTrigger Level
    TdTrigger Delay
    TcTrigger Cycle
    XfSample Period / Frequency
    AmAverager Mode
    ASAverager Sweeps requested
    0CAverager Sweeps actually acquired
    AlAverager Artifact Limits, Positive and Negative
    0YFull-scale range sensitivity
    UvUser scale factor and Ununits name
    WnWindow type
    WcWindow BW setting
    ADC Board IMmodel name OR all BvVirtual Source settings
    IDTrace Date and ITTime



Di
 DIRECT-TO-DISK (DDisk) OPERATION:

 D0Recording
 DmDDisk Recording Control Menu
    DpPreset File Size
    D-PreStart
    DfReadout Units
    DcRemote Control
    DsSkip and Pause
    Write Mode:
        DTDirect
        DMMemory
        DCCache
    aRApplications - Sound-Triggered Recording
 DdHard Drive Compatibility
    DOOverview
    D!Special Driver - Use With CAUTION!
    DaDEMO Board Tests
    DPPower Management Problems (Laptops)
    DDRAM Drive Operation
 DrReading Direct-to-Disk Files (DskRd)
    DVDskRd Operation
    DwReading Other .WAV Files
    DRControl Menu
    DkManual Movement
    DgDirect Go-To
    DuReadout Units
    DvAutomatic Replay
    DtTriggered Replay
    DxSpeed Factor
    DqAutomatic Peak Scan
    DoFree-Run Overlap Control
    DSScrolling
    DWSpectrogram Width
    DGAutomatic Glitch Scan


D0
 DIRECT-TO-DISK RECORDING (DDisk):

 In order to use this, you must be in R0RTime mode.  If the
 DTDirect or DCCache Write option is active, then when you hit
 DDisk (unshifted D-key) you will be prompted for the name of
 a file to receive the data.  You may accept the default with
 ENTER, enter another directly, or use the fAFile Access
 system to replace an existing file or review names.  You will
 be asked for fOoverwrite confirmation of any file that already
 exists.

 If you specify drive A: or B:, the DDisk option will exit with
 an mAAlert and the message:
    'No DDisk recording to floppy drives.'
 This is because floppy drives are just too slow for the fast
 recording for which the DDisk option is designed.

 Recording begins immediately after the file name is accepted.

 Alternatively, if the DMMemory Write mode is selected, the
 recording will start immediately upon hitting the D-key.  You
 won't be prompted for a file name until the recording ends,
 and then you have the option of saving to any drive, including
 a floppy, or aborting via the ESC key and confirm prompt.

 You may end the recording at any time by turning off DDisk
 with the same D-key.

 While the recording is in progress, certain 0Kkey options and
 0Mmenu items will be disabled to avoid interference with the
 recording process.  The SGStimulus Generator can not be changed
 during DDisk operation:  The cursor will be prevented from
 moving to the output controls, and while you may bring up the
 individual output control submenus, the cursor will be missing
 from these so you can't change any settings.

 No Help system access is available during recording, to
 prevent contention for the disk drive.


Dm
 DDISK CONTROL MENU:

 The DDisk Control menu (CTRL-D) allows control of several
 parameters.  There are separate pages of this menu for DDISK
 WRITE and DDISK READ functions.  If CTRL-D brings up the READ
 menu, use CTRL-PgUp or CTRL-PgDn to flip to the WRITE menu.
 Except for the DfReadout Units, the WRITE options must be set
 BEFORE you start the recording... once DDisk recording starts,
 the menu cursor will skip over them to prevent changes.
 The  indicator near the top right of the menu will also
 disappear to show that you can not use 0PCTRL-Pg keys to see the
 DDISK READ menu while recording is in progress.

 When reading a DDisk file with DVDskRd (ALT-D), the DDISK READ
 menu will similarly have the  indicator removed to show that
 you can't go to the DDISK WRITE menu until you have hit ALT-D
 again to toggle DskRd off.  All options in the DDISK READ menu
 are accessible.


Dp
 DDISK PRESET FILE SIZE:

 You can preset the size of the file to be recorded, so that
 you don't have to have quick reflexes to shut of the recording
 at the desired size (or time) when you are recording at high
 speeds, or if you just want all recordings the same size.
 Enter the file size desired in KBytes, which includes only the
 size of the data portion of the file.  (NOTE:  A KByte is 1024
 bytes, not 1000.)  Daqarta will also add 214 bytes of format
 information.

 The number of data bytes per second will be the Xfsample rate
 times the sample size in bytes, which will be 1 for 8-bit
 boards or 2 for 12- and 16-bit boards.  (At present, Daqarta
 only supports mono recording.)  So for a 12-bit board running
 at 40 kHz, the recording would use 80000 bytes per second, or
 80000/1024 = 78.125 KBytes.

 Note that if you use a K0Key Macro to record a Preset DDisk
 file, you may want to have the macro wait until the end of the
 recording before proceeding with the remainder of the macro
 commands.  To do this, you must manually toggle the DDisk
 operation off with the D0D-key when you are recording the macro,
 instead of waiting for the Preset end.  (With very short
 Preset sizes, you may need to temporarily increase the size to
 give yourself time to hit the key manually before the Preset
 ends.)  The macro handler will note that a Preset DDisk
 recording was in process and will store a special code instead
 of the actual D-key.  Then later, when the macro is running,
 that code will be interpreted as "wait for the end of the
 Preset DDisk".

 You can't use KPWaitP here to wait for the Pause at the end of
 the DDisk recording, because a DsDDisk Pause is actually a
 special state that only stops the display updates, but not the
 recording process.

 One application that uses Preset DDisk in a Key Macro is
 described in detail under aRSound-Triggered Recording.


D- DDISK PRESTART:

 Sometimes the event you want to record is not completely under
 experimental control, and may start at an unpredictable time.
 If the required Xfsample rate is too fast to just let the
 recording run while you wait for the event to happen, you may
 be stuck with your finger hovering over the ENTER key,
 waiting for the subject to sneeze or whatever.  But what about
 your reaction time... how could you ever get the start of the
 event?

 That's what Prestart is for:  It allows a "hedge" of up to
 15000 samples (30000 for 8-bit boards) that happened BEFORE
 you hit the key.  This works because in R0RTime mode we are
 continually taking samples into a large recirculating buffer.
 When the normal start command is received, Daqarta notes the
 next sample number to determine where to start dumping data to
 the disk.  With Prestart, we are simply telling it to start
 the dump from a prior sample.

 Of course, for this to work we must actually HAVE those
 samples in the buffer, which merely means that RTime mode
 must have been active (not P0Paused) for this long before the
 recording starts.


Df DDISK READOUT UNITS:

 Once recording starts, a DDisk Position Readout box will
 appear to the right of the 0rCursor Readout box below the trace
 area.  This shows the file position at the start of the
 current trace.  Readout Units may be toggled between bytes,
 time in seconds, or time in HH:MM:SS format by successive hits
 of ENTER with the cursor at this item.  The units may be
 changed at any time during a recording.

 The readout is updated once per sweep.  In DsDDisk Pause mode,
 where the display is frozen and there are no proper "sweeps"
 while data collection proceeds, the readout shows the current
 data point being collected instead of the trace start.  The
 readout will thus update much more rapidly.

 In S0Spectrogram mode this readout shows the file position of
 data currently being processed, and thus is updated at each
 horizontal time increment.  An additional readout box is also
 displayed at the left end of the trace area to show the file
 position at the start of the screen.  This readout is updated
 once per screen sweep.

 If you begin the DDisk recording while in Spectrogram mode,
 the sweep will restart at the left end of the trace area so
 that the start readout will be correct.  However, if you are
 using D-Prestart you presumably are interested in those points
 just before you hit the key, so in that case the Spectrogram
 sweep is NOT reset.  Instead, the start readout shows the
 Prestart value, preceded by '>' to indicate that it does not
 really refer to the left end of the trace, but the point where
 you initiated the DDisk recording.


Dc DDISK REMOTE:

 Most boards with digital input capability can allow the DDisk
 recording to be controlled by a mTTTL level.  If your experiment
 can provide this level only during the events of interest,
 you can greatly reduce not only wasted disk space, but also
 the wasted time spent searching for events in an otherwise
 long and uneventful recording.

 Also, many experiments may require operator intervention at
 the site of the experiment, which may not be all that close to
 the computer keyboard.  The experiment may take place in a
 shielded and/or soundproof room, with the computer outside to
 minimize electrical and acoustic noise.
 ■  You may want to start the recording just as you inject the
    secret formula into the subject, and your faithful
    assistant Igor has gone home for the day.  You can't be
    inside the room injecting and outside hitting the keyboard
    at the same time, and you don't want to run back and forth.
 ■  Or you may be experimenting on yourself.  How can you be
    strapped into the Acme Brain Enhancer and still start the
    recording?  Maybe you want to test several different
    techniques, to get the experimental protocol worked out
    before you have to hire paid volunteers... You are there
    already, you're reliable, patient, and cheap.
 ■  Or maybe you just need to be in with the subject for
    monitoring, making observations, offering comfort to the
    distressed, standing by with first aid, etc.

 ┌───────────────────────────────────────────────────────┐
 │  CAUTION:                                             │
 │  Do not connect any electrical equipment to a living  │
 │  subject without proper signal GIisolation techniques.  │
 │  A lethal shock could result.                         │
 └───────────────────────────────────────────────────────┘

 See mRREMOTE CONTROL SWITCH CONSTRUCTION for construction and
 wiring details of a simple hand-help switch.

 When the TTL level is LOW, DDisk recording proceeds normally.
 When it is HIGH, DDisk recording is suspended.

 The Remote Control item in the DDisk Control menu must be
 active (reverse-color Yes) to enable the remote control.
 This is just a safety precaution and a convenience, in case
 you DON'T want the control to be used but someone flipped
 the switch at the experiment location.

 Note that Daqarta allows boards which don't normally have
 digital inputs, such as sound cards, to use a printer port for
 remote control.


Ds DDISK SKIP:

 The Spacebar key performs a keyboard equivalent of the remote
 control.  You can use this to temporarily suspend recording if
 you detect some transitory problem, like your subject has a
 momentary fit of giggling during brainwave recording, or the
 kitten has decided it is more interested in something other
 than your elaborate display for evoking visual responses, or
 passing trucks interfere with your field recording of frog
 mating calls, or birds land on the loudspeaker you are testing
 outdoors since you don't have an anechoic chamber.

 ┌───────────────────────────────────────────────────────┐
 │  CAUTION:                                             │
 │  Do not connect any electrical equipment to a living  │
 │  subject without proper signal GIisolation techniques.  │
 │  A lethal shock could result.                         │
 └───────────────────────────────────────────────────────┘

 DDISK PAUSE:
 When you hit P0Pause (or an A0average is Done, etc) while in
 DDisk record mode, only the display is frozen... data
 collection and saving to disk continues unchanged.

 The difference between Skip and Pause is that in Skip, the
 trace is still active, so you can see when conditions are
 again suitable to resume recording.  With Pause, the display
 is frozen and you would need to tell via other means.

 You would typically use Pause to momentarily examine some
 detail of the trace without disturbing the recording, then
 when you are sure the reaction is NOT going critical you
 would unPause to resume viewing the incoming data.


DT DDISK WRITE MODE - DIRECT:

 This is probably the best choice for extended DDisk recording.
 In this mode the DCcache (if present) is "flushed" to disk and
 disabled for the duration of the recording, and Daqarta will
 send data directly to the disk whenever it accumulates 32
 KBytes of samples... for example, once every second with
 16-bit data and a sample rate of 16384 samples per second.

 This mode, unlike the following DMMemory mode, allows recordings
 limited only by the size of the drive.  It is a little slower
 to activate, since it requires a file name before the DDisk
 recording begins.


DM DDISK WRITE MODE - MEMORY:

 For recording files that will fit into memory, this mode is
 usually better than the above Direct mode.  The recording
 starts as soon as you hit the DDisk D-key, and sends all the
 data to memory.  You are only prompted for a file name after
 the recoding ends, at which point you may optionally elect to
 discard the data via the ESC key and confirmation prompt.

 In order to use this mode, your CONFIG.SYS file must include
 HIMEM.SYS to make extended memory available to DOS.  If
 Daqarta doesn't find the eXtended Memory System (XMS) present
 on start-up, the Memory option will not be available.

 Since files using this mode can be no larger than the amount
 of XMS memory present, that limiting value will appear as a
 DpPreset file size unless you set something smaller.  To gain
 maximum XMS memory, you may wish to remove SMARTDRV.SYS from
 your CONFIG.SYS file (or SMARTDRV.EXE from AUTOEXEC.BAT).

 Also note that if you run Daqarta after temporarily exiting
 to the DOS prompt from some other DOS program, that program
 may be holding onto XMS memory that won't be available here.
 Further, any Play files loaded into the the SGSTIM3A Advanced
 Stimulus Signal Generator will also take up XMS memory.

 Besides quicker starts of the DDisk process, another big
 advantage is that writing to memory is much faster than
 writing to a disk, which may allow higher sample rates if you
 are using a non-DMA lab-type board instead of a sound card.

 Finally, since the file is not actually saved to disk until
 after the recording is complete, you can elect to save it to a
 floppy disk instead of the hard drive.


DC DDISK WRITE MODE - CACHE:

 A disk cache attempts to speed hard drive access by putting a
 memory buffer between the operating system and the physical
 disk.  The idea is that since many programs tend to read and
 write the same data repeatedly, it will be faster to get that
 data from memory than from the relatively slower disk.  When a
 program attempts to write to the disk, the cache controller
 secretly squirrels the data away in its memory buffer and
 doesn't write anything, on the assumption that this data will
 need to be read soon anyway.  If the program tries to write a
 LOT of data to the disk, the buffer will eventually fill up
 and the controller will flush some it to the real disk.

 A large cache can thus greatly prolong the time between real
 disk accesses during DDisk operation, which could provoke a
 DPpower management system to shut down the drive.

 For this reason, you may want to avoid the Cache option in the
 DmDDISK WRITE menu.  Instead, use the default DTDirect option
 for extended recording, or the quicker DMMemory option for
 DpPreset file sizes that will fit into memory.

 When the recording ends, normal cache operation will be
 automatically restored... the Cache option only refers to the
 state of the cache during the actual DDisk recording.  All
 other file operations will always use the cache, regardless
 of this setting.

 Daqarta can control disk caches that conform to the DOS
 SMARTDRV interface specifications, version 3.00 and greater.
 If Daqarta doesn't detect this type of cache when it starts
 up, the Cache option will not be available in the DDISK WRITE
 menu.  If you are using some other type of cache, it will not
 be disabled during DDisk recording.

 SMARTDRV is loaded by including a SMARTDRV.EXE line in your
 AUTOEXEC.BAT file or a DEVICE=SMARTDRV.SYS line in your
 CONFIG.SYS file.  (The proper DOS path must also be
 supplied... see your DOS manual.)



Dd DDISK HARD DRIVE COMPATIBILITY:

 DOOverview
 D!Special Driver - Use With CAUTION!
 DaDEMO Board Tests
 DPPower Management Problems (Laptops)
 DDRAM Drive Operation - Not Recommended


DO OVERVIEW:

 If the data acquisition board is being used in RdDMA mode for
 R0RTime operation, then DDisk recording should work just fine.
 DMA mode is standard on most consumer sound boards, but some
 lower-cost laboratory-grade boards don't offer it, and
 parallel port and PCMCIA card devices don't have access to it.
 In these cases, RTime mode is done via an Riinterrupt on each
 sample.  This method is also used even on certain lab-type
 boards that support DMA, if they are also called upon to
 SGgenerate stimuli via the GDDAC or digital I/O during
 data acquisition.

 But each sample requires an interrupt, and if your hard drive
 BIOS locks out interrupts during transfers, as most do, some
 samples could be missed.  Daqarta sends data from the internal
 buffer to the disk once each 32 KBytes (16 Ksamples, unless
 you have an 8-bit board), so discontinuities could appear
 regularly in your data at that interval.


D! SPECIAL DDISK RECORDING DRIVER - USE WITH CAUTION:

 Daqarta sample interrupts are very brief and don't affect
 hard drive data transfers in the systems tested so far.  So it
 is possible to replace your BIOS with one that leaves
 interrupts enabled.  Such a replacement is provided with
 Daqarta as a U0plug-in module called DDISK13A.DRV.  If you
 include this in your UfDQA.CFG file, it will be used to replace
 the BIOS INT 13h for DDisk recording ONLY... all other file
 transfers will use the normal BIOS.

 In contrast to the earlier version of this driver (DDISK13),
 DDISK13A can handle much larger drives (up to 8.4 Gbyte) and
 fully supports LBA (Logical Block Addressing).  More
 importantly, when Daqarta starts up this driver will conduct
 tests to insure that it understands the geometry of your
 drive.  It will move the heads to 17 different positions that
 span the entire drive, and check to make sure that they moved
 where they were supposed to.  You will hear a brief "zip" on
 start-up when this takes place.  These are "seeks" which do
 not write anything, just move the heads.  Only if DDISK13A is
 satisfied that it can work properly with the drive will it
 then proceed with the installation.  Otherwise, it will cause
 Daqarta to exit immediately (right after the logo) with:

    'Non-standard drive geometry translation.'

 You'll also see this message with non-IDE/ATA drives such
 as SCSI... DDISK13A won't work with them.

 DDISK13A.DRV will not load with drives over 8.4 Gbyte, since
 those drives require a special BIOS interface that this
 driver does not yet support.  Daqarta will exit with:

    'DOS is using INT 13h extensions
      (Drive over 8.4 GB.)
    Not supported by DDISK13A.'

 It will also not load on PC/XT computers that use the 8088
 CPU chip, since those typically use DMA for disk transfers
 anyway.  The exit message will be:
    'Not for use on 8088 (PC/XT) machines.'

 DDISK13A normally assumes drive primary drive C:, but if you
 have a second drive (not another partition on your primary
 drive) you can tell DDISK13A to only be used on secondary
 drive accesses via a D:1 parameter on the DDISK13A line of
 UfDQA.CFG:

    DDISK13A.DRV    D:1

 ┌────────────────────────────────────────────────────────┐
 │   *** CAUTION! DANGER! WARNING! ALERT! ACHTUNG! ***    │
 └────────────────────────────────────────────────────────┘
 Although DDISK13A has been carefully written, and tested on a
 variety of drives, and although it performs its own tests when
 it loads, there are simply too many drives out there to test
 them all.  So use this at your own risk... it is most
 definitely NOT, NOT, NOT guaranteed!  No problems have been
 found so far, even at sample rates over 100 kHz, but you don't
 want to become the first.

 One precaution you can take is to load DDISK13A, but not
 actually activate it by starting DDisk.  Use ALT-H to see the
 list of installed drivers, and scroll down to DDISK13A and hit
 ENTER.  You will see a summary screen that tells what the
 driver found on start-up, namely the number of Cylinders,
 Heads, and Sectors/Track, as well as total sectors on the
 drive.  (A sector holds 512 bytes.)  If these values don't
 agree with what you think the drive has, proceed with
 caution.

 One additional test you can run is the DRV_TEST utility
 (available from the Daqarta download page).  This does a
 larger number of seek operations (64) to verify proper
 access, and it provides more information about the drive.
 However, note that this tests the size of the drive as
 reported by DOS, which is apparently limited to 8.4 GB.
 Larger drives may pass this test, but still won't be
 accepted by DDISK13A.

 The most sensible thing to do for safety (even if everything
 appears OK and you want to be extra-secure) is to back up your
 entire drive.  Then include DDISK13A.DRV somewhere in your
 DQA.CFG file after the first 4 lines.  Test THOROUGHLY, with
 the maximum Xfsample rate and with the maximum number of
 active SGSTIM3A outputs that you will use.  You want to make the
 system fail here under your watchful eye, not down the road
 somewhere.  PLEASE REPORT ANY PROBLEMS.


Da DDISK DEMO BOARD TESTS:

 But maybe you don't really need DDISK13A.DRV to get useful
 results.  You might be able to live with the occasional
 glitches, depending on your application.  If you want to see
 just how bad the glitch problem is under any given condition,
 one easy way is to use the 0BDEMO.ADC board driver in place of
 your normal board driver as the first line of your UfDQA.CFG
 file.

 This "board" looks at the system timer output of your mother
 board and converts it to data values that increase in a ramp
 or staircase fashion, then drop back and repeat.  The
 advantage of this signal is that it is very regular, so any
 glitch will show up easily as a discontinuity in the smooth
 ramp, and as a change in the timing between peaks.  Use the
 DSscrolling playback method to simplify the search for
 problems.


DP DDISK POWER MANAGEMENT PROBLEMS:

 Systems such as laptops or some "green" PCs that shut down the
 hard drive after a certain period of inactivity can cause
 problems during DDisk recording.  If the time-out interval is
 shorter than the time required for Daqarta to acquire 32
 Kbytes of data at the sample rate you are using, the drive
 motor will be OFF when Daqarta tries to write to it.  The
 drive will then need to go through a power-up cycle to get the
 motor up to speed, which is very slow compared to typical
 incoming data rates.  There will almost certainly be a loss of
 data under these conditions.

 In order to avoid this problem, you will need to modify the
 power management settings of your system.  Ideally, your
 laptop will provide some special key combination like Fn-ESC
 to invoke a menu for changing these settings without rebooting
 your system.  Finding this key combination may require a
 careful reading of the owner's manual.  If a hot-key method is
 not provided, you will probably need to run the standard SETUP
 utility, perhaps invoked via some control-key combination like
 CTRL-ALT-S.  Consult your system documentation for details.
 Unfortunately, SETUP programs tend to be exceedingly
 user-hostile in that they force you to reboot your system for
 ANY change, whether the reboot is really needed or not.

 In determining the optimum shut-off time, consider the effects
 of disk cacheing, which can increase the time between disk
 accesses.  You may want to avoid the DCCache option in the
 DmDDISK WRITE menu to reduce problems.

 There is also the standard POWER.EXE driver that comes with
 DOS.  This attempts to control your system's power management
 hardware directly, but it offers only very crude control.  You
 will probably not find this approach useful, but it might be
 worth a try.


DD DDISK RAM DRIVE OPERATION - NOT RECOMMENDED:

 Instead of a RAM drive, you will always be much better off to
 use the DDisk DMMemory write mode.  This is not only much
 quicker and easier to use, but also allows for better sharing
 of memory with Play files used by SGSTIM3A.  It also allows you
 to save DDisk files to floppy drives.

 Besides hogging memory, the big problem with RAM drives is
 that they are VOLATILE, and contents must be saved to a "real"
 drive before you shut off your machine.  Daqarta does not
 contain any provisions to do this automatically.

 If you have RAMDRIVE.SYS in your CONFIG.SYS file, it is
 strongly recommended that you remove it.


Dr
 READING DIRECT-TO-DISK FILES (DskRd):

    DVDskRd Operation
    DwReading Other .WAV Files
    DRControl Menu
    DkManual Movement
    DgDirect Go-To
    DuReadout Units
    DvAutomatic Replay
    DtTriggered Replay
    DxSpeed Factor
    DqAutomatic Peak Scan
    DoFree-Run Overlap Control
    DSScrolling
    DWSpectrogram Width
    DGAutomatic Glitch Scan


DV DskRd OPERATION:

 Use the ALT-D key to read DDisk files.  Unlike D0DDisk
 recording, this option is locked out in B0Board mode, so you
 will need to make sure that is off first (Virtual Source
 active).

 You will be prompted for the file name, with a default of
 SAMPLE.000.  You may accept the default with ENTER, enter
 another directly, or use the fAFile Access system to select an
 existing file or review names.  If you enter or select a file
 that Daqarta determines to be an I0InDat file instead of a
 DDisk file, the DskRd option will exit automatically and InDat
 invoked instead.

 When the file name has been accepted, the start of the file
 will appear on the screen.  The  DDisk Position Readout box
 will appear to the right of the 0rCursor Readout box below the
 trace area.  This shows the file position at the start of
 the current trace, so it will show 0 initially.

 Some options will be disabled while reading the file.  In
 particular, the Board (and Virtual Source) will be locked out,
 including those control menus, since the data source is now
 the file.  So don't be startled if you have the BvVirtual Source
 control menu on-screen and it is suddenly replaced by the
 ImTrace Info menu when you load the DDisk file.  Likewise, you
 won't be able to load other data files with I0InDat.  But
 some options like NpNumber of points N are only locked while
 the DDisk file is P0Paused, as it is when first loaded.

 When the file is loaded, its Xfsample rate will be used to set
 the Daqarta 0XX-axis.  If it is a true Daqarta file, most
 other fpparameters will assume the values in effect during the
 original recording, and the original Emcomment line will be
 shown.  These settings are only in effect while that file is
 being read, after which the original settings and comment will
 be restored.

 Options like sample rate that are properties of the recording
 will be disabled during DDisk Read.  The cursor will not be
 allowed to move to disabled items, although those items will
 still be displayed in their respective control menus.


Dw READING OTHER .WAV FILES:

 Daqarta can also read .WAV files recorded by other systems,
 but of course these will not contain all the parameter
 information that is stored with a Daqarta file.  Daqarta
 will also not be able to show comments for these files, even
 in the rare cases where they might have been recorded in a
 valid RIFF format.  At present, Daqarta does not support
 stereo files.


DR DDISK READ CONTROL MENU:

 Use CTRL-D to bring up the DDisk control menu.  It will come
 up in the DDISK READ page unless you have previously paged to
 DDISK WRITE while reading the file.  In that case, use
 CTRL-PgUp or CTRL-PgDn to get back to DDISK READ.


Dk DDISK READ MANUAL MOVEMENT:

 To move through the file manually, use the < > keys:
 ■  Unshifted < > (actually comma and period) = one sample.
 ■  SHIFT < > = 128 samples.
 ■  ALT < > = One screen-width (NpN = 256, 512, or 1024).
 ■  HOME = Start of file.
 ■  END = End of file.


Dg DDISK READ DIRECT GO-TO:

 You can also use the Go To item in the DDISK READ control menu
 to jump directly to a known location.  Move the menu cursor to
 this item and hit ENTER.  You will be prompted for a file
 position.  Enter the desired position in the current Readout
 Units format, and that point will be shown as the first point
 in the trace.


Du DDISK READ READOUT UNITS:

 The Readout Units item in the DDISK READ menu is a mirror of
 that in the DDISK WRITE menu:  If you set it one place, it is
 set both places.  To change to a different format, just move
 the menu cursor to that item and hit ENTER.  Readout Units may
 be toggled between bytes, time in seconds, or time in HH:MM:SS
 format by successive hits of ENTER.  The units may be changed
 at any time.


Dv DDISK READ AUTOMATIC REPLAY:

 When you first start to read the file, Daqarta will be in
 P0Pause mode.  If you unPause, the file will "run" by itself and
 the 0SStatus will show PLAY.  You can then Pause when you see
 something that merits a closer look.  Whenever the display is
 Paused, the above Dkmanual movement controls are available for
 fine control, etc.


Dt DDISK READ TRIGGERED REPLAY:

 Internal level T0triggering can be used just as for a live
 trace, so you can see a stable display if your data is
 repetitive.  You can set a suitable Tltrigger level and
 perform waveform or spectrum A0averaging as the file replays,
 for example.


Dx DDISK READ SPEED FACTOR:

 The speed at which the file is played can be controlled by
 the Speed Factor item in the DDISK READ control menu.  If
 this is set to 1, then Daqarta will attempt to play back
 the file at the same equivalent Xfsample rate as when it was
 recorded.  If you recorded at a high speed, this will often
 be too fast, so you can set a negative Speed Factor to slow
 down by that amount:  A factor of -10 means that the file
 will be replayed at one tenth the recorded speed.  On the
 other hand, if you have recorded some very slow phenomenon
 at a low sample rate, perhaps over hours or days, you can
 speed up the replay with a positive factor.


Dq DDISK READ AUTOMATIC PEAK SCAN:

 You can also use the Tltrigger level to help find areas of
 interest if you know that the waveform will be above some
 background level:  Daqarta will ignore all data below the
 trigger level, so this becomes a "skip to next peak" function.
 If you want to P0Pause after the next peak is found, rather than
 seeing all peaks in the file in rapid succession, use the
 SsSingle Sweep function.


Do DDISK READ FREE-RUN OVERLAP CONTROL:

 With level T0triggering active you are not seeing ALL your data,
 since some will be skipped to get to the next Tltrigger level.
 Use the TtTrig key to disable triggering if you want to see
 everything.  However, the resulting Free-run display may go by
 too fast to be of much use.  If you use the DxSpeed Factor to
 slow things way down, the display will flash a full screen of
 data at a time, then flash the next full screen.  Sometimes
 this may be just what you want, but there is another option:
 Scrolling via Overlap.


DS DDISK READ SCROLLING:

 By setting a high overlap, each screen advances by only one or
 a few samples at a time, so it appears to slowly scroll
 through the trace area.  This is very handy when scanning for
 discontinuities or other glitches in the data, since a missing
 section shows up as a conspicuous lurch in the motion.  The
 full-screen-at-a-time method might easily miss this same data
 gap if it fell between screens.

 You control the apparent scrolling rate with Overlap Points
 in the DRDDISK READ control menu.  If you set this value to one
 less than the Npnumber of points N per screen, then the next
 screen will advance by only a single point.  As you reduce the
 overlap from this value, the display appears to scroll faster
 and faster.  Using this control and the DxSpeed Factor, you can
 tailor the apparent rate to be as fast as you can reliably
 scan your data.


DW DDISK READ SPECTROGRAM WIDTH CONTROL:

 The DoOverlap control also affects the width of S0spectrogram data
 presentation.  Each vertical time-line in the spectrogram
 represents one spectrum of NpN data points.  There are 512
 spectra in a full-width spectrogram, so with no overlap
 this would show N * 512 samples of data.  But with overlap
 each time-line does not advance as far through the data.
 At maximum overlap (one less than N) each line is only one
 sample later than the start of the prior line, so the final
 line would be only 511 samples later than the first.  Overlap
 thus has the effect of expanding the spectrogram display.

 If you want the spectrogram to cover a certain amount of time,
 adjusting the Overlap control is not very intuitive.  Instead,
 the Sgram Width control below it allows you to control the
 spectrogram X-axis time directly.  You can enter or scroll
 the Sgram Width to a desired time value, and all the relevant
 math will be done and the corresponding Overlap value updated.
 Likewise, whenever you change the Overlap value, the Sgram
 Width is updated as well.

 Note that the spectrogram is not updated automatically just by
 changing the Width or Overlap control; the next screen shown
 will reflect the change.  You can hit DkHOME after each change
 to cause a redraw from the start of the file if you are trying
 to get a short file to just fill one screen.

 This is actually quite simple:  If the first view of the
 spectrogram stops before the end of the screen, read the time
 at which it stopped from the X-axis and enter that as the
 Sgram Width, then hit HOME to redraw with the new overlap.

 Use of DDisk recordings with Sgram Width or Overlap controls
 on DskRd playback often allows much higher overlap values than
 you would get during normal Ttuntriggered operation in RrRTime
 mode, especially with slower systems.  It also allows constant
 values, whereas the RoRTime overlap may change as the processing
 time changes with changing data.


DG DDISK READ AUTOMATIC GLITCH SCAN:

 If you just want to verify that your DDisk setup is working
 properly, there is an "automatic" way to scan the recorded
 file.  This won't tell you exactly where a glitch occurs, but
 it will alert you if one is present anywhere in a test file.

 Record a signal such as a triangle or sine wave that has no
 step discontinuities (unlike a square or ramp).  Set the
 signal frequency to get a few cycles displayed on each trace
 at the Xfsample rate you require.  For example, if you are
 sampling at 20 kHz and viewing 512 Nppoints, the trace is
 512 / 20000 = 0.0256 or 25.6 msec wide.  If you want to have
 3 cycles in this interval, each needs to be 25.6 / 3 = 8.5
 msec or 117 Hz... but this is really not critical and can be
 done by eye.  Anything in the 100 to 200 Hz range should be
 fine.  This will also make it easy to spot glitches using the
 DSscrolling method mentioned above.  A triangle wave is best for
 that sort of glitch visualization, but a sine wave is better
 for the automatic scan.  Use the triangle if you expect to do
 both.

 For the purposes of this test, the Sine or Triangle waveforms
 of the 0BDEMO driver are good choices.  The output is generated
 directly from the counts of a system timer, so if anything
 happens like missed sample interrupts during a disk transfer,
 the delay will be reflected as a glitch in the recorded wave.

 Note that this is NOT the same as using DEMO with sine waves
 generated by the STIM3A SGStimulus Generator.  Why not?
 Since in that case sample output and input are synchronized,
 anything that interferes with the sampling process will cause
 both processes to be affected in exactly the same way.

 For example, if 50 samples are missed, the actual output
 waveform would not change during that interval, giving a
 serious glitch.  However, this would be completely overlooked
 by the GAADC input, since no samples would be recorded either.
 When sampling resumes after the transfer, everything picks
 up right where it left off and the trace would look perfectly
 fine... but it would be a lie!

 The glitch-scan method is to detect any discontinuity by its
 effect on the spectrum, where it will cause a broad
 high-frequency "splatter".  The recorded signal usually will
 not have an exact integer number of cycles per trace, so you
 need a W0window function (such as WnHanning) to reduce the
 apparent trace edge discontinuities seen by the FFT.

 Since a glitch could appear anywhere in the recording,
 including at either edge of a trace where it would be reduced
 or eliminated by the window, you need to play the recording
 back with enough overlap to assure that any glitch will fall
 near the central region of the window on some sweeps.  With
 N = 512, setting Overlap Points to 384 means that the window
 area moves through the recording by 1/4 of its width at a
 time, insuring that nothing is missed.  This is MUCH faster
 than you could scroll with visual scanning.

 The final tool that makes this operation automatic is to use
 the A^Peak mode of the Afspectral averager to trap the burst of
 spectral energy from a single glitch.

 Here is the step-by-step procedure:
 ■  Record the test signal, a sine or triangle wave with
    frequency set for around 3 cycles per trace at the desired
    sample rate.
 ■  Use ALT-D (DVDskRd) to bring up the resultant file.
 ■  Use CTRL-D to bring up the DRDDISK READ control menu, and set
    DoOverlap Points to 384 or about 3/4 of NpN points per trace.
 ■  Use the F-key (F0FFT) and Y-key (F2Y-log) to show the power
    spectrum.
 ■  Use the WtW-key to apply a window function.  WnHanning is OK.
 ■  Hit the P-key to unP0Pause the trace, and the T-key to turn
    off TtTrig.  (FREE will appear as the 0ttrigger status at the
    start of the title instead of TRIG.)  You can only
    toggle Trig while the trace is active.

 At this point you should see a strong fundamental frequency,
 plus (for a triangle or not-so-pure sine wave) a "toothy"
 family of harmonics that decay toward a ragged noise floor at
 higher frequencies.  Notice the approximate shape and level of
 the noise floor... you are going to be looking for a jump
 above this baseline.
 ■  Stop the playback with the P-key (Pause), and use the DkHome
    key to "rewind" the recording to the start.
 ■  Use CTRL-A to bring up the A3Spectrum Averager control menu
    and set AmMode to A^Peak.  AlArtifact Limits should be set to
    full scale.  ASSweeps should be set to 1, which will show as
    'Cont' for Continuous operation.
 ■  Now hit the A-key (A1Avg) and watch it go!  If a glitch or
    discontinuity is encountered, the noise floor will jump up
    and stay at that higher value.  When playback is complete,
    any problems should be evident.

 Of course, since smaller glitches will result in smaller jumps
 in the noise floor, this method does not guarantee that your
 recording is perfect... just that there are no major problems.
 You can use this to screen out faulty setups, then follow up
 with a slow visual scan for confirmation once things look
 good.

K0
 KEY MACROS:

K1 Introduction
KS Creating and Storing Key Macros (KeySt)
KX Changing the Descriptive Name of an Existing Key Macro
KR Running a Key Macro (KeyRn)
KV Key Macro Descriptive Name Viewer
Kh Halting and Single-Stepping Key Macros
KP Wait for Pause (WaitP)
wS Wait Seconds Delay (WaitS)
r# Random Value Entry
   ri Randomize Pseudo-Random Source
uT User Tone
KN Nested Key Macros (Subroutines)
KL Auto-Repeat Key Macros (Loop)
KQ Using Quit in Key Macros
KO Forcing a Key Macro Option State (KeyOn)
KM Key Macro Memory Management
KF Key Macro Files
KI Auto-Initialization Key Macro
KT Key Macro Tips
KD Key Macros that Save Trace Data to Files

a1Applications - Sound / Event-Triggered Sequences


K1
 KEY MACRO INTRODUCTION:

 Frequently-used key sequences may be stored for easier
 operation.  Instead of hitting all the keys of the sequence
 each time they are needed, using a Key Macro allows the same
 sequence to be run by hitting a single invocation key ("k" for
 "Key Run") followed by an identifying key you have assigned.

 Almost any valid Daqarta keystroke may be included as part of
 a macro, including option keys, cursor motions, and text or
 data entry.  The only exceptions are the mddisaster management
 keys like CTRL-ALT-DEL (which you probably don't want to
 include in a macro anyway!) and most applications of file
 fOoverwrite confirmation (for safety).

 Key Macros may KNinvoke other Key Macros that have been defined
 previously, and KLrepeated a specified number of times.  They
 are typically KFsaved in files for future use.  A Key Macro may
 be created that will KIrun automatically at the start of every
 session.  Macros can be created to speed entry of frequently-
 used descriptive text on the E0comment line, avoiding the use of
 cryptic abbreviations that may not be clear to others... or
 yourself, a year later.

 Proper use of Key Macros can allow high levels of automation,
 including completely unattended operation in some cases.


KS CREATING AND STORING KEY MACROS (KeySt):

 To set up a key sequence as a Key Macro, hit SHIFT-K or
 ALT-INS.  If you do this while entering text or data, you must
 use the ALT-INS form since SHIFT-K would just enter an
 upper-case 'K'.

 You will be prompted for an identifying (ID) key to be used
 for the sequence, via the 0mmessage line prompt:
    'Store Key Macro as:'
 You may use any displayable key for the ID:  Any numeral,
 symbol, or upper or lower case letter, but not Spacebar,
 CapsLock, Tab, etc.  Function keys are also allowed, including
 SHIFT-Fn, CTRL-Fn, and ALT-Fn.  You may not use CTRL- or ALT-
 with other symbols or letters, though of course SHIFT may be
 used to distinguish upper and lower case.  There are thus 142
 keys available for use as Key Macro IDs.  High-mEASCII
 symbols such as those available in DOS via ALT-<number pad>
 entry are not allowed.

 As soon as you enter the desired ID key, the message line will
 prompt you for a KVdescriptive name to help you identify this
 macro later:
    'Name: '
 You may fill up the remainder of the message line (up to 57
 characters) with descriptive text.  After you hit ENTER to
 conclude this, the the message line will change to:
     'Storing to Macro Key N.'
 where N is your selected ID key, shown highlighted.  Now
 perform any desired operations, and all keys will be stored.
 The above message will remain displayed until you hit a shift
 key, when it will revert to showing whatever comment was
 previously shown.  Shift keys alone are never stored as part
 of the macro, so if you just hit SHIFT at any time you can see
 that the SHIFT-K option 'KeySt' is active to indicate storage
 in progress.

 When you are done, hit SHIFT-K or ALT-INS again to end the
 macro.  The message line will show a report like:
    'Key Macro N stored with 23456 bytes free.'
 where N will be the macro ID you used and 23456 will be the
 actual bytes of KMmacro memory available afterward.

 In a text or data entry mode (ALT-INS only), the above
 'Storing to' and 'bytes free' messages will not be shown at
 all, since the message line is needed for entry.  When you
 hit ALT-INS to begin KeySt, the 'Store Key Macro as:' and
 subsequent 'Name: ' prompts will replace the text string, but
 as soon as you enter the descriptive name, the entry text and
 cursor will be restored.  You will thus know that Daqarta is
 ready to accept the macro text.

 At the end of the portion of the text/data that you want to be
 part of the macro string, ALT-INS will produce a distinctive
 low-high acknowledgement beep instead of the 'bytes free'
 message, so you can continue entering any remaining non-macro
 text.

 Also, during text macro entry the SHIFT key will not change
 the option display, so you will just have to keep in mind that
 you are not only entering text/data, but also storing a macro.
 This is not usually a problem, since text strings tend to be
 relatively short and focused compared to the complexity and
 depth of possible option sequences.

 When selecting an ID key to use with KeySt, it may be helpful
 to review the previously-saved descriptions of each with the
 Key Macro KVdescriptive name viewer.  You can invoke this by
 hitting ENTER when prompted for the KeySt ID.  You may select
 a macro from this list for replacement, or enter a new ID.

 If you attempt to store a Key Macro with an ID that is already
 in use, you will be prompted with:
    'Replace N Key Macro? (Y default/N):'
 If you hit ENTER or Y, the prior macro using that ID will be
 replaced with the new one.  Any other key will escape from the
 KeySt command.

KX
 CHANGING THE DESCRIPTIVE NAME OF AN EXISTING KEY MACRO:

 Sometimes you may want to change only the KVdescriptive name of
 a Key Macro without actually replacing the macro itself.  To
 do this, begin as though you were going to KSreplace the whole
 macro:  Hit SHIFT-K (or ALT-INS) and give the ID of the
 selected macro.  When prompted to replace it, hit ENTER or Y
 to do so.  Then at the 'Name: ' prompt, enter the new name,
 but conclude with ALT-ENTER instead of ENTER.  The new name
 will be accepted and the KeySt mode will be immediately exited
 with no other changes made.

KR
 RUNNING A KEY MACRO (KeyRn):

 To run the macro at any time, hit the K-key or INS-key.  If
 you are entering text or data you must use the INS form,
 since the K-key would just enter a lower-case 'k'.  You will
 be prompted for the KSselected ID with:
     'Run Key Macro:'
 After you hit the ID key, the message line will change to:
     'Running Key Macro N.'
 where N is your selected ID key.  The K-key option 'KeyRn'
 will be highlighted to show that a macro is running, and key
 presses will come from the stored macro instead of from the
 keyboard.

 If you need help selecting the proper ID to use, you can
 review the previously-saved descriptions of each with the
 Key Macro KVdescriptive name viewer by hitting ENTER when you
 are prompted for the ID.

 If you attempt to run a macro with a non-existent ID, you will
 see:
    'N Key Macro not found, or wrong option/text mode.'
 where N is the ID you attempted to use.

 Note that when you invoke a Key Macro, Daqarta must be in the
 same keystroke mode as when it was stored, or you will also
 get the 'not found' message.  This means that if the first key
 of the macro specifies an option key, you can't run that macro
 while Daqarta is awaiting text or data entry.  Likewise, a
 macro that begins with text entry can't be run while Daqarta
 is awaiting option keys.  However, it is perfectly normal for
 a macro to start in one mode and switch to another.  For
 example, a macro might give the I-key to invoke the I0InDat
 option, then give text keys to select the desired file name.

 There is no restriction on the number of times a single macro
 changes modes:  The same macro could very well load a file as
 above and then go on to use option keys to invoke a menu and
 select an item, then use text entry to change a value, then
 option keys to collect data and invoke MsMemSv to save it to
 trace memory, then a text key to select the memory number, and
 so on.  The only thing that is important is that Daqarta be
 in the proper mode to begin accepting the keys of the selected
 macro.

 You can use the Key Macro descriptive name viewer to check if
 a macro begins in text or option mode:  The ID display at the
 start of each descriptive text line will be preceded with a
 '-' sign for text macros.

 While a long Key Macro is running, the ESC key may be hit to
 cancel the macro and return to normal operation, or NUM-LOCK
 or the grey Pause/Break key may be used to Khhalt or single-step
 through the macro.  All other "real" keys will be ignored
 while the macro sequence is active and the 'KeyRn' highlight
 is on.

 One of the advantages of Key Macros is that they execute MUCH
 faster than the same series of "real" keystrokes, because the
 macro processor doesn't do any data display between keys
 unless specifically requested via KPWaitP.  Macros that are
 just changing between different option setups will thus run so
 fast as to be almost immediate, so there is no chance to hit
 any keys before they are done.  The ESC and halt options are
 therefore most useful for long-running macros.

 If an unexpected error (like 'File not found') is encountered
 during KeyRn, the macro will exit so you can take appropriate
 action.  There is no way to "resume at the same spot" after an
 error, since it is assumed that error recovery will change the
 current Daqarta state from what the macro is expecting.


KV KEY MACRO DESCRIPTIVE NAME VIEWER:

 When you are prompted to enter a Key Macro ID for either KSKeySt
 or KRKeyRn, you have the option of selecting from a list of all
 the IDs and their full descriptive names.  Just hit PgUp,
 PgDn, or ENTER at the prompt, instead of a specific ID.  The
 trace will be temporarily P0Paused and replaced by the sorted
 macro names list.  You can then hit the desired ID key
 directly, or use the  arrow keys to scroll the highlighted
 cursor line to the desired name, and hit ENTER to accept it.

 If you have more than 24 macros stored, you can use the Pg
 keys to see the others, displayed at 24 per screen, or you can
 scroll the display by moving "past the end" with the  arrow
 keys.  The current cursor line is also shown on the message
 line.  As soon as the ID is accepted, the prior trace display
 mode will be restored.

 If, for some reason, you do not want the running trace to be
 Paused for the macro name display, you can still review the
 macros one at a time on the message line.  Hit either  arrow
 key at the ID prompt, and you will see the first macro name on
 the message line.  You can then scroll with the  arrow keys
 and hit ENTER or the desired ID key.  If, during the single-
 line scroll display, you change your mind and want to see the
 full 24-line display, just hit PgUp or PgDn to switch to the
 Paused mode as discussed above.

 The display format for both the single-line and 24-line modes
 begins with a blank for macros that start in normal option
 mode, or '-' for those that start in text mode.  This is
 followed by the ID itself, then the descriptive text.  For
 macros that use function key IDs, a shorthand notation is used
 to show shifted keys:
    '- A   This is a text macro whose ID is "A".'
    ' F10  This is an unshifted function key.'
    ' F8  This is SHIFT-F8.'
    '-¢F12 This is CTRL-F12, and it is a text macro.'
    ' @F3  This is ALT-F3.'

Kh
 HALTING AND SINGLE-STEPPING KEY MACROS:

 While a K0Key Macro is running, you may halt it at any time by
 hitting the NUM-LOCK key or the grey Pause/Break key.  The
 message
    'MACRO HALTED'
 will appear near the upper right corner of the 0wtrace area.

 Each additional NUM-LOCK or Pause/Break keystroke will
 single-step through the remainder of the macro, one key at a
 time.

 Hitting ESC at any time will cancel the macro, as usual,
 while hitting any other key will resume normal KRKeyRn macro
 operation.

 The halt option is intended to allow you to recover from
 certain problems during a long-running macro that you don't
 want to abandon completely.  For example, suppose you are
 collecting spectral averages of engine or machine vibration at
 100 different speeds, and during the 73rd test you notice that
 your sensor appears to be coming loose.  You could hit ESC to
 exit the macro so you can fix the problem, but then you are
 faced with either re-running the entire series, or else
 manually running the remaining tests.

 Instead, you can hit NUM-LOCK or Pause/Break to halt the
 macro, then fix the problem and resume.  When the series is
 complete you can go back and repeat only the test or tests you
 suspect were compromised by the loose sensor.

 You may want to use the single-step feature to advance past
 the end of the individual test you halted in the middle of, so
 that when you resume you will be starting the next test
 normally.

 Halting and single-stepping are also powerful tools to aid
 in debugging a macro that you have just created, but which
 doesn't seem to be performing as desired.

 ┌─────────────────────────────────────────────────────────┐
 │  TIP:                                                   │
 │  If you are trying to examine steps near the start of   │
 │  a macro, you may not be able to hit Pause/Break or     │
 │  NUM-LOCK fast enough to halt it before the area of     │
 │  interest is executed.  Instead, KScreate a new macro     │
 │  that gives a long wSWaitS delay, then invokes the        │
 │  desired macro as a KNnested operation.  When you run     │
 │  this, hitting the Pause/Break or NUM-LOCK key will     │
 │  end the delay, and you can then single-step through    │
 │  the very start of the macro under test.                │
 └─────────────────────────────────────────────────────────┘

 Note that when no macro is running, the Pause/Break key will
 invoke a general Daqarta P0Pause just like the P-key option.
 If you use the Pause/Break key to single-step through a macro,
 you may "run off the end" into a general Pause state.  If you
 want to avoid that, use the NUM-LOCK key instead... it has no
 effect after the macro is over.


KP
 WAIT FOR KEY MACRO PAUSE (WaitP):

 The K1Key Macro system plays back pre-recorded keystrokes as
 fast as they can be processed.  Besides saving all the
 keystrokes each time you use it, a macro allows major changes
 so quickly that you can flip between complex setups almost
 instantaneously.  Part of the speed is due to the fact that
 keys are read one right after the other, without any
 intervening trace data display, or even any acquisition in
 RsSequential mode.

 But sometimes this rapid response can actually be a liability.
 Suppose you want to take an average and save the result to the
 next memory location.  At first glance, this appears very
 straightforward:  You use KSKeySt to start storing the macro,
 followed by the selected ID key.  Then you hit the A1Avg key,
 and after the average is done hit the MsMemSv key, followed by
 the Enter key in response to the MemSv prompt.  Then hit KeySt
 again to end the macro storage.

 When you go to use this macro, however, what happens is that
 the MemSv follows the Avg key immediately, forcing the average
 to P0Pause before it even gets started!  You need a way to tell
 the KeyRn macro handler to WAIT until the average is done.

 Here is where the WaitP (ALT-W) option is used.  This tells
 the handler to continue acquiring and processing trace data,
 and to wait for a Pause before proceeding with the rest of the
 macro keys.  In this example, the Pause comes when the average
 is done, so this is just what we need.  To use this option,
 you just hit ALT-W before or after you hit Avg when you are
 recording the macro.  (The WaitP option will be shown with a
 highlight until the next Pause, when it will automatically go
 off.)

 When you later run the macro, the key reader will read the
 WaitP key and set the option on.  While it is on, the reader
 will not read any more keys if either an average is running
 or a Sssingle-sweep is in progress.  As soon as the average or
 single-sweep completes and enters the Pause state (thereby
 turning WaitP off), the reader will continue reading keys from
 the macro.

 Normally, you will probably want to record the WaitP just
 before the Avg key, especially if the average time is too
 short to hit it before the average reaches Done.  But there
 may be occasions where you want to start an average, then do
 something else while the average is running.  A good example
 of this would be starting a wave average, then hitting F0FFT to
 watch the spectrum of the wave average as it runs.  If the
 rest of the macro requires further action on completion of the
 average, you will need to give the WaitP AFTER the FFT key.
 (You can't hit FFT before Avg, or you would get a spectrum
 average.)

 ┌────────────────────────────────────────────────────────┐
 │  TIP:                                                  │
 │  When recording macros, if you want to give yourself   │
 │  plenty of time to hit keys between the time a short   │
 │  average starts and ends, here's a trick:  Just for    │
 │  the purpose of recording the macro, set the averager  │
 │  ASSweeps count way higher than you really need.         │
 │  Then record the macro at your leisure.  Set the       │
 │  sweeps back down before you use the macro, and        │
 │  you're ready to go.                                   │
 └────────────────────────────────────────────────────────┘

 Besides averages, there are other applications for WaitP.
 Suppose, for instance, that you wanted a macro to collect
 several traces in rapid succession, saving each with MsMemSv.
 In normal operation, you would hit MemSv, which would P0Pause
 the trace and prompt for a Mimemory ID.  You would hit ENTER or
 END to save the trace, followed by unPause to go back to
 collecting trace data.  You would repeat this sequence for
 each trace to be stored.

 But a macro running those same keys would not wait for any
 data collection between the unPause and the next MemSv, so
 you would just get multiple copies of the same trace!
 Instead, you should give WaitP before MemSv to force data
 collection between keys.  Since MemSv always sets a Pause
 state, the WaitP condition is removed automatically.

 You can use WaitP in any macro where you want to force data
 collection and processing between key reads, even if you are
 not specifically waiting for a Pause state.  The WaitP state
 can then be toggled off explicitly by a second WaitP command.

 Note, however, that there is one place that WaitP does not
 work as you might expect:  If your macro involves DiDDisk
 recording with a DpPreset size, and you want to wait until the
 Pause at the end of the recording before proceeding with the
 remaining macro steps.  The reason WaitP won't work here is
 that a DsDDisk Pause is actually a special state that only stops
 the display updates, but not the recording process.

 Instead, to force a wait for the end of the recording, when
 you are storing the macro you just toggle the D-key off to
 force the end of the DDisk operation.  (With very short Preset
 sizes, you may need to temporarily increase the size to give
 yourself time to hit the key manually before the Preset ends.)
 The macro handler will note that a Preset DDisk recording was
 in process and will store a special code instead of the actual
 D-key.  Then later, when the macro is running, that code will
 be interpreted as "wait for the end of the Preset DDisk".

 One application of this technique is described in detail
 under aRSound-Triggered Recording.

wS
 WAIT SECONDS DELAY (WaitS):

 The WaitS option can create delays of arbitrary duration.
 During the delay, all processing is suspended, although in
 RrRTime mode sample acquisition and SGstimulus generation
 continue.  An optional message may be displayed during the
 wait.  Any keypress will terminate the ongoing delay and
 resume normal processing, ignoring the keypress unless it is
 ESC to exit, or NUM-LOCK or the grey Pause/Break to Khhalt
 the macro.

 Although one of the main functions of K0Key Macros is to speed
 operations, sometimes certain delays may be desired.  One
 typical case is where you are recording responses to stimuli
 that must not come too close together, to allow time for the
 system under test to re-stabilize.

 Suppose you are looking at the initial transient response of a
 large gong-like structure, for example, which is driven by a
 hammer triggered by a digital output from the STIM3A Stimulus
 Generator or the TPTrigger Pulse source.  You may need to wait
 several seconds between stimuli for the prior oscillations to
 decay adequately.  Normally, the TcTrigger Cycle option would be
 your first choice, but it is limited to a delay equivalent to
 32767 samples.  This might easily be much less than a second
 at high sample rates.  The WaitS option has no such
 limitation.

 There are several different ways to use WaitS.  SHIFT-W will
 begin a previously-specified delay interval and show an
 optional message.  To enter a different interval or message,
 hit CTRL-SHIFT-W instead.  You will be prompted for the delay
 time in seconds.  Enter any value, using the 0ddirect entry
 standard number formats.  If you conclude the number entry
 with a normal ENTER, any prior wait message will be retained.
 The delay interval will begin immediately.


wM WAIT MESSAGE:

 If you conclude the WaitS seconds entry with ALT-ENTER, the
 message line will be cleared and a text cursor will appear.
 Enter any message, up to 64 characters, and it will be shown
 during the following delay and all subsequent WaitS delays
 until it is changed.

 If you don't enter any text but just accept the null line via
 an ENTER key, then any prior message will be cleared and the
 normal E0comment line will be shown during the delay
 instead.  If you ESCape from message entry, there will be no
 change to the prior message, and the current delay will be
 cancelled... but the new delay value you just entered will be
 used on subsequent WaitS invocations.

 If you wish to Edcopy the delay value to the normal comment
 line, you would usually end the value entry with CTRL-1 to
 CTRL-5 to specify the comment field.  But if you also want to
 enter a wait message, you must use CTRL-ALT-1 to CTRL-ALT-5
 instead.  The comment will be sent to the indicated field, but
 it will not be seen during the delay since the wait message
 will be visible instead.

 LONG DELAYS:
 The maximum delay duration is limited only by the number entry
 system, at just under 10^112 seconds.  Since a year is only
 3.15 * 10^7 seconds and the estimated age of the universe is
 only 10 to 20 billion years or under 10^18 seconds, this is
 probably longer than most users will ever need.  But these
 effectively "infinite" delays are actually quite useful when
 used to wait for a keypress, which immediately ends the delay.

 For example, suppose your test sequence requires some changes
 in the external hardware between one part of the test and the
 next.  A K0Key Macro to automate the test would need to alert
 the operator to make the changes, and wait for a keypress
 before proceeding to the next test phase.  You could use the
 uTUser Tone to give an audible alert, then begin a long wait
 with the message:
    'Strap next lawyer to table, attach electrodes, hit SPACE:'

 This same approach can be used to create self-paced tutorials,
 or with a shorter delay setting to automatically advance after
 a reasonable time.

 ┌─────────────────────────────────────────────────────────┐
 │  IDEA:                                                  │
 │  You can use the WaitS timer with the User Tone system  │
 │  to create elaborate delay sequences for pacing any     │
 │  multi-step procedure, even if unrelated to normal      │
 │  Daqarta functions.  Each phase of the sequence can     │
 │  have its own distinctive tone, and a message prompt    │
 │  to guide the user to the next phase.  Use this         │
 │  approach for all sorts of general lab and darkroom     │
 │  timing... the more complex the procedure, the more     │
 │  useful this method is.                                 │
 │                                                         │
 │  Be creative:  If one step has a long delay during      │
 │  which a user could be doing something else, provide    │
 │  an audible warning near the end of the interval to     │
 │  allow ample time to get back to the timed task before  │
 │  intervention is needed.                                │
 │                                                         │
 │  You don't need to use ANY of Daqarta's data            │
 │  acquisition capabilities to make it useful!            │
 └─────────────────────────────────────────────────────────┘

 Use standard Spscientific prefixes to enter very large numbers
 for "infinite" delays with minimal keystrokes:
    '1k'   gives   1000 seconds = 16.7 minutes
    '1M'           10^6 seconds = 11.6 days (note 'M', not 'm')
    '1G'           10^9 seconds = 31.7 years
    '1T'           10^12 seconds = 31710 years
 and so on...

 ┌─────────────────────────────────────────────────────────┐
 │  TIP:                                                   │
 │  When you set up a delay as part of a K0Key Macro using   │
 │  KSKeySt, you don't have to wait for it to complete       │
 │  before entering the next keystroke of the macro,       │
 │  since entering any "real" keystroke will end the       │
 │  delay.  When the macro is run, it will wait for the    │
 │  full duration or until any real keystroke before it    │
 │  reads the next macro key.  A real keystroke will be    │
 │  ignored after it breaks out of the delay, unless it    │
 │  is ESC to exit the macro, or NUM-LOCK or the grey      │
 │  Pause/Break to Khhalt it.                                │
 └─────────────────────────────────────────────────────────┘

 DELAY RESOLUTION:
 The minimum delay duration is dependent upon your system and
 the current operation mode.  One of four distinct timing
 methods is selected automatically to give the best resolution
 in the current mode.  All methods require a certain setup
 overhead of several microseconds minimum.

 The system timer is normally used, which gives 838 nsec
 resolution.  If you are in unP0Paused RrRTime mode and
 Riinterrupt-driven sampling is used, the delay is based
 instead on sample counting, so the resolution and minimum
 delay will be one Xpsample period.  This will be the case even
 with certain laboratory-type boards that are otherwise capable
 of RdDMA or RfFIFO operation, if the SGSTIM3A Stimulus Generator is
 active.

 In unusual circumstances the system timer may be not be free
 for delay timing, due to GAADC board requirements.  In this case
 the system memory refresh timer port will be monitored, giving
 a resolution of about 15 µsec.  If the system is a PC or XT
 (which lacks the port), then a software delay of about this
 same resolution is used instead.  The actual delay for this
 software loop is calibrated at session start-up to control for
 differing system speeds.

 RANDOM DELAYS:
 The normal r#random value entry system is available for WaitS,
 and may be used in K0macros to generate deliberate stimulus
 jitter.  At larger values it can be used to give random
 stimulus presentation times to control subject "guessing".
 You must use the CTRL-SHIFT-W command format... the simple
 SHIFT-W command keeps re-using the previous setting.

 If you want to set a random delay, AND send it to a comment
 field, AND change the wait message, you must:
 ■  Hit CTRL-SHIFT-W.
 ■  Key in the upper delay limit at the prompt.
 ■  Hit ALT-# to specify a random value entry.
 ■  Key in the lower delay limit at the prompt.
 ■  Hit CTRL-1 to CTRL-5 to specify the Edcomment field.
 ■  Key in the delay step size at the prompt.
 ■  Hit ALT-ENTER to specify a wait message.
 ■  Type in the message.
 ■  Hit ENTER to start the delay and show the message.


wD OTHER DELAY TECHNIQUES:

 Besides WaitS, there are other ways you can create delays that
 may sometimes serve your needs better, even if they lack the
 range and precision of WaitS.  Here are some ideas to get you
 started:
 ■  Take an A0average with a certain number of ASsweeps and a
    certain Xfsample rate.
 ■  Use TcTrigger Cycle with the average for more control.
 ■  Run the average with VtView off to stabilize processing
    time, if needed for noisy traces.
 ■  Use KLLoop with a SsSingle Sweep and Trigger Cycle macro.
 ■  Give a uTUser Tone of a certain duration.  It doesn't
    have to be an audible frequency.

r# RANDOM VALUE ENTRY:

 Sometimes you may need to set a parameter to a random value.
 If you are running things manually, of course, you can just
 enter any value you wish.  But if you need to generate a
 series of random values automatically from within a macro,
 there is a special way to do that.  This method will work
 with any parameter that can be changed by 0ddirect value entry.

 Instead of entering the value, enter the upper limit for the
 random value range.  Hit ALT-# (actually ALT-3) instead of the
 ENTER or CTRL-ENTER you would normally use.  You will then be
 prompted for the lower limit of the random value range.  Enter
 that normally, ending with ENTER, and you will be prompted for
 a step size.  This allows you to specify a quantization for
 the random values, such as 100 Hz or 2 msec steps.  (Of
 course, you don't enter the 'Hz' or 'msec' units... just the
 Spprefix, if any, in ordinary direct entry format.)  Use ENTER
 to end the step entry, and a random value will be sent to the
 parameter being adjusted.  A step entry of 0 gives the
 smallest possible steps, with no quantization.

 Random values have a uniform distribution over the selected
 range.  The values are drawn from a sequence of over 2 billion
 32-bit (9+ digit) ripseudo-random values that are then scaled to
 the selected final range.

 The range is determined simply by subtracting the lower limit
 from the upper, and the scaled and step-quantized random value
 is then added to the lower limit.  So, for example, if you set
 a step value of 100 and a lower limit of 327, the possible
 values would be 327, 427, 527, etc.

 Note that these random values are only those sent to the menu
 item... they may not be the same as those actually set as
 parameter values.  For instance, the B0Virtual Source only
 allows integer BfFrequency values.  If you send it a fractional
 value, either by manual direct entry or via the random value
 system, it will always be rounded to the nearest integer.

 If you wish to send the random value entry to a Edcomment field,
 you must use the CTRL-1 to CTRL-5 field selector with either
 the lower limit or step entries, since you need to use ALT-#
 with the initial upper limit entry.

 If you are going to use random values in an KIAuto-Initialize
 K0Key Macro, you may want to begin it with the riRandomize command
 to insure that each session is different.


ri RANDOMIZE PSEUDO-RANDOM SOURCE:

 The values generated by the r#random value process are known as
 "pseudo-random".  To visualize the process, imagine a large
 container filled with 2,147,483,647 sequentially-numbered
 balls.  After thoroughly mixing, the balls are drawn out one
 at a time (without replacing them) to produce a random
 sequence of numbers from 1 to over 2 billion.  To produce a
 random number of (say) ten digits, you record only the last
 digit of each of the next ten balls drawn.  Whenever you need
 another ten-digit number, you just draw out ten more balls.
 When you have drawn the last ball, put them all back in and
 start over.

 For all practical purposes this would be "truly" random,
 except for the final step:  In this system when you refill
 the balls and start over, you always draw the balls in the
 exact same sequence.  In practical terms, this means that if
 you created an KIAuto-Initialize Key Macro that set a series of
 random values on start-up, they would be the SAME series of
 values each time you started a session.  Each session alone
 would look truly random, and you would never know that it
 wasn't unless you compared one session to the next.  This
 random-but-repeatable aspect is known as "pseudo-random".

 This can come in handy if you want a "random" sequence that
 can be precisely replicated each session, but what if you want
 each session to be totally random, unrelated to any other?
 Here is where the Randomize command is used.  This is the same
 ALT-# (really ALT-3) key used for r#random value entry, only
 in this case you use it when you are NOT in 0ddirect entry mode.
 In this case it behaves as a normal option command which will
 "throw all the balls back in, mix them up, and change to a
 completely different sequence of drawing them out."

 To insure that the new sequence is different from run to run,
 the system time and date plus various internal system timers
 are used to provide random numbers to control the setup.  Even
 if you reset your system time and date just before starting
 each session, you will still not change the internal timers,
 so random entries now become truly random.

 You only need to give the Randomize command once, at the start
 of the KIAuto-Initialize macro, to get the full benefits.  (But
 it won't cause any problems to use it more than once.)  If you
 don't use an Auto-Initialize macro, you don't need Randomize
 at all.  That's because by default Daqarta starts with the
 B0Virtual Source active, and that uses the same random number
 generator to create Bnnoise.  Without any automatic macro, the
 Virtual Source will generate an arbitrary number of samples
 before you hit a key to request a random value, so an unknown
 number (thousands) of random noise values will have been drawn
 already.


uT USER TONE:

 This uses the standard system "beeper" to produce tones of
 selected frequency and duration.  The primary use of this is
 in macros that need to alert the operator at various phases
 of a test cycle, by providing a distinctive tone that is
 different from the error mAAlert.

 Hit the *-key (SHIFT-8) to sound the tone.  The default tone
 frequency is 440 Hz with a duration of 1/4 second.

 To change the tone parameters, hit CTRL-8.  (CTRL-SHIFT-8 will
 also work.)  You will be prompted to enter the new User Tone
 frequency in Hz.  Entry values will be internally limited to
 the system timer range of 18.2 Hz to 596 kHz, but fractional
 values within this range are allowed.

 After you have entered the frequency, you will be prompted for
 the duration in seconds.  This is converted internally to a
 number of cycles of the tone frequency, which must be an
 integer between 1 and 65536.  Thus, for low tone frequencies,
 the actual duration can be set much longer than for high
 frequencies.  Maximum durations:
    18.2 Hz     3600 sec  (1 hour)
    440 Hz      149 sec (2.48 min)
    20 kHz      3.28 sec

 ┌─────────────────────────────────────────────────────────┐
 │  NOTE:  The operation of the User Tone depends on the   │
 │  setting of the error mAAlert.  If Alert is set to Off,   │
 │  no User Tone will be produced.  If Alert is set to     │
 │  Flash, the User Tone will likewise produce a flash     │
 │  instead of the selected tone.                          │
 └─────────────────────────────────────────────────────────┘

 You may wish to create macros that give a series of tones in a
 distinctive sequence.  Best results will be obtained by using
 mNstandard musical note frequencies.

 You can use the r#random value entry system to get random tone
 frequencies, but they won't sound "musical" because they will
 include many frequencies that are "off-key".


KN NESTED KEY MACROS (SUBROUTINES):

 It is perfectly acceptable to create K1Key Macros that invoke
 other previously-defined Key Macros.  This can not only save a
 lot of keystrokes if you find yourself using the same basic
 sequences in different macros, but it likewise saves those
 keystrokes from being repeatedly stored in macro memory.
 In this respect, Key Macros behave more like the subroutine
 calls of a high-level programming language, rather than the
 language "macros" that just insert the same sequence at
 each use.

 You can "nest" macros up to 16 levels deep.  In other
 words, you could create a macro
                that calls a macro
                    that calls a macro
                        that calls a macro
                            ...
                                ...

 up to 16 levels total.  This is most likely WAY more than you
 will ever need.  Note that there is no specific limit (other
 than available KMmacro memory) on the number of macro calls made
 by a single macro, only their maximum depth.  So you can have
 a macro that
                         then             then             ...
            calls a macro     calls a macro    calls a macro

 until you run out of memory.

 If, while you are storing a Key Macro with KSKeySt, you try to
 invoke the same ID you are storing, you will get an alert and
 an error message that says:
    'N KeySt in progress... no KeyRn reentry.'
 where 'N' is the macro ID.  This prevents a "recursive" macro
 that would call itself in an endless loop.

KL AUTO-REPEAT KEY MACROS (Loop):

 One you have created a Key Macro using KSKeySt, you can run it
 a predetermined number of times with the Loop command.  Hit
 SHIFT-L and you will be prompted with:
    'Key Macro Loop count:'
 Enter a value from 2 through 65534, and as soon as you hit
 ENTER you will see the normal KRKeyRn prompt:
    'Run Key Macro:'
 Hit the ID key for the desired macro and Daqarta will
 immediately execute it the specified number of times.

 If you enter a Loop count of 0 or 1, the macro will run only
 once, so there is no point in using the Loop command.

 If you enter a Loop count of 65535, or any negative value, the
 macro will not stop after 65535 repetitions, but will repeat
 indefinitely until an error condition or a manual ESC key is
 encountered.  This allows you to print all the files in a
 series, for example, regardless of the exact number.  You
 would first create a macro that reads a file with I0InDat and
 executes PsPrintScreen.  Then you would run it in an indefinite
 Loop with InIncNm active to print all the remaining files.  As
 soon as InDat tried to read a non-existent file, the loop
 would exit on the 'File not found' error.

 A Loop macro may be KNinvoked from within another that you are
 defining with KeySt.  During the definition entry, you might
 not want to wait for the specified count of Loop passes,
 especially if it is very large.  In this case, conclude the
 count value entry with SHIFT-ENTER instead of a simple ENTER,
 and just for the KeySt you will get only a single run of the
 selected Loop macro.  When you later run the new macro with
 KeyRn, the embedded Loop macro will run the specified number
 of times.

 Indefinite Loops (negative or 65535 count) always run only a
 single time during KeySt, whether you use SHIFT-ENTER or not.

 Loop macros may be nested just like any other Key Macro, up to
 16 levels deep.  This is ideal for collecting data in multiple
 variable series, like SGstimulus frequency and level.
 Here is a typical strategy outline for collecting data at X
 levels for each of Y different frequencies:

 ■  Define macro C to:
    ■   Collect data in the desired form (F0FFT, A1Avg, etc).
    ■   KDSave to file or Msmemory.
 ■  Define macro I which will:
    ■   kfIncrement the stimulus level.
    ■   Collect and save data with macro C.
 ■  Define macro L which will:
    ■   Set a base stimulus Level.
    ■   Collect and save data with macro C.
    ■   Loop X-1 times on macro I to increment and collect.
 ■  Define macro F to:
    ■   Increment the stimulus Frequency.
    ■   Loop Y-1 times on macro L to collect X Levels.
 ■  Define macro E to run the whole Experiment:
    ■   Collect X levels at the base frequency with macro L.
    ■   Use macro F to collect X levels at each of the
        remaining Y-1 frequencies.

 In actual use, you would first set a base frequency, then
 run macro E to do all the work.  For a standard test series,
 you could define macro S to do the entire Setup, including the
 base frequency, and then run macro E automatically.

KQ USING Quit IN KEY MACROS:

 The Q0Quit key is valid for use use in K0Key Macros.  This is
 actually more useful than it may first appear, since in
 conjunction with the KIAuto-Initialization Key Macro it allows
 completely automated operation of Daqarta from a batch file.
 This allows you to run another program after Daqarta, without
 user intervention.

 For example, you might want Daqarta to collect DiDDisk data to
 files on a DDRAM drive for speed, then Quit and copy those files
 to permanent storage on your hard drive using DOS.

 Or you might have your system on a timer to start Daqarta at
 2:00 AM, collect spectra of nocturnal animal calls, save them
 to O1text files, Quit, and then invoke a communications program
 to E-mail them to another location.


KO
 FORCING A KEY MACRO OPTION STATE (KeyOn):

 Suppose you want to create a general-purpose Key Macro that
 sets Daqarta to the PSD mode.  Starting from the initial
 waveform display mode, you record the keystrokes you need:
 F-key to go to F0FFT mode, Y-key to go to F2Y-log power spectrum
 mode, and SHIFT-P to go to F3PSD mode.  But what if you later
 want to use this and you are NOT in the waveform mode?  If you
 were already in FFT mode, for instance, this macro would flip
 back to waveform mode when the F-key was invoked, and it would
 exit with an
    'Option not enabled... Key Macro terminated'
 message when it encountered the Y-key since that option is
 locked out for waveform mode.

 The problem is that most Daqarta 0Kkey options are toggle
 types, designed for speed and ease of use with manual
 operation:  Hit the key (or run it from a macro) and the
 option changes state.  But if it is ALREADY in the desired
 state, it changes to the wrong one!  How do you force Daqarta
 to go to the state you want, regardless of the current state?
 The answer is the ALT-K KeyOn option.  Hitting ALT-K tells
 Daqarta that the next key you hit should go ON, no matter
 what state it is in at the present moment.  If the next key
 option happens to be off, it will be toggled on, as desired.
 If it is already on, Daqarta will just leave it on.

 If you want to create a macro that forces an option OFF, just
 force it ON first with KeyOn (to get a known state), then
 toggle it off normally.

 The KeyOn option will stay active until the next toggle key is
 hit, after which KeyOn is inactivated.  So, for instance, if
 you use KeyOn but then hit a cursor key, the KeyOn option is
 kept active... there is no ON state for cursor motion.  Also,
 there are a number of key options that KeyOn ignores for
 safety and common sense reasons:  You can't use KeyOn with any
 file access, memory, or Key Macro operations, or with Edit...
 nor is it likely you will ever need to.  KeyOn is ignored by
 all 0MCTRL-menu invocations and XcXCurs cursor Xpand, since these
 are not on-off toggle operations.  It is also ignored by all
 H0Help system keys.

 If you hit ALT-K by mistake, you can just hit it again to turn
 off the KeyOn option before you hit another key.

 KeyOn also works with L0Line and NpNumber of points N keys, even
 though they are not simple On-Off options.  KeyOn will force
 Line1 or N 256, and you can use normal key hits after that to
 get to the one you want.

 In addition to the displayed key options, KeyOn applies to the
 "SLsticky shift" toggle invoked by Scroll Lock.  If you are
 running Daqarta on a PC or XT (which doesn't support a Scroll
 Lock LED on the keyboard itself), there is no visible way to
 tell which state this is in.  In this case, you might want to
 use KeyOn with Scroll Lock even when you are not recording a
 Key Macro, just to make sure the Scroll Lock state is what you
 intend it to be.

 KeyOn may also be used with Control Menu options that don't
 allow 0ddirect value entry, only 0ccursor control.  These include
 options that produce a change as soon as you hit ENTER, and
 those that change to the double-headed adjust arrow cursor
 upon ENTER.  In either case, hit ALT-K just before you hit
 ENTER, and the KeyOn state will be selected.  For simple
 toggle items like Window WcBW Correction or WvShape View, the
 KeyOn state is the On or highlighted state.

 For toggle-type items that have more than 2 states, the
 assigned KeyOn state will appear as soon as you hit ENTER
 after first hitting ALT-K.  Then you just hit ENTER as needed
 to advance to the desired state.  For example, if you want to
 set the DfDDisk Readout Units to SECS you would hit ALT-K and
 ENTER, and the Readout Units would show the KeyOn state of
 BYTES. Then hit ENTER again and the state toggles to H:M:S and
 hit it once more to get SECS.  (This is much easier to do than
 to read about.)

 Similarly, for cursor-only menu items that show double-headed
 adjust arrows (like BwVirtual Source WAVE), you hit ALT-K and
 then ENTER to force the KeyOn state.  The item will remain
 highlighted.  Then use the up or down cursor keys to get to
 the desired state, and hit ENTER to accept that state and
 remove the highlight.

 For Control Menu options that allow direct entry (where the
 cursor changes to double triangles on ENTER), you should use
 that method instead of KeyOn to insure a known starting value.
 KeyOn will have no effect on these options.


KM KEY MACRO MEMORY MANAGEMENT:

 Key Macros are stored in "hidden" video memory that would
 otherwise be wasted.  32768 bytes are reserved for this use.
 Each key press stored takes 2 bytes, and each entire macro
 takes an additional 4 bytes to store the KSID and other
 housekeeping information.  So around 16000 keystrokes can be
 stored as Key Macros.  If you try to store more than that, the
 macro will be ended at the limit, an mAalert will be given, and
 the 0mmessage line will show:
     'Out of Key Macro memory.'

 A previously-stored Key Macro may be replaced simply by
 storing a new macro with the same ID.  A macro can be removed
 by storing an "empty" macro:  Just hit SHIFT-K or ALT-INS to
 end the macro before storing any keys.  In either case, all
 memory that is no longer used will be reclaimed.

 Repeated cursor motions are stored and run as a single large
 step to minimize memory use.  This applies to trace cursors
 and to scrolling values while adjusting menu items, but it
 does not apply to moving between items in a menu... those
 motions are not actually stored.  Instead, the cursor position
 within the menu is stored directly when ENTER is hit to change
 any item.

 The descriptive name line for each macro is stored in a
 separate portion of "hidden" video memory.  Enough memory is
 reserved to hold up to a full line (57 bytes plus ID text) for
 each of the 142 possible macro IDs.  This memory use is not
 included in the report of bytes free after a KeySt, since no
 management is required... you can't "use it up".


KF KEY MACRO FILES:

 To allow use of the same macros in future sessions, you will
 be prompted to let Daqarta save these to a file when you Q0Quit
 a session after making any changes to the macro storage.  All
 descriptive name text will be included in the file.

 The default file DQA.MAC will be loaded, if present, each time
 you start Daqarta.  If you want to have several sets of macros
 for different types of experiments or different users, give
 each a different file name when prompted at the Quit for that
 session.  Then use a standard DOS batch file to run Daqarta
 for each condition.  The typical file would look like
    COPY USER.MAC DQA.MAC
    DQA
 where USER.MAC would be different for each case.

 Note that DQA.MAC is normally expected to reside in the same
 directory that holds Daqarta itself.  However, a better method
 might be to keep different macro files in different work
 directories, where they would remain together with the
 associated data files.  In this case, invoke Daqarta from the
 desired work directory, but in the UfDQA.CFG file INIT line use
 an M:0 parameter, as in
    INIT   M:0

 This will cause the DQA.MAC file to be loaded from the current
 directory.  NOTE:  This will only work with DOS versions 3.00
 or later.


KI AUTO-INITIALIZATION KEY MACRO:

 If a macro is stored with ! as its KSID, that macro will be run
 automatically from DQA.MAC after Daqarta starts up.  During
 the session, that macro is still available for normal use.

 It is usually a good idea to define the desired initial macro
 using some other ID, then use the !-macro to invoke that one
 as a KNsubroutine with KRKeyRn.  That way, you can easily
 disable the automatic operation just by redefining an empty
 !-macro, and re-enable it later as needed.

 NOTE:  This option is only available to SRregistered users.
 Prior to registration it will only work for 30 sessions unless
 you are using the 0BDEMO board driver.


KT KEY MACRO TIPS:

 Since a Key Macro simply passes "key presses" to Daqarta,
 care must be taken to insure the intended operation where
 0rtrace cursors are involved.  This is because the starting
 position of the cursor is not stored as part of the macro, so
 when the macro is run everything will be relative to the
 current cursor position.  This is sometimes desired, as in the
 case of moving a cursor across the trace in kffixed step sizes
 to note the value of the wave or spectrum at certain
 intervals.  But much of the time the absolute position must be
 controlled.  In the above cursor motion case, you would
 probably want to have a "normalize" macro that places the
 cursor in a particular start position, and a separate "step"
 macro that moves by intervals.

 To assure a specific location for a cursor, start the macro
 with the cursor at one extreme and move to the opposite
 extreme before moving to the final value.  When run, this will
 assure that the first motion will move the cursor to the end
 of its travel, since the cursor can't go past that point
 despite repeated attempts.  Even if the cursor starts from a
 point at or near that end when the macro is later run, the
 motion will be limited to that end... it doesn't "bounce back"
 or "wrap around".  The second motion will thus carry the
 cursor to the desired spot.

 When a macro is used to adjust some item in a 0Mmenu, make
 sure that you use CTRL-whatever to invoke the menu as part of
 the macro.  Do this even if the desired menu is aready active,
 since it might not be when the macro is invoked later.
 Otherwise, the macro will try to adjust whatever item is in
 the same relative position in the then-current menu...
 probably with undesireable results!

 Another possible pitfall has to do with menu items or entire
 menus that are disabled in certain situations.  If a macro
 tries to adjust an item that is missing or disabled, it will
 exit immediately with an error message so you know that the
 intended operation did not take place.

 The TmTrigger menu, in particular, may change depending on the
 TCSource selected, whether RtRTime mode is active, and whether the
 SGstimulus generator (StGen) is active.

 UfConfiguration file parameters for your particular GAADC board
 0Bdriver affect the presence of DcDDisk and ArAverager Remote
 control options, and of the TEExternal and TPPulse trigger source
 options.  If you reduce the maximum stimulus buffer size for
 the STIM3A Stimulus Generator module, macros which set
 stimulus duration may be affected.

KD KEY MACROS THAT SAVE TRACE DATA TO FILES:

 A typical data collection session might involve an initial
 K0macro (either manually invoked or KIauto-initialization) which
 Edsets parameters.  Then a second macro might collect an A0average
 and save the results to a O0file.  A third macro might adjust
 some parameter by a kffixed step, ready for the average-and-save
 macro to be invoked again.  Or a whole series of average,
 save, and adjust macros could be strung together and invoked
 by the auto-initialization macro, followed by a KQQuit sequence
 for a totally automatic collection package.

 Most of these macro operations are pretty straightforward,
 but file handling deserves special attention.  The main issues
 revolve around organization and naming of files to prevent
 attempted overwrites of existing data, which will cause the
 macro to terminate when it prompts for fOoverwrite confirmation.
 The InIncNm option allows for automatically incrementing file
 name extensions... but you still need to insure that it starts
 with the proper file.

 If you "hard code" the initial file name and extension, or
 accept a default like DATA.000, then the macro will attempt to
 write the same series of files on the next session and will
 fail.  Instead, consider appending to one large series of
 files.  The IncNm option allows up to 2700 file extensions,
 from 000 to Z99.  Activate IncNm at the start of the session,
 then use I0InDat or DVDskRd (as appropriate) to attempt to read
 from the series having your selected main file name but with a
 '*' extension, like
    'TESTDATA.*'

 This will cause all files starting with TESTDATA to be shown.
 Use fACTRL-END to go to the last file in this list, and hit
 ENTER to read it.  Then discard this file by unP0Pause (for
 InData files) or by toggling DskRd off (for DDisk files).
 Now when you invoke O0OutDt or D0DDisk, the next file in the
 series will be the default, courtesy of IncNm, and you can
 just accept it with ENTER.

 A typical key sequence might look like this:
    ALT-I           Turn on IncNm
    I               InDat prompts for file name
    E1ALT-DEL         Delete the default name
    TESTDATA.*      File names to search (in current path)
    ENTER           Enter fAfile system, show matching files
    CTRL-END        Move cursor to last file found
    ENTER           Read that file
    P               unP0Pause to discard it

 Note that we use CTRL-END instead of plain END here, in case
 there are more files in the series than will fit on a single
 screen.

 When you get near the limit of 2700 files, you can either
 change the macro, move to a new directory, or rename all the
 files from DOS, as in:
    REN TESTDATA.* TEST1998.*
 However, note that if you choose to rename the files, the
 DQALOG.TXT file created by EsEdSav will no longer hold the
 correct names.

 To move to a new directory, you simply start Daqarta from
 that directory.  EdSav always saves the log file to the
 current directory.

 To make it easier to change the macro, make sure when you
 create it that the 'TESTDATA.*' text is invoked as a separate
 "nested" macro.  Then you can change the series name simply by
 creating a new text macro assigned to the same KSID.


M0
 TRACE MEMORY:

 MiTrace Memory Introduction
 MsMemory Save (MemSv)
 MrMemory Read (MemRd)
 MdMemory Delete
 MAMemory Arrays (MemAr)
 MfMemory Array Files
 MmMemory Array Control Menu
    MLLabel
    MWLabel Width
    MOOrder
    MMLimit
    MSSort
    MDStep
    MPPosn or Lbl Step
    MFFile

Mi
 TRACE MEMORY INTRODUCTION:

 You may store and recall multiple traces in internal memory
 for quick access.  This can be especially handy if you want
 to follow trends or make comparisons, since only two
 keystrokes are required to select any trace for display, and a
 whole series of traces can be displayed at once using the
 MAMemory Array option.

 The traces are stored with all relevant parameters and the
 Emcomment line, just as they would be saved to a disk file with
 O0OutDt.  You may store any mix of waveform or spectrum traces,
 A0averaged or instantaneous, having any Npnumber of points N.
 DiDDisk recordings may not be stored in their entirety as memory
 traces, although you may store any selected screen just as you
 could use OutDt to create a file from it.

 Traces are stored sequentially, with ID tags given by a single
 character starting from 0 to 9, then A to Z.  Traces beyond
 these 36 are selected with an ALT-key plus the character, and
 are labeled A0 to A9 and AA to AZ.  Beyond these, use CTRL to
 get C0 through CT, for a maximum of 102 traces.  That limit is
 fixed by the size of the buffer reserved for memory storage,
 which is 64 Kbytes (65536 bytes) of "hidden" video memory that
 would otherwise be wasted.  The amount of this memory required
 to store each trace depends upon the type of trace (which
 determines data size per point), and the number of points N
 used... plus a 128 byte parameter and comment header:

                    256 pts         512 pts         1024 pts

 Inst Waveform      640 bytes       1152 bytes      2176 bytes
 Avg Waveform       1152            2176            4224
 Inst FFT           640             1152            2176
 Avg FFT            896             1664            3200

 So if you were storing only 1024 point waveform averages, you
 could fit 15 traces into the 65536 byte memory area, whereas
 if you had only 256 point instantaneous waveforms you could
 use the maximum of 102 traces.  In practice, you will probably
 find that you rarely need more than a dozen traces.

Ms
 TRACE MEMORY SAVE (MemSv):

 To save a trace to memory, hit SHIFT-M.  If the trace was
 0SLive, it will be automatically P0Paused first.  You will be
 prompted for a sequential MiID to save the trace as, starting
 with 0:
     'Save to Mem 0 ?  (ENTER, ESC, or Mem 0)'
 If you hit ENTER, the prompt ID will be used, which may also
 be entered directly by just hitting the 0-key.  ESCape will
 cancel the save operation.  After the initial save, subsequent
 saves give a different prompt:
     'Save to Mem 1 ?  (ENTER, ESC, or Mem 0 to Mem 1 {END})'
 The prompt ID will now be one more than the last trace saved
 or read.  Here you can ENTER or ESCape as before, or hit 0 or
 1 to save to that respective trace.  If you select a trace
 that already exists (0 in this case), that trace will be
 overwritten by the new trace.  Since this system is designed
 for quick operation, there is no separate write confirmation
 step, so make sure this is what you really want to do.

 If you hit the END-key instead of ENTER or a direct ID, you
 will automatically select the next free ID past the maximum in
 use, so you will never overwrite prior data.  Of course, there
 is no need for this if you are just sequentially saving traces
 from scratch, since you will be prompted with that ID anyway
 and can just hit ENTER.  But after you have saved several
 traces and you decide to go back and review or overwrite an
 earlier trace, the prompt will be one more than that trace.
 For example, if you have saved Mem 0 through Mem 4 and then
 overwrite Mem 2, the next time you hit SHIFT-M to save a trace
 the prompt will be:
     'Save to Mem 3 ?  (ENTER, ESC, or Mem 0 to Mem 5 {END})'
 Here you can rely on the END key to select the next trace,
 shown here as Mem 5.  You never need to remember where you
 left off with the original saving sequence.

 When you overwrite an existing memory trace, Daqarta will
 slide things around to make room if the new trace is bigger
 than the one it is replacing, or to compress space if the new
 trace is smaller.


Mr
 MEMORY READ (MemRd):

 After you have Mssaved one or more traces in memory, you can
 review them by hitting the unshifted M-key.  If the current
 trace is 0SLive, it will be P0Paused first.  If there is only a
 single trace in memory, the prompt will be:
     'Recall Mem 0 ?  (ENTER, ESC, MdDEL, or Mem 0)'
 Here you can hit ENTER to select the prompted trace or hit the
 0-key to select it directly.  (You can also hit ESCape if you
 change your mind.)  When the recalled trace is displayed, the
 status will show 'Mem 0'.

 If there are multiple traces in memory already, you will be
 prompted with the most recent addition, or most recently read.
 If you have saved traces 0 through 4 and have recently
 recalled trace 2 (but it is not now on the screen), the prompt
 will be:
     'Recall Mem 2 ?  (ENTER, ESC, DEL, or Mem 0 to Mem 4)'

 If you hit MemRd while you are currently viewing any memory
 trace, you will not see either of the above prompts.  Instead,
 the 'MemRd' option will change to 'Mem ' as a special prompt.
 This will allow the up and down cursor keys to scroll through
 all traces in memory for rapid review.  When you find the one
 you want, ENTER or ESC will accept it.

 Daqarta also offers the MAMemory Array mode to see multiple
 traces at once, which you may prefer to use instead of MemRd
 scrolling.  However, that option can only display comparable
 traces together on one screen, whereas with MemRd scrolling
 you can scroll through all the traces in memory.  You can use
 MemRd scrolling to select the base trace for the Memory Array.

 During MemRd scrolling, you still have the option of directly
 selecting any trace by its MiID number.  If you want to see the
 full-range prompt as before, you must ESCape and unPause to
 clear the exiting memory trace from the screen, then hit MemRd
 again.

 When a trace is recalled, Daqarta will change the screen
 display mode in an attempt to accomodate the recalled trace in
 the current mode.  If the recalled trace was originally a
 single or averaged waveform or a single FFT, it will have been
 stored as a waveform.  It can thus be displayed in either
 waveform or spectrum mode (since Daqarta can take the FFT of
 the stored waveform data).  But if the trace was an FFT
 average, Daqarta can't convert it back to a waveform... the
 display will be forced to FFT mode.  If you try to change to
 waveform mode after the trace is displayed, you will see:
    'FFT data only.'
 There is no "inverse FFT" function in Daqarta.

 While a recalled trace is being viewed, certain control menus
 will be restricted by removing the cursor, or access to
 certain menu items blocked by limiting cursor motion.  This
 prevents changes to the record of parameter settings for that
 trace.  The GAADC B1Board menu will be replaced with the
 ImTrace Info menu.

 One notable execption is the 0mcomment line... you can EmEdit it
 and then use MsMemSv to send it back to the same MiID, if you
 wish.  (Note that this will be one less than the prompt ID.)
 When you do this, however, Daqarta treats it as a "new" trace
 and updates the ITtime record.

Md MEMORY DELETE:

 To delete a trace and all traces above it, invoke MrMemRd and
 display the selected trace.  Hit the DEL-key and you will be
 prompted with:
    'Delete Mem N and above? (Y default/N):'
 where 'Mem N' is the selected Mitrace ID.  Hitting any key other
 than Y or ENTER at this point will escape the operation.

 If you hit Y or ENTER the trace and all above it will be
 deleted, and the next lower trace will be displayed in its
 place.  If you had selected Mem 0 to delete all traces, the
 "ghost" of Mem 0 will remain in view (since there is no lower
 trace to show) and the 0Sstatus indicator will change from
 'Mem 0' to 'Mem ?' as a reminder that it is not really in
 memory.

 Since traces are always stored with sequential IDs, there is
 no provision for deleteing individual traces other than the
 top one.  This avoids the confusion of either changing all the
 IDs to close up gaps, or trying to remember where the gaps
 are.  Note, however, that you are always free to use MsMemSv to
 overwrite any trace with new data.


MA MEMORY ARRAYS (MemAr):

 Traces that have been previously saved with MsMemSv can be shown
 simultaneously using MemAr.  Only "comparable" traces can be
 displayed this way:  They must all have the same number of
 Nppoints N, IBdata format, Xfsample rate, Tdtrigger delay, full-scale
 0YY-axis range, and all be A0averages or single "instantaneous"
 traces.  If they are single traces, they may be mixed
 F0waveform or spectrum, since in either case the waveform
 data is saved, and displayed in whichever mode is current.

 The MmMemory Array control menu can be used to adjust the way
 the traces are labeled and presented on the screen.

 Before you invoke MemAr, you must tell it the lowest Mitrace ID
 to include by viewing that trace with MrMemRd.  At any time
 after that, you may hit ALT-M to display the Memory Array.
 The selected "base" trace and all higher comparable traces
 will be shown together, up to 32 MMtraces per screen.
 If there are other traces present that are not comparable with
 the base trace, they will be ignored no matter where they
 appear in the original trace numbering sequence.

 The selected trace will be in the ususal CtTRACE color, while
 the rest will be in the CAALT color set via the CMMain Color
 control menu.  All information such as 0rcursor readouts,
 Emcomment line, and 0ltitle line will refer to the selected trace.
 The values of menu items such as AlAverager Artifact Limits and
 TcTrigger Cycle time will be those of the selected trace.

 You can select different traces via ALT-Up/Dn keys, and the
 relevant information will change.  Note, however, that only
 "internal" fpparameters have been saved for each trace.  Those
 set from U0plug-in modules such as the 0BADC board driver or the
 SGSTIM3A stimulus generator are not preserved automatically...
 you may want to use Edcomment field copies to make sure the most
 important parameters are recorded.

 If there are more comparable traces beyond the base trace than
 allowed by the MMscreen limit, the ALT-Up/Dn keys can be used to
 scroll the entire screen "window" just by trying to move the
 selected trace above or below the displayed range.

 Alternatively, you can use ALT-PgUp/PgDn to page through the
 comparable traces in blocks.

 While the Memory Array is on-screen, you may use all the same
 options you could use with a single MrMemRd trace:  You can
 change the Fmtrace magnification, toggle between waveform and
 F0FFT modes, XtXpand the X0X-axis, and so on.  All traces will be
 acted upon in unison.

 The trace magnification in Memory Array mode is independent
 of that in normal single-trace mode.  This allows you to have
 a smaller array magnification in order to keep traces from
 overlapping, yet still keep the original magnification when
 you return to view a single trace.

 Exit from the Memory Array mode by toggling it off with ALT-M,
 or simply unP0Pause back to a 0SLive trace.  Alternatively, MrMemRd
 will exit the array and go directly to the individual selected
 trace.


Mf MEMORY ARRAY FILES:

 A MAMemory Array may be saved as one large file by invoking
 O0OutDt when the array is on-screen.  You may use the MFFile
 option of the MmMemory Array control menu to select whether All
 comparable traces in memory will be included, or only those in
 the current View.

 When later retrieved by I0InDat, you will have the option of
 adding the array traces to any others then in memory (if there
 is room), or of replacing them.  Since trace Mimemory IDs
 are always sequential, the newly loaded traces may not have
 the same IDs as when originally saved... be sure you can
 identify each trace from its Emcomment line or some other
 fpsaved parameter.

 If you invoke O1OutTx while the Memory Array is on-screen, only
 the selected trace will be sent to the text file.


Mm MEMORY ARRAY CONTROL MENU:

 Use CTRL-M to bring up the MAMemory Array control menu at any
 time.  This menu controls the screen presentation as well as
 the file save protocol for Memory Arrays.


ML MEMORY ARRAY LABEL:

 This allows you to select how the array traces will be
 labeled:
    MemID   Shows the trace MiMemory ID as 'Mem N'.
    Fld #   Shows the selected Edcomment field.
    Off     No label shown.

 A desired Field number from 1 to 5 may be 0dentered directly.
 Entering 0 will give MemId, while 6 or above will give Off.

 Labels are shown at the right end of each trace, at its
 relative zero baseline.  Waveform trace labels are centered on
 their baselines, whereas magnitude F0FFT labels sit just above
 each zero line.  For F2Y-log FFT traces, the labels are centered
 on the 0 GadB line of each.  The labels are shown at these
 positions even if the corresponding traces come nowhere near
 their baselines at the right end of the trace.  With Y-log FFT
 traces, it is particularly unlikely that there will be any
 high-level trace activity at the highest frequencies.

 If you have selected 'Fld 1' to 'Fld 5' but there is no text
 in that field for any given trace, then the memory ID is shown
 for that trace by default.

 This control is completely independent from the MSSort control.
 You can thus sort on one field while labeling with another.


MW MEMORY ARRAY LABEL WIDTH:

 If MLLabel is set to one of the comment fields, this
 controls how much of that field will be used as the label,
 from 2 characters up to the full field width of 12 characters.

 The default setting is 9 characters, which will show most
 values that have been saved with the field copy option.  If
 the value is an integer, you will see the value including its
 units prefix and the first two characters of the units label,
 as in:
    '12345  Hz'.

 If the value is an unsigned decimal, you will see only the
 first character of the label, since the decimal takes one
 of the spaces:
    '1.2345 mV'
 or
    '12.345 kH' instead of '12.345 kHz'.

 If the value is a signed decimal, you will only see up to the
 units prefix, as in:
    '-1.2345 m'

 This control affects only the trace labels, not the sorting
 operation.


MO MEMORY ARRAY TRACE ORDER:

 This toggles the order of screen presentation between Up and
 Down.  When set to Up, the traces appear with the lowest sort
 value trace at the bottom and progress upward to higher values
 on the screen.  (Note, however, that if the MSSort control is
 set differently from the MLLabel control, the actual displayed
 labels may not be in this order.)

 This control only affects the screen, not the operation of
 selecting or sorting traces.  For example, if you have traces
 0 through 9 in memory and set the base trace to 5 via MrMemRd,
 then when you invoke MAMemAr you will see traces 5 through 9
 displayed.  If Sort is set to MemID and Order is set to Up,
 then trace 5 will be at the bottom and trace 9 at the top.
 Setting Order to Down simply means that trace 5 will be at the
 top and 9 at the bottom... it does NOT select traces less than
 5.


MM MEMORY ARRAY DISPLAY LIMIT:

 This controls the maximum number of traces that may be shown
 at one time, up to a limit of 32.  If there are more traces in
 the array, you can then scroll or page to them via ALT-Up/Dn
 or ALT-PgUp/PgDn.  This allows you to deal with arrays that
 would otherwise be too crowded to be viewed all at once.


MS MEMORY ARRAY SORT:

 This controls how the traces will be sorted before they are
 displayed:
    MemID   Sorted by MiMemory ID.
    Fld #   Sorted by the selected Edcomment field value.
    Txt #   Sorted by the selected field, treated as text only.
    Time    Sorted by the ITTrace Time and IDDate.

 You may 0ddirectly enter the desired value Field number, from
 1 to 5.  Entering 0 will give MemId.  To directly select
 sorting of a field treated as text only, add 5 to the desired
 field number:  Enter 6 to get Txt 1, or 10 to get Txt 5.
 Entering 11 or more will select Time.

 For Fld 1 to Fld 5 the selected field is treated as a value,
 including recognition of Spstandard prefixes and signs.  This
 allows a value like '2.3456 mV' to come before '1.2345  V',
 and also places large negative values before small ones.  For
 example, if MOOrder is set to Up, the following values would be
 shown on the screen in the left sequence, whereas Txt # would
 give the right sequence:

         Fld #               Txt #
      +1.2345 kV          +345.67 µV
      +23.456 mV          +23.456 mV
      +345.67 µV          +1.2345 kV
      +  0.00  V          +  0.00  V
      -45.678 nV          -100.00 kV
      -5.6789  V          -45.678 nV
      -100.00 kV          -5.6789  V

 Clearly a simple text-only sort is undesireable in this case.
 Text sorting should be reserved for non-numeric entries, or
 where text values are entered manually and don't conform to
 the Edstandard field-copy format.  For example, if you don't
 use a prefix and don't allow a space for it, the first
 character of the units label may be interpreted as a prefix
 and skew the sort.  The 'G' in '1.2 Gal' will be seen as a
 Giga prefix unless you add another space:  '1.2  Gal'.

 If a Fld # is set for sorting, but one or more traces have
 improper value formats, those traces will be treated as text
 and will come AFTER all the proper values:

        1 lb        ('l' is not a Spstandard prefix)
        20 kg
        4.34  g


 If you Mssave traces sequentially and then display them, the
 MemID and Time settings will give the same results.  But you
 may store them out of sequence (for whatever reason), or you
 may build up the array from fofile traces recorded in different
 sessions.  In either case, the Time option will put them in
 chronological order.


MD MEMORY ARRAY STEP:

 This control allows you to control the vertical spacing
 between array traces.  Its operation changes with the display
 mode to better fit typical user needs.

 For waveform or F0FFT magnitude displays, a value between 0 and
 255 directly sets the number of Gpscreen pixels between traces.
 The entire trace area is 256 pixels tall, but rather than try
 to compute the step size you will probably want to adjust this
 by eye.  There are two preset conditions that can make things
 much simpler for most general work:

 ■  Equal:
 If you enter a negative Step value, the Step item will show
 'Equal' instead of a number.  The trace baselines will be
 equally spaced, automatically tracking the number of traces
 present.  This is the start-up default and is a good
 general-purpose setting.

 ■  Limit:
 If you enter a positive value of 256 or more, the Step item
 will change to 'Limit'.  This means the traces will be at the
 same spacing as though you had Equal here, and the same number
 of traces present as set by the MMLimit control.  Thus, if you
 have a predetermined number of traces in a test series, you
 can keep each trace at a fixed screen position as you build up
 the series.  (TIP:  To save a keystroke, enter '1k' instead of
 '256' to activate this Limit option via 0ddirect entry.)

 For F2Y-log FFT traces the Step control sets the spacing between
 traces in GadB, according to the current log range.  The range
 of this control is from 0 to 40 dB per step.  The baseline for
 each trace is taken as its 0 dB line, and each label is shown
 at that point on the screen, even though there may be no part
 of the trace anywhere near the 0 dB level at the right end of
 the trace.  This results in a "ranking" of the labels,
 typically near the upper right of the screen.

 ■  Direct Trace Overlap:
 A Step value of 0 (whether Gppixels or GadB) is particularly
 useful for comparing traces by direct overlap to see areas of
 similarity and difference.  If you use this method, you may
 find it best to compare only two traces at a time for clarity.
 When the two traces happen to be adjacent in the array, you
 can just set the MMLimit control to 2 and only those will be
 shown.  But what if they are not adjacent?  You may be able in
 some cases to make them adjacent by changing the MSSort method,
 but in general the most reliable way is to copy both to unused
 higher Mimemory IDs and reset the MAarray base to see just those
 two.

 If you are really short on trace memory and only have room to
 copy one trace, you can still pull this off by swapping one of
 the traces with a trace that is adjacent to the other.  You
 first copy the adjacent trace to the upper memory location,
 then copy the other trace to the original adjacent spot.
 Note, however, that when you do this the ITtime record will be
 updated for each trace saved, as though it was a "new" trace.

 If you are going to use the "swap" method, you may want to set
 the MLLabel and MSSort modes to MemID to be sure of the target
 Mitrace ID and to assure the final sequence.

 In either case, use Alt-Up/Dn to select the trace to be
 copied, hit MrMemRd to show only that trace, and then hit MsMemSv
 and END or the desired target ID.  Then go back to MAMemAr and
 set the MMLimit to 2 and the MDStep to 0.


MP MEMORY ARRAY POSN or LBL STEP:

 This control changes its name and entire mode of operation
 depending on the display mode:


 ■  Posn:

 When waveforms are being displayed, the Posn control allows
 you to adjust the whole MAarray up or down on the screen.  The
 MLlabel for each trace is shown on its baseline, but when the
 baselines are set too close via the MDStep control, the label
 spacing will automatically increase so that the labels don't
 overlap.


 ■  Lbl Step:

 When F0magnitude or F2Y-log FFTs are shown, this is a simple
 toggle control.  It is normally set to Auto, which means that
 at small Step sizes the label spacing automatically increases
 just enough to prevent overlap.  If you toggle this to Track
 instead, overlap is allowed.

 For waveform display, operation is always in Auto mode.


MF MEMORY ARRAY FILE:

 This controls the protocol to be used when saving traces to an
 Array file with O0OutDt.
    View    Saves only the visible traces to the Array file.
    All     Saves all traces in the Array.

 When All is selected, the included traces are all those you
 could display by scrolling or paging through this same array.
 Traces lower than the MAbase trace (set via MrMemRd) will not be
 saved, nor any trace that was not included in the array
 because it was not comparable to the base trace.

R0
 REAL-TIME / SEQUENTIAL OPERATION:

 RtReal-Time (RTime) vs Sequential Mode
 RsSequential Mode
 RrReal-Time (RTime) Mode
 RoOverlap Operation
 RiInterrupts
 RdDMA
 RfFIFO
 RuDisplay Updates
 RkKeyboard Response


Rt
 REAL-TIME (RTime) vs SEQUENTIAL MODE:

 Daqarta allows operation in two fundamentally different
 modes, each of which has its own special strengths.  The mode
 that works best for your application depends not only on what
 you want to do, but also on the capabilities of your data
 acquisition board and the performance of your system.  The
 default start-up mode is Sequential, which is indicated by the
 RTime option (R-key) being off.  You can only toggle RTime on
 when the data acquisition B0Board is active, since the
 default Virtual Source operates only in Sequential mode.


Rs SEQUENTIAL MODE:

 This mode acquires one sweep (NpN samples) of data, then
 stops acquisition while it processes and displays the data,
 then repeats the whole sequence continuously.  During the
 processing and display time, you are missing data that
 passes by unseen.  Is this really a problem?  Almost never.

 At typical Xfsample rates on typical systems, the time for this
 whole sequence is so brief that the trace is updating several
 times per second anyway and operation appears live and
 continuous.  If you are viewing any sort of repetitive
 waveform, you will want to be running in TtTriggered mode in
 order to get a stable display that your eyes can make sense
 of, so of course there will be data thrown away between
 triggers no matter what.  And if the incoming data stream is
 indeed repetitive, one sweep is equivalent to the next
 anyway... it rarely matters exactly which ones you choose to
 view.

 In exchange for giving up what you probably didn't need
 anyway, Sequential operation offers powerful benefits to users
 of certain acquisition boards.  Chief among these is SPEED for
 boards that don't support RdDMA or deep RfFIFO operation.  Even
 for boards that DO support these, Sequential mode can accept
 TEExternal Trigger inputs that RTime mode can't, and can
 generate SGstimulus signals at higher speeds than can be done
 with RTime operation on certain laboratory-type boards.  At
 very high sample rates, Sequential mode maintains fast display
 updates, whereas RTime mode may need to reduce display updates
 in order to maintain the high sample rate.


Rr REAL-TIME (RTime) MODE:

 In RTime mode, data acquisition runs continuously, even during
 data processing and display.  When a sample or batch of
 samples arrives, all other activities are suspended briefly
 while the samples are sent to a continuously circulating
 buffer.  Processing and display may thus be interrupted many
 times to acquire new data before a trace is shown of previous
 data.  Then the processing cycle begins again with whatever
 new data has arrived in the interim.

 Strictly speaking, this is only "real-time" operation when the
 processing (including display) of NpN samples takes no longer
 than the time to acquire them.  For example, if you are using
 a Xfsample rate of 20 kHz, or 50 µsec per sample, it takes 25.6
 msec to acquire 512 samples.  If the time to process these is
 also exactly 25.6 msec, then while one sweep of 512 samples is
 being processed the next one can be acquired, in a continuous
 cycle without missing any samples.

 If processing takes longer than acquisition, some samples must
 be ignored in order to keep up with the incoming data.  If
 after completing the processing of 512 samples Daqarta finds
 that 612 new samples have been added to the buffer, it will
 show '100 GAP' in the 0sSpeed area above the right end of the
 trace.

 If you are using TtTriggered RTime operation, then even if
 Daqarta processing is faster than acquisition, it may need to
 skip some of the new samples in order to start the next trace
 at the requested trigger point.  (To prevent confusion,
 Daqarta will never look for a trigger in old data.)  So there
 will almost always be a GAP display in Trig mode.


Ro OVERLAP OPERATION:

 In untriggered Free-run RrRTime operation, Daqarta always takes
 the most recent NpN samples from the circulating buffer.  At
 slow Xfsample rates or with a fast processor, there may be less
 than N new samples available, so the total may include some
 prior samples... a condition known as Overlap processing.  If
 Daqarta needs 512 samples for processing and finds that only
 412 new samples have arrived, the Speed display will show:
     '100 OVL'

 Typically, you wouldn't want to use Free-run while trying to
 view a repetitive waveform, since the trace would roll by too
 fast to see.  But this lack of synchrony has little effect on
 F0spectrum or S0spectrogram displays.  Typically the spectrum will
 look more "bouncy", especially the low-level portions and
 leakage "tfskirts" on main harmonics, and even that can be
 nearly eliminated by W0windowing.

 You can try this for yourself using only the B0Virtual Source
 and toggling TtTrig off and on with the T-key while you view the
 spectrum or spectrogram.  Although the Virtual Source will not
 run in RTime mode, you can still see the difference between
 Trig and Free.  View the F2power spectrum (Y-log active) to see
 the low-level skirts while you toggle WtWindo on and off.

 Of course, this Free-run difference only applies to repetitive
 signals, not broadband noise-like signals that you couldn't
 trigger on anyway.  And even with a repetitive signal you can
 minimize the difference by adjusting its frequency or the
 sampling rate to give an integer number of cycles in one
 sweep, if there is some reason not to use windowing.

 Since the amount of overlap or gap is directly related to the
 processing and display time, it is not usually a constant...
 traces that are very "busy" require more Gppixels to be drawn on
 the screen in L0Line1 (solid line) style, and traces with an
 overall high level require more pixels in Line2 (bar) style.

 As an example, the following results were obtained with a ramp
 wave from the 0BDEMO driver at a 20 kHz Xfsample rate with NpN = 512
 in Free-run RTime mode on a 33 MHz 486.  FmTrace magnification
 of the magnitude spectrum was adjusted to get the main peak to
 about the same screen height as for the power spectrum.

     Power Spectrum, Line2 bar display:       310 GAP
     Power Spectrum, Line1 line display:      110 GAP
     Power Spectrum, Line0 dot display:        50 GAP
     Magnitude Spectrum, Line2 bar display:    70 GAP
     Magnitude Spectrum, Line1 line display:   70 GAP
     Magnitude Spectrum, Line0 dot display:    50 GAP
     Waveform, Line1 line display:            100 OVL
     Spectrogram:                             300 OVL

 A F2power spectrum generally has more of the trace higher up on
 the screen than a F0magnitude spectrum, so more time is spent
 drawing taller bars in Line2 style, whereas they both have
 only 512 dots to show and hence take about the same amount of
 time in Line0 style.  The magnitude spectrum peak is so much
 taller than the rest of the trace that everything else is
 close to zero, so there is no difference between Line2 and
 Line1 styles.

 A waveform display does not need to compute an FFT, so it
 tends to be faster.  A S0spectrogram must compute an FFT for
 each vertical line, but the display is very simple so it tends
 to be very fast.  In waveform and spectrum modes, the trace
 magnification can have a large effect on how long it takes to
 draw lines, especially with a noisy signal that has lots of
 variation between points.

 Naturally, with more Nppoints N it takes longer to process and
 display them, but it also takes longer to acquire them.  It
 turns out that the overall processing time doesn't double when
 N doubles, leading to the curious result that performance
 actually improves as N increases.  Using the same setup as
 above and looking only at the spectrogram results:
     N          OVL        %Overlap
    256         130          51%
    512         300          59%
    1024        615          60%

 Although overlap is dependent upon processing time, you can
 achieve constant overlap using the TcTrigger Cycle control.
 This must be set at least as long as the slowest trace
 processing time, and is best adjusted by eye while viewing the
 OVL display.  Just increase the Cycle time until the OVL value
 stops changing.

 High overlap may be particularly desireable with spectrograms,
 since here you are interested in both the time and frequency
 domains, and more overlap allows finer time resolution.  (Up
 to a point, since the N size also affects time resolution.)

 To get high overlap on slow systems, or simply to have a
 fixed, controllable overlap, you can record data to a DiDDisk
 file and play it back with DrDskRd.  Then the DoDskRd Overlap
 or DWSgram Width controls allow you to select any desired
 overlap value.

 RTime performance is strongly influenced by the capabilities
 of your data acquisition board and how you set up its driver.
 Even if the board claims a fast Xfsample rate, that value only
 refers to the Analog-to-Digital Converter speed... we need to
 actually get the data into system memory in order to use it.
 There are 3 basic RTime methods to do this:  RiInterrupts, RdDMA
 or RfFIFO.


Ri INTERRUPTS:

 The slowest but most universal method to move sample data to
 system memory is for the board to generate an interrupt
 request (IRQ) signal when each sample is ready.  The CPU stops
 whatever it is doing and runs a special interrupt handler
 routine that must save the current machine registers, set them
 to access the board, fetch the data from the board into system
 memory, and then restore the registers and return to the
 original interrupted process.  The actual data move is fairly
 quick, but there is a lot of overhead time spent saving,
 setting up, and restoring... and it must all be done over
 again for each sample.

 The 0Bboard driver will usually need to be told which IRQ line
 to use via an I:n parameter in the UfDQA.CFG configuration file.

 For a board that doesn't have a GPpacer timer that can signal
 when each sample is ready, a slightly different method is to
 have a main system timer generate the interrupt signal at the
 required Xfsample rate.  The interrupt handler does everything
 as before, but in addition it must explicitly start each
 sample conversion, and wait until it is done to read the data.
 For a nominal 100 kHz board which takes 10 µsec for a
 conversion, we would thus need to wait those 10 µsec in
 addition to the interrupt overhead.  Only a fast machine with
 low overhead could approach the board's rated 100 kHz sample
 rate.

 A trick can be used with this type of board to restore some
 performance on slower systems:  By using a staggered
 operation, each interrupt reads data from a conversion
 started at the end of the previous interrupt.  Now the time
 formerly spent waiting for the conversion to finish is rolled
 into the time between interrupts.  The data is not really from
 the instant in time that we "thought it was", but once the
 process is begun it doesn't matter.

 Although interrupts are the slowest method to move data, they
 can still be the best or only choice when greater flexibility
 is needed.  That's because once an interrupt handler becomes
 active, it can do anything at all... not just acquire data.
 This allows boards to acquire data and generate SGstimulus
 outputs simultaneously, without having special dedicated
 hardware like dual RdDMA access or on-board output buffers.
 Since the vast majority of laboratory-type boards that have
 DMA don't have this fancier stuff, they may still need
 interrupt-driven operation for stimulus generation.


Rd DMA:

 Direct Memory Access (DMA) is a system whereby samples can be
 slipped into memory automatically.  When a sample is ready,
 the board asks the system DMA controller to put it into the
 next slot in the system memory sample buffer at its earliest
 convenience.  As soon as the CPU is able (which is usually
 "real soon"), it looks the other way while the DMA controller
 moves the sample directly into memory without the CPU even
 knowing about it, taking the absolute minimum amount of time.

 The DMA controller then gets ready for the next sample by
 pointing to the next memory slot.  By proper buffer layout and
 DMA programming, this process can be arranged to continue
 indefinitely, with data going to each slot in a continuously
 circulating sample buffer.  No interaction between the CPU and
 the board is needed... as far as the program is concerned, the
 data just appears in the buffer like magic.

 Boards that support DMA will usually give the best RTime
 results on machines with 386 processors or higher, and on old
 XTs (8088 processors).  Many machines with 286 processors (and
 maybe some early 386's as well) suffer from a design quirk
 wherein the DMA channel runs at HALF the CPU speed... in fact,
 a PC or XT at 4.77 MHz has better DMA performance than a 286
 AT at 6 MHz, since the AT is really a 3 MHz machine as far as
 DMA is concerned.  In these machines a "deep RfFIFO" board is
 best.

 Your computer supports several different DMA channels or
 "levels".  The 0Bboard driver will usually need to be told
 which DMA level to use via an D:n or H:n parameter in the
 UfDQA.CFG configuration file.

 Some boards running in DMA mode insist upon generating an
 Riinterrupt after a selectable number of samples, even when it
 is not required by Daqarta.  You will thus need to designate
 an IRQ number using the I:n parameter, even though the board
 is using DMA transfers for acquisition.  Daqarta typically
 sets this number of samples as high as possible (65536 for
 8-bit data or 32768 for 12- or 16-bit data), so there is
 little time lost processing the do-nothing interrupt.

 All normal ISA-bus sound cards use DMA mode, and many also
 have dual DMA support for simultaneous data acquisition and
 SGSTIM3A stimulus generation (Gdfull duplex operation).


Rf FIFO:

 A First-In-First-Out buffer is like a pipe for data:  The
 board collects new samples and stuffs them in one end of the
 pipe at a constant Xfsample rate, while the program sucks old
 samples from the other end as needed.  Typically, an Riinterrupt
 is generated when the pipe is half full, signalling the
 program to pull those samples out as fast as possible.  There
 may be some extra samples stuffed in during the interrupt
 overhead and the draining time, so by starting when the pipe
 is half full there is plenty of safety factor.  After the
 samples are transferred to a system memory buffer, the program
 is free to do other things (like process data) until the next
 interrupt.  As long as the AVERAGE rates of filling and
 draining the FIFO pipe are equal, it doesn't matter that the
 filling is regular and the draining is in bursts.

 The FIFO system shares features with both RdDMA and interrupt
 systems.  It's as though the board has its own little DMA
 system continuously filling the FIFO instead of system memory.
 The program transfers data from FIFO to system memory in
 interrupt-driven bursts of many samples, instead of one at a
 time as in interrupt-only systems.  In this way the interrupt
 overhead is spread among many samples, reducing the average
 overhead and allowing faster operation than one interrupt per
 sample.  On those 286 machines with slow DMA, this can even be
 faster than DMA, especially since block transfers can be used
 which are faster than single-sample transfers.  However, this
 is only effective if the FIFO pipe is long ("deep") enough to
 bring the average overhead down substantially... not true on
 every board that claims FIFO operation.


Ru RTime vs SEQUENTIAL DISPLAY UPDATES:

 In RsSequential operation, the time to process the data and
 update the display is independent of the Xfsample rate.  At high
 sample rates, the time to acquire the data is small so the
 overall cycle time between screen updates is very fast.  As
 sample rates get slower and slower, the acquisition time tends
 to dominate the overall cycle, which can never be faster than
 the acquisition.  So, for example, if you acquire 512 samples
 at 5 kHz (200 µsec per sample), it takes 0.1024 sec just to
 get the data.  You will thus get just under 10 screen updates
 per second... still a comfortable update rate.  But if you
 sample instead at 500 Hz, it will take over 1 second between
 updates,
 which...makes...for...an...annoyingly...slow...display.

 RrRTime mode will have this same low update rate at low sample
 rates only in TtTriggered operation.  In Free-run, however,
 there will just be a LOT of Rooverlap, and the update rate will
 still be blazingly fast.  RTime is thus definitely the way to
 run in FFT modes at slow sample rates.

 At very high sample rates, the tables may turn.  As sample
 rates go up, the ongoing RTime acquisition steals more
 frequent time slices from the update process.  Eventually the
 screen updates become noticeably slow, as the GAP values
 soar... you may be sampling enough data points for hundreds of
 sweeps per second, but that very sampling is preventing you
 from getting more than a few!

 This is normally only a problem if your board is using
 Riinterrupt-driven sampling, since the time slices are
 bigger than for RdDMA, and more frequent than for RfFIFO.
 SGStimulus generation on these boards compounds the problem
 because it must also transfer output samples from memory to
 the board, adding still more to the length of each slice.

 So at high sample rates, RsSequential mode may be better.
 However, if your experiment requires continuous background
 stimulus generation (an ongoing tone, for instance, instead of
 one tone burst per sweep), then you are stuck with RTime mode.


Rk RTime vs SEQUENTIAL KEYBOARD RESPONSE:

 In either mode, a key signal may come at any time.  Daqarta
 will store it until it is ready to start the next trace, then
 act on the key command first.  In RsSequential mode, a key that
 comes during acquisition causes an immediate exit of that
 sweep and skips the processing and screen update.  This gives
 fast key response at all times, even if the Xfsample rate is
 very slow.

 In RrRTime mode, high sample rates that cause the overall screen
 update rate to slow down will cause the keyboard response to
 lag as well, since no action is taken on the key until the
 current trace is updated.  Daqarta only stores one key request
 at a time, so at high RTime sample rates you may need to type
 slowly so that each key can be recognized before it is
 overwritten by the next.

S0
 SPECTROGRAM:

 SgSpectrogram Toggle
 SySpectrogram Y-Axis
 SmSpectrogram Control Menu
    StSensitivity
 CwColor Weights
    CiColor Insert / Delete
 CaColor Assignment Menu
    C0Palette
    C1Assign
    C2Select
 aSApplications - Sound-Triggered Spectrogram


Sg
 SPECTROGRAM TOGGLE (Sgram):

 Use ALT-S when F0FFT mode is active to enter Spectrogram mode.
 Here each vertical line on the trace represents one NpN-points
 FFT spectrum, with frequency running from low to high and the
 power at each frequency indicated by one of 15 colors, plus
 the screen background color for the lowest level.  Time is
 recorded from left to right as a succession of these vertical
 color spectra.

 When the line for the current time reaches the right end of
 the trace area, it wraps back to the left end and the process
 repeats indefinitely.  The X-axis time labels are relative
 only to the 0 at the left end of the trace... they do not
 increase on subsequent passes.  (If the labels kept increasing
 to show actual time since Spectrogram mode was begun, the
 labels would rapidly grow to an unmanageable size and collide
 with each other if the same resolution were to be maintained.)

 The same T0triggering and W0window function options used for
 the normal spectrum mode are also used for the spectrogram,
 including Tdtrigger delay.  SGstimulus generation continues
 to operate normally.

 In RsSequential mode, the speed of the spectrogram sweep is
 determined by the Xfsample rate and the N size, since these
 control how long it takes to acquire the samples needed for
 each line.  Smaller N will result in a faster sweep, as well
 as finer time resolution.  A faster sample rate will do this
 as well, but at high speeds the CPU speed will limit the
 processing time and hence the sweep speed.

 If the trigger mode is set to TnNorm and the trigger events
 are infrequent, the Sequential X-axis will underestimate the
 actual spectrogram time.

 In RrRTime mode, you can often increase the spectrogram sweep
 speed by toggling TtTrig to TfFree via the T-key.  If your CPU is
 fast relative to the sample rate, Rooverlap processing will take
 place to give finer time resolution and a faster display
 update.

 Since the X-axis calibration in RTime mode is based upon
 actually measuring a few individual spectra, if the trigger
 mode is set to Norm and triggers are infrequent it may
 take a long time for the axes to appear when you activate
 Sgram mode.

 You can change the colors representing each of the 16 power
 levels using CTRL-C, which invokes a special Cwcolor control
 menu in Sgram mode.  CTRL-S invokes the Smspectrogram control
 menu, which allows you to change the range of powers covered
 by these 16 levels.

 There is no provision to save a spectrogram to disk as such.
 Instead, you should save the raw data using the DiDDisk option.
 This not only allows complete control over the spectrogram
 color and sensitivity after the recording, but also allows you
 to adjust Dooverlap, W0window function, number of FFT Nppoints,
 T0triggering, etc.

 For a good example of the spectrogram in operation, see the
 experiment described in the BmFrequency Modulation section
 of the BvVirtual Source.

Sy
 SPECTROGRAM Y-AXIS:

 When the Sgspectrogram display is active, the Y-axis shows the
 frequency for any point in X-axis time.  For NpN = 256 or 512,
 the Y-axis shows the whole tANyquist frequency range, which is
 half the Xfsampling frequency.  It will be identical to the
 X-axis in the normal F0spectrum mode.

<p>
 When N = 1024, the Y-axis shows only half of the spectrum
 X-axis frequency range because it has only 256 screen
 Gppixels to work with, and an FFT from 1024 input samples gives
 512 output frequencies.  However, you can slide that half up
 and down in frequency with the X-axis control menu XlXpand
 controls.  (There is no "normal" Xpand in spectrogram mode.)

 Or, more simply, use the PgUp/PgDn keys to this... they still
 control the Y-axis here, even though it's frequency instead of
 the usual Fmtrace magnification.  You can even use FsSHIFT-HOME to
 force the display to show the lower half of the frequency
 range (or any preset position), and SHIFT-END to restore the
 previous range.



Sm
 SPECTROGRAM CONTROL MENU:

 While the spectrogram is active, CTRL-S invokes a menu to
 control the sensitivity of the color display.  (Use CTRL-C
 to change the actual Cwcolors representing each level.)

 Each of the 15 color levels is labeled with a threshold, in GadB
 below 0Yfull scale.  (This makes them all positive numbers... in
 other words, a value of 20.0 dB below full scale is -20.0 dB
 relative to full scale, or 0.10 of full scale magnitude.)
 To compute each vertical line of the spectrogram from the
 corresponding spectrum at that time point, the spectrum output
 at each frequency is compared to these thresholds to find the
 highest one (lowest dB value) that it reaches or exceeds.  The
 corresponding Gppixel is then shown in that color.  Outputs
 below the lowest threshold are shown in the screen background
 color.


St SPECTROGRAM SENSITIVITY:

 The sensitivity range is controlled by setting the highest
 and lowest thresholds, and all others are automatically
 adjusted to form a linear sequence of constant-GadB steps.  The
 difference between the top and bottom is divided by 14 to get
 the step size between each of the 15 thresholds, rounded to
 the nearest 0.1 dB.  This step size is then applied from the
 top down to determine the lower thresholds, including a new
 bottom value as a result of rounding and accumulation.

 This adjustment method imposes certain path dependencies.  For
 example, the default range is from 5.0 dB to 75.0 dB, in 5 dB
 steps.  If you enter 0 for the top threshold, the range will
 become 0.0 to 75.6 dB in 5.4 dB steps.  (75.0 / 14 = 5.357 dB,
 rounded to 5.4 dB per step.  5.4 dB times 14 steps = 75.6 dB.)
 If instead of entering the 0 dB directly you slowly scroll
 from 5.0 to 0, the range will be 0 to 70.0 dB in 5.0 dB steps.
 This is because after each small change, the computed step
 size was still so close to 5.0 dB that it rounded back to
 the same value.

 In addition, unless FeFFT32 is active, there are limits due to
 the resolution of 16-bit data at the lower end, where an
 increase of one count in the raw data output may represent a
 large GadB change.  Since each dB threshold value must have a
 unique equivalent data value, Daqarta can't arbitrarily round
 to the nearest one without making sure that the next higher or
 lower threshold doesn't also round to the same data value.  If
 the equivalent data values don't turn out to be unique for all
 thresholds throughout the dB range requested, Daqarta will
 keep the top threshold and readjust the bottom threshold
 upward (smaller dB value, hence finer resolution) until they
 are unique.

 The implied resolution of 0.1 dB is thus an illusion for
 thresholds below about 70 dB.  The actual thresholds used will
 be determined by the closest data values.  The top threshold
 is limited to 68.9 dB to allow room for those below it.

 However, by shifting to FFT32 mode, the greatly increased
 dynamic range of 32-bit FFT computations largely eliminates
 the above issues for all feasible applications.  The top
 threshold can now go down to 90 dB, and the bottom down to
 180 dB... WAY lower than any real input signal can achieve.

 Because of this vast disparity in range capabilities, Daqarta
 maintains separate range settings for normal and FFT32 modes.
 When you shift between them, the current settings for the new
 mode immediately take effect.

 You can use this to advantage even when you don't need the
 huge FeFFT32 dynamic range, but simply want to be able to flip
 quickly between two different range setups.  Just set the
 desired limits, toggle FFT32 with SHIFT-F, and set the other.

 With all range sensitivity settings, whether by directly
 adjusting a limit or by shifting to a whole new setup with
 FFT32, any changes you make are implemented immediately for
 all incoming data... they have no effect on data previously
 acquired but still visible on the screen.


T0
 TRIGGER OPERATION:

 TiTriggering Introduction
 TtTrigger Toggle
 TmTrigger Control Menu
     Mode
        TaAuto
        TnNorm
        TfFree
     Source
         TsMain
         TAAM
         TFFM
         TSIntern
         TEExtern
         TGStim
         TPPulse
     T+Slope
     TlLevel
     TdDelay
         T-Negative Trigger Delay
         TrDelay Range
     TcTrigger Cycle
     TgStimulus Cycle
 a1Applications - Sound / Event-Triggered Sequences

Ti
 TRIGGERING INTRODUCTION:

 Triggering allows the NpN samples for each trace to be collected
 synchronously with the input waveform, giving a stable display
 in the same way that a strobe light can "freeze" the motion of
 a rotating wheel.  Rather than manually adjusting the strobe
 rate to match the wheel's rotation rate, suppose the flash
 could be triggered whenever a mark on the rim of the wheel
 passed a certain point, say 9 o'clock.  The wheel would then
 appear to be frozen in that position.

 The simplest form of triggering is TSInternal, where a sweep is
 begun whenever the signal voltage passes a certain TlLevel going
 in the direction specified by the T+Slope control.  This works
 well when the signal being viewed has a low noise level.  But
 many real-world signals have very high noise levels, often
 much larger than the signal of interest.  In these cases, a
 simple level-and-slope scheme would trigger on any noise
 voltage that happened to match.  ATWaveform averaging can be
 used to reduce the noise, but only with a suitable trigger...
 one that is itself unaffected by the noise.

 TEExternal triggering can be used if the input signal is a
 response to some stimulus you provide.  The idea here is that
 the trigger comes from the stimulus, instead of from the
 response.  You will need to provide a synchronous mTTTL digital
 version of that stimulus, such is available on most laboratory
 oscillators.

  ┌───────────────────────────────────────────────────────┐
  │ NOTE:                                                 │
  │ Daqarta always uses the word "trigger" to mean        │
  │ "start collecting a sweep of NpN samples".  Board       │
  │ manufacturers sometimes use "trigger" to mean "start  │
  │ one GAADC sample conversion", but the same manufacturer │
  │ may alternate between these two meanings in different │
  │ contexts.  Be very wary of references to "external    │
  │ trigger" inputs in a manufacturer's literature:  They │
  │ usually mean "external GPpacer".                        │
  └───────────────────────────────────────────────────────┘

 The best situation of all is to have Daqarta generate the
 stimulus, since trigger synchronization is then essentially
 perfect.  This uses the TGStim trigger mode and the STIM3A
 SGstimulus generator driver that comes with Daqarta, if
 your board can generate outputs while acquiring an input.
 For sound cards that don't support the Gdfull duplex mode needed
 for STIM3A, the on-board music synthesizer provides a
 convenient stimulus source.

 If all you need is a simple digital level stimulus, perhaps
 to start some external source or to use directly as a
 "click", then the trigger TPPulse mode can provide it.

 Special triggering modes are also provided for B0Virtual Source
 operation to allow synchronization to TAAM or TFFM modulators as
 well as the TsMain carrier wave.

Tt
 TRIGGER (Trig) TOGGLE:

 The unshifted T-key toggles between Triggered and TfFree-run
 modes.  In Triggered mode, the Trig option is highlighted and
 the 0ttrigger status on the 0ltitle line will show TRIG.
 Triggering will use the either the TaAuto or TnNorm method, as
 selected by the Mode item in the trigger control menu.

 In Free-run, the highlight is gone and the status shows FREE.
 The trigger Mode also shows Free, and is highlighted to
 indicate that it can't be accessed to change it until you
 toggle back to Trig operation.

 You will probably want to run in Triggered mode while viewing
 repetitive waveforms, since for most Xfsample rates they would
 otherwise roll by too fast to see.  However, Free-run is often
 useful in conjunction with R0RTime mode when running at very low
 sample rates, where Triggered operation might involve long
 waits between screen updates:  Free-run RTime mode will allow
 Rooverlap operation, and at slow sample rates the trace will
 update on nearly every sample.  Waveforms will seem to scroll
 slowly across the screen from right to left, with each new
 sample appearing on the right end of the trace.  This allows
 you to see changes immediately.

 ┌─────────────────────────────────────────────────────────┐
 │  NOTE:                                                  │
 │  Normally, when you make changes to certain parameters  │
 │  or exit a P0Paused state while in RTime mode, Daqarta    │
 │  will wait for a Npfull trace of new samples before       │
 │  updating the screen.  This assures that the data you   │
 │  see will always match the parameter settings.          │
 │  However, in Free-run RTime mode this interlock is      │
 │  deliberately defeated for the express purpose of       │
 │  allowing you to see immediate effects at slow sample   │
 │  rates.                                                 │
 │                                                         │
 │  You may thus see a discontinuity at the change or      │
 │  unPause point of the waveform, which will scroll       │
 │  across the screen.  This does not necessarily          │
 │  represent a real discontinuity in the input signal.    │
 │  When you Pause and unPause the trace, for example, it  │
 │  is only the display of the signal which is             │
 │  discontinuous.                                         │
 │                                                         │
 │  The discontinuity may or may not be obvious when       │
 │  viewing waveform data, but you must take special care  │
 │  with spectra:  The discontinuity can make a large      │
 │  change in the spectrum, which will not dissipate       │
 │  until all samples for a complete new trace are         │
 │  acquired.                                              │
 │                                                         │
 └─────────────────────────────────────────────────────────┘

 Overlap sampling is also commonly used for S0Spectrograms,
 even at higher sample rates, which again requires RTime
 Free-run mode.

 The Trig option is disabled such that the current state can't
 be changed when the trace is P0Paused, so that the trigger
 status always shows the conditions under which the visible
 trace was acquired.  The exception to this is when you are in
 DVDDisk Read mode, where manual motion through the file is
 allowed during the Pause state.  Here the trigger status
 indicates the state that will be in effect when you unPause to
 go into Dvautomatic replay operation.

 Trig is disabled to prevent changes during AmTrue averages,
 since the final result would be misleadingly identified.
 There is no similar limitation for AeExponential mode, since
 operation is continuous until manually Paused.  If you toggle
 Trig just before Pausing an Exponential average, you are on
 your own in trying to interpret the results.  Similarly,
 spectrum A^Peak mode does not disable Trig, whether the ASSweeps
 parameter is set to a specific number or to Continuous.

 The Trig option is also disabled in RsSequential mode when the
 TGStim or TPPulse trigger sources are active, since by the nature
 of sequential stimulus generation the output is synchronous
 with the input.  RrRTime mode allows you to select TSInternal
 triggering even during stimulus generation, if you need it.


Tm
 TRIGGER CONTROL MENU:

 CTRL-T brings up a Trigger control menu appropriate for the
 current state of operations.  The Virtual Source trigger menu
 has no TcCycle option, and has different TCSource options than the
 B0Board version.  These are separate menus: Changes to one don't
 affect the other.  There are also changes in the Board trigger
 menu depending on R0RTime mode, Source selection, and the state
 of the SGStimulus Generator.

Ta
 TRIGGER MODE:

 Toggle between Auto and Norm by hitting Enter with the cursor
 at this item.  This option is always present in the Virtual
 Source trigger menu, but if B0Board is active it is only
 present if Source is TSIntern or TEExtern, not TGStim
 or TPPulse.

 If you use the T-key to toggle Trig off, Mode shows Free and
 is highlighted as a reminder that cursor access to this menu
 item is blocked until you return to Trig operation.

 TRIGGER MODE Auto:
 This is similar to the auto-trigger option on a conventional
 oscilloscope, if you are already familiar with that.  The
 trigger logic waits for the indicated signal T+Slope polarity,
 then waits for the signal to cross the indicated trigger
 TlLevel.  In contrast to TnNorm mode, however, the level actually
 used is adjusted after each sweep so that it is the same
 proportion to the signal peak as Level is to 0Yfull scale.

 Suppose, for example, that Level is set to 500 mV on a 1 Volt
 input range, or half of full scale.  Then the actual trigger
 level will be at half of the zero-to-peak amplitude of the
 signal, and it will self-adjust as the input level changes...
 if the signal level is only 42 mV, then the effective trigger
 level will be 21 mV.  This allows a stable trace under
 changing input conditions.

 The Auto-trigger logic scans NpN samples waiting for a valid
 trigger, based upon the current level set by the previous
 sweep.  If a trigger is not found, the next N samples are
 processed anyway and used to compute the trigger level for the
 next sweep.  The waveform display may thus "hiccup" for one
 sweep when the level drops suddenly.

 A powerful advantage of Auto mode is that you thus ALWAYS get
 a more-or-less ongoing sweep display.  This allows you to see
 what is going on, even when things are not happening the way
 you assumed when you set the original trigger Level.


Tn
 TRIGGER MODE Norm:

 Normal mode, just like that mode on an oscilloscope, will wait
 forever for the signal to cross the indicated trigger TlLevel
 with the indicated T+Slope.  However, unlike many scopes, it
 will show TRIGGER WAIT at the upper right of the (prior) trace
 if the wait is more than two times NpN samples.  To break out of
 a wait for a trigger that doesn't arrive, you can either
 adjust your experiment, or change the trigger parameters.  You
 could punch TaAuto to view the current signal, then set a new
 trigger Level based upon that.

 You can combine this event-waiting ability with the K0Key Macro
 system to create complex sequences of operations that are
 initiated when the trigger event arrives.  The a0Applications
 section gives suggestions for aRsound-triggered recording,
 aSsound-triggered spectrograms, and aOother event-triggered
 processes.

 Since Daqarta can't predict the time between triggers in Norm
 mode, the S0spectrogram time axis may not be accurate.  In RrRTime
 mode an attempt is made to estimate the spectrogram time by
 measuring a few sweeps, so if the triggers are very far
 apart it may take a long time for the axes to appear when
 you first go to Sgram mode.  In RsSequential mode the axes will
 appear immediately, but will be the same as for TaAuto mode.
 With infrequent triggers the X-axis may thus greatly
 underestimate the Norm time.

Tf
 TRIGGER MODE Free:

 Free-run means that there is no triggering... the next sweep
 starts immediately after the last one, and waveforms roll by
 unsynchronized with the start of the trace area.  This mode
 is not actually selected by any operation on this Mode item...
 it is the result of toggling the TtTrig option off with the
 T-key.  Free is then shown highlighted in the menu, which is a
 reminder that cursor access to the Mode item is denied until
 you toggle Trig back on.

 The main use of Free-run mode is with F0Spectrum or S0Spectrogram
 modes, where the effects are not so hard on the eyes as is
 trying to view an unsynchronized waveform.  In R0RTime mode,
 Free-run allows Rooverlap processing, if your system is fast
 enough relative to the Xfsample rate.


TC
 TRIGGER SOURCE:

    TsMain
    TAAM
    TFFM
    TSIntern
    TEExtern
    TGStim
    TPPulse


Ts
 TRIGGER SOURCE Main (B0Virtual Source mode only):

 In this mode, the input to the trigger logic is taken from the
 main BwWave signal after it has been scaled to the indicated
 Blsignal level but BEFORE any Bnnoise, BmFM, or BaAM is applied.  So,
 for example, even with AM active the triggered trace will
 always start at the same phase of the carrier, regardless of
 how large or small its instantaneous amplitude becomes due to
 the modulation.  The AM envelope will just roll through the
 trace area, so you will probably want to use P0Pause or better
 yet SsSingle Sweep to see the actual trigger point.

 Since the trigger source is taken after the main wave level
 scaling, if you set the absolute value of the Tltrigger Level
 higher than the main wave level and TnNorm mode is active, no
 trigger will be detected.  The prior trace will remain on the
 screen and you will see the TRIGGER WAIT message in the upper
 right portion of the trace.

 Also, since the trigger source is taken before the addition of
 any added noise, the triggering will be much more stable than
 a real-world noisy signal, where the noise would cause trigger
 jitter by forcing the trigger level to be reached earlier or
 later than the desired point on the wave.


TA TRIGGER SOURCE AM (B0Virtual Source mode only):

 Here only the AM modulator is used as the trigger signal, so
 its envelope will appear frozen on the screen while the main
 carrier rolls by beneath it.  Note that the instantaneous
 modulator value is zero at the level where the carrier is at
 its original maximum, and goes above and below that point.
 The most-negative level of the modulator is where the
 modulated carrier has minimum amplitude... with 100% AM,
 setting the Tltrigger Level to negative 0Yfull scale will give a
 trace that starts at the nulls of the modulation.  The trigger
 is taken from the AM modulator before the BdAM Pct scaling, so
 AM Pct will not affect the phase of the trigger point relative
 to the envelope.

 See the BaAmplitude Modulation and BAAM Triggering sections under
 BvVirtual Source Menu for more discussion.


TF TRIGGER SOURCE FM (B0Virtual Source mode only):

 Similar to TASource AM, but here only the FM modulator is used
 as the trigger signal.  The trigger is taken before the F Hz
 scaling, so that has no effect on the trigger phase.  See the
 BmFrequency Modulation and BtFM Triggering sections of the
 BvVirtual Source Menu for more discussion.


TS
 TRIGGER SOURCE Intern (B0Board mode only):

 This is just like the Internal triggering option on
 conventional oscilloscopes.  The trace starts when the signal
 voltage crosses a value specified by the trigger TlLevel
 control, in the T+Slope direction.  The default Level of 0 will
 probably be fine for viewing signal sources having good
 signal-to-noise ratio, especially if they are simple
 repetitive waveforms like sine waves.

 Real-world response signals, however, often have a lot of
 noise, and typical waveforms may consist of periods of low-
 level waves with a few higher-level peaks.  A good example to
 consider is the typical heart monitor, where there is no
 signal of interest between beats... only noise.  In this case
 you can't set the Level to 0, since noise could trigger the
 trace at random time points.  Instead, you must locate one
 peak that is reliably higher than any instantaneous noise
 peak, and set the Level to trigger on that alone.

 ┌───────────────────────────────────────────────────────┐
 │  CAUTION:                                             │
 │  Do not connect any electrical equipment to a living  │
 │  subject without proper signal GIisolation techniques.  │
 │  A lethal shock could result.                         │
 └───────────────────────────────────────────────────────┘

 For a heart monitor, it happens that there is a convenient
 peak known as the "R wave", but there are many signals that
 are not so cooperative.  If a signal has multiple peaks for
 each response, the trigger point needs to unambiguously select
 the largest one... otherwise, you will sometimes trigger on
 one peak, and sometimes on another.  You can always use
 TdTrigger Delay to align the time axis of the trace if the
 trigger point isn't at the beginning of the part you want to
 view.

 Due to its sensitivity to noise, Internal triggering is not
 very useful if you want to use ATwaveform averaging to reduce
 noise, unless the noise is already much smaller than the peak
 you are triggering on.  Remember that the noise is usually
 present throughout the waveform, so that even if your trigger
 TlLevel is high, it will be jiggled up and down by the noise.
 This will cause the trace to sometimes start earlier or later
 than the specified instant, and may cause an average to smear
 the details of the desired waveform.  Higher noise levels thus
 cause greater smearing in an average when Internal triggering
 is used.

 In RrRTime mode, Intern is the only triggering source option
 (and the menu cursor will bypass it) unless the SGStimulus
 Generator is active.


TE TRIGGER SOURCE Extern (B0Board mode only):

 This is only available in RsSequential mode, not RrRTime.  The
 driver looks at a digital input bit specified in the Board
 control menu, and triggers the sweep when that bit makes the
 transition indicated by T+Slope:  Low-to-high for Pos, and high-
 to-low for Neg.  The trigger TlLevel control is not available.

 External triggering is usually more stable than TSInternal level
 triggering, since it does not depend upon the response
 reaching a certain level.  Noise or response variations thus
 have no effect on triggering action.

 However, this mode does require that you have a mTTTL-type
 digital signal available to trigger from.  This is often the
 case when you are looking at the response to an externally
 generated stimulus.  If the stimulus is initiated by a pulse
 generator, for example, you may be able to get a trigger
 signal from that.  Many laboratory-type oscillators have a TTL
 output that is exactly synchronized with the main output sine,
 triangle, or square wave.

 If your board does not have digital inputs (most sound cards
 do not), Daqarta may still allow external triggering by using
 a printer port specified via a parameter on the ADC line of
 the Ufconfiguration file.  See the H6Help system for your board
 via CTRL-H with the Board menu active, or via the ALT-H
 H5installed module list, to find the proper parameter
 setting and pins to use.

 If there is no digital input capability, Daqarta will not
 allow Extern to be selected.


TG TRIGGER SOURCE Stim (B0Board mode with SGStGen active only):
 (See also TPPulse source, following.)

 With the Stim source, the trigger is initiated by Daqarta at
 the same time the stimulus is generated for the experiment.
 There is thus "perfect" trigger stability.  TdTrigger Delay
 may be used to view events before or after the start of the
 stimulus.  The trigger TaMode and TlLevel controls are always
 blanked when Stim is active.

 Of course, to use this mode Daqarta must generate the
 stimulus.  If a Stimulus Generator module is present in your
 UfDQA.CFG file, the CTRL-StGen option (CTRL-G) will be
 available.  This will allow you to specify complex stimuli on
 up to two analog output channels and 8 digital output lines.
 You may also specify stimuli that alternate on successive
 acquistion sweeps.

 In RsSequential mode, the Stim source is always selected if the
 Stimulus Generator is on, and the T+Slope controls vanish along
 with Mode and Level.  The trigger TcCycle control is available
 to determine the stimulus repetition rate and hence sweep
 repetition rate.

 The only exception to this is if the special Pulse option is
 active in the SGSTIM3A Sync menu (old STIM3 Misc menu), in which
 case the trigger source will be TPPulse even though the
 Stimulus Generator is active.

 In RrRTime mode, Source can be set to Stim when the Stimulus
 Generator module is active, otherwise the cursor will bypass
 the Source option and it will be fixed at TSIntern.  When Stim
 is set all other menu items vanish except TdDelay.  Repetition
 rate is controlled strictly by the length of the stimulus
 cycle set via the Stimulus Generator control menu.

 If there is no Stimulus Generator active, you will not be
 able to select the Stim source.


TP TRIGGER SOURCE Pulse (B0Board mode only):

 There is also a very simple "stimulus generator" available
 even without the SGStGen option:  In RsSequential mode only, most
 boards will allow Daqarta to generate a high or low digital
 pulse output, depending on the T+trigger Slope polarity, for the
 duration of each sweep.

 If your board has no built-in digital outputs (most sound
 cards don't), you may still be able to use a printer port
 output to provide the pulse.  See your board's H6Control Help
 system to find the proper way to do this.

 If the trigger Slope is Alt, the pulse will go high at the
 start of one sweep, and low at the start of the next.  This
 pulse may be used to trigger an external stimulus generator,
 or may be modified by simple circuits or used directly.  This
 makes a good "step function" for transient analyses.

 The trigger TcCycle control is available to control the
 timing of the Pulse sweeps, just as for StGen operation.

 Even if the Stimulus Generator module is available, there may
 be good reasons to use the Pulse option instead.  When the
 StGen module produces digital outputs, it reads stimulus data
 from a buffer and outputs one byte for each input sample
 acquired.  This output happens even if there is no change from
 the last output.  If your board or system has improper
 shielding or layout, the "strobe" for the each output sample
 can be picked up as a low-level "glitch" signal on the input
 line.  With the Pulse option, this contamination is confined
 to the trigger sample only.  Since the response of a
 real-world system will be delayed from the stimulus, it should
 escape the contamination.

 The Pulse option can also be used together with the STIM3A
 SGStGen system, with GDDAC analog outputs produced by the stimulus
 generator module and the normal DigOut option inactive.  To do
 this you need to go to the Stimulus Gen Misc menu page with
 CTRL-Pg and set the Pulse option to On.  Now the main Trig
 menu will show Source Pulse and the Slope options will work as
 for a simple Pulse output.

 The Pulse option can also be activated while using a sound
 card's built-in synthesizer to generate stimuli.  Unlike
 STIM3A, using the synth does not affect the Trigger Source
 options that are available.  However, if the synth is set for
 Burst or Gap stimulus generation, the Pulse output (from the
 LPT printer port, since the sound card lacks TTL outputs) will
 only be active during the Burst or Gap portion of the sweep,
 not for the entire sweep as when the synth is Off or On.

 The Pulse source option will not be available unless your
 board supports it, either directly or via a printer port.


T+
 TRIGGER SLOPE:

 If the trigger TCSource is TSIntern in B0Board mode, or TsMain, TAAM
 or TFFM in Virtual Source mode, then Slope works together
 with trigger TlLevel to specify the trigger point on either
 the rising (Pos) or falling (Neg) portion of the signal, or
 alternating between these (Alt).  A vertical bar at the right
 edge of the trace area indicates both level and slope.  If the
 slope is Pos or Alt, the bar starts from the bottom and
 extends up to the trigger level.  If the slope is Neg, it
 starts at the top and goes down.

 Alt would not normally be used where you want a stable
 waveform display, but occasionally can be helpful to spot
 signal asymmetries.  You can use persistence of vision to view
 both phases superimposed, or you can use A0averaging to see if
 they average to zero.

 If Source is TEExtern (Board mode), then Slope still behaves as
 above but now refers to a digital signal edge... a very steep
 slope.

 With Source set to TGStim, Slope vanishes unless RsSequential
 mode is active and the SGStimulus Generator is inactive, in
 which case it refers to the polarity of the digital trigger
 TPPulse output.  Here Alt can be used with averaging to isolate
 the portions of a response that are unchanged by stimulus
 polarity from those that invert, since the latter will average
 away to nothing.


Tl
 TRIGGER LEVEL:

 When internal level triggering is active, a trigger occurs
 whenever the input signal reaches or crosses the threshold set
 by Level while going in the direction specified by T+Slope.  The
 level control is not available if Source is TEExtern or TGStim.

 A vertical bar at the right edge of the trace area gives a
 quick visual indication of the trigger level.  If Slope is Pos
 or Alt, the bar comes up to the trigger level from below, or
 if the slope is Neg it hangs down to the level from above.
 The bar reflects the trigger level relative to 0Yfull scale
 only, and does not react to changes in Fmtrace magnification.

 For TaAuto mode, the actual trigger level is adjusted after
 each sweep so that it is in the same proportion to the signal
 peak as Level is to full scale.  The bar remains at the Level
 value and does not track the signal peak.

 The default trigger level of zero is a general purpose value,
 since most input signals pass through zero.  But you will
 often get better results by setting a larger value, positive
 or negative, depending upon your signal.  If each waveform
 cycle has multiple zero crossings, a level set at zero could
 trigger on any one of them.  Similarly, if the input spends a
 lot of time near zero, setting the trigger level there will
 result in spurious triggers from noise which goes back and
 forth through zero.

 For example, suppose you are looking at the response of a
 system to a recurring impulse... say a hammer striking a bell,
 or a plucked guitar string.  The response will have large
 oscillations that decay toward zero.  You would set the
 trigger level just below the highest peak in order to avoid
 triggering on lesser peaks or random background noise between
 impulses.


Td
 TRIGGER DELAY:

 Sometimes the region of interest in a signal is not near the
 trigger point in time.  With an impulsive response, you
 probably will want to set T+Slope and TlLevel to trigger near the
 initial peak of the response for stable triggering.  You would
 normally expect to see the next NpN samples after that.  But
 if you want to study low-level phenomena that take place as
 the vibrations die down, you may have to wait for many
 samples.  You don't want to slow the Xfsample rate enough so
 that the entire response duration is visible all at once, or
 you may compromise time resolution and introduce tAaliasing.

 The ideal way to handle this is to slide the trace area later
 in time, to look at events that happen well after the trigger
 while still maintaining a high sample rate.  This is done by
 setting a positive trigger Delay value.  After the trigger is
 detected, Daqarta will wait for the equivalent number of
 Delay samples before starting to collect the N samples for the
 trace, thus sliding the "viewing window" to later times.

 The waveform display 0XX-axis will always show the correct
 time since the trigger sample.  With a spectrum display, there
 is no change to the frequency axis since Daqarta is analyzing
 the same number of samples at the same sample rate... they
 just start at a different time.


T- NEGATIVE TRIGGER DELAY:

 But what if you want to see events that happened BEFORE the
 trigger sample?  If you set the trigger Tllevel to a high value
 to get reliable triggering from a response peak, you will miss
 seeing the leading edge of that peak.  Or consider the case of
 a normal electrocardiogram (EKG), where there are low level P
 and Q waves that precede the large R wave trigger event.

 ┌───────────────────────────────────────────────────────┐
 │  CAUTION:                                             │
 │  Do not connect any electrical equipment to a living  │
 │  subject without proper signal GIisolation techniques.  │
 │  A lethal shock could result.                         │
 └───────────────────────────────────────────────────────┘

 You can look ahead in time with a negative Delay value.  This
 is not really precognition, since you don't get to actually
 see these events before they happen... you get to see events
 that happened before the trigger happened.  In reality,
 incoming data is simply stored to a large circulating buffer,
 and when the trigger arrives it is an easy matter for Daqarta
 to count back the proper number of samples in the buffer to
 get data before that trigger.


Tr TRIGGER DELAY RANGE:

 Daqarta can operate with delays of more than +/- 30000
 samples.  But note that the acquisition time includes all of
 the samples, even those you don't see.  For example, at a 20
 kHz Xfsample rate a delay of 30000 samples adds 1.5 seconds to
 the total time between trace updates.


Tc
 TRIGGER CYCLE (B0Board mode only):

 With TSIntern or TEExtern trigger TCsources, Cycle sets the minimum
 time between valid triggers.  This is analogous to "hold-off"
 in conventional oscilloscopes.  To understand how this might
 be useful, consider a signal that is a repeating tone burst.
 If you want to trigger on the start of the burst, you can set
 the trigger T+Slope and TlLevel to select a point on the rising
 edge of the first cycle of the tone.

 But every other cycle of that burst will also have an
 identical point that could generate a trigger.  If the tone
 burst is longer than the trace, the next trigger will come in
 the middle of the same burst.  If the tone burst is short
 enough that more than one burst is shown in each trace, you
 could get a trigger in the middle of some other burst.  Either
 way you could get a trace that jumps from wave to wave on
 successive sweeps.

 With long tone bursts, set Cycle to a time that is longer than
 one burst but shorter than the time between burst starts.
 Then Daqarta will ignore all triggers until the dead time
 between bursts.  Since there are no triggers there, it will
 wait for the start of the next burst.  With short tone bursts,
 the procedure is similar except the Cycle value should be set
 slightly less than a multiple of the burst cycle time.

 For example, suppose the bursts are 15 msec long with 5 msec
 between them, for an overall burst cycle time of 20 msec.  If
 the Xfsample rate is 20 kHz and NpN is 512, each trace will show
 25.6 msec, ending 5.6 msec into the next burst.  You would set
 Cycle to just under some multiple of 20 msec, like 39, 59, 79,
 etc.  Daqarta will then start looking for triggers only in
 the dead time, and accept the first trigger of the next burst.

 Setting this up usually requires some "fiddling", especially
 in RsSequential mode.  Here the processing time between traces
 is unavailable for trigger detection, so if you set Cycle too
 close to the sweep duration Daqarta can't respond at the time
 you intend... and by the time it can respond the signal might
 be into the next burst.  If you set Cycle too low, the 0sSpeed
 indicator at the upper right above the trace will show SLOW.
 You can then keep increasing Cycle in multiples of the input
 cycle time until the Speed shows SPEC, meaning you are
 actually getting the cycle time you have specified.

 0cScrolling the Cycle value in Sequential mode may be
 unsatisfactory, since the key processing time will add to the
 normal processing time and bias the result... 0ddirect entry
 will probably work better.

 In RrRTime mode, there is no limitation due to processing time,
 so you not only can pick values closer to the end of the
 trace, but you can scroll the TdDelay value as needed.  The
 Speed display will show a GAP value, not SLOW or SPEC.  The
 GAP value will be a constant at low Cycle times, until you
 advance Cycle beyond the sweep time.  Then GAP will start to
 increase and and you will know that the Cycle time is in spec.

 A particularly useful application of Cycle is in adjusting
 RoOverlap in TfFree-Run RrRTime mode.  Normally there is a certain
 amount of trace-to-trace variation in processing time, which
 causes different OVL values on each trace.  By using Cycle set
 at least as long as the slowest processing time, the OVL
 values can be made constant.  This is easily done by eye,
 scrolling the Cycle value while watching OVL.

 When Cycle is set equal to the trace time (the maximum value
 shown on the waveform display X-axis), the display will show
 0 GAP.  One step below that will give 1 OVL, and each
 additional step lower will increase OVL by 1, up until the
 point where Cycle is too short for the procesing time and the
 OVL value starts to jitter.

 You can also try Cycle with signals such as FM, where there is
 no dead period to allow true synchronization.  Here you would
 just set Cycle as closely as possible to an exact multiple of
 the input period.  You won't get a stable trace, but you may
 be able to slow down the rolling enough to be useful.


Tg TRIGGER STIMULUS / PULSE CYCLE (B0Board mode only):

 If the TCtrigger Source is set to TGStim or TPPulse, then TcCycle is
 not available in RrRTime mode.  In RsSequential mode, it is used
 to control the SGstimulus repetition rate by delaying each sweep
 as desired.  Its function is similar to the above "hold-off"
 trigger Cycle, but the value can be set separately.

 The RTime repetition rate is controlled by the length of the
 stimulus cycle set via the Stimulus Generator control menu.

UC
 UNITS CONTROL:

 UuUser Units Toggle
 UmUser Units Control Menu
     UnUnits Name
     UvUnits Factor
 UrRMS Magnitude Spectrum Units
 Y0Y-Axis Calibration Menu
     YtTilt:
       Y3+3 dB/Oct (Pink Correction)
       Y6+6 dB/Oct (Step Correction)
     YCCalibration Files:
         YfTXT2CAL Utility
       YMMic Cal On/Off
       YmLoad Mic Cal File
       YSSpkr Cal On/Off
       YsLoad Spkr Cal File
     YvSave Cal File - Calibrating Microphones
       YkCalibrating Speakers
       YxXfer Cal Files (Transfer Functions)
     YrFull-Scale (0 dB) Reference
     Y1Formulas For Working With Sound


Uu
 USER UNITS (Units) TOGGLE:

 The unshifted U-key toggles between the calibrated 0Yinput range
 in Volts and a custom calibration and unit name specified via
 the UmUser Units control menu (CTRL-U).  The custom calibration
 applies to all incoming voltages, and automatically tracks
 Board menu range changes and Fmtrace magnifications.

 You would use this option to convert from Volts to whatever
 units you are working with, such as mmHg for blood pressure
 or g for acceleration.  You would also use it when you have an
 external preamplifier or attenuator before the input to the
 data acquisition board, to allow Daqarta to report the level
 of the original input signal even if it is still in Volts.

Um
 USER UNITS CONTROL MENU:

 CTRL-U brings up this menu, which consists of only two items:
 Name and Unit/V.


Un ■  Name:

 Hit ENTER with the cursor at Name and you will be prompted to
 enter up to 4 characters on the 0mmessage line to replace the
 default name of 'Unit'.  (The name is limited to 4 characters
 in order to fit in the Y-axis units area.)  This name must be
 the base unit, without a prefix... Hz, Amp, Watt, g, etc.
 If you use mmHg as a base unit, for example, at low ranges
 Daqarta will report mmmHg, µmmHg, etc.  Instead, you should
 just use mHg and adjust the calibration factor appropriately.


Uv ■  Unit/V Factor:

 Unit/V is the calibration factor.  Suppose you had a force
 transducer that put out 1.234 mV per Newton of force, and you
 used it with a preamp that had a gain of 100.  Then the board
 would be getting 123.4 mV/Nt.  The Unit/V value should then be
 set to 1 / 0.1234 or 8.10373 Nt/V.  (The value is retained
 internally with about 10 significant digits, even though only
 5 show in the menu window.)  If you set the Name to 'Nt', then
 on a range with 100 mV full scale, hitting the U-key will
 change the Y-axis label to 'mNt' and the graduations would be
 labeled up to 800, with the axis extending slightly beyond.

Ur
 RMS MAGNITUDE SPECTRUM UNITS (U-RMS):

 The SHIFT-U key allows the F0magnitude spectrum display to be
 changed between peak-reading and rmRMS units.  This key is
 disabled in other modes (F2Y-log, S0Sgram, or waveform).

 RMS inactive:
 When U-RMS is inactive (default), the vertical axis
 corresponds to the zero-to-peak sine wave amplitude.  This is
 the same method used to denote the Virtual Source BlLevel
 values.  With a sine wave source (Virtual Source or B0Board),
 you can read this value directly from the waveform trace...
 it's just the peak value of the sine wave.  If you then flip
 to the magnitude spectrum (F0FFT), you will see that the
 spectral peak reaches this same value.  (If it doesn't, try
 adjusting the source frequency until you get a maximum
 response, or else just toggle the WtWindo option on with the
 W-key.)

 This mode is useful for directly determining spectral
 component amplitudes of a particular waveform.  Each peak
 amplitude represents a sine wave of that same amplitude that
 is part of the overall signal.  This representation is more
 common for mathematical analysis than for engineering work,
 where RMS measurements relate to equivalent energy.

 RMS active:
 When U-RMS is active, the magnitude spectrum Y-axis and cursor
 readouts change to read rmRoot Mean Square values.  The Y-axis
 label will have RMS appended to it, whether the units are
 Volts or Uuuser Units.  All that this mode actually does is
 multiply all values by 0.7071 to convert sine wave amplitudes
 to RMS.  The RMS method is useful in engineering work because
 it allows comparisons of different waveforms based upon their
 equivalent energy.  When the waveforms are all sinusoids (like
 the individual components of a line spectrum), then this is
 not so important.  However, RMS is the standard method for
 reporting magnitudes, so you will often need this for
 compatibility.

 Also, if you are combining several lines using the rsRoot-Square
 method to get a total energy, it is logical to use RMS.


Y0
 Y-AXIS CALIBRATION MENU:

 This menu is only accessible from F0FFT mode, not waveform or
 S0Sgram.  The settings you make in this menu apply only to the
 power spectrum (F2Y-log) display mode, even though you can
 access the menu from magnitude mode.

 Furthermore, they only affect the displayed data, not the raw,
 M0trace memory, or fofile data.  This makes it easy to see the
 effects of a correction or calibration by simply toggling it
 on and off.  You can change to a different calibration at a
 later time, such as if you find after an experiment that the
 system has changed and needs recalibration.

 However, any currently active calibration or correction will
 be included if you save the data as a text file (O1OutTx), and a
 notation will appear in the file header indicating what was
 used.  This is useful when preparing data for publication or
 off-line analysis.


Yt ■  TILT (+3 or +6 dB/Oct):

 This is a rather specialized option.  The default setting here
 is 'Flat', which means the option is inactive.  Hitting ENTER
 with the cursor at this option will toggle to '+3 dB' and
 additional ENTERs will toggle to '+6 dB' and back to 'Flat'.


Y3 ■■  +3 dB/Oct (Pink Correction):

 The '+3 dB' setting tilts the power spectrum upward at +3 dB
 per octave.  This is intended for spectra collected using a
 'pink' noise stimulus, which can be created with the SGSTIM3A
 Advanced Stimulus Signal Generator, or via a built-in source
 on some professional equipment (like recording consoles).

 Pink noise has has a spectrum that falls at -3 dB per octave,
 which is more representative of real-world signals like music
 than the flat spectrum of a 'white' noise stimulus.  Sound
 reproduction systems are thus generally designed to handle
 much more power at lower frequencies; if you used a flat
 stimulus spectrum you would need to run at very low overall
 power to avoid burning out the high frequency drivers, but
 then the low frequencies might be swamped by background
 sounds.

 However, with a pink noise stimulus the 'perfect' system
 response would be a line that falls at -3 dB per octave, just
 like the stimulus.  It is very difficult to judge how close a
 line comes to a particular slope, but it is trivial to compare
 it to the horizontal trace grid to tell if it is flat.  Hence,
 the '+3 dB' Tilt option applies this correction for you.

 This does not change your raw data in any way.  The Tilt does
 not get saved with the data when you save to trace memory or
 to a file, with one exception:  It is applied to O1text files,
 which you can use for publication or presentation.


Y6 ■■  +6 dB/Oct (Step Correction):

 The '+6 dB' setting has an even more specalized use than the
 above pink noise compensation.  Yes, it COULD be used to
 compensate for 'brown' noise, which falls at -6 dB per octave.
 If that's what you need, you are all set.

 But the intended use is for quick system response measurements
 which might otherwise require a slow frequency sweep or a long
 noise average.  The principle behind this is that the spectrum
 of an impulse response gives the frequency response of the
 system.

 If you actually try that, you need a very narrow pulse, only
 one sample wide.  You can experiment using the SGSTIM3A Pulse
 Wave option.  If you only want to view the raw pulse, and its
 spectrum, you can use the 0BDEMO driver.  But there is a simple
 trick you can do using the BwSquare wave of the BvVirtual Source:
 Set the Bffrequency very low, such that you see less than a
 half-cycle on the trace.  There should be only a high-level
 line.  Then adjust the Tdtrigger delay (and/or the slope) to get
 only the trailing edge of this high phase.  Flip to F0FFT mode
 and you will see a perfectly flat spectrum, except for a big
 DC component.

 However, there is not a lot of energy in this narrow pulse,
 and it may be hard for some types of sources to switch on and
 back off this quickly.  A big voltage step, on the other hand,
 can have a lot of energy and is very easy to create.  The
 derivative of a step function is an impulse function, so it is
 perfectly "legal" to apply a step to the system and take the
 derivative of the response to get the impulse response of the
 system.

 The '+6 dB' setting allows a simpler approach, making use of
 the fact that a derivative applies a +6 dB per octave tilt to
 a spectrum.  Here, we simply take the spectrum of the raw
 waveform, then apply the tilt to the spectrum.  If the
 original spectrum was from a step response, the result will be
 as though it was from an impulse response.  You thus see the
 frequency response of the whole system on every step.

 But this trick has one drawback compared to a true derivative,
 and that is due to the nature of the FFT.  Consider the step
 response of a low-pass filter:  It rises up to a DC level and
 remains there for as long as the step lasts.  But the FFT
 assumes that any set of input samples is just one cycle of a
 repeated waveform, as though the trace were "wrapped" from the
 right end to the left.  In the case of the low-pass step
 response, the effective waveform would appear as a high-level
 baseline with large negative spikes... more like a distorted
 impulse reponse than a step response, and definitely not
 something we can use here.

 Had we taken a true derivative of the step response first, the
 above problem would largely vanish.  The derivative would give
 the true impulse response, and as long as that response was
 over by the end of the sample set, we could simply take an
 ordinary FFT.  Of course, a true impulse response (or a step
 response) goes on forever, in theory.  But once it has decayed
 below one bit of resolution, we can safely ignore the
 remainder.  And in fact once we are familiar with a particular
 system we may not even need to let it decay this much.

 So, for this "trick" method to work, you must make sure that
 the step response has pretty much decayed away before the end
 of the trace.  That will never be true with low-pass systems,
 but it will be true for high-pass or bandpass responses...
 depending on the X0sample rate.  You will need to slow the rate
 (or increase the Npnumber of samples) until you get the whole
 response on the trace.  Then flip to the power spectrum and
 apply the +6 dB Tilt to see the frequency response.

 One tip:  Depending upon particulars of your test setup, you
 may need to adjust the Tdtrigger delay to eliminate any time lag
 before the actual response begins.  You can usually tell that
 you need to do this because the raw waveform trace will show
 a flat portion before the sharp transient of the response.
 Just add anough trigger delay to elimiate that flat part.

 Caution:  Step and impulse tests work on the assumption that
 the system is linear throughout.  This is NOT the case for
 many real-world systems, such as electromechanical and
 biological systems, if you push them hard enough.  In addition
 to amplitude limitations like saturation or clipping, which
 can be troublesome even with conventional frequency sweep
 responses, some systems are susceptible to slew limit
 problems.  This is where the system has some maximum rate of
 change that it can't exceed; if you drive it with a step or an
 impulse, it can't change fast enough to respond to the
 vertical edge, so it does the best it can and instead gives
 (typically) a constant slope:

       ┌───────────
       │               Input Step
    ───┘
            _______
          /
    ____/              Slew-limited Output


 This is NOT the same as the exponential step response you
 might get from a linear system, and if you drive the system
 into slew limiting your resultant frequency response will
 not be the same as a conventional slow frequency sweep
 response.

 This means that you should avoid or use extreme caution with
 step or impulse methods for most kinds of basic research,
 where you are exploring the response of an unknown system.
 These methods are best suited to monitoring known systems,
 such as in production testing of loudspeakers.  When you
 are testing against a known response, even a certain amount
 of nonlinearity may be perfectly acceptable if you can still
 detect changes from the standard response.

 As with Y3Pink correction, Step correction does not affect the
 raw data, only the display, and is included in files only for
 text output (O1OutTx).


YC ■  Calibration Files:

 Daqarta allows you to supply a YMMic Cal file that describes
 the frequency responses of a microphone or other input
 transducer.  When active, the inverse of that response is
 applied to the spectrum display to show the true input
 spectrum, independent of the microphone.  Furthermore, this
 calibration file allows data to be displayed in absolute units
 like GaSPL.

 Likewise, you can supply a YSSpkr Cal file that describes the
 frequency response of a speaker or other output driver.  This
 is intended for use in calibrating a "working" microphone from
 a given "reference" microphone, and for determining transfer
 functions of systems such as probe tubes.

 Note that there is nothing in Daqarta that limits its use to
 sound transducers; 'Mic' and 'Spkr' can be thought of as
 'Input' and 'Output', and you are free to use whatever type of
 transducers you want, with whatever units are appropriate for
 the transducer.

 When a file has been loaded, the 'Cal File' header is
 replaced with the file name so you can tell which microphone
 or speaker curve is in effect.  You may have as many files as
 needed, but only one of each type can be loaded at a time.
 However, either type (or both) may be replaced by an 'YxXfer'
 type, which contains a unitless transfer function.  So, for
 example, you could load a Mic Cal file as usual, then load the
 transfer function of a probe tube in place of the Spkr Cal
 file.  (The 'Spkr' will change to 'Xfer'.)  The combined
 effect will be to correct for that mic used with that probe
 tube.

 Calibration correction is applied only to the display data and
 to text output (O1OutTx) files.  The file name is also included
 in the text file header for later reference.

 Calibration files may be created from text using the YfTXT2CAL
 utility, or from a measured response using the YvSave Cal File
 option.


Yf
 ■■■  TXT2CAL Utility:

 A simple utility called TXT2CAL allows you to easily create
 calibration files with any text editor.  However, you must
 first obtain the calibration information for your particular
 microphone.  This is typically provided by the manufacturer
 for laboratory-type condenser microphones like those from B&K
 or ACO Pacific.  You may also be able to obtain calibrated
 mics from third-party service providers.

 If you can borrow a calibrated reference microphone, you can
 use it with its YMMic Cal file to create a YSSpkr Cal file using
 the YvSave function, and use that to calibrate another mic to
 serve as your own reference.

 Calibration data is usually provided as a response curve of
 mic sensitivity versus frequency.  Sensitivity may be given
 in 'dB re: 1 V/Pa' or 'dB re: 1 V/µbar', or in millivolts
 per Pascal or per Newton/meter².  There may be a graph with
 the flat part of the response shown at 0 dB, and a notation
 indicating that 0 dB is relative to some sensitivity of the
 above type.

 As an example, consider a B&K model 4134 pressure-response
 condenser microphone.  This has a typical sensitivity in
 the range of 10 mV/Pa, which is equivalent to -40 dB relative
 to 1 V/Pa.  Since 1 Pascal (which is 1 Newton/meter²) equals
 10 microbar, this is also equivalent to -60 dB re: 1 V/µbar.
 (See "Y1Some Formulas For Working With Sound", and also
 the GaGlossary entry on dB.)

 To use TXT2CAL, you first create a text file listing the
 response of the mic at various frequencies.  It also gives
 the units and absolute sensitivity.  Use any ordinary text
 editor for this (DOS Edit is fine), or a word processor with
 the file saved as 'text'.

 An example file BK4134.TXT is supplied with Daqarta, and is
 reproduced here for reference:

   ┌──────────────────────────────────────────────────┐
   │ ;BK4134.TXT                                      │
   │ ;B&K model 4134 microphone calibration.          │
   │                                                  │
   │  SPL    ;Label for Y-axis (4 chars max)          │
   │                                                  │
   │ ;Mic sensitivity is -40 dB re: 1 V/Pa.           │
   │ 134     ;94 dB SPL @ 1 Pa - (-40 dB re: 1 V/Pa)  │
   │ ;Start this line with 'k' if Freq values in kHz. │
   │ ;Freq       dB                                   │
   │ 0           -60       ;1st point MUST be 0 Hz.   │
   │ 5           -4.1      ;Ascending Freq order.     │
   │ 15          0         ;Any Freq spacing.         │
   │ 8000        0         ;Any number of points.     │
   │ 15000       1.0                                  │
   │ 20000       0                                    │
   │ 50000       -12.5                                │
   └──────────────────────────────────────────────────┘

 To create BK4134.CAL from this file, enter:
    TXT2CAL BK4134.TXT
 at the command line prompt.  Note that you MUST supply the
 file extension, normally .TXT but you can use any other
 extension as long as the file is a true ASCII text file.
 The original file will be unchanged.

 You may place comments in the text file for your own
 reference.  A comment begins with a semicolon; the rest of
 that line will be ignored.

 The first active line should give the absolute units to be
 shown when using this file, usually SPL.  This will appear at
 the head of the Y axis and in O1OutTx headers.  There will
 always be a 'dB' added just ahead of whatever name you supply
 here, which may be up to 4 characters.

 The second active line gives the sensitivity.  Here you may
 need to do a little math, since the value is the SPL needed to
 produce 1 Volt (RMS) from the microphone.  (If you use some
 other absolute units than SPL, it is the number of those units
 for 1 Volt output.)  For most mics, the math is pretty easy
 once you know that 1 Y1Pascal = 94 dB SPL.

 For our example mic with a sensitivity of -40 dB re: 1 V/Pa,
 when we get a 1 Volt output we must be getting 40 dB more than
 1 Pa, or 94 + 40 = 134 dB SPL.  If you will be entering
 response curve data points (below) copied from a curve that
 has a 0 dB baseline, then enter 134 on this line.

 Alternatively, if your entered curve uses the actual
 sensitivity values in dB relative to 1 V/Pa, enter 94 here.
 (But then be sure to enter the minus sign for each curve
 point, eg -40, etc.)  If the values are in dB re: 1 V/µbar
 (eg -60, etc) , enter 74 here (94 - 20).

 On the lines following this, give the frequency and response
 data points.  Use a separate line for each frequency, and give
 the frequency in Hertz, followed by the response in dB on the
 same line.  You MUST begin with the response at 0 Hz; make up
 something reasonable if you don't have that information.  The
 0 point is needed because TXT2CAL interpolates to create the
 actual file data, and this insures that it can interpolate as
 low as necessary.

 If you wish to give frequency values in kHz instead of Hertz,
 add a line that begins with 'k' (without apostrophes).  Place
 that line after the sensitivity line but before the first kHz
 value.  If you want to give initial frequencies in Hertz and
 later ones in kHz, you can insert the 'k' line after the last
 Hertz line.  The kHz mode stays in effect for the rest of the
 file.

 You don't need any regular spacing between frequencies, but
 the points MUST be in ascending order.  The simplest approach
 is to consider the response curve to be made up of straight
 line segments, and enter a point for the end of each segment.
 The sample file shows frequency and dB points separated by
 spaces, but you can use tabs or commas as well.  You can even
 put everything on one line, as long as each frequency is
 followed by its proper dB value, but this makes it much harder
 to proof-read or modify.

 One tip:  TXT2CAL will create a .CAL file containing levels
 for 512 equally-spaced frequencies, including 0, up to the
 maximum frequency that you provide.  When Daqarta uses this
 file, it will interpolate as needed to adjust the frequencies
 to match the current sample rate.  If the sample rate is
 greater than twice the highest frequency in the file, then
 extrapolation is used... but that process is much less likely
 to agree with the true mic response.  So the text file should
 include the highest frequency you expect to use, so that only
 interpolation will be needed.

 On the other hand, there is no point to including frequencies
 considerably higher than you will use, since that only reduces
 the resolution (though not much, with 512 points in the
 curve).  If your particular mic has a very irregular response,
 such as a probe tube mic, and you only expect to use it at low
 frequencies, then you can limit the curve to maximize
 resolution.  You can create one low-frequency, high-resolution
 .CAL file, and another high-frequency, reduced-resolution file
 for other uses.

 Also note that TXT2CAL requires the input text file to be less
 than 65536 bytes.


YM
 ■■  Mic Cal On/Off:

 You can only toggle a calibration file on after it has been
 Ymloaded; otherwise, the cursor will not move to this item.
 Conversely, when the Mic Cal file is active (and this item is
 shown highlighted) you can't load another one until you toggle
 this off.

 When Mic Cal is active, the 0YY-axis header will change to
 'dB SPL' or whatever units you entered in the text file for
 YfTXT2CAL.  For example, if you had entered 'Pa', the header
 will change to 'dB:Pa', which is short for 'dB re: 1 Pa'.

 The default full-scale reference at the top of the axis will
 change from 0 to 120 dB.  Any changes you make with the YrFS Ref
 control or the SHIFT-Pg keys while Mic Cal is active will be
 stored separately, such that you can toggle Mic off and on and
 the full-scale value will change between the most recent
 settings in each state.

 If F3PSD mode (SHIFT-P) is selected while Mic Cal is active, the
 normal 'dB PSD' header will still appear.  It will not show
 'SPL', but it should be clear from the actual dB values that
 Mic Cal is active since they will typically be positive values
 instead of negative.


Ym
 ■■  Load Mic Cal File:

 When you hit ENTER at this control, you will be prompted for a
 file name.  The default is '*.CAL', so if you just hit ENTER
 again you will see a list of all the .CAL files from which to
 choose.  Once the file is loaded, the 'Cal File' header will
 be replaced with the name of the file.  It stays available
 during that session until replaced by another.  You can toggle
 it on and off using the above YMMic Cal control.

 Besides Mic Cal files, you can also load YxXfer Cal files to
 this location, but not YSSpkr Cal files... they must be loaded
 at the YsSpkr Load location below.


YS
 ■■  Spkr Cal On/Off:

 You can only toggle a calibration file on after it has been
 Ysloaded; otherwise, the cursor will not move to this item.
 Conversely, when the Spkr Cal file is active (and this item is
 shown highlighted) you can't load another one until you toggle
 this off.

 A Spkr Cal file is typically used to calibrate a microphone.
 It holds the absolute output levels of a sound system at the
 location of the reference mic used during file creation.
 If you then remove the reference mic and replace it with an
 unknown mic, leaving the sound system unchanged, then with the
 Spkr Cal file active you can obtain the response of the
 unknown mic.  That response can then be YvSaved as a new YMMic Cal
 file.

 When Spkr Cal is active, the 0YY-axis header will change to
 'dB:V/Pa' if the original Mic Cal file header was 'SPL' or
 'Pa'.  This is short for 'dB re: 1V/Pa', meaning the reference
 for 0 dB is a mic sensitivity that produces 1 V output when
 1 Pa of pressure is measured.  (Normal mics will typically
 have values 30 to 40 dB below this.)

 If the text file for Yfcreating the original Mic Cal used
 some other units, such as 'µbar', then the header will show
 those units in the same format, such as 'dB:V/µbar'.


Ys
 ■■  Load Spkr Cal File:

 Hitting ENTER at this control prompts you for a file name,
 with the same '*.CAL' default as for YmLoad Mic Cal File.
 Once the file is loaded, the 'Cal File' header will similarly
 be replaced with the name of the file.  It stays available
 during that session until replaced by another.  You can toggle
 it on and off using the above YSSpkr Cal control.

 Besides Spkr Cal files, you can also load YxXfer Cal files to
 this location, but not YMMic Cal files... they must be loaded
 at the Mic Load location above.


Yv
 ■  Save Cal File - Calibrating Microphones:

 The purpose of this control is to allow creation of Cal files.
 There are 3 types of Cal files that can be created:  YMMic,
 YSSpkr, and YxXfer.  They all use the same standard format, which
 requires FFT F2Y-log mode with NpNpoints = 1024.

 The basic approach is to obtain the frequency response of a
 system (mic, sound source, probe tube, etc) and while that
 response is displayed just hit Save.

 Typically, you will first need a reference Mic Cal file that
 you create manually by using the YfTXT2CAL utility with data
 from a curve supplied with the mic.  When that mic and file
 are in use, the trace will show the absolute sound level
 seen by the mic.

 Next, you place the mic in a fixed position in a sound field,
 and use that setup to obtain the frequency response of the
 sound source.  The best way to do this is with the SGSTIM3A
 signal generator Sweep Step option, which was created for
 just this sort of application.  Using the StepN mode, this can
 be set to step through all the lines of the spectrum one by
 one.  If you then use AfSpectral Averaging in A^Peak mode, with
 ASSweeps set to Continuous (by entering 0), you can capture the
 frequency response by hitting P0Pause after one or more complete
 scans of the spectrum.

 This gives an "ideal" response that avoids some problems with
 a continuous sweep:  As you may already know, unless an input
 frequency is exactly the same as one of the FFT spectral
 lines, energy will appear as "tfleakage skirts" at nearby lines.
 In that case, no single line on the trace will show the true
 amplitude of the input.  But with a frequency sweep, things
 are even worse than simply getting a reduced response level:
 Since the input frequency is constantly changing, the amount
 of leakage is changing as well, so the final peak scan shows a
 ragged or "bouncy" response.  Use of a W0window function reduces
 this problem; a WfFlat-Top window greatly reduces it, but
 doesn't cure it.  The Sweep Step approach eliminates it
 completely.

 The STIM3A Help system contains a detailed discussion of how
 to use the Sweep Step option this way.  If is also possible
 to use the older STIM3 generator with a K0Key Macro that uses
 the KLLoop option to advance the frequency after each FFT, but
 it would be cumbersome.

 There are other ways to get the frequency response of a sound
 system, such as by using a Y6pulse or step response.  You might
 also consider using white or Y3pink broadband noise.  These
 methods may be appropriate under certain circumstances, but
 they also have certain drawbacks.  You will often need a
 considerable amount of averaging, and you still won't get as
 smooth a reponse as the Sweep Step approach.  (Note that for
 the pulse or step responses you would use AWwaveform averaging
 prior to toggling FFT mode, while for the noise responses you
 would use ordinary Afspectral averaging.)

 Whatever method you choose, once you have the response of the
 sound system displayed, hit the Save control and you will be
 prompted for a file name to save it as.  When the file is
 saved, the file type will be set automatically, based upon the
 current active calibration mode:  If Mic is active, the saved
 file type will be Spkr, and vice-versa.  If both are active
 (or neither) an YxXfer file will be created.  If an Xfer type
 is active in place of either Mic or Spkr, it has no effect
 upon the type saved.  So with Mic plus Xfer active, for
 example, the Save type would be Spkr.

 The Y-axis header used in the file will be based upon the
 active header at Save time.  For instance, if Mic is active
 with a 'dB SPL' header, then the saved Spkr file header will
 (when later used alone) show 'dB:V/Pa', and if that file is
 then used to calibrate another mic, that saved Mic file will
 again result in the original 'dB SPL' header.

 Once you've used Mic Cal to save a Spkr Cal file, you keep
 the entire physical setup exactly the same but replace the
 reference mic with the one you want to calibrate.  It is very
 important that this be in EXACTLY the same location and
 orientation as the reference mic, exposed to exactly the same
 sound field.

 Turn off the old Mic Cal, and load and activate the Spkr Cal
 file you just saved.  Repeat the same Sweep Step peak scan
 (or other frequency response approach), and you will see the
 new microphone response.  Then just Save that and you're done.
 If you have a lot of mics to calibrate, it only takes a few
 minutes per mic after the initial set-up and Spkr Cal
 procedure.

 It's OK to use the same Spkr Cal file for all the mics you
 calibrate in a single session, as long as you keep the
 physical setup the same.  But it's probably a good idea to
 create a new one for subsequent sessions, or even during the
 same session if you have to change anything.

 If you will be doing a lot of mic calibrations, you should
 arrange some sort of fixture to hold each securely in place,
 maintaining the exact positioning from unit to unit.

 The same basic calibration approach applies to free-field or
 coupler calibrations.  You may be able to rig up a calibration
 coupler using a wide-range headphone in a sealed chamber, with
 a port to hold the desired type of microphone.  (Commercial
 systems typically use a condenser microphone as a coupler
 driver, especially for calibrating other condenser mics.  But
 besides being very expensive, such mics require high-voltage
 driving signals when they used this way.)

 Allow your sound system to run for a few minutes before you
 create the Spkr Cal file, since some speakers change
 characteristics slightly as they warm up (woofers with butyl
 rubber surrounds, for example).

 Be sure to set the sample rate at least as high as the highest
 you expect to use the mic with, so that you get the widest
 frequency response.  Daqarta's calibration system interpolates
 between points, but extrapolation to higher frequencies is
 much less likely to give accurate results.

 If you are using free-field calibration, you should give some
 thought to standing waves and room resonances.  In theory,
 they shouldn't make any difference with this exact replacement
 approach.  But in reality, the stronger the peaks and dips in
 the sound field, the more likely that something will change
 when you replace the reference mic with the unit being
 calibrated.  You should try moving the reference mic around a
 bit and repeating the response scan before settling on a final
 position; if you get big response changes for small position
 changes, it's a warning that you may have problems later on.

 You can try placing the mic relatively close to the speaker
 (a few inches away, in the "near field"), to reduce the room
 effects.  A heavy blanket draped over the combined speaker /
 mic setup may also help to absorb room reflections.  One
 problem with using conventional multi-way speakers (with
 separate woofers and tweeters, etc) this way is that when you
 move the mic close to the woofer, it's missing more of the
 tweeter sound.

 Note, however, that it is not important to have a really flat
 sound field response at the microphone position, since the
 calibration system automatically corrects this.  It's more
 important to reduce deep response notches than to worry about
 a gentle slope, even if it causes an ultimate drop of 20 dB
 or more relative to the main response.

 Nonetheless, it is possible to use the drivers of a multi-way
 system individually, although it is a bit cumbersome.  You
 first perform a separate calibration for one driver, creating
 a separate Spkr Cal file.  When you get to the part where you
 are displaying the frequency response of the unknown mic, you
 save it as a text file with O1OutTx (ALT-O) instead of the
 normal Save Cal File control.  Then move the setup to the next
 driver and again use the reference mic to create another Spkr
 Cal file, and use that with the unknown mic to create another
 text file.

 While you are doing the above, you should pay attention to the
 best frequency range of each driver, usually where you get the
 biggest response.  If you already know the ranges, you don't
 really need to run the Sweep Step over the rest of the
 spectrum.

 Now use a text editor and manually combine the text files to
 create a single file using only the best range of each driver.
 You will need to remove or comment out (with a semicolon) the
 normal OutTx header information, and add some items for the
 YfTXT2CAL utility.  You will probably want to use 'SPL' for the
 header, and 94 dB for the reference value.  Since OutTx
 typically shows frequencies in kHz instead of Hz, you will
 also need a line that starts with 'k' before the first
 frequency in the list.  TXT2CAL will interpret all frequencies
 after that as kHz, and create a composite Mic Cal file.


Yk
 ■■  Calibrating Speakers:

 You can use a YMMic Cal file to calibrate a speaker.  A typical
 speaker response curve is given in SPL measured at 1 meter
 from the speaker with a 1 VrmRMS drive voltage.  Most modern
 power amps have a flat frequency response over the range of
 interest for driving speakers, but you may want to check that
 for your setup.  In addition, if you are using a sound card
 to drive the amp (or using the card's built-in amp) you may
 find that the output response falls off too much for use at
 low woofer frequencies.

 But there is a catch:  You can't measure the response of the
 output unless you know the response of the input, and sound
 cards like early Sound Blaster 16 models had poor low-end
 input response.  So you may want to check that first.  See
 'Measuring Input Frequency Response' in the SB16 Help system
 for a way to avoid this chicken-and-egg problem by using a
 pulse generated by the printer port.

 If you find that you can't create a flat output response for
 speaker calibration, you may be able to correct it using the
 YxXfer Cal option.

 When you are driving the speaker with 1 VRMS at all the needed
 frequencies, set up your calibrated mic at 1 meter and run a
 response curve with Mic Cal active, just as if you were going
 to create a YSSpkr Cal file as Yvdescribed above.  This response
 will be shown in SPL, and since you've set 1 Volt and 1 meter,
 it's just what you need.  You can save it as a text file using
 OutTx; just remember that the labels will only say 'SPL', and
 you will have to remember (or add manually with a text editor)
 that this is 1 Volt at 1 meter.


Yx
 ■■ Xfer Cal Files (Transfer Functions):

 A 'transfer function' of a system is essentially its frequency
 response:  It shows the output level that results from a fixed
 input level as its frequency is varied.  The response is
 expressed as a ratio of output per input, so a unitless dB
 scale is appropriate.

 A microphone calibration curve is a special kind of transfer
 function for a 'transducer', which converts energy from one
 form (sound pressure) to another (electrical voltage).  A
 microphone transfer function is thus typically expressed as
 the output in Volts for a constant sound pressure in Pascals,
 as 'dB re: 1V/Pa', which Daqarta abbreviates to 'dB:V/Pa'.

 You can use the YMMic Cal (and YSSpkr Cal) files with other types
 of transducers, just by supplying the appropriate units in the
 original text file for YfTXT2CAL.  Daqarta assumes that this
 file is for a transducer that converts an input into Volts
 (since that is what the ADC input actually sees), but it
 doesn't matter what the original units are:  You could just as
 well use acceleration, velocity, position, or photons, for
 example.  You can then calibrate other input transducers of
 the same type through use of an intermediate Spkr Cal file,
 which is assumed to have been created using the given input
 transducer and Cal file with an appropriate output driver.

 But unlike transducers, many systems keep the same type of
 energy from input to output.  For example, an electrical
 filter may be used to reduce an unwanted range of frequencies
 in its electrical transfer function, or a probe tube for a
 microphone may have unavoidable dips and peaks in its
 acoustical transfer function.  Since the units are the same on
 input and output, the proper axis label is simply 'dB' to show
 a relative change.

 Suppose you have a collection of different probe tubes for use
 with one or more microphones.  Each tube has its own response,
 which must be considered along with the response of the mic
 when making any measurement.  You would set Mic Cal with the
 proper microphone file, and replace the Spkr Cal with an Xfer
 Cal file for the probe tube.  Then the display would show the
 true sound level at the entrance to the probe tube, instead
 of at the membrane of the microphone.

 To create the Xfer Cal file, use the same setup as for doing
 microphone calibrations, as discussed under YvSave Cal File.
 After creating a Spkr Cal file for the sound setup, you load
 that and activate it along with Mic Cal.  You should get a
 perfectly flat response from this combination, since you used
 that mic to create the Spkr file in the first place.  Now add
 the probe tube to the mic, and the new response will show only
 the effect of the probe tube, independent of the speaker or
 mic.  Hit Save and (since both Mic and Spkr are active) this
 will be saved as an Xfer Cal file type.

 Now if you want to use the probe to make measurements, load
 that file in place of the Spkr Cal file and activate it along
 with Mic Cal.


Yr
 ■  Full-Scale Reference:

 This control affects only the screen display.  It simply
 changes the dB value corresponding to the 0 dB default
 position at the top of the Y axis.  The possible values
 for this top position depend upon the current F2log range,
 with the increments being the same as the label steps.
 The steps are 20 dB for log ranges 140 dB full-scale and
 above, becoming progressively smaller for lower ranges, down
 to 1 dB steps for log ranges of 10 dB full-scale and below.

 This control allows use of a sensitive log range that only
 shows a narrow portion of the total signal range, but can
 be "slid" up or down for a magnified view of any details.

 You don't have to use the menu control; the FmSHIFT-Pg keys
 allow you to scroll the value directly.

 The default setting here is 0 dB, but whenever YMMic Cal is
 active a separate setting is used with a default of +120 dB.
 The two settings are completely independent.  This allows you
 to look at large positive dB SPL values when Mic Cal is
 active, and negative dB values (relative to 0 dB full scale)
 otherwise.  There are similar independent settings for YSSpkr
 Cal, and for the condition when both Mic and Spkr are active.

 Note that you can use FsSHIFT-HOME to go to a preset log range
 and full-scale reference, and return via SHIFT-END.


Y1
    ┌───────────────────────────────────────────────┐
    │                                               │
    │    SOME FORMULAS FOR WORKING WITH SOUND:      │
    │                                               │
    │      1 Pascal (Pa)  =  1 Newton/m²            │
    │                                               │
    │                     =  10 dyne/cm²            │
    │                                               │
    │                     =  10 µbar                │
    │                                               │
    │                     =  94 dB SPL              │
    │                                               │
    │        Sound Power Level (GaSPL):               │
    │                                               │
    │        SPL = 20 * log(P / P0)                 │
    │                                               │
    │  where P is the measured pressure and P0 is   │
    │  a reference pressure in the same system of   │
    │  units:                                       │
    │                                               │
    │      P0  =  20 µPa  (or µNewton/m²)           │
    │                                               │
    │          =  0.0002 µbar (or dyne/cm²)         │
    │                                               │
    │  This reference pressure corresponds to a     │
    │  sound wave in free air with an intensity     │
    │  (power) I0 = 10^16 Watts/m², which is used   │
    │  as the reference for intensity in dB:        │
    │                                               │
    │      Intensity = 10 * log (I / I0)            │
    │                                               │
    └───────────────────────────────────────────────┘



A0
 AVERAGER:

 ATTheory
 AOOperation

AT
 AVERAGER THEORY:

 AwWaveform Averager Theory
    AiInterference
    AnNoise
    AWWaveform Averaging
    AtAverager Triggering
    ARArtifact Rejection
        AMManual Artifact Skipping
        AhManual Remote Artifact Skipping
        A5Automatic Remote Artifact Rejection
    AeExponential Averaging
    ADDither: Noise + Averaging = Resolution
    AHHistogram - Amplitude Distribution
    APHistogram - Post-Stimulus Time (PSTH)
 AfSpectral Averaging
    A^Peak "Averaging"

Aw
 WAVEFORM AVERAGER THEORY:

 Real-world signals are often contaminated with noise, which is
 any unwanted component of a more-or-less random nature.  Often
 the noise component may be much larger than the desired
 signal, completely obscuring it when the waveform is viewed.
 Waveform averaging is a way to extract the desired signal from
 a noisy background.  Of course, if there is a way to reduce
 the noise directly, that is usually (but not always!) a better
 approach.


Ai INTERFERENCE:

 In addition to random noise, there may be other unwanted
 signals of a more periodic nature, known as interference.  The
 most common interference source is the 60 Hz power line in the
 US (or 50 Hz in many other countries).  There may also be
 interference due to harmonic multiples of this generated by
 fluorescent lights, motors, and so forth.  Spurious signals
 may arise from nearby radio transmitters as well.  These are
 all best dealt with by arranging to reduce them directly
 wherever this is feasible, either by avoidance (like using
 incandescent lighting near the experiment and removing
 appliances from the area) or by shielding out radio
 frequencies with a metal cage around the experiment.  In
 addition, careful attention must be paid to equipment
 grounding and isolation.

 Beyond direct reduction, interference may also be reduced by
 many of the same techniques used for random noise.  We will
 thus lump them together for discussion, noting any differences
 where appropriate.


An NOISE:

 Noise is typically due to many simultaneous uncorrelated
 processes acting at once, each adding a small component to the
 whole.  In mechanical systems, small thermal motions due to
 absolute temperature may mask the ability to resolve a desired
 motion.  In acoustics, random motion of air molecules driven
 by temperature or turbulent air flow may impinge on a
 microphone diaphragm and generate noise.  In electronic
 circuits, random thermal motion of charged particles in
 semiconductors and resistors causes noise currents to flow.
 In biological systems, there is always a level of background
 activity due to the many neurons or muscle cells that are
 always firing even when not specifically stimulated.

 Often, if you look at a fine enough scale, you can find that
 the noise is made up of components that would look periodic if
 seen in isolation, and it is only the summation of many of
 these in an unsynchronized fashion that gives the overall
 random nature.  This is like the difference between hitting
 one note on a piano, versus having a whole roomful of pianos
 with squirrels scurrying along the keyboards.

 mFElectronic filters are one common approach to noise rejection,
 often used in combination with other methods.  If you know
 that the signal of interest has a limited range of frequency
 components, you may be able to use filters to reduce all other
 frequencies that are only contributing to the noise, but not
 to the signal.

 For example, in biological recordings of neural signals, you
 might use a filter that reduces all components below 300 Hz
 and above 3000 Hz if you know that the neural signal that you
 want is strongest around 1000 Hz.  This same filter might be
 inappropriate for recording heart rate, since at 60 beats per
 minute the fundamental rate would be only 1 Hz, which would be
 blocked by the filter.

 ┌───────────────────────────────────────────────────────┐
 │  CAUTION:                                             │
 │  Do not connect any electrical equipment to a living  │
 │  subject without proper signal GIisolation techniques.  │
 │  A lethal shock could result.                         │
 └───────────────────────────────────────────────────────┘

 However, as well as removing unwanted components, filters may
 modify the shape of the desired signal through the process of
 phase shift.  This phenomenon is where different frequency
 components of the signal are delayed by different amounts as
 they pass through the filter.  All else being equal, filters
 with sharper transitions (cut-offs) between accepted and
 rejected frequency regions have more severe phase shift.

 Also, you can't use filters to reduce noise in the same
 frequency region as the signal.


AW WAVEFORM AVERAGING:

 This takes advantage of the fact that random noise is just
 that:  Random.  So if we can arrange to repeat our desired
 signal over and over, we expect that the noise components will
 be different on each repetition, while the signal remains the
 same.  If we can synchronize the waveform display to the
 signal we will see (if the noise is not TOO large) our desired
 signal waveform... but it will be boiling and churning due to
 the noise, as though drawn with fat, fuzzy lines.  What we
 would really like to see is a thin line that goes through the
 middle of the fuzzy line... the average value.

 The averager does just this.  It averages the waveform on a
 point-by-point basis, and displays the average value at each
 point.  The more repetitions (or "sweeps") that are averaged
 together, the closer the final waveform will get to the true
 noise-free waveform.

 This "synchronous" or "coherent" averaging should not be
 confused with "smoothing", which provides cosmetic improvement
 in a display but does not reveal the true underlying waveform.
 In fact, smoothing destroys detail and transient signal peaks
 because it does not distinguish between true signal and random
 noise.

    EXPERIMENT:
    Make sure you are in the Waveform display mode by toggling
    the F0FFT mode off if it was active.  Activate the Virtual
    Source by toggling the B0Board source off, if needed, and
    bring up its associated Bvcontrol menu with CTRL-B.  Set:
        BbBits = 16
        BwWave = Sine
        BfFreq = 100 Hz or so, to get a few cycles displayed
        BlLevel = half of full scale
        BnNoise = 0 or some low level
        BmFM = 0
        BaAM = 0
    You will also need to make sure that TtTrig is active, which
    you can toggle with the T-key.  If you don't see a nice
    stable sine wave, check the TmTrig menu (CTRL-T) and make
    sure that:
        TaMode = Auto
        TsSource = Main
        T+Slope = Pos
        TlLevel = 0
        TdDelay = 0
    Now, in the BvVirtual Source menu, raise the Noise level up
    to half of full scale and observe the waveform grow
    fuzzier.  Use CTRL-A to go to the A3Averager menu and set:
        AmMode = True
        ASSweeps = 256
        AlArtifact = +/- 0Yfull scale
        ArRemote control = OFF
    Hit the A1Avg key and watch the fuzziness grow smaller
    as the 0Csweeps count (shown at the upper right above
    the trace) increases.

 One thing you will notice is that most of the improvement due
 to averaging comes at the start.  In fact, the reduction is
 proportional to the square root of the number of sweeps, so in
 order to reduce the noise by half, you need to quadruple the
 sweeps.  That is one reason why Daqarta offers only
 power-of-two sweep selections:  You would be hard-pressed to
 see any difference between, say, 100 and 128 sweeps, whereas
 this way it is easy to double or halve the reqested sweeps by
 simple 0cscrolling.

 The diminishing benefits put a practical limit on averaging,
 since you eventually get to a point where you can't wait
 around for twice as long just to get the noise reduced by
 another 30%.  (0.707 is the square root of 2.)  Even if you
 are willing to go eat lunch while the averager runs, you may
 be limited by the experiment itself:  Conditions may
 deteriorate, a subject may get fidgety, or the phenomenon
 being studied may not persist.

 Averaging is very often the only technique available for
 extracting a signal that is buried in noise.  Averaging makes
 it possible to record from simple scalp electrodes and see the
 tiny neural potentials evoked by an acoustic click or tone
 burst SGstimulus, where without averaging you would see nothing
 but noise.  The source of the potentials, deep in the brain,
 must compete with all the other brain activity.  But the other
 activity that is unrelated to the auditory response slowly
 averages out to zero, and only the auditory evoked potential
 remains.  This allows hearing tests to be given to infants or
 animals who could not otherwise "raise one finger/paw if you
 can hear this tone".

 ┌───────────────────────────────────────────────────────┐
 │  CAUTION:                                             │
 │  Do not connect any electrical equipment to a living  │
 │  subject without proper signal GIisolation techniques.  │
 │  A lethal shock could result.                         │
 └───────────────────────────────────────────────────────┘


At AVERAGER TRIGGERING:

 Averaging is only beneficial if you can keep each sweep
 aligned with the desired signal.  The best way to do this is
 to have the averager start each sweep in response to the same
 stimulus that is to be presented to the subject or system
 under test.  There are several ways to arrange this:
 ■   The stimulus and the averager may both be started by some
     external pulse.  For auditory evoked potentials, a pulse
     generator may be used to drive a headphone to produce a
     series of clicks, usually first passing them through a
     band-pass filter that provides some control over the
     frequency content, and an 0aattenuator to control the sound
     level.  The same pulse generator may have a second output
     that provides an identically-timed mTTTL pulse to the
     averager TEExternal Trigger input.
 ■   A closely-related method is to have the the stimulus
     generator also generate a TTL trigger pulse at the start
     of each stimulus.  For example, a pulse generator may be
     used to trigger a device called a "mttone switch" or "tone
     gate", which produces tone bursts by gating an external
     tone in a controlled manner.  If the tone switch needs to
     delay the gate pulse slightly while waiting for the next
     rising zero crossing of the tone, it will delay its TTL
     sync output pulse to match.  This sync output is what you
     would use as the averager External Trigger, insuring that
     each stimulus is identical and each sweep is exactly in
     sync with it.  You couldn't use the initial pulse for
     this because of the variable delay needed to synchronize
     to the tone.
 ■   The computer itself can generate the stimulus, in which
     case it maintains perfect alignment.  Daqarta offers two
     general approaches to this:
     ■    A SGStimulus Generator module can be used to generate
          tone bursts or other analog stimuli via GDDACs if they
          are present, or pulses from a digital I/O port or
          even a commandeered printer port if that is all that
          is available.
     ■    A simple TPpulse that lasts the duration of the sweep
          can be provided from any available digital I/O port
          without the presence of a Stimulus Generator module.
          This can be used to provide a step stimulus for
          deriving an impulse response, or can trigger some
          more elaborate external stimulus as in filtered
          clicks.

 ┌───────────────────────────────────────────────────────┐
 │  CAUTION:                                             │
 │  Do not connect any electrical equipment to a living  │
 │  subject without proper signal GIisolation techniques.  │
 │  A lethal shock could result.                         │
 └───────────────────────────────────────────────────────┘

 If the signal being studied does not result from a stimulus
 that you generate directly, there may still be ways of getting
 a trigger.  If the signal includes a transient peak that rises
 well above the noise, you may use TSInternal level triggering by
 setting the threshold TlLevel appropriately.  This may be needed
 when studying spontaneous natural phenomena such as nerve
 discharges.

 ┌────────────────────────────────────────────────────────┐
 │  CAUTION:                                              │
 │  If you are using level triggering and the trigger     │
 │  portion of the signal fades or drops out, you want    │
 │  the averager to stop and wait for a valid trigger.    │
 │  For this reason TaAuto-level triggering is NOT          │
 │  RECOMMENDED for averaging use.  In this mode the      │
 │  level could self-adjust so that it triggers on        │
 │  background noise or the wrong portion of the input    │
 │  signal, contaminating the average.                    │
 └────────────────────────────────────────────────────────┘


AR ARTIFACT REJECTION:

 The real world is rarely as cooperative as we would like.
 If the desired response is produced "some of the time",
 interspersed with periods of spurious responses or
 "artifacts", we would like to average only the good stuff and
 skip the trash.  A typical situation is where an evoked neural
 response is contaminated by occasional bursts of muscle
 activity when the subject fidgets.

 ┌───────────────────────────────────────────────────────┐
 │  CAUTION:                                             │
 │  Do not connect any electrical equipment to a living  │
 │  subject without proper signal GIisolation techniques.  │
 │  A lethal shock could result.                         │
 └───────────────────────────────────────────────────────┘

 If the noise bursts are larger than the desired response, we
 can reject them based upon a simple test:  We collect the data
 for each sweep, but before adding it into the average it is
 scanned to see if any part of the data goes above a positive
 threshold or below a negative threshold.  If so, that whole
 sweep is thrown away and not counted toward the total number
 of sweeps requested.  If the subject is very restless, this
 may greatly extend the averaging time (which will no doubt
 make the subject still MORE restless!), but there may be cases
 when this is the only way to get useful results.

 Setting the Althreshold limits is a matter of judgement and
 experience, since there is a tradeoff between accepting too
 much artifact and rejecting too much signal.  The best way to
 start is to simply observe the raw 0SLive signal and note where
 the usual desired peaks reach in comparison to occasional
 bursts where there is obvious artifact.  Then set the
 thresholds by eye to be just beyond the normal range.

 Try a few averages at these settings, then at tighter and
 broader ranges.  Compare not only the resulting waveforms, but
 also the time it took to get them.  If tighter thresholds give
 substantially better results but at a big increase in time,
 you will need to decide if this is acceptable or if another
 setting is more appropriate.  It is rare to find that the same
 settings work best in all subjects, but you may at least find
 a good compromise as a starting point.  Remember too that time
 spent tweaking the artifact limits is time that could be used
 to collect data at tighter settings.


AM MANUAL ARTIFACT SKIPPING:

 In some cases, the artifacts may not be distinguishable based
 only on level.  If they can be detected by eye on a 0SLive
 trace, if they persist over several sweeps, and if the sweep
 repetition rate is slow enough to allow manual intervention,
 then you can "ride" the GREY PLUS key to simply A+skip averaging
 during the rough spots, and resume when things look better.
 Tedious, perhaps, but better than no data at all.  To use this
 method, you don't want to view the average in progress while
 you are watching for artifacts since they will not be very
 evident when averaged with a lot of good data.  Instead, you
 must view the raw A\instantaneous input using the backslash
 (\-key).


Ah MANUAL REMOTE ARTIFACT SKIPPING:

 Sometimes you may need to be near the experiment in progress
 to determine when conditions are suitable for averaging.  If
 your experiment is not conveniently located next to your
 computer keyboard, a separate digital input line can be used
 as an Araverager remote control to replace the Grey Plus skip
 key.  You can thus have a hand-help switch on the end of a
 long cable, so you can turn the averager on and off from the
 experiment location.  For tips on constructing a manual remote
 control, see mRREMOTE CONTROL SWITCH CONSTRUCTION.


A5 AUTOMATIC REMOTE ARTIFACT REJECTION:

 If you are unfortunate enough to be plagued by artifacts that
 can't be detected by simple thresholds, you might still get
 lucky (or tricky!) and devise a scheme to detect them by some
 other means.  If you can provide Daqarta with a mTTTL signal to
 indicate the presence of artifacts, you can use the Averager
 ArRemote Control to effectively ride the Grey Plus A+skip key
 automatically.  For example, you might have some sort of
 motion sensor that indicates when a subject is moving around,
 and use that as a cue to probable muscle activity artifacts.
 Your cleverness in devising an appropriate scheme may make the
 difference between data and no data.

 ┌───────────────────────────────────────────────────────┐
 │  CAUTION:                                             │
 │  Do not connect any electrical equipment to a living  │
 │  subject without proper signal GIisolation techniques.  │
 │  A lethal shock could result.                         │
 └───────────────────────────────────────────────────────┘


Ae EXPONENTIAL AVERAGING:

 Sometimes you may just want to monitor an experiment or
 process without having discrete averages that must be started
 and stopped.  But if the signal has a lot of noise, you can't
 really see what's going on.  Exponential averaging provides a
 continuous average which looks like the normal averager
 output, only "live".  It is a weighted average of multiple
 Sweeps, with recent data having more influence on the result
 and very old data being ignored.  In this way, you can get a
 better view of the desired signal, at a cost of slow response
 to a sudden change.

 The ASSweeps value in AmExponential mode is thus a time constant
 that tells not only how much averaging is going on, but also
 how slowly the results can respond to changes.  Low values
 give quick response but less averaging effect.

 Notice that when you first begin an average in this mode, the
 "exponential" effect can't start until the selected Sweeps
 have arrived, so initially the display is just like AmTrue
 average mode.  The 0Csweeps counter will show 'nn Wave', where
 'nn' will count up from 0 just as in True.  But when the
 selected Sweeps value is reached, the counter will stop
 increasing and the 'Wave' will change to 'WavX' to show that
 Daqarta is in eXponential operation.

 Since the Exponential mode doesn't stop when it reaches the
 selected Sweeps, you leave this mode only by toggling A1Avg
 off manually.

AD
 DITHER:  NOISE + AVERAGING = RESOLUTION:

 Although we are seldom happy about the need for averaging to
 reduce the noise in a signal, we can actually gain a hidden
 benefit from this situation in the form of increased bits of
 resolution.  Although it may sound incredible at first, the
 addition of noise to an otherwise clean signal is sometimes
 done deliberately to take advantage of this phenomenon, known
 as "dither".  Here's the scoop:

 For simplicity, consider an GAADC such that each output value
 represents an input span of 1 millivolt, and that the output
 changes state at the exact center of each span.  Thus, if we
 slowly raised the input voltage from 0 to 1 mV we would see a
 step in the output value from 0 to 1 just as we crossed the
 0.5 mV point.

 Now suppose we apply a small "sawtooth" wave of +/- 1 mV to
 this ADC.  In the crude graph below, we see 32 samples of
 this input voltage and the corresponding ADC output values.
 The output certainly does not look much like the input:

      mV           INPUT VOLTAGE:
    +1.0 ......./\.......................
              /   \                     /
    +0.5 .../......\................../..
          /         \               /
     0   ............\............/......
                      \         /
    -0.5 ..............\....../..........
                        \   /
    -1.0 ................\/..............


                  ADC OUTPUT VALUES:
     +1     ┌──────┐                  ┌──
            │      │                  │
      0  ───┘      └───┐      ┌───────┘
                       │      │
     -1                └──────┘



 If we used a waveform averager to average together 16 sweeps
 of this signal, it would do so by adding the output values of
 each sweep into 32 sample "bins" that hold the running totals
 for the averager.  To find the actual average waveform, the
 total in each bin would be divided by 16.  From the graph, we
 can see that the first few bins would receive only zeroes from
 each sweep, so the totals would be zero and the average would
 be zero as well.  Then the next several bins would receive 1s
 from each sweep, so the totals in those bins would reach 16,
 and when we divided by 16 we would get back the original 1s.
 In other words, the averager output would look exactly like
 the GAADC output of any individual sweep.

 But now suppose we add random noise to the input signal.
 At any point in time, the total waveform will be the original
 sawtooth voltage for that sample, plus a random voltage
 between -1 mV and +1 mV.  The key fact here is that each sweep
 gets DIFFERENT random values at each time point.

 Consider a time point where the sawtooth passes through 0 mV.
 On some sweeps we will now find a voltage as high as +1 mV or
 as low as -1 mV due to the added +/-1 mV noise.  If all the
 random noise voltages are uniformly distributed, we expect
 that on about half of the sweeps the instantaneous noise at
 that time point will fall between +0.5 mV and -0.5 mV, which
 means the ADC output would remain at 0.  About a quarter of
 the time we would get noise above +0.5 mV and the ADC output
 would be 1, but this would be balanced by the approximate
 quarter of the noise voltages that fell below -0.5 mV and
 caused the ADC output to be -1.  So, if we averaged 16 sweeps
 together we would still expect the average value to be
 somewhere around zero for this time point.

 Next, consider a time point where the sawtooth passes through
 +0.5 mV before noise is added.  When +/-1 mV of noise is
 present, the voltage at this time point may go as high as +1.5
 mV or as low as -0.5 mV.  We expect that about half of the
 time the added noise will be between -1 mV and 0, so the total
 will be +0.5 or less and the ADC output will be 0 also.  And
 about half of the time the noise will be between 0 and +1 mV
 so the total will be above +0.5 and the ADC output will be 1.
 In every 16 sweeps we thus expect about 8 zeroes and 8 ones,
 giving 0.5 for the average ADC output value.  Notice that we
 could not obtain this value without averaging, since the ADC
 alone can only produce integer outputs.

 This same approach applies at all time points:  Where the
 original waveform is at 0.875 mV, the waveform plus noise will
 run between -0.125 mV and +1.875 mV.  The fraction of sweeps
 where we expect it to be below +0.5 would be proportional to
 the range from -0.125 to +0.5, which is 0.625 mV.  This is
 5/16 of the total range of 2 mV, so we expect about 5 out of
 every 16 sweeps to give an ADC output of 0.

 The waveform plus noise would be between +0.5 and +1.5 mV
 about 1/2 of the time (1 mV out of 2) so we expect the ADC
 output to be 1 in about 8 out of 16 sweeps.  The range from
 +1.5 to +1.875 is 3/16 of 2 mV, so we expect an ADC output of
 2 on about 3 out of 16 sweeps.  The average ADC output would
 thus be
    5/16 * 0  +  8/16 * 1  +  3/16 * 2  =  14/16  =  0.875
 which is just the waveform value we wanted.

 Since we are averaging 16 values together to find each
 averaged output, we effectively have 16 times as many possible
 values as the direct unaveraged ADC output.  This is
 equivalent to 4 more bits of ADC resolution, which allows us
 to "fill in the gaps" of our rather coarse original ADC
 waveform.  Notice that this process DEPENDS on the noise to
 make it work.  By adding differing voltages on different
 sweeps, it produces a distribution of ADC output values whose
 average approaches the actual noise-free input more closely.

 You can use the BvVirtual Source to demonstrate this dither
 effect for yourself.  Initially, set:
    BbBits = 16
    BwWave = Ramp
    BfFreq = 100 Hz, or as needed to see a few Ramp cycles.
    BlLevel = 1 mV, or some small fraction of 0Yfull scale.
    BnNoise = 0
    BmFM = 0
    BaAM = 0

 Use Fmtrace magnification to enlarge the waveform for easy
 viewing.  If you don't see a stable wave, make sure TtTrig is
 toggled on, and that the TmTrigger menu is set to:
     TaMode = Auto
     TsSource = Main
     T+Slope = Pos
     TlLevel = 0
     TdDelay = 0

 Now reduce the Bits setting until you see nothing but a square
 wave, typically at around Bits = 7.  At this point the low
 Level input signal is just barely activating the "least bit"
 of the Virtual ADC.  Since there is no Noise, this waveform
 will not be changed by A1Averaging... try it and see.

 UnP0Pause after the average, then change Noise to the same value
 you set for Level, and you will see a really trashy waveform.
 It's hard to think of this as an improvement, but hit the
 Average key and a ramp wave magically begins to appear.  Sure,
 it's got a little noise on it... but notice that even for as
 few as 16 or 32 ASaverager sweeps the noise is less than the
 original least bit steps.  Try the Sine wave as well.  (And
 think about why the Square wave doesn't improve.)  Experiment
 with different averager sweeps versus Virtual Source Noise
 versus Level to get a good feel for what is going on here.

 To show the amazing power of dither, you can take this game to
 extremes and reduce Bits to 1.  You will need to reduce the
 trace magnification, since now the Virtual ADC puts out only
 two values, equivalent to positive full scale for any positive
 input and negative full scale for any negative input.  Yet
 when we average as before, we STILL get the proper waveform.

 This is pretty significant stuff:  We took the worst possible
 ADC (only a single bit) and greatly improved it by adding
 NOISE, which we normally try to avoid like the plague.  Yet
 with the "sugar" of averaging, we turned two lemons into
 lemonade!

 Don't think that dither is only a cute parlor trick:  It's
 not.  In fact, it is used in one form or another by all
 commercial digital music recordings.  The need for this was
 discovered on some of the earliest CDs, where a final piano
 note decayed into a nasty buzz before becoming silent.  The
 problem was that when the sound decayed sufficiently, it was
 only activating a few bits of the 16-bit ADCs and thus
 producing grossly distorted "chunky" waveforms.  Since our
 ears provide a certain natural averager action, it was found
 that adding a tiny bit of noise could render the obnoxious
 distortion completely inaudible at the small cost of a
 slightly increased (and easily tolerated) background hiss.

 You can use the SGSTIM3A DAC Bits control to create a dramatic
 audio demonstration of this.  Check out the discussion under
 Bits in the STIM3A Help system.  (CTRL-G brings up the STIM3A
 control menu, then move to Bits and hit H4CTRL-? to bring up
 the relevant section.)

 So, how does knowledge of dither apply to your data
 acquisition system?  Consider a situation where you want to
 record a low-level physiological signal that is already
 contaminated with random noise, such that averaging is needed.
 The presence of natural dither may mean that moving from a
 12-bit ADC board to a 16-bit board would not result in any
 useful advantage, and that in fact even an 8-bit board may
 already be overkill.

 The thing that needs to be considered here is DYNAMIC RANGE:
 How large are the largest signals compared to the smallest
 that you want to record?  You may need to add gain to the
 signal, either by changing ranges on the ADC board or via an
 external preamp, to make use of the full range of the ADC.
 If, after you have done this, the inherent noise is still
 much bigger than the resolution of the ADC, then you don't
 need any more bits.

 But determining the optimum system gain can be tricky, since
 real-world situations often have unexpected level changes
 and ARartifacts.  If the nature of a typical artifact is such
 that it produces a transient baseline shift but does not
 otherwise corrupt the data, then it would be reasonable to
 include it in an average instead of tripping the artifact
 Alrejection limits.  You would thus need to know the maximum
 anticipated baseline shift in order to set the gain properly.
 In cases like this, having more bits of GAADC resolution may
 allow you to have a bigger safety factor in your calculations,
 possibly allowing faster accumulation of averages with less
 of the sweeps rejected by the artifact limits.


AH
 HISTOGRAM - AMPLITUDE DISTRIBUTION:

 This is not really an "average" in the conventional sense, but
 rather a statistical record of the individual values in a
 signal.  The X-axis shows all the possible values, similar to
 the Y-axis in a conventional waveform display.  The histogram
 Y-axis shows the percent of input samples that had each
 corresponding value.

 You can think of the histogram operation as a row of bins that
 incoming samples are sorted into, according to value.  Each
 bin holds only the count of samples that go into it, not the
 values themselves.  If one sample value appears more often
 than others, its bin will end up with more counts.

 For example, suppose the input signal is a square wave, such
 that all samples are either +5 or -5 Volts.  The histogram
 will show this as two vertical lines, at -5 and +5.  Since
 half of the samples go into the +5 bin and half into the -5
 bin, we expect each line to have a height of 50%.

          SQUARE WAVE                   HISTOGRAM

  +5 ─────┐    ┌────┐           50%
          │    │    │                   │       │
   0      │    │    │                   │       │
          │    │    │                   │       │
  -5      └────┘    └────       0 ──────┴───────┴──────
                                       -5   0  +5


 Now consider a ramp or triangle; each value in its amplitude
 range appears an equal number of times, so the histogram is a
 rectangular plateau... but at a much lower level, because the
 values are spread over more amplitude bins.  This is called a
 "uniform" distribution of values, for obvious reasons.

 But how high is this uniform plateau?  If NpNpoints is set for
 1024 samples per sweep, Daqarta allocates 1024 bins to sort
 them into, so the width of each bin is 1/1024 = 0.09766% of
 the full-scale range.  If the ramp signal range exactly equals
 the full-scale range, we'd expect one sample in each bin, so
 that the plateau would extend the entire width of the trace at
 just under 0.1%.  If the ramp covers only half the range,
 there would be a central plateau that was only half the width
 of the trace, but it would be twice as tall as before, nearly
 0.2%.

 If we set Npoints to 512, Daqarta allocates 512 bins for data,
 but they are still equally spread over the full-scale range.
 Each bin is twice as wide, but since we are collecting only
 half as many samples per sweep the counts per bin are the
 same, and likewise the percentages.  The same reasoning holds
 for Npoints = 256.  So the plateau is the same height
 regardless of the Npoints setting.

 But look what happens with our original square wave:  With
 1024 samples per sweep and 1024 bins, there are 512 samples in
 the -5 bin and 512 in the +5 bin.  With 512 samples the bins
 are twice as wide, but that extra width does not result in any
 additional samples from the adjacent empty regions; there are
 only 256 samples in each of the two active bins, so the height
 is half that of the 1024-sample case.  For 256 samples per
 sweep, the two active bins are only one-forth the 1024-sample
 heights.

 So if the the input distribution is very narrow, the Y-axis
 percentage calibration is only correct for 1024 points.  The
 other Npoints settings give the proper readings only for
 broader distributions, which fortunately includes the vast
 majority of the interesting cases.  What's more, the overall
 shape is often more important than the exact scaling anyway,
 so it will rarely be necessary to even consider this issue.

 You may want to experiment with the BvVirtual Source, or with
 the SGSTIM3A signal generator, to get a feel for the way the
 histogram works, and to get a sense of what to expect from
 different types of signals.  Just go to the A3Averager menu
 and select Hist, then hit the A1A-key.  In particular, you
 should observe that the Virtual Source BnNoise source (or the
 STIM3A White source) has a uniform distribution, just like a
 triangle or ramp wave.

 Due to the fact that most distributions of interest are fairly
 broad, they will have rather low percentage values.  Just use
 the normal PgUp control to Fmmagnify the trace.  The histogram
 magnification setting is maintained separately from that for
 the ordinary waveform display; hitting P0unPause afterward will
 return to the waveform display with its original
 magnification.

 You may prefer to view histograms with the vertical bar trace
 L0line style (Line2), since they are unipolar like the spectrum
 display.


AP
 HISTOGRAM - POST-STIMULUS TIME (PSTH):

 This is not really a waveform average, but rather an average
 of threshold events.  The X-axis shows the same time span as
 a conventional waveform display.  At each sample time-point,
 the Y-height shows the percent of sweeps that contained a
 threshold event at that point.

 Threshold events are like trigger events; they are set via the
 T+Slope and TlLevel of the Intern or Main TcTrigger Source,
 even if you are actually using TEExtern or TGStim triggering to
 start each sweep.  For the default Pos Slope and 0 Level, a
 simple repetitive wave will show a series of 100% spikes, one
 at each positive zero-crossing:

              ┌────┐    ┌────┐    ┌────┐    ┌────┐
   WAVE       │    │    │    │    │    │    │    │
              ┘    └────┘    └────┘    └────┘    └──


          100%
              │         │         │         │
   PSTH       │         │         │         │
            0 ┴─────────┴─────────┴─────────┴───────
                          Time ──

 You may prefer to view the PSTH with the vertical bar trace
 L0line style (Line2), since it is unipolar like a spectrum
 display.

 The interpretation of the above is that for every sweep, the
 threshold zero-crossings always come at the same places.  If
 there is trigger jitter, then instead of the individual lines
 there may be broader (but lower) peaks showing a distribution
 of the threshold times.

 The PSTH will allow you to quickly pick out timing problems.
 If the input is a pulse train, this will easily show skipped
 or extra pulses.

 You can use the BvVirtual Source or the SGSTIM3A signal generator
 to experiment with the PSTH option.  Just go to the A3Averager
 menu and select PSTH, then hit the A1A-key.  With a "pure"
 waveform, you should see a row of vertical lines as shown
 above.  As you add Bnnoise, there will be trigger jitter that
 will broaden and reduce these peaks.

 Note that with the Tatrigger mode set to Auto, any non-zero
 value for Level will be scaled by the peak amplitude of the
 input on each sweep, before being used to determine threshold
 events for that sweep.  This may be useful to compensate for
 drifting signal strength; with Level at 50%, for example, the
 threshold will track at half the current input peak level.

 One typical use for a PSTH is in electrophysiological studies.
 Neurons typically have some baseline "spontaneous" firing
 rate; with no stimulus applied, the PSTH would show a
 low-level random pattern, because there would be no
 correlation between the neural discharge spikes and any
 stimulus signal.

 Now if a stimulus is applied, such as a tone burst that
 repeats once per sweep, the neuron will be much more likely to
 discharge at the start of the stimulus.  It won't necessarily
 fire at the start of each and every stimulus, since it may
 have fired spontaneously just before that, and not yet
 recovered.  But there should be a big peak in the PSTH at the
 stimulus time and shortly thereafter.

 During the time the stimulus remains on, the neuron may show
 an elevated firing rate.  The PSTH would show a lower-level
 region after the onset peak, decaying after the stimulus
 offset.

 For some acoustic neurons, the discharge spikes from an
 ongoing tone are more likely to occur at a certain phase of
 the tone.  The particular phase won't be known in advance,
 since there will be acoustical and neural delays between the
 stimulus generator and the neural spike mechanism.  But this
 phase-locking behavior will show up as a series of peaks or
 clumps in the ongoing portion of the PSTH.

 In a typical experiment you would use the SGSTIM3A stimulus
 generator to produce the tone bursts.  To see phase-locking in
 the response, you will need to give the same exact tone burst
 on each sweep, so you will want to use the STIM3A Static mode.
 Remember that you must be in TSIntern trigger mode, not TGStim, to
 set the trigger TlLevel for the neural spike response.  After
 everything is set, you may want to go back to the STIM3A menu
 while you run the PSTH, since you can then use the
 alternate-color stimulus display at the top of the trace to
 compare to the response PSTH.


Af SPECTRAL AVERAGING:

 This doesn't reduce noise, it finds the average value at each
 frequency.  To see this, set up the Experiment suggested for
 AWWaveform Averaging and flip to F0FFT mode.  (You may need to set
 the CTRL-A Spectrum A3Averager menu, since the values set for
 the Waveform Averager menu are separate.)  Initially, make
 sure F2Y-log and FxX-log (ALT-X) are off.  The trace will show a
 line at the frequency and approximate amplitude you set in the
 BvVirtual Source menu.  There will also be a broad "floor" due
 to the noise, at a much lower amplitude.  It will be very
 busy.  Hit the A1Avg key and you will see it resolve to a
 smoother line at the average value of all the original bouncy
 values.  With many sweeps averaged, this line will tend to
 become perfectly flat.

 Since the F0spectrum shows magnitudes, the average value is not
 zero.  This makes sense, since if we imagine the FFT response
 at any given frequency to be due to an equivalent input sine
 wave at that frequency, then even if the next sweep contained
 that exact sine wave but with opposite polarity, it would
 still have the same frequency and magnitude... but the two
 waveforms would cancel out.  To see this dramatically, set the
 noise to 0 and set T+Slope = Alt in the TmTrigger control menu.
 The trace will alternate between two sine waves of
 opposite polarity, so the waveform averages exactly to zero.
 But with spectral averaging there is no change!

 More relevant to real applications, try toggling TtTrig off with
 the T-key.  The waveform trace will show an unsynchronized,
 "rolling" Free-run sine wave, and waveform averaging will
 bring this to a very low value... just as it would for any
 unsynchronized noise.  But spectral averaging shows hardly any
 difference between Trig and Free modes.

 Think of the FFT spectrum as similar to what your ear does
 when listening to a tone:  You detect the loudness of the
 tone and its pitch, but not (usually) its polarity.  A guitar
 string sounds pretty much the same whether plucked on an
 upstroke or downstroke, and rapidly plucking up and down
 doesn't sound softer than plucking only down or only up.

 The noise generator in Daqarta puts out equal energy at all
 frequencies, when averaged over enough sweeps.  But this
 average level is much lower than the BnNoise level shown in the
 BvVirtual Source menu.  Why is this?  There are two reasons:
 First of all, the Noise level setting is a misleading value
 for these purposes.  It reflects the peak waveform values that
 you actually see on the waveform trace, just like the main
 wave level shows the peak values of the sine wave.  But
 whereas a sine wave hits its peak values each cycle, the same
 is not true for the noise.  It hits its peaks only rarely, so
 the equivalent energy is not the same.  (A better way to
 compare levels of different sources like sine versus noise
 would be to use rmRMS measurements.)

 The second reason the noise level seems low is that the energy
 is evenly distributed across all frequencies, not concentrated
 into one like the sine wave.  So of course any one of those
 frequencies will not have the same level as the sine.

 Further, the average noise level changes if we use a different
 Npnumber of points N for the FFT.  With more points, the width
 of each frequency band is narrower, so it holds less total
 energy... but there are more bands, so the total remains the
 same.  See F3PSD for more thoughts about this.

 Although spectral averaging doesn't actually reduce the
 average noise level, it makes the spectrum display look less
 noisy by reducing the trace-to-trace variablity.  This can
 actually help detect a signal in a noisy background, if the
 trace-to-trace noise peaks are taller than the signal peak,
 yet the signal peak happens to be larger than the averaged
 noise floor.  This ability may be important in cases where you
 can't synchronize to the signal in order to use the true noise
 reduction afforded by synchronous Awwaveform averaging.


A^ PEAK "AVERAGING":

 This isn't really an "averager" mode at all.  In this mode,
 Daqarta records the peak value at each frequency, for as many
 ASsweeps as you have specified.  A special Continuous sweep
 setting allows this to proceed indefinitely.

 A typical use for Peak mode is in determining how much noise a
 vehicle makes as it passes by at a fixed distance.  You just
 start the "average", wait for the vehicle to pass, and then
 hit P0Pause to see the result.  You don't usually need to
 worry about precise timing because the vehicle will be much
 louder than anything else at most frequencies, so the peak
 will only reflect that one source.

 This is also ideal for looking at explosions, animal calls,
 music recordings, or anything else where you might want to
 know about spectral peaks but the source is not well-behaved
 or repeatable enough to use with a normal Titrigger.

AO
 AVERAGER OPERATION:

 A1Average Start
 A+Average Skip
 A\Average \ Instantaneous Toggle
 A3Averager Control Menu
     AmMode
     ASSweeps
     AlArtifact Limits
     ArRemote Control
 AaAverage Add and AsAverage Subtract
 A2Joint Average Start
    J\Joint Average Spectrum \ Wave Toggle
 A4Joint Averager Control Menu


A1
 AVERAGE START (Avg):

 The unshifted A-key begins a new average in the current mode
 (wave or spectrum), using the parameters set in the
 corresponding A3averager menu invoked by CTRL-A.  The 0Sstatus
 message changes from LIVE to AVG, and the Avg option remains
 highlighted as long as the average is in progress.

 ■   When the requested ASsweeps have been acquired, the Avg
     highlight is removed, the P0Pause option is invoked, and the
     status message changes from AVG to DONE.
 ■   Hitting the A-key while an average is in progress will
     abandon it and return to 0SLive operation.
 ■   Hitting Pause will temporarily halt the average, until
     hit again to unPause.  While Paused, the partial average
     may be saved to a O0file or to M0trace memory just as if it
     was Done.  The Avg highlight will remain to show that the
     average has not been completed, and that it will resume as
     soon as the Pause state is removed.  The Avg key will be
     disabled during Pause... you must first unPause if you
     wish to abandon the average.
A+ ■   The GREY PLUS key can be used to temporarily suspend
     averager operation for any reason.  The trace will revert
     to instantaneous mode and the the status will show SKIP.
     You can use this when you notice AMtransient artifact
     activity, or any temporary condition that might compromise
     the overall average.
 ■   If a REMOTE CONTROL is installed and has been enabled via
     the ArRemote option in the Averager control menu, then it
     can function just like the Grey Plus key noted above,
     either Ahmanually via a mRhand-held control, or A5automatically
     with the proper sensor and interface.
A\ ■   Backslash (\-key) will toggle between the average and the
     instantaneous view while the average is in progress, in
     case you want to peek at the incoming raw data.  The
     0Sstatus message will change from AVG to INST, but there is
     no effect on the average itself.  The 0Csweeps count will
     continue to increase, but will be shown in parentheses
     when you are viewing the raw input.  When the requested
     number of total ASsweeps has accumulated, the averager will
     stop and automatically flip back to show the averaged
     result.
 ■   You can also use the \-key after the average is done.  The
     status message will then toggle between DONE and PAUSE,
     instead of AVG and INST.
 ■   While an average is in progress, certain functions may be
     locked out to prevent confusing the averager.  However,
     many are allowed that might confuse your results.  Don't
     change things in the middle of an average unless you are
     prepared to interpret the outcome appropriately.


A3
 AVERAGER CONTROL:

 CTRL-A invokes a menu invokes either the Waveform Averager or
 Spectrum Averager menus, depending on the current mode.  If
 you change modes while the menu is visible, it will change to
 the proper menu for the new mode.  The two menus look and
 operate very much the same, except the Spectrum Averager
 allows an extra mode (Peak) not present in Waveform Averager.


Am AVERAGER MODE:

    True
    AeExpntl
    A^Peak  (Spectrum only)


 The True mode gives an ordinary fixed-length average, set by
 the ASSweeps parameter.  After you start this mode by
 hitting the A-key, it will run until all requested Sweeps are
 averaged, then enter the P0Pause mode and show DONE.

 The Expntl (Exponential) mode is an indefinite-length
 operation, which will run until you hit Pause or exit by
 toggling the average off with the A-key.  Here the Sweeps
 parameter changes only the effective time constant, not the
 duration.

 The Peak mode is only available for the Spectrum Averager.
 It will run for the specified number of Sweeps unless you
 have set that value to 1, which will be shown as 'Cont' for
 Continuous mode.  In that case, the Peak "average" will run
 until you exit by hitting the A-key again.


AS AVERAGER SWEEPS REQUEST:

 This sets the requested sweeps for True mode, or the time
 constant for AeExpntl mode.  If you increase this after the
 average is started (but before DONE in True), then the average
 will just proceed with the new value.  If you reduce it, and
 the average hasn't yet reached the new request, it will also
 just proceed with the new value.  Otherwise, it will restart
 using the new request.

 Note that this is the requested sweeps value.  The processed
 sweeps are shown in the 0Ccounter above the right end of the
 trace area.

 For Peak mode, if you set the requested sweeps to 1 (or less)
 you will see 'Cont' instead of the value.  This indicates a
 special Continuous peak scan that will run indefinitely when
 you start the "average", until you specifically exit by
 toggling the Avg key off.  (Note that there is no particular
 use to an actual Peak setting of only one sweep, since True
 would give the same result.)  In Cont mode, the sweeps counter
 will count normally up to 65534, then show 'Cont Peak' above
 that.


Al AVERAGER ARTIFACT LIMITS:

 If any sample of a sweep is beyond these limits, that whole
 sweep will be ARrejected and the 0Csweeps counter will not change.
 An 'ARTIFACT' message will appear in the upper right corner of
 the screen, but the averager trace will not update until the
 next good sweep comes along.  You can view the A\instantaneous
 input with the \-key if you want to see just how bad the
 incoming signal is while the averager continues to run with
 whatever good sweeps get through.

 A limit bar on the right edge of the trace area shows where
 the limits are set relative to 0Yfull scale for the input range.
 This bar does not change with Fmtrace magnification, so if you
 want to compare to the incoming waveform in order to help
 decide where to set the limits, you should set the trace
 magnification for Fsfull scale.

 Artifact rejection works on the incoming waveform data, even
 if you are doing spectral averaging.  The limit bar will thus
 not be directly comparable to the spectrum display.

 The artifact limits are separate for waveform and spectrum
 averaging, allowing you to keep setups ready for two different
 acquisition scenarios.

 Artifact rejection is always in effect when averaging.  If you
 don't want this, simply set the limits to full scale.  Since
 nothing will ever be above these limits, no sweeps will be
 rejected.  You can easily set full-scale values by entering
 much larger numbers like '1k' and '-1k', and Daqarta will
 set only the maximums appropriate for the effective range.


Ar AVERAGER REMOTE CONTROL:

 If you have installed a board / driver that allows digital
 inputs, you may choose to use remote control to start and stop
 averaging either A5electronically or Ahmanually via a hand-held
 switch.  If you don't actually have anything connected to the
 remote input, if you have something else hooked there, or if
 you just don't want to use remote control, this option must be
 set Off to disable the input.  Otherwise, whenever Daqarta
 sees a mTTTL high signal on this input, no sweeps will enter
 into the average, the display will switch to showing the
 instantaneous data, and the status will show SKIP.

 For tips on construction and wiring of a manual switch, see
 mRremote Control Switch Construction.


Aa
 AVERAGE ADD (AvAdd) and AsAVERAGE SUBTRACT (AvSub):

 For AmTrue averages (which run for a predetermined number of
 ASSweeps), there are two special continuation modes.  These are
 not available in AeExpntl or Continuous A^Peak modes.  Once the
 original average has reached completion (DONE 0Sstatus), you
 may extend the average to include additional sweeps.  Hitting
 ALT-A (AvAdd) will extend it by the current Sweeps request
 setting.

 For example, if the original average was 128 sweeps and you
 hit ALT-A without changing the request value, another 128
 sweeps will be added.  The 0Csweeps counter will count up from
 128 to 256 as the extended average proceeds, and the final
 result will be as if you had requested 256 sweeps in the first
 place.

 On the other hand, if you instead hit SHIFT-A (AvSub), the
 second 128 sweeps will be SUBTRACTED from the average.  The
 sweeps counter will still count up from 128 to 256, but any
 constant features of the signal will average down toward zero.

 You might want to use AvAdd in cases where the result from the
 original average is not quite clear enough, and you don't want
 to waste the original sweeps.  This might be the case where
 you have a limited time to collect data before conditions
 change, or where averaging is inherently slow because of some
 limit on how fast you can induce responses from the system
 being measured.

 But the most powerful uses of AvAdd and AvSub are in special
 cases where the response you want to observe is contaminated
 by an undesired response or stimulus artifact.  If you can
 arrange to produce the same desired response while obtaining
 an inverted undesired response (or vice-versa), you can use
 these modes to cancel the response you don't want.

 For example, suppose you are recording electrical responses
 of the ear to acoustic tone bursts.  (Always be sure to use
 proper GIelectrical isolation techniques to prevent lethal
 shocks!)  The raw response will contain a component called the
 Compound Action Potential (CAP) that represents the summed
 response of many neurons firing in synchrony with the start of
 the tone burst.

 Many of these neurons fire regardless of the polarity of the
 tone in the burst... they just respond to the overall onset of
 the tone. But the response will also contain a Cochlear
 Microphonic (CM) component that has a waveform similar to the
 stimulus itself, which is thus inverted when the polarity of
 the stimulus is inverted.  The overall signal is contaminated
 with plenty of noise that needs to be removed by averaging.

 So if you average half of the desired number of sweeps
 normally and then flip the stimulus polarity before you
 average the remaining half with AvAdd, the CM portions will
 cancel and you will be left with only the CAP portion.  Or if
 you used AvSub for the second half, the unchanged CAP portion
 would be subtracted away, while subtracting an inverted CM
 that would be equivalent to averaging the original CM alone.

 Similarly, you could be looking at thermal effects in a
 loudspeaker driver at high power levels.  The polarity of the
 driving signal doesn't change its heating ability, so if the
 drive signal is contaminating the temperature measurement, you
 can use the above trick.

 Note that these options may not always be the best way to do
 this job.  For example, if conditions are slowly changing
 during the average, the second half may not cancel the first
 half properly after you invert the polarity.  This can easily
 happen in physiological systems due to electrode contact
 deterioration, anaesthesia wearing off, etc.  Or you might be
 testing your loudspeaker outdoors and the weather changes.

 In these cases AvAdd and AvSub may be helpful during the
 development phases of your experiment, but you way want to use
 something fancier for the real data collection.  If you can
 arrange things so that the SGstimulus alternates polarity on
 each sweep, then all you may need is a normal average to get
 rid of the stimulus-like component of the response.  This has
 the advantage that the two sweep polarities are near each
 other in time and thus more likely to cancel properly since
 the system has had less time to change.

 AvAdd and AvSub may be used in spectrum A^Peak mode only when
 the ASSweeps request is a specific number, not Continuous.  They
 both function only to continue the same peak scan action for
 an additional number of Sweeps.

A2
 JOINT AVERAGE START (JntAv):

 The unshifted J-key starts both waveform and spectrum
 averagers simultaneously, using parameters set in the Joint
 Average A4menu invoked by CTRL-J.  The JntAv option will be
 highlighted instead of A1Avg, and hitting the J-key will
 cancel the JntAv, but otherwise operation is the same as for a
 regular single average, including operation of P0Pause, A+Skip,
 ArRemote, and A\instantaneous view (\-key).

 During the JntAv you may toggle freely between waveform and
 F0FFT modes to view those respective averages.


J\ JOINT AVERAGE SPECTRUM \ WAVE TOGGLE:

 There is one additional option you might occasionally wish to
 use while in JntAv mode:  If you are viewing the FFT average,
 ALT-Backslash (ALT-\ key) will toggle between that and the FFT
 of the wave average.  Since the wave average reduces noise and
 the FFT average shows the average noise, you can view two
 entirely different pictures of what is happening.


A4 JOINT AVERAGER CONTROL MENU:

 CTRL-J invokes a special menu that includes both waveform and
 spectrum modes.  It looks just like the normal averager menu
 for the current mode, except that the title is always Joint
 Averager.  This is really two menus that are cross-linked to
 each other, but completely separate from the Waveform and
 Spectrum menus... changing a parameter in the Waveform menu
 has no effect on the corresponding Joint menu for waveform
 mode, and vice-versa.

 To set up a Joint average, you must set the Joint parameters
 in waveform and spectrum modes separately, which you can do
 simply by toggling between then with the F-key after you
 invoke the Joint Averager menu with CTRL-J.

 Since a Joint Average involves two averagers running at the
 same time, certain compatibility issues are enforced.  If
 both the waveform and spectrum Joint Averager menus have True
 Ammodes set, then the ASSweeps parameters are simply locked
 together:  Changing Sweeps in one menu changes it in the other
 to match.  In all other cases, the Sweeps settings are
 independent and function as for normal averaging.

 The overall averaging operation will stop when either waveform
 or spectrum mode reaches its Sweeps request, although as usual
 in AeExpntl mode the Sweeps value is a time constant and not
 a specific count request.  If both waveform and spectrum Joint
 menus are of indefinite duration (Expntl or Continuous
 A^Peak modes), then averaging will continue until
 specifically toggled off by hitting the J-key again.

 The AlArtifact Limits for both Joint menus are locked together,
 so you can change them from either menu.

 Similarly, ArRemote Control is enabled or disabled from either
 Joint menu.


B0 BOARD and VIRTUAL SOURCE CONTROL:

 BiBoard / Virtual Source Toggle
 B1Board Control Menu
 BvVirtual Source Control Menu
 BTTimed Virtual Source

Bi
 BOARD / VIRTUAL SOURCE TOGGLE (Board):

 The Board key (unshifted B-key) selects the data acquisition
 board, if 0Binstalled, as the signal source for Daqarta.  When
 off (the power-up default), the Virtual Source is active.

 The Virtual Source allows you to experiment with most of the
 features of Daqarta without having a data acquisition board
 installed.  Even if you do have a board, the Virtual Source
 can provide complex input signals that you might not have
 available, like FM and AM modulation.  The Sine source is
 distortion-free, and noise levels can be controlled.

 In addition, you can control the number of bits of resolution
 of this "board".  This can help with purchase decisions, since
 12-bit boards are often faster and/or less expensive than
 16-bit boards.  Do you really need 16-bit resolution?  You can
 also learn about the interactions between noise levels, bits
 of resolution, and A0averaging... the "ADdither" story.

 When a board (with the appropriate driver in UfDQA.CFG) is
 present, Daqarta observes the Xfsample rate limitations of the
 board, even when in Virtual Source mode.  If you want to
 experiment with a "faster" board, you can omit the board
 driver and run only with Virtual Source.  You can then set any
 (simulated) sample rate you want, from femtoHertz to
 TeraHertz and beyond.


B1
 BOARD CONTROL MENU:

 Hit CTRL-B to bring up the control menu for either the data
 acquisition Board or the BvVirtual Source, depending upon which
 is currently active from the last B-key toggle.

 Each data acquisition 0Bboard driver has its own Help text,
 which is available via the H3Control Help system.  Use H5ALT-H to
 see a list of all the installed U0plug-in modules, of which the
 board will always be the second entry.  Hit ENTER to bring up
 a single-page summary of switch and parameter settings.
 Another hit of the ENTER key will bring up the complete
 Control Help system for the board, if present.

 Full board-specific Control Help systems are included for all
 board drivers supplied with Daqarta, but even user-written
 drivers should at least have the single-page summary.

 Boards, like all plug-in modules, may support parameters on
 the UfDQA.CFG line that loads them.  These may be used to tell
 the module about hardware switch settings that it can't test
 directly, or about preferences like which RdDMA channel or
 RiInterrupt Request (IRQ) line to use.  Some boards may have
 versions that differ only in maximum Xfsample rate, and this
 may be supplied as a parameter.

 In general, each board menu allows you to select the active
 Channel, the 0Ysensitivity Range, and any relevant digital I/O
 port bits for use as TEExternal Trigger, ArAverage Remote Control,
 or DcDDisk Remote Control inputs, and TPTrigger Pulse outputs.
 Some board menus may not have all of these, and some may have
 additional features, depending on the capabilities of the
 board.

 Boards with a lot of other capabilities may have multiple
 0Pmenu pages, accessible via CTRL-PgUp and CTRL-PgDn.

Bv
 VIRTUAL SOURCE CONTROL MENU:

     BbBits
     BwWaveform
     BfFrequency
     BlLevel
     BnNoise
         BuUniform vs Gaussian Sources
     BmFrequency Modulation
         BtFM Triggering
     BaAmplitude Modulation
         BAAM Triggering
         BdModulation Depth
         BxMultiplier Mode

Bb BITS:

 Adjusts the bits of resolution produced by the Virtual Source,
 from 16 down to 1.  This allows you to see just how much
 benefit you might gain or lose by going for a 0Bboard with more
 or less resolution.  In particular, you should explore this in
 conjunction with BnNoise and A0averaging, since you may find that
 there is no benefit whatsoever to going to a board with more
 resolution than the noise level present in your signal.


Bw WAVE:

 Selects SINE, RAMP, SQUARE, or TRIangle waveform generation by
 the Virtual Source.


Bf FREQ:

 Adjusts the frequency of the BwWave from 0 to 65535 Hz in 1 Hz
 steps, either via 0ddirect entry or 0ccursor fine adjust.


Bl LEVEL:

 Adjusts the level of the BwWave from 0 to full scale in 17
 power-of-2 steps.  0YFull scale is determined by the range
 currently active on the 0Bdata acquisition Board.  If no Board
 is present, full scale defaults to 1.0 Volt and the level
 setting defaults to 50% or 500 mV.  You can't set Level to
 full scale if BaAM is active... it will be limited to half of
 full scale to allow up to 100% BdAmplitude Modulation.


Bn NOISE:

 Adjusts the level of a separate noise source that is added
 to the overall Virtual Source "signal" after all modulations
 (BaAM and BmFM) are applied, if any.  Noise settings cover the
 same range as the BlLevel of the wave itself.  The presence of
 noise not only makes the Virtual Source look more like real-
 world data, but it also allows easy simulations of situations
 to allow you to evaluate the benefits of A0averaging versus
 Bbbits of resolution, etc.

 The rinoise source is a very simple and computationally
 efficient one, which produces random levels that are evenly
 distributed over the entire full-scale range (before scaling
 to get the desired Noise level).  This is known as a UNIFORM
 distribution of values.  In the real world, however, most
 noise sources are the resultant sum of numerous random
 processes, so they have value distributions that are more
 GAUSSIAN.  A conceptually simple way to make a Gaussian
 distribution is to add the outputs of several independent
 uniform noise sources.


Bu UNIFORM vs GAUSSIAN SOURCES:

 Imagine that you add two uniform noise sources together.
 Lets's say that each produces values from -50 to +50 with
 equal ("uniform") probability.  On the average, we expect to
 see +50 values in about 1 out of every 101 samples (since 0 is
 a possibility), and -50 values just as often.  Since each
 source is independent of the other, the odds of both of them
 happening to produce +50 values for the same sample is pretty
 small, so we don't expect to see too many +100 values in the
 sum... about 1 out of every 10201 samples (101 * 101).  The
 same is true of -100 values.  But since for every positive
 sample from one source, there is about a 50% chance that the
 other will be negative, we expect a lot more values around 0.

 Now imagine that we add up 16 of these uniform sources.  We
 will almost never see all 16 producing +50 values at the same
 time, but we will see a lot of values within shouting distance
 of 0.  The distribution of values is bell-shaped, or Gaussian.

 But what about the FREQUENCIES present in the noise?  Since
 frequencies don't add and subtract like amplitudes, it turns
 out that we have the SAME frequencies in the sum as we have
 in the individual parts.  Consider that one source is like a
 composition of random notes played on a piano, which has a
 fixed range of notes.  Adding 15 more identical pianos can't
 produce any higher or lower notes, even if they are playing
 different compositions... but it would be a LOT noisier!

 So we wouldn't see any difference in the shape of the spectra
 between a uniform source and a Gaussian sum of uniform
 sources, though of course there would be a level difference.
 But the waveform displays would look quite different.  Try
 setting the Virtual Source wave BlLevel to 0 and bring up the
 BnNoise level to some moderate setting.  You will notice that
 although the trace is very random, all the values stay within
 certain limits... namely, the limits indicated by the Noise
 setting.  There is a fairly discrete band of brightness
 through the middle region of the trace.

 If this was a Gaussian source, however, we would not see such
 definite limits:  The average brightness would be greater in
 the center of the trace and fade off more gradually toward the
 top and bottom.  Most importantly, SOME of the instantaneous
 values would go off the screen, though not very often.  But
 therein lies the rub:  What would we do about those values?
 They could not be handled within the 16-bit range of normal
 signals.  If we reduced the average value of the noise low
 enough so that we NEVER got any out-of-range values, it would
 be only 1/16 as great (assuming we had added 16 uniform
 sources).

 A true Gaussian noise source is available in the SGSTIM3A
 Advanced Stimulus Signal Generator.  You can use this with
 the 0BDEMO driver instead of the Virtual Source to further
 investigate the properties of this type of noise.

 You can visualize the actual amplitude distribution of any
 signal, including those from the Virtual Source, by using
 the AHHistogram option.


Bm FREQUENCY MODULATION (FM):

 This is controlled by FM Hz and F Hz.  Here the source
 frequency (set by the BfFreq parameter) becomes the center or
 carrier frequency, and the overall frequency goes higher and
 lower from this value at a modulation rate set by FM Hz.  This
 can be set anywhere from 0 to 65535 Hz in 1 Hz steps either
 via 0ddirect entry or 0ccursor fine adjust.  The frequency
 excursion from the lower limit to the upper is set by F Hz,
 in 16 power-of-2 steps from 0 to half the sampling rate.

 The modulating frequency is always sinusoidal, regardless of
 whether you set the carrier BwWave to Sine, Ramp, Square, or
 Triangle.

 With a Xfsample rate of 20 kHz, if you set the center Freq to
 500 Hz, FM Hz to 1, and F Hz to 39.062, the sine wave will
 look like a big spring attached to the left side of the screen
 being pushed and pulled from the right side.  Now set the
 center Freq to mid-scale or 5000 Hz, and F to 2500 Hz:  The
 waveform display becomes a blur of activity.  Flip to the F0FFT
 via the F-key and you will see the spectral line slowly sweep
 back and forth from 3750 Hz to 6250 Hz... just what we expect.

 Now hit ALT-S to flip to the S0Spectrogram and you can actually
 see the modulating sine wave as it moves the overall frequency
 up and down in the vertical frequency direction while time
 progresses in the horizontal.  (You may notice that the length
 of one modulation cycle isn't actually one second, despite
 having set FM Hz to 1.  This is an artifact of the signal
 generation method, which ignores the fact that there is finite
 processing time between sampling sweeps.  The modulator "goes
 to sleep" at the end of NpN samples, then "wakes up" for the
 next N samples, without realizing that there was missing time
 during which processing and possible alien abductions took
 place.  This is only noticeable at slow modulations that take
 longer than a sweep.)


Bt FM TRIGGERING:

 For a different way to view FM, go to the TmTrigger control menu
 with CTRL-T and set the TCSource to FM.  The Titrigger is then
 taken from the BmFM modulation sine wave instead of the main
 sine BwWave.  The S0Spectrogram is not very interesting at low FM
 rates, because we are always starting the trace at the start
 of an FM cycle, and at slow FM rates the overall frequency
 doesn't have a chance to move very far during the time shown
 on a single trace.  Since the next trace waits for the exact
 same point in the FM cycle, there isn't much happening.  The
 Spectrogram shows a slightly fat line which appears to hold
 constant at a little bit above the 5000 Hz center frequency.
 This is the amount that the 1Hz FM modulator moves things from
 the center frequency during the brief FFT data collection
 time.

 The same "stationary" effect is seen back in normal FFT
 spectrum mode:  Where we formerly saw the spectral line
 sweeping back and forth, we now see a fatter peak slightly
 above the center frequency.  Essentially, this is the same
 thing as when a stoboscope appears to "freeze" a rotating
 wheel:  The wheel is still spinning, but we are only looking
 at it during a brief time that is exactly synchronized with
 the spin.

 The waveform display is something else.  Since it is
 triggering on the modulator and not the wave itself, the trace
 appears very unsynchronized under these conditions, but gives
 a sense of "flowing".  Now kick up the Bmmodulation rate and the
 action becomes downright mesmerizing.  With the same setup as
 above, try slowly tuning the modulator up from the original 1
 Hz.  You can see strange synchronicities and hypnotic
 patterns.  Check out 6 Hz, and 17, and 76, and... well, you
 may need to have meals sent in to you.  And don't forget that
 you can adjust the center frequency and F as well!

 Try setting the center BfFreq to 5013, FM Hz to 40 (one cycle
 per trace with NpN = 512 at 10 kHz), and F Hz = 156.25.

 After you check out from the FM Waveform Addiction 12-step
 Recovery Clinic with a clean bill of health, try F0FFT mode
 again, but with high modulating frequencies... a significant
 fraction of the center frequency.  You will find a stationary
 spectral line at the center frequency, surrounded by
 symmetrical arrays of peaks.  The math that is used to
 describe these "sidebands" is based upon Bessel functions...
 heavy stuff.  But it turns out that this sort of modulation is
 VERY useful for the synthesis of many complex musical sounds
 (like brass instruments), and it put Yamaha synthesizers on
 the map.

 S0Spectrogram mode can also produce some pretty addictive
 displays.

 ┌──────────────────────────────────────────────────────┐
 │  WARNING:  Interstellar Research shall not be held   │
 │  liable for lost productivity, loss of employment,   │
 │  failing grades, or weight loss due to excessive     │
 │  viewing of FM displays.                             │
 └──────────────────────────────────────────────────────┘


Ba AMPLITUDE MODULATION (AM):

 The modulation rate is controlled by AM Hz, and the percent of
 modulation (Bddepth) is controlled by AM Pct.  Since AM results
 in the overall level of the wave going above (and below) the
 baseline BlLevel, AM can't be used when the Level is set to
 maximum.  If AM Pct is set above zero in this case, Level will
 be automatically reduced to half of full scale.

 AM Hz can be set anywhere from 0 to 65535 Hz in 1 Hz steps,
 while AM Pct allows 16 power-of-2 steps from 0 to 100%... plus
 a special range called MULT which is "below" zero.  0dDirect
 entry of AM Pct will result in the nearest power-of-2 value,
 but to reach the MULT range you will need to enter a negative
 value (any value) or use 0ccursor adjustment to go below zero.
 The modulating frequency is always sinusoidal, regardless of
 whether the carrier BwWave is Sine, Ramp, Square, or Triangle.

 When viewing the AM waveform, it will look "bubbly" because it
 is synchronized to the carrier and not the modulator.
 (See BAAM Triggering.)

 Try the F0FFT mode with the carrier frequency (BfFreq) set to
 5000 Hz and AM Pct set to 50.  As you increase AM Hz, you
 will see two discrete AM sidebands appear, one on either side
 of the carrier and separated from it by the value of the
 modulating frequency.  At low modulating frequencies, the
 carrier line appears to be rather bouncy, and larger than
 the original BlLevel setting.  As you increase the modulation
 frequency it steadies out at exactly the preset value and
 is independent of further changes.  The height of the
 sidebands is proportional to the percent of modulation.


BA AM TRIGGERING:

 Try bringing up the TmTrigger control menu with CTRL-T and set
 Source to TAAM.  Now if you view the waveform, the outline
 looks stable and shows the expected modulation waveform, while
 the Bfcarrier rolls by unsynchronized (unless it happens to be
 and exact multiple of the modulator).  If you view the F0FFT at
 low AM Hz modulation rates, the carrier no longer bounces.

 Fine-tune the modulating frequency for maximum carrier size,
 which will be with AM Hz around 15 for 512 points at a 20 kHz
 Xfsample rate.  Flip back to view the waveform, and you can see
 what is going on:  Since we are now locked to the modulator,
 at this low modulation frequency we are only getting a portion
 of a modulation cycle per NpN-points sweep.

 If the T+Trigger Slope is set to Positive and the TlTrigger Level
 to zero, then this will be the positive half-cycle of the
 modulator, which starts from zero modulation (which is the
 normal carrier amplitude) and grows to maximum amplitude and
 just starts back down before the end of the trace.  Here is
 where we have the biggest average value of carrier over the
 N-points width of the trace, which is all that the FFT knows
 about.


Bd MODULATION DEPTH:

 In waveform mode with TAAM triggering, set BaAM Hz to see a few
 modulation cycles on the trace.  Move AM Pct between 0 and
 100 percent modulation.  At 0 percent, you see just the normal
 carrier Blamplitude (though it may be unsynchronized due to
 triggering on the modulator instead of the carrier).  Look at
 only the top edge of the carrier as you increase the
 modulation, and you will see the modulator sine wave grow
 larger and larger.  As it grows, the positive part of the
 modulator sine makes the carrier get larger, and the negative
 part makes the carrier grow smaller.  Finally, at 100%
 modulation, the negative peak takes the carrier just to zero.
 Daqarta doesn't allow you to go past 100% here, but if it did
 we would expect to see the negative peak "break through" zero
 and actually invert the carrier.

 The process of amplitude modulation is really just the
 multiplication of the carrier wave by the sum of one plus the
 depth-scaled modulator wave.  When modulation depth is zero,
 we just get the normal carrier.  When modulation depth is
 100%, the modulator and carrier are equal.

    sin(carrier) * [1 + depth * sin(modulator)]


Bx MULTIPLIER MODE:

 When AM Pct is set below 0, a special setting called MULT
 becomes active.  This gives the straight multiplication of the
 carrier by the modulator (here fixed at 100% of full scale),
 with no unity constant added.  This is also known as Ring
 Modulation to old-timers from the pre-digital stone age of
 electronic music, named after an early circuit that performed
 multiplication using a (square) ring of 4 diodes connected
 head to tail.

 Multiplication looks superficially similar to 100% AM when
 viewing waveforms.  Try setting TAAM triggering, and use a
 carrier BfFreq of 2500 with BaAM Hz set to 50.  Now scroll AM Pct
 between 100% and MULT and you will see (besides an obvious
 size change) that the MULT waveform appears to have twice as
 many modulation cycles as 100% AM.  There is also a shape
 change, with the 100% AM just "kissing" zero, while the MULT
 plunges into it.  Reduce Freq to 500 and look carefully at the
 individual carrier cycles as the modulation goes past zero...
 you should be able to see that in the MULT case the polarity
 of the carrier reverses at the zero crossing.

 To see what's happening, think of a single cycle of the
 modulator.  It starts at zero, so of course zero times the
 carrier gives zero.  It then climbs to a positive peak, so the
 product of this rising value times the carrier rises as well.
 It then passes the peak and heads back down to zero, with the
 product following suit.  Now as the modulator goes negative,
 we get a RISING product... the carrier is just inverted.  So
 the modulator's negative half-cycle looks pretty much like the
 positive one, other than the inversion.  Where the 100% AM
 wave had only one peak and valley per cycle, the multiplier
 gives two, one for each phase.

 But the most interesting difference between multiplication and
 AM is in the spectra.  With AM Pct = 100, flip to F0FFT and move
 the carrier up to 5000.  Move BaAM Hz up until you see the AM
 sidebands move out from the carrier, then run AM Pct down into
 MULT.  Presto!  The carrier vanishes, and we are left with
 only the sidebands.  This has practical applications for radio
 transmission, since the carrier contains a lot of the
 transmitter power but none of the information used to modulate
 it.  Why waste power that does you no good?  In fact, with
 some clever circuitry it is possible to generate only a SINGLE
 sideband (SSB), since the two sidebands are redundant copies
 of the same information.

 To understand the multiplier operation, dig out that old
 trigonometry book and look up the formula for multiplying two
 sines together:

    sin(A) * sin(B) = 1/2 * [cos(A-B) - cos(A+B)]

 The product of two sines gives two cosines (which look like
 sines when you don't know the starting point).  But the angles
 (frequencies) of these two cosines are not those of either of
 the two starting sines... they are the sum and difference,
 namely our two sideband frequencies!

 As we will see under taSine Wave Analysis, this simple formula
 is the heart of F?Fourier Transform Theory.

BT
 TIMED VIRTUAL SOURCE (ALT-Timed):

 When ALT-T is active, a special GPpacer timer makes the
 B0Virtual Source appear to take as long to "acquire" data as a
 true external source being sampled at the rate indicated in
 the X0X-axis control menu.  This allows you to evaluate the
 "feel" of different Xfsample rates with respect to screen
 update rate.  The 0sspeed display above the upper right
 corner of the trace area will change to SPEC when operating in
 this mode.  If the Virtual Source data generation takes longer
 than allowed by the sample rate, the speed display will change
 to SLOW.

 When Timed operation is inactive, the speed display will show
 FAST, SLOW, or SPEC depending on the relative sampling rate
 versus data generation time on your CPU.  For example, with a
 33 MHz 486 system, this will read FAST at all sample rates
 slower than about 195 kHz, and SLOW above that.  You can get
 some idea of the effective speed of your system by trying
 different sample rates until you see the FAST/SLOW change.
 (You will probably have a hard time finding the exact sample
 rate to get SPEC.)  To try this on a fast system, you may need
 to run without a board driver in your UfDQA.CFG file, since the
 board limits will be assumed by the Virtual Source.

Im
 TRACE INFORMATION MENU:

 IIIntroduction
 IBTrace Bits
 IFTrace Format
 IMBoard Model
 IDTrace Date
 ITTrace Time

II TRACE INFORMATION MENU - Introduction:

 After a previously-stored trace has been recalled from M0memory
 or loaded from a fAfile, this menu will be shown in place of the
 original ADC B1Board menu in response to the CTRL-Board option.
 It reports on the data size and format, the board model name,
 and the time and date of the trace.  This is not really a
 "control" menu, although there are controls for the time and
 date formats.

 If the trace was recorded with the Virtual Source instead of
 an GAADC board, then CTRL-Board will show the Virtual Source
 menu with its original parameter settings.  The Trace Info
 menu can still be seen as an 0Palternate menu page via the
 CTRL-Pg keys.  This will also work during 0SLive operation with
 the Virtual Source.


IB Trace Bits:

 This shows the number of bits used to represent the data.  For
 the BvVirtual Source, it is just a copy of the BbBits value set by
 that menu, from 1 through 16.  For a real GAADC board, there may
 also be extra information regarding the data format, shown as
 a prefix before the bits value:

    ■   HI 12   Indicates a 12-bit data format, where the data
                bits occupy the upper 12 bits of a 16-bit word.

    ■   LO 12   The lower 12 bits of the 16-bit word are used.

    ■   -       Indicates that the polarity of the data was
                inverted by the ADC board.  Daqarta traces
                always show the true polarity, so this just
                indicates that correction was required.

    ■   +       Indicates that the data range was unipolar (all
                positive).  Since Daqarta shows waveforms with
                a bipolar 0YY-axis, the entire wave will appear
                above the 0-line.

 The Bits value reflects the data format of the board used to
 collect the trace data, and is the same as the format used to
 store DiDDisk data files.  O0OutDt files and M0trace memory
 always use 16-bit data for single F0waveforms and FFTs (which
 are stored as waves), 32-bit data for AWwaveform averages, and
 48-bit data for AfFFT averages.


 IF Trace Format:

 The data Format will show either 'Offset' or '2s Cmp',
 indicating one of the two ways that are commonly used to
 represent both positive and negative values using integer
 binary data.

 Binary (base-2) numbers, which are what the CPU works with at
 its most basic level, are made up of only 2 different symbols:
 0 and 1.  These are called "bits" (BInary digiTs), analogous
 to the 0 through 9 digits we use with our decimal (base-10)
 number system.  The 0 and 1 values are represented by voltages
 that are either off or on, respectively.

 With only digits 0 through 9, the base-10 system can encode
 larger values by stringing digits together.  Each digit column
 in a number is 10 times the one to its right, where 10 is the
 "base" of the decimal number system.  Similarly, in the binary
 system, larger numbers are made by using more bit columns,
 with each bit column being 2 times the one to its right... the
 base of the binary number system.

 But what about negative values?  With the decimal system, we
 just use a special symbol (+ or - sign) along with the usual
 digits 0 through 9.  However, the binary system as used by the
 computer doesn't have any "symbols" other than off or on.
 Hence, various schemes have been used to represent signed
 numbers.

 The simplest method that first springs to mind is to just
 reserve an extra bit in front of the binary number to indicate
 its sign, such as 0 for positive and 1 for negative.  But it
 turns out that this "sign-magnitude" system is not the most
 efficient when it comes to actually using the values, such as
 adding and subtracting them, since special handling of the
 sign bit is required by the CPU.  Two other schemes have thus
 come to dominate the data acquisition field:

 ■  Offset Binary:
 This just adds an "offset" value to voltages before they reach
 a simple unipolar GAADC.  If the intrinsic ADC range is 0 to 10
 Volts, for instance, then all incoming voltages could have 5
 Volts added to them and the overall bipolar range would become
 -5 to +5 Volts.  For an 8-bit ADC, when the board input is -5
 Volts the actual chip thus sees 0 Volts and hence produces a
 digital output of 0 (binary 00000000).  When the board input
 is +5 V, the chip sees +10 V and produces its maximum output
 of 255 (binary 11111111).  When the board input is 0, the ADC
 sees +5 and produces its midscale value of 128 (binary
 10000000).

 The astute observer may notice that 128 is not the EXACT
 center of the 0 to 255 range... 127.5 would be the exact
 center.  But since the binary number system always gives an
 even number of values for any given number of bits, there is
 no way to have positive and negative symmetry about 0.  By
 convention, the negative side is made one count larger.

 For boards with more bits of resolution, the offset idea is
 just extended such that 0 Volts is still the midscale value of
 the range.  On a 12-bit board, for example, the ADC can
 produce values from 0 to 4097, so a 0 Volt input produces a
 midscale value of 2048 at the output.

 Offset binary is the standard data format for 8-bit fB.WAV
 files, and is used by all 8-bit sound cards.  It is also
 fairly common among 12-bit and even 16-bit laboratory-type
 boards.

 ■  Two's Complement:
 Compared to the above Offset data format, this might be
 thought of as "Rolled".  Imagine that we take the range of
 binary numbers from 0 (00000000) to 255 (11111111) and put
 them on a big drum, viewing them one at a time through a
 readout window.  If we roll the drum one way we see higher
 values, and if we roll it the other way we see lower values.
 Now suppose we roll it past 0:  We would see the highest value
 of 255, and as we continued to roll that way the values would
 count down from there.

                  ...                           ...
             3           .                 3           .
          2                .            2                .
         1                  .          1                  .
   -->   0         .        .    ==    0         .        .
         255                .          -1                 .
          254              .            -2               .
            253          .                -3           .
                  ...                           ...


 The Two's Complement system thus uses 255 to represent -1,
 254 for -2, and so on down to 128 for -128.  In the positive
 direction, the numbers run normally from 1 to 127.  It turns
 out that this is the native system used by the CPU, and is
 very efficient for computations.

 If the GAADC can produce values with this format, they require
 no conversion before the CPU can handle them.  Values in the
 Offset Binary system, on the other hand, must have the offset
 value added to them before use.  The Two's Complement format
 is thus preferable, and is the standard format for 16-bit fB.WAV
 files and all 16-bit sound cards.  Many laboratory-style
 boards use the Offset Binary system, however, even for 16-bit
 models.

 Note that Daqarta DiDDisk files nominally use the .WAV format,
 but they retain the native data format of the ADC board in
 order to avoid the speed penalty of converting formats
 on-the-fly.  Thus, if you record with a laboratory-type board
 and try to view the file with a standard .WAV file viewer, you
 may get very strange results!

 Daqarta files created with O0OutDt use the Two's Complement
 format, but only instantaneous (non-averaged) files will have
 16-bit data... A0averaged files use 32 bits or more.  Even
 though these large data widths fully adhere to the standard
 .WAV file format, most other viewers expect only the 8- or
 16-bit data from sound cards and thus aren't prepared to
 handle these.


IM Board Model:

 This is the model of ADC board that collected the trace, as
 determined by the 0B.ADC driver.  Your actual board model may
 be somewhat different, especially if it is a "clone" of a
 popular model, or a minor variant that does not affect how
 Daqarta interacts with it.


ID Trace Date:

 This is the date the original trace was collected.  Two date
 formats are supported, and you may toggle between them at any
 time:
    US-style:       Month-Day-Year  (M-D-Y)
    Euro-Style:     Day-Month-Year  (D-M-Y)

 The format selected here is also used for EsEdSav log file
 entries.  There will be no indication in the entry as to
 which format is used, so it's probably wise to standardize
 on one and set it from an KIauto-initialization Key Macro.

 Although only the last 2 digits of the year are shown in both
 the Trace Info menu and the log file entry, the Daqarta system
 will keep track of the correct date until the year 2099...
 please try to have your most important work done before then.


IT Trace Time:

 The time the original trace was collected.  You may toggle
 between 24 hour and 12 hour formats at any time.  If you
 select 12 hour, an AM or PM notation will appear on the Time
 line.

 The format selected here is also used for EsEdSav log file
 entries.  For 12 hour format, the AM/PM is indicated by a
 lower-case 'a' or 'p' after the normal log file time entry,
 as in:
    11:22:33a  08-09-97

 If the Virtual Source is 0SLive, each time you bring up the
 Trace Info menu (via CTRL-Pg from the BvVirtual Source menu),
 the Time and Date displays will be updated.  They will not
 continue to "keep time" if you leave this menu displayed,
 but you could use CTRL-Pg as a crude time check.

 Daqarta disables the normal system timer to prevent its
 interrupts from interfering with critical data acquisition
 tasks.  So Daqarta uses the CMOS Real-Time Clock to obtain the
 trace time and to update the system time before writing files
 or Q0Quitting.  On an old PC/XT system, or a newer system with a
 defective Real-Time Clock (due to a bad battery, for example),
 Daqarta will instead add one minute to the previous time,
 advancing the date as needed.  This insures that you can at
 least tell the order of acquisition, in case it's not obvious
 from the Infile name sequence.

 Note that although DOS only stores file times in even seconds,
 (and usually only displays file times to the nearest minute),
 Daqarta file and trace times are maintained to 1-second
 accuracy (the limit of the Real-Time Clock).  This information
 is stored in the Daqarta file header for display here, and may
 thus differ from the apparent DOS time.


ki
 KEYBOARD RESPONSE CONTROL:

 kmKeyboard Response Control Menu
    kdHardware Delay
    krHardware Rate
    ksCursor Max Step
    kcCursor Rate
    kfCursor Fixed Step
    kaReadout Averaging
 icCursor "Run" Response (IntCr)
 SL"Sticky" Shift Keys
 CxCursor Exchange
 mXKeyboard Control Utility

km
 KEYBOARD RESPONSE CONTROL MENU:

 CTRL-K brings up a menu to help you adjust the "ballistics" or
 "feel" of cursor motions.  The best settings are highly
 dependent upon your own personal preferences, as well as the
 performance of your system and the nature of the particular
 task you are doing at the moment.  If you find that you need
 to alternate between tasks that are easier with different
 settings, consider using the K0Key Macro system to reset all
 the parameters automatically as a part of the task change.

 The menu options are:


kd ■  Hardware Delay:

    This is the delay between the time you push down a key and
    the time your keyboard's built-in automatic repeat function
    kicks in.  High values mean more initial hesitation when
    you want to move the cursor, which could be annoying.  On
    the other hand, too little delay could mean unintended
    overshoot when you are just trying to nudge the cursor.

    There are four settings available from the standard AT
    keyboard controller chip: 250, 500, 750, and 1000 msec.
    XTs have only a fixed value of about 500 msec.


kr ■  Hardware Rate:

    Once a key has been held down for the Hardware Delay time,
    the keyboard controller starts pumping out repeats of the
    keystroke at this rate, in characters per second.  A high
    rate gives fast response, but makes it much easier to shoot
    past your target.

    There are 32 settings available from the standard AT
    keyboard controller chip, from 2.0 to 30.0 characters per
    second, with finer steps at the low end.  XTs have a fixed
    rate of about 10 characters per second.

    Although AT-class machines allow the delay and rate to be
    programmed, the controller chip has no provision to allow
    reading the initial values.  This means there is no direct
    way to restore your original settings automatically upon
    exit from Daqarta.  If you find that the settings you want
    for Daqarta are different from those you want for other
    programs, consider invoking Daqarta from a batch file that
    runs the mXXKBD.EXE utility afterward to set whatever values
    you prefer.  If you have DOS 5 or later, you can use the
    MODE CON command provided by DOS instead.  Alternatively,
    you could program the settings into a K0Key Macro and execute
    it just before you Q0Quit.


ks ■  Cursor Max Step:

    Daqarta cursor motions have a dynamic response:  The
    longer you hold the cursor key down, the bigger the steps
    the cursor takes on each auto-repeat, up to a limit set by
    this Max Step value.


kc ■  Cursor Rate:

    This sets the cursor acceleration rate, or how fast the
    cursor step size approaches the Max Step limit, from 0
    (constant step size) to 15 (super-fast acceleration).


kf ■  Cursor Fixed Step:

    If you hold down the SHIFT key when you while hitting a
    cursor arrow key you will get fixed steps of this size
    instead of the above dynamic cursor action.  If you have
    set the dynamics to be best for fine tuning (low kcRate, low
    ksMax Step), the fixed step can be set to a large value to
    allow rapid motion to a new area.  Conversely, if you set
    the dynamics for big steps and rapid acceleration, you can
    set the fixed step to a small value to aid in fine tuning.

    Note that dynamic and fixed cursor action work with menu
    value 0cscrolling adjustment as well as 0rtrace cursor motion.

    The Fixed Step option is also very useful with K0Key Macros
    to allow convenient parameter steps.


ka ■  Readout Avg:

    To keep the trace cursor readouts from becoming too much of
    a blur with noisy data, continous running averages are
    performed on the Y-values before display.  The Readout Avg
    value is a time-constant that indicates the maximum number
    of values that will be averaged.  Larger settings give
    slower response times, so that while the display is easier
    to read, it may lag behind sudden changes in the signal.

    The semicolon key or the number pad 5-key will force the
    averages of both cursors to immediately reset to their
    respective instantaneous values.  Similarly, whenever you
    move an individual cursor, its average is reset.  This is
    important when you have the Readout Avg set to a high value
    for viewing very noisy data, but there are occasional level
    changes.  Since the instantaneous value is usually closer
    to the final average than was the prior value, the time for
    the readout to settle is much faster than waiting for it to
    slowly grow or decay between levels.

    If you have one cursor set to a baseline portion of a
    waveform, and the other set to a particular peak or other
    feature, you may want to reset just the feature cursor
    average if only that portion changes.  To do this, just
    nudge that cursor over one point and back.

    You can easily experiment with readout averaging using the
    B0Virtual Source.  Increase BnNoise to see the benefits of
    readout averaging.  Virtual Source changes normally reset
    the readout averager automatically to speed settling time,
    but if you use SHIFT-Up/Dn to change values this will be
    omitted.  This allows you to change BlLevel and see the
    effect of a step change on the cursor readouts, as though
    the step came from a "real" external source, and you can
    also see the effects of cursor motion or the reset keys.

ic
 CURSOR "RUN" RESPONSE WITH IntCr:

 If you hold down a cursor key, it will generate a series of
 key repeat interrupts at the krHardware Rate.  By default,
 Daqarta typically tries to update the trace after each of
 these.  But at high cursor repeat rates, or with slower
 processors, there may not be time to complete the update
 before the next key interrupt arrives, and the cursor response
 may appear to be slower than the selected Hardware Rate.

 In this case, you can select IntCr with SHIFT-I, and the held
 cursor interrupts will have priority over the trace updates.
 The trace will momentarily "freeze" while you scroll the
 cursor, then resume updates as soon as you release the key.

 This option is the start-up default for 286 and slower CPUs
 (original PCs and XTs).

SL
 "STICKY" SHIFT KEYS:

 The Scroll Lock key toggles a "sticky" shift state, allowing
 one-hand operation.  Hitting SHIFT, CTRL, or ALT while this is
 active will bring up the usual shifted 0Koption key display at
 the bottom of the screen, but it won't go away when you
 release the key.  Instead, it will remain active and that
 state will apply to the next key you hit.  If you hold that
 key down, as in moving the ALT 0rtrace cursor, the shift state
 will remain in effect until you release it.

 If you inadvertently hit an unintended shift key while in this
 mode, you can remove the "stuck" shift state by hitting that
 shift key again.

 When you are entering text, such as for the comment line,
 there is no change to the option key display to indicate when
 you have hit the SHIFT key to capitalize or the ALT key for
 special characters (ALT-u for µ or ALT-2 for ²) or ALT-DEL to
 delete to the end of the line.

 The sticky shift feature is intended to make life easier for
 those with disabilities... which includes anyone with one hand
 occupied holding a probe onto a circuit board, or opening an
 infusion stopcock, or any similar real-world situation where
 you need to do two things at once.

Cx
 CURSOR EXCHANGE (CursX):

 The solid 0rtrace cursor position is normally controlled by the
 right and left cursor (arrow) keys, and the alternate (dashed)
 cursor is controlled by ALT-right and ALT-left cursor keys.
 This situation is reversed when CursX (Cursor eXchange) is
 active.

 You may want to set this so that the most-used cursor for a
 particular series of measurements will not need the extra ALT
 key.  Note that this function may be toggled by either the
 C-key, as shown in the key option area, or by the grey
 minus-key, which is more convenient for quick one-hand
 operation if you are using the number pad for cursor control.

 The trace cursor "feel" may be controlled via options in the
 kmKeyboard Control menu (CTRL-K).

mX KEYBOARD CONTROL UTILITY:

 XKBD.EXE is a small utility program that allows direct
 setting of the AT keyboard controller auto-repeat parameters,
 which in Daqarta are set via kdHardware Delay and krRate.

 You invoke it from the command line or from a batch file with
 two parameters, as in:
    XKBD 0,31

 The first parameter controls the initial delay before the
 auto-repeat function begins:
    0 = 250 msec            2 = 750 msec
    1 = 500 msec            3 = 1000 msec

 The second parameter controls the repeat rate (chars/sec):
    0 = 2.0       8 = 4.0      16 = 8.0       24 = 16.0
    1 = 2.1       9 = 4.3      17 = 8.6       25 = 17.1
    2 = 2.3      10 = 4.6      18 = 9.2       26 = 18.5
    3 = 2.5      11 = 5.0      19 = 10.0      27 = 20.0
    4 = 2.7      12 = 5.5      20 = 10.9      28 = 21.8
    5 = 3.0      13 = 6.0      21 = 12.0      29 = 24.0
    6 = 3.3      14 = 6.7      22 = 13.3      30 = 26.7
    7 = 3.7      15 = 7.5      23 = 15.0      31 = 30.0

 If you are using DOS 5 or later, you can do this with the MODE
 CON command instead, although operation is slightly different.
 Unlike some similar utilities, XKBD is NOT memory-resident.

 Regardless of whether you use XKBD or MODE CON, you will only
 be able to control AT-type keyboards (84 keys or more).  These
 utilities program the controller chip that is inside the
 keyboard itself, not in the system unit.  Older PC/XT-type
 83-key keyboards do not have a programmable controller chip,
 so even though you may use one of these with an AT system
 unit, there is nothing that can be changed.  Conversely, many
 keyboards have a switch that allows AT or XT operation, but
 even if you use one of these with an XT, the XT lacks the
 ability to generate the signals needed to set the controller
 chip.


Fi
 FFT / WAVEFORM MODE CONTENTS:

 F?Fourier Transform Theory
 F0FFT / Waveform Modes
 FaAmplitude Resolution
 FmTrace Magnification
 FsForcing Full-Scale (or Preset) Trace Magnification
 FhTrace Magnification vs Help
 ZaTrace Auto Zero
 FtWaveform Time Resolution
 FfFFT Frequency Resolution
 F1FFT CPM Mode
 F2FFT Power Spectrum Display (Y-log)
 FeHigh Dynamic Range FFTs (FFT32)
 F3Power Spectral Density (PSD)
 FxFFT X-Log Display
 W0Windowing (Windo)
 S0Spectrogram (Sgram) Operation


F?
 FOURIER TRANSFORM THEORY:

 tiIntroduction
 tsSine Wave Synthesis
 taSine Wave Analysis
 tcA Conceptual Analyzer
 tpA Practical Analyzer
 trAnalysis Frequency Resolution
 tdSampled Data for the Discrete Fourier Transform
 tASampled Data Aliasing
 tRDiscrete Sine and Cosine References
 tfDFT Frequency Resolution
 tFThe Fast Fourier Transform
 tCFundamental Time - Frequency Domain Concepts


ti INTRODUCTION:

 The Fourier Transform is a mathematical method that converts
 an input signal from the TIME DOMAIN to the FREQUENCY DOMAIN.
 The time domain is displayed as a WAVEFORM of voltage versus
 time, whereas the frequency domain is shown as a SPECTRUM of
 magnitude or power versus frequency.  Daqarta uses the F0F-key
 to toggle between the time and frequency domains.

 This discussion of Fourier Transform methods will begin with
 the original "continuous" Fourier Transform, which is the
 basis for several types of analog instruments, then proceed to
 the tdDiscrete Fourier Transform (DFT) needed for digital
 systems, and finally the tFFast Fourier Transform (FFT), which
 is the streamlined version of the DFT in common use.

 Unlike the usual "textbook" treatment of these subjects, there
 are NO integrals or summations, NO complex or imaginary
 numbers, and NO "compact" notational tricks.  No math is used
 beyond the high school level, yet nothing has been "watered
 down". Instead, the focus is on a deeper understanding of
 fundamental principles... the "gut-level" kind of knowledge
 that is often missing from academic engineering formalism.


ts SINE WAVE SYNTHESIS:

 The Fourier Transform and its kin operate by analyzing an
 input waveform into a series of sinusoidal waves of various
 frequencies and amplitudes.  (If you are not comfortable with
 sine waves, frequency, phase, and the like, mSSine Wave Basics
 will help get you rolling.)

 It turns out that ANY waveform can be built from only sine and
 cosine waves of various amplitudes, and hence any waveform can
 be broken down or "analyzed" into these same components.  This
 is not due to any magical abilities of sinusoids... you could
 actually use practically ANY wave shape, no matter how silly
 (waves that look like the profile of a '57 Chevy or Lincoln's
 face, for instance).  But sinusoids are useful because we can
 relate them to meaningful physical phenomena like vibrations:
 The harmonics of a voice or a violin string, the resonance of
 a structure during an earthquake, the buzz of insect wings,
 the whine of a defective gear or bearing in a machine.

 The classic example of sine wave synthesis is a square wave,
 built from a sine wave at the fundamental frequency, plus
 another at 3 times that frequency (known as the "3rd
 harmonic") but 1/3 the amplitude, plus a 5th harmonic at 1/5
 the amplitude, and so on for all odd harmonics.  You can
 try your hand at this sort of synthesis with the Daqarta
 SGStimulus Generator... see mwMaking Waves for details.


ta SINE WAVE ANALYSIS:

 The heart of all Fourier analysis is, amazingly, a single high
 school trigonometry formula for the product of two sines:

    sin(A) * sin(B) = 1/2 * cos(A-B) - 1/2 * cos(A+B)

 That's it, the heaviest math we need to deal with here.
 You don't need to memorize it, since the important thing to
 understand is not the formula itself, but how it works.  We
 will look at this step by step.

 When you first ran across this in high school, the A and B
 referred to fixed angles, and this probably didn't look too
 useful.  But it also works just fine with sine WAVES, where
 the angles are just increasing with time and the waves come
 from the circular nature of the sine function.

 The formula can thus be used for multiplying together two
 "pure tone" sine waves at single frequencies A and B.  This is
 not something we encounter in daily life, since most often we
 have waves that ADD together.  For example, the sounds of two
 different musical instruments add together in the air... they
 don't multiply.

 Because they add, we still have two separate waves sin(A) and
 sin(B) in the air, at their original frequencies A and B,
 which our ears will interpret as the corresponding pitches.
 This is NOT the same as sin(A+B), which would be a single new
 wave at a higher frequency and thus a higher pitch.

 But what would happen if we could MULTIPLY two tones, which
 doesn't happen with normal sounds?  According to the formula,
 we would get two completely different tones, one with a
 frequency that is the sum of the original two frequencies, and
 one that is the difference.  The fact that these are cosine
 waves instead of sine waves is trivial:  A cosine wave is just
 a sine wave that starts a little earlier or later in time...
 our ears can't tell an ongoing sine wave from an ongoing
 cosine wave.

 Suppose the two original tone frequencies are 392 Hz and 440
 Hz, equivalent to the fundamental frequencies of the G and A
 keys just above mNmiddle C on a piano.  If we multiply these
 together, we get a "difference" tone of 48 Hz, and a "sum"
 tone of 832 Hz... not even close to the originals, which are
 now completely gone!

 Although the formula assumes each wave has an amplitude of one
 unit, we could easily scale either input (or both) up or down,
 and the output would scale accordingly.  Notice that if we
 multiply the A wave input by some factor Ka and the B wave by
 Kb, we will multiply each output by the product of these, Ka *
 Kb.  This means that no matter if one input has a large
 amplitude and one has a small amplitude, both the sum tone and
 the difference tone would be EQUAL in amplitude... at half of
 the product of the original input amplitudes.

 Now suppose that both of the original tones had the same
 frequency, say 440 Hz.  After multiplying, the "sum" tone
 would be 880 Hz, and the "difference" tone would be ZERO Hz.
 At zero frequency, this is hardly a "tone" any more... it
 would just be a constant value equal to the amplitude of the
 880 Hz wave.  (You might recall that the cosine of 0 is 1.)

 If we try to imagine each of these as sounds, the 880 Hz wave
 would just be a tone that is an octave higher than the
 original 440 Hz wave.  At any given point in the air, the
 pressure would rise and fall through 880 up-and-down cycles
 per second, but on the average the pressure at that point
 would be unchanged.  Not so with the 0 Hz component, which
 would represent a constant pressure increase.  Since both of
 these components are present at the same time, we can consider
 that the new air pressure would be oscillating about a higher
 value.  If we measured the average increase in pressure, we
 would know the amplitude of the 0 Hz component, and since we
 know that both components are always equal we would know the
 amplitude of the 880 Hz component as well.

 Notice that if the two input frequencies are NOT equal, there
 will be no 0 Hz output component and the average value will
 thus stay at zero.

 Of course, we don't actually do all this with sounds and air
 pressure, since we don't have a handy way to multiply these.
 Instead, we convert the sound (or whatever waveform we are
 interested in) into voltage, and convert that into numbers
 that can be dealt with by computers.

 The general strategy is this:  Let sin(A) be an input of
 unknown frequency and amplitude, and sin(B) be a known
 reference frequency of unity amplitude.  To find out if the
 unknown frequency is equal to the reference, we multiply these
 together and average the product.  If the average is zero, the
 frequencies are different and we know nothing more.  If the
 average is NOT zero, we know that the input frequency is the
 same as the reference, and that its amplitude is twice the
 average value (since the reference amplitude is unity).  By
 trying numerous reference frequencies we can find one that
 matches the input.

tE You can demonstrate these concepts with the B0Virtual Source,
 using the special MULT function obtained by setting AM Pct
 below 0:
    BbBits = 16
    BwWave = Sine
    BfFreq = 500                  (The "input" frequency)
    BlLevel = half or full scale      (The "input" level)
    BnNoise = 0 or some low level
    BmFM Hz = 0
    BmF Hz = 0
    BaAM Hz = 100                 (The reference frequency)
    BxAM Pct = MULT             (MULT level is always 100%)

 The waveform will be rolling madly if the TCtrigger source is
 set to Main... set it to AM instead.  (The trace will still
 roll very slowly, since the 32-bit math used can't maintain
 these two frequencies at a perfect integer ratio.  Use P0Pause
 to stop the rolling, if you prefer.)  Notice that the extent
 of the waveform above the 0 Volts line appears to be equal to
 the extent below it... if you cut a tracing of the waveform
 out of heavy stock it would balance along the 0 line.

 Now set AM Hz to 500 to match the input Freq, and you will see
 that the entire product appears ABOVE the zero line, centered
 about a constant value that is 1/2 of whatever you set for
 Level.

 We haven't done any averaging here, since the Daqarta A0averager
 keeps separate averages each time point during multiple
 sweeps, whereas here we want to average together all the
 points from each sweep to get a single average value.

 You can get an approximation, however, by toggling TtTrig to
 Free and letting the trace roll, then averaging a lot of
 ASsweeps.  The average should be nearly a flat line at zero
 Volts if the frequencies are different, or at half the input
 amplitude if they are the same.  These would correspond to the
 single values obtained from averages of these respective wave
 products.


tc A CONCEPTUAL ANALYZER:

 To apply these principles to analyze an unknown input signal,
 it seems that all we need to do is multiply it by a unity
 amplitude reference wave with adjustable frequency, average
 the product to extract only results from matching frequencies,
 double each average to get the input amplitude, and plot this
 amplitude versus reference frequency to get a spectrum.

  Unknown        ┌───────┐      ┌─────────┐
  Sine In ──────┤       │      │ Average │
                 │   X   ├─────┤  Value  ├───── Amplitude
  Reference ────┤       │      │   x2    │
  Sine In        └───────┘      └─────────┘

 This is basically sound, but there is a slight complication:
 The sine product formula works for sine waves "in phase",
 which means that both waves must start from zero at the same
 time.  The averaged product only tells us about the amplitude
 of a signal with that exact same alignment.  If the signal
 starts a little earlier or later than the reference wave, even
 if its frequency is the same, the constant value will be
 reduced and likewise our measurement of the signal amplitude.
 If the signal is a cosine wave, the measured amplitude will be
 zero.  Since in general the reference wave won't have any
 fixed phase alignment with the signal wave, this is a serious
 problem.


tp A PRACTICAL ANALYZER:

 But all is not lost.  It turns out there is a very similar
 m<formula for the product of two cosine waves, which differs
 only in that the cos(A+B) term of the product is positive
 instead of negative.  We can thus analyze the unknown signal
 via two pathways:  One multiplies the signal by a reference
 sine wave as before, while the other multiplies by a reference
 cosine wave of the same frequency.  Each path performs a
 separate averaging and doubling operation, so we get two
 separate outputs which are the sine and cosine components of
 the input amplitude.  We can find the true amplitude or
 "magnitude" at each reference frequency by taking the
 mvvector sum of the sine and cosine components.

  Signal                    ┌─────┐    ┌─────────┐
  In ──┬───────────────────┤     │    │ Average │
       │                    │  X  ├───┤  Value  ├─── Sine
       │         ┌─────────┤     │    │   x2    │   Component
       │         │Sine      └─────┘    └─────────┘
       │   ┌─────┴─────┐
       │   │ Reference │
       │   │  Source   │
       │   └─────┬─────┘
       │         │Cosine    ┌─────┐    ┌─────────┐
       │         └─────────┤     │    │ Average │
       │                    │  X  ├───┤  Value  ├─── Cosine
       └───────────────────┤     │    │   x2    │   Component
                            └─────┘    └─────────┘


 This is the essence of an ordinary "continuous" Fourier
 Transform, which according to standard formulations would
 entail using an infinite number of reference frequencies and
 averaging for an infinite time at each one to get infinite
 frequency resolution of our unknown input.  If we are in a
 hurry, however, we might settle for somewhat less resolution
 by using fewer frequencies and shorter averaging times.


tr ANALYSIS FREQUENCY RESOLUTION:

 Frequency resolution is controlled by the spacing of the
 reference frequencies that we use.  If we want to resolve a
 500 Hz input signal to within 1 Hz, for instance, that means
 we must get zero output from the average when the reference
 frequency is at 499 or 501 Hz.  According to the product
 m<formula, the multiplier will give a component with a
 difference frequency of 1 Hz under these conditions.

 We know that a sinusoid averages to zero due to symmetry, so
 we must average over at LEAST one full cycle to take advantage
 of this.  (In fact, if we are not going to average over a
 really long interval, we should always make sure we at least
 have an INTEGER number of cycles.)  The take-home message here
 is that the averaging interval must always be at least as long
 as the reciprocal of the desired frequency resolution.  (1 sec
 for 1 Hz resolution, 0.1 sec for 10 Hz resolution, etc.)

 In our Virtual Source tEexample, try setting AM Hz to 501 while
 Freq is still 500 Hz.  The product will show the expected 1001
 Hz sum frequency, but the 1 Hz difference frequency will cause
 it to slowly ride up and down.  A short-term average might
 catch this at a peak or valley, and would thus not give the
 desired zero output.

 Several types of measuring instruments use these continuous
 Fourier Transform methods, including Wave Analyzers (now
 nearly extinct), Swept Spectrum Analyzers (still used for
 radio frequencies), and Lock-In Amplifiers (used for high
 resolution and sensitivity at single frequencies).  But for
 most spectral analysis work at frequencies under about 100
 kHz, digital methods now dominate.


td SAMPLED DATA FOR THE DISCRETE FOURIER TRANSFORM:

 Unlike the continuous Fourier Transform just described, the
 Discrete Fourier Transform (DFT) uses digital methods that
 allow computer inplementation.  In place of a continuous input
 signal we will need SAMPLED DATA from an Analog-to-Digital
 Converter (GAADC).  This takes samples of the input at regular
 intervals and gives a digital number proportional to the
 instantaneous voltage.

 Here is an example of a sampled sine wave.  Bars above the
 horizontal line are positive numbers, while those below are
 negative:

        │           │           │           │
       │││         │││         │││         │││
       │││         │││         │││         │││
      │││││       │││││       │││││       │││││
      │││││       │││││       │││││       │││││
     └┴┴┴┴┴┬┬┬┬┬┬┴┴┴┴┴┴┬┬┬┬┬┬┴┴┴┴┴┴┬┬┬┬┬┬┴┴┴┴┴┴┬┬┬┬┬┬┴
            │││││       │││││       │││││       │││││
            │││││       │││││       │││││       │││││
             │││         │││         │││         │││
             │││         │││         │││         │││
              │           │           │           │

 The time between samples is called the XpSAMPLE PERIOD, and the
 rate of sampling is called (surprise!) the XfSAMPLE RATE or
 SAMPLING FREQUENCY.  No information is available about what
 the input does between samples, so we must make sure that we
 sample often enough to adequately represent its behavior.


tA SAMPLED DATA ALIASING:

 In the above example, we see a 1 kHz signal sampled at 12 kHz.
 If we reduce the sample rate to 2 kHz, we get every 6th sample
 compared to the above:

     └─────┬─────┴─────┬─────┴─────┬─────┴─────┬─────┴

 Clearly, this does not give a proper representation of the
 true signal amplitude, although in this case it does give the
 proper frequency.  In fact, if the relative phase between the
 signal and the sampling were changed (by starting on another
 sample of the original, or at any other point on the wave), we
 could get any amplitude from the proper value down to zero.
 This signal is at exactly half the sampling rate, which is a
 special limit called the NYQUIST FREQUENCY.  If we sample even
 more slowly, so that the signal is above the Nyquist
 frequency, we can get bizarre results.  Here is the same 1 kHz
 signal sampled at 1.714 kHz (1/7 of the original 12 kHz rate):

                   │             │
                   │             │
                   │             │                    │
                   │             │                    │
     └──────┬──────┴──────┬──────┴──────┬──────┬──────┴
            │             │             │
            │             │             │
                          │
                          │
                          │

 The apparent frequency turns out to be "reflected" about the
 Nyquist frequency, in that it appears to be below the Nyquist
 by the same amount that it is actually above.  In this case
 the Nyquist frequency is 1714 / 2 = 857 Hz, so the real signal
 is 1000 - 857 = 143 Hz above the Nyquist... but it looks like
 it is at 857 - 143 = 714 Hz.  This phenomenon is called
 "aliasing", and the reflected frequency is a "alias".

 In the real world, we typically set the sample rate at some
 reasonable value to handle the expected range of inputs, such
 that no input frequency component is more than half the sample
 rate.

 You can demonstrate the effects of aliasing by setting the
 BwVirtual Source Wave to Sine and running its BfFreq up past the
 Nyquist limit.  (Make sure that BaAM Hz and BdAM Pct are set to 0
 after the prior tEexperiment.)  Since the waveform display will
 get rather crowded near the limit, XtXpand the trace to better
 see the details.  Try changing to L0Line0 points-only display
 mode to see just where the samples fall.

 Hit the F0F-key to observe the spectrum display.  Run the test
 Freq up and watch the spectral response line "bounce" off the
 right end of the (unexpanded) frequency display, then move
 down as you continue to raise the frequency.  Eventually,
 the response frequency will go down to zero and bounce back in
 the proper direction, but the indicated frequency will be
 lower by the amount of the sampling frequency.  The bouncing
 continues for ever-higher test frequencies.

 It should be clear from the above that the sample rate should
 be set so that it is more than twice the highest component
 frequency of interest, to prevent desired components from
 aliasing to other frequencies.

 But what about other components that we don't really care
 about?  Unfortunately, they can alias down and clutter up or
 confuse the desired spectrum with extraneous peaks and
 background trash.  If you can't avoid the presence of these
 components by a different design of your experiment, and if
 you can't raise the sample rate high enough to avoid problems
 with them, you may need to use an ANTI-ALIAS FILTER to remove
 them before they reach the GAADC.

 Anti-alias filters must be carefully chosen in order to avoid
 other problems with your data.  A filter which sharply reduces
 frequencies above its "cutoff" will usually also cause phase
 shifts which can alter the appearance of the waveform, even if
 they don't affect the spectrum.  Further, transient inputs may
 provoke waveform overshoot and ringing behavior.

 Naturally, the types of filters that are least prone to these
 problems also don't have very sharp cutoffs unless they are
 made very complex.  Here complexity is measured by filter
 "order", which is the number of tuned stages required.

 For information about constructing your own filters, a good
 place to start is the Active Filter Cookbook by Don Lancaster.
 If you must use an anti-alias filter, be sure to check its
 effect on known test inputs before conducting any real
 experiments.


tR DISCRETE SINE AND COSINE REFERENCES:

 Once we have properly sampled the input signal into digital
 form, our spectrum analyzer needs to multiply by sine and
 cosine reference waves in similar digital form.

 Imagine a big circular table holding sine values for all
 angles around a full circle, as though we had replaced the
 numerals and tick-marks on a round clock face with the sine of
 the angle of the second hand at each position.  If we then
 step through this table and read each value in order, we will
 generate a sine wave.

 Since the table is circular, after we read the last value we
 proceed to wrap around and read the first again, and so on to
 generate a continuous wave.  We can use the same table to
 generate a cosine wave just by starting at the 90 degree
 position and proceeding around as before.

 The frequency of the generated wave depends upon how many
 complete cycles we step around per second.  But we don't
 actually need to do this in "real" time, since we can have a
 copy of the sampled input signal in memory somewhere.  We can
 use this copy over and over for each different reference
 frequency, for both sine and cosine waves, and perform the
 necessary multiplications and averages as fast as we can.  We
 only need to insure that each input sample is multiplied by
 the same value as would happen in real time.  We can thus take
 a single set of samples and multiply it by many different
 frequencies "at once", or at least "pretty darn quick", before
 the next set of input samples.

 Suppose we have collected 1024 samples of our signal, and
 further suppose our sine table divides the whole circle into
 the same number of steps.  (NpN = 1024, in Daqarta terms.)  If
 we multiply each sine value from the table with each signal
 value in order, we will in effect be multiplying by a
 frequency that is one cycle per 1024 samples, or 1/1024 of the
 sample rate that was used to acquire the signal.

 To multiply by other frequencies, we can just move around the
 sine table with bigger steps.  For example, to get 2/1024 of
 the sample frequency, we skip every other step in the table.
 Of course, we will need to make two circuits of the table
 while we work through our set of 1024 signal data samples.
 For 3/1024 of the sample rate, we take every 3rd table value
 and make 3 circuits per 1024 samples, and so on up through
 511/1024.  We don't need to bother with 512/1024 of the
 sample rate, since that would be the tANyquist frequency and
 we already know we can't believe what we get with that!

 We also need to average the results of our multiplications.
 For each frequency, we will have 1024 multiplications as we
 work through the input sample set, so we just add each of
 these products into one total, then divide by 1024 to get the
 average value for that frequency.  We need to do this
 separately for sine and cosine waves at each frequency.

 We can also determine the 0 frequency (DC) component of the
 signal just by averaging all the input samples.  This is the
 same as if the reference waves were generated by taking 0
 steps per sample:  All the sine values would stay at the
 initial value of 0, so we can ignore them.  All the cosine
 values would stay at 1, so we can skip the multiplication
 by them and just average the input samples directly.


tf DFT FREQUENCY RESOLUTION:

 The frequency resolution is just the sample frequency divided
 by the number of samples (which is also the number of steps in
 the sine table).  If we have a Xfsample rate of 10240 Hz for our
 NpN = 1024 samples, for instance, we will get 10 Hz resolution.

 But what happens with an input of, say, 505 Hz falling between
 the 500 and 510 Hz reference frequencies?  The multiplier
 product for each of these will contain a 5 Hz difference
 component, but it won't average to zero since our 1024 samples
 represent only 0.1 second... just one half-cycle of the full 5
 Hz wave.  The average value for a half-cycle of a sinusoid
 turns out to be 2 / pi or about 0.6366, so our spectrum
 analyzer will report both 500 and 510 Hz components, scaled to
 this fraction of the true magnitude that would have appeared
 at 505.

 What's more, the 490 and 520 Hz reference products will
 contain 15 Hz difference components, and they won't average to
 zero either because we will have 1.5 cycles of these.  The
 full cycle portion will average out, but the remaining half
 cycle is one third of the total so these components will show
 magnitudes scaled by 0.6366 / 3 or 0.2122.

 The same phenomenon is repeated as we move farther above and
 below the true frequency:  At 480 and 530 Hz we have 25 Hz
 components of which we have 2.5 cycles, with the half cycle
 making up 1/5 of the total so we have components scaled by
 0.6366 / 5 = 0.1273.  At 470 and 540 Hz we have components
 scaled by 0.6366 / 7, at 460 and 550 Hz they are scaled by
 0.6366 / 9, and so on, giving "skirts" in our spectrum instead
 of one simple line.  This effect is typically called
 "leakage", since energy appears to have leaked from the true
 frequency to many other frequencies.

 Use the B0Virtual Source to view this phenomenon.  Set the
 Xfsample rate to 10240 Hz in the X0X-axis menu.  NOTE:  You will
 need to run with NO acquisition board driver in your UfDQA.CFG
 file.  The default Virtual Source sample rate "timer" can
 easily be set to emulate 10240 Hz, whereas most real board
 timers (including the 0BDEMO driver) can't hit this exact rate.
 They must use a sample period that is an integer number of a
 master clock rate, which is usually 1, 5, or 10 MHz, giving
 periods that are multiples of 1, 0.2, or 0.1 µsec... not the
 97.65625 µsec needed.  The demo requires a power-of-2 sample
 rate because NpN values are always powers of 2 and the Virtual
 Source BfFreq control only supports integer frequencies.

 Set the Virtual Source Freq to 500 for an initial comparison.
 View the spectrum via the F0F-key and you will see one single
 line whose magnitude is the value you set for Level.  Now
 change Freq to 505 to see the above-mentioned leakage skirts.

 If you use the 0rtrace cursors to check the magnitudes, you will
 see that they don't come out quite right.  The prior
 discussion ignored the half-cycle portions of multiplier
 products that are the SUM of frequencies, but those also
 contribute a small amount.  For a reference at 500 Hz, the
 "sum" term at 1005 Hz will contribute 0.6366 / 201, while at
 510 Hz the 1015 Hz term will SUBTRACT 0.6366 / 203.  This is
 because the frequency difference term changes polarity between
 these two cases, from 505 - 500 = +5 to 505 - 510 = -5, while
 the sum term does not.  (A negative sine wave is the same as a
 positive sine with polarity inverted, as though we were
 starting at the zero point and going BACKWARDS in time to the
 negative phase of the preceding cycle.)  Since the displayed
 spectrum shows magnitudes, however, all values are shown as
 positive.

 Set Freq down to 105 Hz, and watch this bias toward the low
 frequency skirts become more pronounced.  Since the sum terms
 are now lower in frequency, they make fewer full cycles over
 the 1024 product values being averaged, giving the odd
 half-cycle a bigger fraction of the whole.

 The bias effect depends upon the phase of the input signal,
 assumed in the above discussion to be a pure sine.  A cosine
 input gives reversed skirt bias, so that the high side
 components are greater.  To try a cosine input, go to the TmTrig
 menu and set the trigger TlLevel to maximum.  (You can just
 enter an impossibly large number like '1k' for Level, and
 Daqarta will limit it to the maximum for the input range.)
 You can experiment with different trigger Level and T+Slope
 settings to produce input signals of any phase.

 With trigger Level back at zero, flip back to view the
 waveform and you will see that the 105 Hz signal has an odd
 half-cycle shown on the trace, which turns out to give the
 largest possible skirts in the spectrum.  Increasing or
 decreasing the BfFreq setting will place it nearer to one of the
 10 Hz reference frequencies and reduce the skirts, as it makes
 the number of waveform cycles nearer to the next higher or
 lower integer.

 Another way to think about this whole situation is to consider
 that the spectrum is always correct, given that the input
 samples are treated as one unit of a repeating waveform.  If
 the set of input samples contains an exact integer number of
 cycles, then additional identical sets of samples can be
 spliced together to make a seamless infinite wave.  But if the
 set ends with a fraction of a cycle, the splices will cause
 abrupt steps every N samples:

     |- N samples --|

        │           │   │           │   │           │
       │││         ││  │││         ││  │││         ││
       │││         ││  │││         ││  │││         ││
      │││││       │││ │││││       │││ │││││       │││
      │││││       │││ │││││       │││ │││││       │││
     └┴┴┴┴┴┬┬┬┬┬┬┴┴┴┴┴┴┴┴┴┴┬┬┬┬┬┬┴┴┴┴┴┴┴┴┴┴┬┬┬┬┬┬┴┴┴┴ - - -
            │││││           │││││           │││││
            │││││           │││││           │││││
             │││             │││             │││
             │││             │││             │││
              │               │               │

 The spectrum of such a stepped infinite wave will have just
 the type of leakage skirts that we have seen.

 These skirts, or "sidelobes" as they are often called, can be
 reduced by changing the Xfsample rate to minimize the fractional
 cycles.  If this is not possible, a "Wtwindow" can smooth the
 ends of the sample set to minimize the discontinuity.  See
 WTWindow Theory for a full discussion.


tF THE FAST FOURIER TRANSFORM:

 The above tdDiscrete Fourier Transform is a general application
 of tiFourier Transform theory using digital methods.  But it's
 rather slow, since all NpN samples must be multiplied by sine
 and cosine values at each frequency, for N/2 different
 frequencies, giving N² total multiplications.  That's over
 1 million if N = 1024, and multiplication is one of the SLOWER
 instructions on most computers.  Back in the '60s, however, a
 couple of clever gents named Cooley and Tukey noticed that the
 set of DFT calculations contains a lot of redundancy and
 wasted effort.

 For one thing, everywhere the sine or cosine reference values
 go to zero, there is no point multiplying the input sample...
 just use the zero directly.  Likewise, everyhere the
 multipliers are +1, the input value could just be copied
 directly.  If the multiplier is -1, we only need a sign
 change.

 Similarly, a particular input sample may end up being
 multiplied by the same numerical value for the sine or cosine
 components of many different reference frequencies.  For
 example, the value of 0.7071 is repeated every 45 degrees
 around a sine or cosine cycle with only sign changes.  And
 since each sample will be multiplied by all the different
 input frequencies, it turns out that many of them will use the
 same values on the same sample.  We could do a single multiply
 of each input sample by each of these recurring values, and
 then just use that result (maybe with a sign change) for all
 future needs in that set of input samples.

 These recurring conditions happen a LOT, especially if the
 number of samples happens to be a power of 2.  The whole
 operation becomes an accounting nightmare of keeping track of
 which redundant value should be plugged in where, but Cooley
 and Tukey came up with a method to keep everything straight,
 and the Fast Fourier Transform (FFT) was born.  Subsequent
 workers have come up with all sorts of enhancements, but the
 basic idea remains:  Don't waste time doing the same thing
 twice.

 Where the number of multiplications in a typical DFT
 quadruples when the N is doubled, for a typical FFT it only
 slightly more than doubles.  For N = 1024, the FFT turns out
 to be about 100 times faster than the DFT.

 The Npnumber of points N must be a power of 2 for almost all FFT
 algorithms, whereas for a DFT we could use any arbitrary
 number.  This is not a trivial difference, since with the DFT
 the number of samples can be adjusted so the sample set holds
 an integer number of input cycles, eliminating "tfskirts" in the
 spectrum.

 In practice, however, the DFT is only useful for recorded data
 that the user can manipulate at leisure to find the right
 number of points, and wait for slow computations... not
 feasible for a "live" system like Daqarta.  Instead, FFT
 systems must use Xfsample rate adjustment or WTwindowing
 methods to reduce these leakage skirts.

tC FUNDAMENTAL TIME - FREQUENCY DOMAIN CONCEPTS:

 Consider a continuous pure sine wave.  Its waveform is spread
 throughout the time domain, but its spectrum is only a single
 line in the frequency domain.  Now consider a signal
 consisting of only a single spike in the time domain.  It has
 a perfectly constant spectrum spread throughout the frequency
 domain.

 You can check this out using the SGSTIM3A Advanced Stimulus
 Signal Generator, which includes a Pulse Wave option.  Or, if
 you simply wish to view a pulse and its spectrum you can use
 the BvVirtual Source with the method discussed under Y6Step
 response correction.

 Flip to the spectrum display with the F0F-key and boost the
 Fmtrace magnification (or switch to the F2Y-log power spectrum
 mode) to see the constant low-level spectrum.  The level is
 low because the single time-domain spike doesn't have a lot
 of energy (or power) to begin with, and the spectrum shows the
 level at EACH frequency.

 Similarly, if we compare a continuous sine wave to a tone
 burst of that same sine wave, we find that the narrower we
 make the burst, the broader the spectrum.  This holds as a
 general rule... you can't limit the extent of a signal in one
 domain without increasing its extent in the other.  There is
 always a balance between the domains.

 This is also an UNCERTAINTY PRINCIPLE (like Heisenberg's) that
 limits our ability to resolve features in both the time domain
 and frequency domain simultaneously.  Consider that to get
 fine frequency resolution, we must use a large Npsample size N,
 which means a large total time to acquire the sample set.  If
 the input signal is rapidly changing, we will get some sort of
 "average" spectrum of the N-samples time interval... and we
 can't assign that whole spectrum to any particular event or
 sample in the input.  Conversely, we can try to narrow down
 the input event times by using smaller N, but the spectral
 resolution becomes more coarse.  This is a particular issue
 with S0spectrograms, where we are specifically interested in how
 the spectrum changes with time.


F0
 FFT / WAVEFORM MODES:

 When the FFT option (F-key) is inactive, the display shows
 waveforms as voltage (or UuUser Units) versus time.  When the
 FFT option is active, the display changes to show the spectrum
 of the corresponding waveform display.  This will be a plot of
 magnitude vs frequency (magnitude spectrum) unless the F2Y-Log
 option is also active to show a power spectrum instead.  The
 spectrum is computed from NpN points of the waveform using
 the F?Fast Fourier Transform (FFT).


Fa AMPLITUDE RESOLUTION:

 The trace area is 256 Gppixels tall, so amplitudes are scaled
 accordingly for display.  Internally, values are maintained as
 16-bit numbers for instantaneous waveforms and for each half
 (mvsine and cosine, or real and imaginary) of an FFT point (32
 bits total), as 32-bit numbers for waveform A0averages, and as
 48-bit numbers for FFT averages.  In FeFFT32 mode, each
 component is computed with 32-bit values instead of 16.


Fm TRACE MAGNIFICATION:

 When the H0Help system is inactive, the PgUp-key increases the
 size of the trace on the screen, and the PgDn-key reduces it,
 over 25 ranges in factors of 2 for linear displays (21 ranges
 in F2Y-log FFT mode).  The 0YY-axis is always scaled to match,
 taking into consideration the gain range used by the data
 acquisition board plus any factor needed to convert to
 UuUser Units, if active.

 In the linear modes, SHIFT-PgUp and SHIFT-PgDn behave just
 like PgUp and PgDn, but can also work with the H25-line Help
 mode (SHIFT-H).  In FFT Y-log mode, the shifted page keys
 behave differently:  They "slide" the current log range up or
 down to show detailed views of any portion of the trace.  For
 example, your signal may have high-level components near 0 dB
 and a noise floor near -100 dB.  To see the entire trace, you
 would need to set the range to cover 100 dB or more.  But if
 you are particularly interested in components near the noise
 floor, you can set a smaller range (say, 20 dB total) with the
 page keys, then use the SHIFT-Pg keys to slide it to cover -90
 to -110 dB.  (You can also use the YrFS Ref menu control for
 direct entry of the range top, instead of scrolling with the
 SHIFT-Pg keys.)

 The Y-log ranges can be set to cover up to 180 dB, or as
 little as 6 dB total.

 The least-sensitive linear range is always 32 times the
 Fsfull scale input of the data acquisition board, so if the
 board is set to a 100 mV range, for example, the screen
 magnifications run from +/- 3.2 V to +/- 190 nV in waveform
 mode, or 0-3.2 V to 0-190 nV in FFT mode.  In either mode, the
 Y-axis is always scaled with user-friendly steps in a 1, 2, 5,
 10 sequence. (In Y-log FFT mode there are 21 ranges in 2, 5,
 10, and 20 GadB steps.)

 ┌─────────────────────────────────────────────────────────┐
 │  TIP:                                                   │
 │  The screen magnifications are retained separately      │
 │  between modes, so you can enlarge the FFT view to see  │
 │  fine detail without having the waveform view go        │
 │  off-scale when you flip back to it.                    │
 └─────────────────────────────────────────────────────────┘

 Why so many steps?  With a 16-bit board on a 100 mV range, a
 single bit is about 3 microvolts.  However, when you A0average,
 you can extend the resolution proportional to the number of
 averages.  So if you averaged 32768 sweeps together (the
 maximum Daqarta allows and probably WAY more than most of us
 want to wait for), you could theoretically get resolution down
 around 900 nV... and Daqarta would still have room for future
 expansion.

 And why go HIGHER than the maximum output of the board?
 Though it is not obvious at first, the SPECTRUM of a wave can
 easily have components in it that are larger than the wave.
 You can see this for yourself with the BvVirtual Source.   Set
 the output to a Bwsine wave at the maximum Bllevel... let's say it
 is +/- 100 mV.  Hit FFT and you will see a spectral line at
 the source frequency with an amplitude of about 100.  (It
 might not be exact if you didn't have an exactly integer
 number of cycles in the waveform display.  Fine-tune the
 Bffrequency until you get a maximal response from the spectral
 line.)  Now change the source to a square wave and the line
 jumps up to about 127 mV... you may need to use PgDn to see
 it.  There will also be other lines at odd harmonics of this.

 What's going on here?  The square wave can be regarded as the
 sum of a bunch of sine waves.  The fundamental has an
 amplitude of +/- 127 mV.  To this is added another wave at
 3 times the frequency and 1/3 the amplitude.  By the time the
 first wave just reaches its first positive peak, this 3rd
 harmonic will have gone through one and a half complete cycles
 and will be at its NEGATIVE peak... so the sum of the two
 waves is actually LESS than the fundamental component.  The
 further harmonics just elaborate on this process.  But the
 FFT knows all, sees all.  It can pull the true value of the
 components out of the mix.

 But if all we needed was to resolve the occasional large FFT
 fundamental, the highest range could be twice full scale.
 Ranges up to 32 times are needed since the MAMemory Array option
 allows up to 32 traces on the screen at once, and you might
 need to reduce their sizes so they don't interfere with each
 other.

 If you have a signal that is too large for the magnification,
 the trace will be "clipped" to the screen limits.  Higher or
 lower parts of the signal are shown as horizontal lines at the
 appropriate screen boundary... they don't just vanish.  If
 you want to see these parts, just reduce the magnification as
 needed.

 One exception to this is if the signal is actually too large
 for the current full-scale range of the ADC board, such that
 the GAADC itself is clipping the signal.  In this case, reducing
 the trace magnification will just show a smaller version of
 the clipped signal.  This is a serious problem, since the
 missing data is truly lost.  Worse, the clipping distortion
 will contaminate both AWwaveform and Afspectrum averages.  You
 must either switch your board to a less-sensitive range, if it
 has one, or arrange to reduce the signal externally.


Fs FORCING FULL-SCALE (or PRESET) TRACE MAGNIFICATION:

 Use SHIFT-HOME to force the Fmtrace magnification to show the
 full-scale range of the board (start-up default).  SHIFT-END
 will restore the prior magnification.  This is simply a
 convenience if you have made a lot of changes and forget where
 you are.  However, it also allows you to do a quick check on
 waveform or spectrum peaks, such as when you are concerned
 that your input signal may be nearing the limit of the GAADC.
 You can then return to monitoring some low-level feature that
 requires higher magnification.

 If FFT F2Y-log mode is active, SHIFT-HOME and SHIFT-END will
 force and restore both the overall dB range and the top dB
 value (the Yrfull-scale reference).

 You can set SHIFT-HOME to force any magnification you want,
 not just the full-scale default.  Use the normal Fmpage keys to
 set the desired magnification, then hit SHIFT-ALT-HOME.  There
 will be no apparent effect just then, but the next time you
 hit SHIFT-HOME, you will get the new preset magnification.
 For FFT Y-log mode, the full-scale reference is included.

 If you have two different magnifications that you must often
 switch between, just preset the first with SHIFT-ALT-HOME,
 then go to the second.  Now hitting SHIFT-HOME will force the
 first, and SHIFT-END will return to the second.

 Note that these same keys also affect the Y-axis display in
 S0Spectrogram mode when NpN = 1024 points, but in a different
 manner since this is now an expanded frequency axis.  Here
 SHIFT-HOME forces the range to the bottom half of the spectral
 points (the start-up default), and SHIFT-END restores the
 prior range.


Fh TRACE MAGNIFICATION vs HELP:

 When the H0Help system is active in the H2upper (25-line) mode, it
 replaces the trace area so Fmtrace magnification is not needed.
 The page keys then function to page through the Help text.

 If the Help system is active but shifted to the lower (5-line)
 mode, the page keys still act to page through the Help text
 (at 5 lines per "page" instead of 25), but now there is a
 visible trace that we might want to magnify or reduce.  In
 this case, use the SHIFT-PgUp and SHIFT-PgDn keys to perform
 the same functions that PgUp and PgDn performed when Help was
 inactive.

 Although it would have been nice to have a consistent
 interface, it was felt that this system would be more friendly
 in the long run based on actual use.  However, if interface
 consistency is more important than cutting extra keystrokes,
 you can use the SHIFT-page keys to control magnification even
 when Help is not active... you can think of this as S for
 SHIFT and Scaling.  (But note that in F2Y-log mode the shifted
 page keys Yr"slide" the current range while keeping the same
 total size in dB, whether Help is active or not.)


Za TRACE AUTO ZERO (Zero):

 You may want to look at a small signal waveform in the
 presence of a larger constant level, or "DC offset".  If you
 try to increase the Fmtrace magnification to see small details
 in the waveform, the offset is increased as well and may drive
 your signal right off the screen.  In this situation, hit the
 Z-key to activate the trace Auto Zero mode.  In this mode the
 constant offset is subtracted before display, so the small
 signal appears centered about zero on the trace.  You can now
 apply magnification without the offset.

 ZeroA:
 There are actually two forms of the Auto Zero option, that
 differ in how the constant offset is computed.  When you first
 hit the Z-key, the option will change from 'Zero' to 'ZeroA'
 as well as becoming highlighted.  The A stands for Average:
 All the data points are simply averaged together to determine
 the constant value.  This is probably the best choice if your
 signals are very one-sided, like a spiky neural discharge, or
 even if your signals are symmetrical but have one-sided noise
 spikes.

 Under extreme conditions, it may not be possible to actually
 use the simple average value this way.  For example, if there
 is a very large positive peak together with a negative average
 value, subtracting the average could actually force the peak
 to a value larger than the 16-bit data format can handle.
 Daqarta detects this condition automatically, and adjusts the
 constant to eliminate as much of the offset as possible and
 still keep the peak in range.

 ZeroP:
 If your signal is a known symmetrical waveform (like a sine
 wave, triangle, ramp, square, etc.) and especially if its
 frequency is low relative to the sample rate (so that you only
 see a few cycles per trace), this alternative method is
 probably better.  Hit the Z-key again and it will convert to a
 highlighted 'ZeroP', where the P stands for Peak.  The
 constant offset is now assumed to be midway between the most
 positive and most negative peaks.  If the waveform is really
 symmetrical, this will give its true zero value.

 ┌─────────────────────────────────────────────────────────┐
 │  TIP:                                                   │
 │  To make a Peak-to-Peak measurement on ANY repetitive   │
 │  waveform, even one that is not symmetrical, it is      │
 │  often faster to use the ZeroP option.  Read only the   │
 │  positive peak with a single cursor movement, and just  │
 │  double the reading.  This may be easier than           │
 │  adjusting both cursors and using the "delta" readout.  │
 │  Of course, ZeroP is an ideal method for reading        │
 │  Zero-to-Peak values for waves with known symmetry.     │
 └─────────────────────────────────────────────────────────┘

 Why can't you just use ZeroA to get the same result?  You
 actually CAN if you have an exact integer number of cycles
 of the wave on each sweep, since then the positive half-cycles
 will average out with the negative half cycles.  But this
 rarely happens by chance... you usually have an extra fraction
 of a cycle that throws off the average.  Having ZeroA active
 in this circumstance will actually show an offset that isn't
 really there!  This problem becomes worse at low frequencies
 since the fractional cycle can be a larger percent of the
 total.

 When a Zero option is active, the waveform 0rcursor readouts
 show the value without the DC level.  If you need to read the
 total level, you must toggle Zero off.  If you have increased
 the Fmtrace magnification while Zero was active, this may send
 the trace off the screen... but the readouts will still be
 correct.

 If you want to set a particular Zero state using a K0Key Macro,
 you can use the KOKeyOn option to force the ZeroA mode from the
 Z-key, with an additional Z-key to get to ZeroP.

 Note that the Zero option is only available in waveform
 display modes.  In spectrum modes the presence of DC only
 affects the 0 frequency value, not the rest of the spectrum,
 so there is no need to remove it.

 The presence of a DC offset is actually fairly common when
 observing small signals.  Biological signals are notorious for
 this, due to "contact potentials".  These are effectively tiny
 batteries that are formed at electrodes in contact with tissue
 fluids.  Proper selection of electrode materials (such as
 silver with silver chloride) can help this problem, but you
 will usually want to have a mFhigh-pass filter as well, to
 remove any residual DC levels.  This is almost always required
 if you are going to use a preamplifier to boost the signal
 before sending it to your acquisition board or other
 instrumentation.  Otherwise, the preamp will boost the DC as
 well as the signal, and the preamp or the acquisition board
 will overload... essentially the same problem as trace
 Fmmagnification without the Auto Zero option.

 So if you have a high-pass filter to block DC levels, why
 would you ever need Auto Zero?  True, the filter may block the
 DC from the reaching the preamp, but inevitably there are
 other sources of DC within the system... even with the input
 signal removed and the inputs shorted together.  Amplifiers,
 including the preamps on the data acquisition board, always
 have small DC errors, particularly if you are using a "sound
 card" instead of a laboratory board.  Sound cards have no
 place to "adjust out" these errors, so Auto Zero is the only
 way to get rid of them.

 But beware of using Auto Zero indiscriminately, instead of an
 input high-pass filter.  If the DC offset becomes large
 enough, the board preamp or the GAADC chip itself may be
 overloaded, and you won't get any advance warning... Auto Zero
 will prevent you from seeing the trace drifting off the top or
 bottom of the screen.  The first indication of a problem will
 most likely be a distorted waveform, such as a flattened top
 or bottom portion from banging into the amplifier limits, but
 this may be hard to spot at first.

 Most sound cards have built-in high-pass filters so they don't
 have this particular problem, but if yours doesn't, or you are
 using a laboratory board (which almost never have filters),
 you need a way to keep an eye on things.  You can toggle the
 Zero key off momentarily to see where the trace is, but just
 because it is off-screen with a highly-magnified trace does
 not mean you are near the range limits yet.

 The easiest way to handle this is to hit FsSHIFT-HOME to force
 the Fmtrace magnification to show the full-scale range for your
 board, and see if the trace looks like it's getting near the
 screen limits.  SHIFT-END will then restore the prior view.

 Or you could just look at the 0rcursor readouts with Zero off,
 and see if the values look like they are getting near
 full scale.

 You can also get a quick graphical view of the DC in the
 signal just by flipping to the F0FFT mode and looking at the 0
 frequency line on the spectrum.  You will need to allow for
 the fact that signal peaks will push the input closer to the
 full-scale limit than indicated by the DC component alone,
 but with a little practice on any particular signal you
 should be able to get a good feel for what is going on.


Ft WAVEFORM TIME RESOLUTION:

 This is the same as the Xpsample period (the reciprocal of
 the Xfsample frequency).  When the Npnumber of points N is 256 or
 512, each sample is shown separately on the trace.  However,
 since the trace area is only 512 Gpscreen pixels wide, samples
 are combined for display when the number of points is 1024.
 The 0rtrace cursors will nevertheless read each sample
 separately, even if there is no visible cursor motion when
 moving between adjacent samples.


Ff FFT FREQUENCY RESOLUTION:

 The Xfsampling frequency and the number of waveform points
 (NpN samples) processed to compute the FFT determine the
 frequency resolution.  There will be half as many frequency
 points as there were waveform points, and they will be spread
 uniformly from zero (DC) to half the sample frequency, so
 the resolution will be the sample frequency divided by the
 number of points.

 For example, with a sample rate of 40 kHz, the resolution with
 256 points will be 40000/256 = 156.25 Hz per frequency point.
 At 512 points it will be 78.125 Hz, and at 1024 points it will
 be 39.0625 Hz.  These calculations are all incorporated by
 Daqarta into the 0XX-axis display, so you will rarely need to
 give them much consideration.

F1
 FFT CPM MODE:

 SHIFT-C invokes the CPM mode, which shows the X-axis in units
 of Cycles Per Minute (CPM).  Users who are working with
 rotating machinery often prefer to see frequencies expressed
 in CPM instead of Hertz (1 Hz = 1 cycle / second = 60 CPM),
 since CPM is the same as Revolutions Per Minute (RPM).  So if
 you know that the crankshaft of your car engine is turning at
 2000 RPM, you might expect a vibration pickup to see a
 corresponding spectral peak at 2000 CPM.  Since a 4-stroke
 engine takes 2 complete crank revolutions to fire all
 cylinders, you should also see a peak at the firing rate of
 RPM * Cylinders / 2.  Other peaks may be used to monitor the
 motions of other parts of the engine.

 In complex machinery, the use of spectral analysis can help
 with machine maintenace.  Using a vibration transducer, you
 record spectra from various points of the machine on a
 regular schedule.  You can then compare current recordings
 to earlier ones to detect changes.  If you know how many teeth
 are on each gear, or what the various pulley ratios are, or
 how many balls are in a bearing, you can make a pretty good
 guess as to what is causing a spectral peak to rise over time.
 Spotting a defective part before the problem becomes critical
 might save some very expensive down-time, especially since one
 failed part may often cause others to fail as well.

 The CPM key is disabled when not in FFT mode.

F2
 FFT POWER SPECTRUM DISPLAY (Y-log):

 When the FFT mode is active, the Y-key toggles between linear
 (magnitude) and logarithmic (power) Y-axis display modes.
 This key is disabled when not in FFT mode.  When Y-log is
 active, the Y-axis is labeled in GadB going down from 0,
 where 0 dB is the full-scale input range.  There are 21
 ranges, from -6 dB to -180 dB, with -90 dB default.  Use the
 FmPgUp and PgDn keys to change ranges.

 You can also use the YrSHIFT-PgUp/PgDn keys or the FS Ref
 control to "slide" the axis to get a detailed view of a
 larger range.  For example, you can set the top of the axis to
 -90 dB, and reduce the range to magnify just the portion from
 -90 to -100 dB.

 The normal dynamic range of a 16-bit input is theoretically
 only about 96 dB, but that is the ratio of the largest signal
 to the total noise in all frequency bands.  The contribution
 from each individual frequency (the "noise floor") can be much
 lower... in theory, as low as -125 dB for an FFT of 1024
 points, assuming "infinite" precision in compuations (no
 roundoff or truncation).  Daqarta approaches this limit only
 in FeFFT32 mode, which uses 32-bit calculations... with the
 normal 16-bit calculations the limit is more like -90 dB.

 To handle cases where the spectrum contains components larger
 than full scale, each log range has extra room above 0 dB
 adequate for worst case conditions.

 Since the dB is a unit of power (proportional to the square of
 magnitude), certain relationships are more easily seen.  Also,
 the entire range of the signal can be shown in one display.
 With the linear magnitude display, if the Fmmagnification
 is set so that you can see the higher peaks of a typical
 signal, the lower peaks and the background noise are usually
 off the bottom of the trace.

 In acoustics and electronics, a logarithmic vertical display
 is the standard means for showing the frequency response of a
 system.  Because of the nature of logarithms, the response to
 different input levels gives the same shape with only a
 vertical shift, so it's easy to see if two responses are the
 same or different.  With a linear magnitude display, this is
 much harder, since the two responses would be related by a
 multiplicative factor.

Fe
 HIGH DYNAMIC RANGE FFTs (FFT32):

 SHIFT-F shifts into 32-bit FFT mode, instead of the default
 16-bit mode.  When FFT32 is active, all F?FFT calculations are
 carried out with double precision for increased dynamic range.

 Use FFT32 when you are interested in extremely low-level
 components... say below -70 or -80 GadB.  To get the maximum
 advantage from this, you will need to use W0windowing in order
 to eliminate leakage "tfskirts" that can otherwise mask
 low-level information.  Better yet, adjust the test frequency
 or X0sample rate to insure an integer ratio between them.  If
 you are using the SGSTIM3A Advanced Stimulus Signal Generator to
 provide a driving signal, the StepN option will fine-tune its
 frequency automatically to insure that the stimulus is locked
 to an exact FFT spectral line.

 FFT32 mode can resolve components more than 100 dB below
 full-scale.  Measurements in this range require great care to
 prevent extraneous noise sources from contaminating the data.
 Many real-world signals will require AWwaveform averaging to
 reduce noise.  (A1Start the waveform averager and then toggle
 to F0FFT mode to see the enhanced spectrum... don't use Afspectral
 averaging, which shows average noise without reducing it.)

 This extra dynamic range comes at a price of computation
 speed... FFT32 typically takes about twice as long to compute
 each spectrum, or more than 4 times as long on older (286 or
 8088) CPUs.  This may be a trivial difference on fast modern
 systems, so you might want to leave FFT32 activated all the
 time.  You can always shift back when you need ultimate speed.

 When FFT32 is active in S0Spectrogram mode, a separate color
 Stsensitivity system is employed to allow use of the increased
 range.

F3
 POWER SPECTRAL DENSITY (PSD):

 The SHIFT-P key activates PSD mode from the F2power spectrum
 (Y-log) mode.  This simply scales the Y-log display by the
 Fffrequency resolution to give power per Hz instead of power.
 Since this just results in a vertical shift in the log
 display, why would we want to bother?  The reason is that this
 makes it possible to compare results taken with different
 Xfsample rates or Npnumber of samples N.

 PSD is only useful (and valid) for continuous spectra like
 Bnnoise sources, where there is energy at every frequency.  Each
 FFT output point represents a narrow band of frequencies, and
 its value is the composite of all of those.  Clearly, if we
 combined two or more adjacent bands together, the power in the
 new band should be the total of the individual powers.  (Note
 that this does not hold true with magnitudes:  Since power
 is related to the SQUARE of magnitude, we would need to take
 the square root of the total.)

 A 512 point FFT would have bands that are twice as wide as a
 1024 point FFT, so there would be more total power per band
 and the simple power spectrum would appear to show more power.
 Of course, there isn't really any more TOTAL power, since
 there are fewer bands, but if you were trying to compare these
 two spectra it would not be at all obvious that they were
 actually recorded from the same source.

 The PSD mode simplifies this by showing the results as if each
 FFT band was exactly 1 Hz wide, so no matter how the original
 spectrum was taken the results are comparable.

 You can see the benefits of PSD mode for yourself using the
 B0Virtual Source.  Set the Bnnoise level fairly high and look at
 the ordinary power spectrum (F2Ylog active, but not PSD).  As
 you hit the NpN-key to roll between 256, 512, and 1024 points,
 you see the apparent level drop as the number of points
 increases.  Now activate PSD.  The overall level drops to
 reflect the fact that we are now looking at the effective
 level in bands only 1 Hz wide, but it does not change when you
 change the number of points.

 To understand why this is NOT valid for line spectra, consider
 that a pure sine wave has all its power in an "infinitely"
 narrow band in the first place.  If an FFT filter band is
 tuned exactly to this frequency, the sine wave should be
 captured completely.  Making that filter wider wouldn't allow
 "more" of the wave through, since there isn't any more... all
 we could do would be to let through other adjacent
 frequencies.

 You can try this experiment with the B0Virtual Source, but in
 order to get meaningful results, you must make sure the
 Bwsine wave is in the center of one of the FFT filters.  The
 easiest way to do this is to fine-tune the Bffrequency for
 maximum output from a single spectral line.  If you do this in
 the 256 point mode, then when you move to more points
 (narrower filters), the sine will still be centered... and its
 level will not change.  This will be true in linear magnitude
 or normal F2power spectrum (Y-log) modes.  In PSD mode, however,
 the level changes... clearly a bogus result since we know the
 power in the sine is not changing.

Fx
 FFT X-LOG DISPLAY (X-log):

 The FFT 0XX-axis can be toggled to or from logarithmic display
 mode via ALT-X.  Combined with the F2Y-log mode to get a log-log
 display, this is a standard method for viewing scientific and
 engineering data of all sorts, especially where wide ranges
 must be shown in a single view.

 Many phenomena that show an exponential response on a linear
 scale become linear on a log-log scale.  A typical example of
 this is the behavior of a simple mFlow-pass filter:  Above its
 cutoff frequency, the output falls off proportional to the
 inverse of frequency.  In log terms, this halving for each
 frequency doubling is usually expressed as a slope of "6 GadB
 per octave" or the equivalent "20 dB per decade".  For a
 filter whose response falls as the inverse square of
 frequency, the log-log slope would be 12 dB per octave, and
 for the inverse cube it would be 18 dB per octave.

 The log-log slope, properly interpreted, is thus a measure of
 the mathematical "degree" of the underlying equation of a
 simple system, be it mechanical, electrical, or whatever.
 Although there are many pitfalls to using this idea to analyze
 an unknown system, it can be very useful when carefully
 applied to well-behaved systems.

 If you use the XtXpand function while in X-log mode, the
 settings are kept separate from those of linear FFT mode.

W0
 WINDOWING:

 WTWindow Theory
 WpWindow Problems with Transients
 WNWindow Effects with Noise
 WMWindowing with Mixed Signals
 WtWindow Function Toggle
 WmWindow Function Control Menu
      Window Type:
         WnHanning
         WhHamming
         WbBlackman
         WxBlackman Exact
         WrBlackman-Harris
         WfFlat-Top
     WcBandwidth Correction
     WvShape View

WT
 WINDOW THEORY:

 The F?FFT function treats the NpN samples that it receives as
 though they formed the basic unit of a repetitive waveform:
 It assumes that if we took more samples they would repeat
 exactly, with the (N + 1) sample being identical to the first
 sample, and so on.  In other words, we should be able to
 reproduce that repetitive input by playing back our N samples,
 looping from the last sample back to the first, over and over
 continuously.  In reality, this is only true if the input is a
 repeating waveform AND its basic frequency is an exact
 multiple of the Xfsample rate divided by N.

 Real signals are rarely that cooperative.  The usual case is
 that if our N samples start at one point in a cycle, they end
 at some other point, so that if we really did play these back
 in a loop we would get a discontinuity or "glitch" between the
 last sample and the first.  If the original signal was a pure
 sine wave, our replica would have a buzz added to it, and the
 bigger the discontinuity, the louder the buzz would sound.
 The buzz would have a frequency of the sample rate divided by
 N, which would not be a harmonic of the input wave and would
 thus sound very bad.

 And this is exactly what the F0FFT spectrum shows.  Try this
 with the B0Virtual Source:  Set a Bwsine wave to show an exact
 integer number of cycles on the waveform display, and flip to
 the FFT display.  You will see a single line at the sine wave
 Bffrequency if you tuned things just right.  Flip to F2Y-log to
 get a better view of the lower levels.

 Now adjust the frequency slowly and watch the leakage "tfskirts"
 of the peak broaden as you move farther from the optimum
 value, then drop back down again as you get nearer to the next
 integer number of cycles... which you can verify by flipping
 back to see the waveform.  Set the frequency so that the
 waveform ends on a positive or negative peak, and when you
 flip to the FFT you will find the broad skirts again,
 indicating lots of energy at frequencies other than the one we
 set.

 ┌─────────────────────────────────────────────────────────┐
 │  TIP:                                                   │
 │  Be careful when trying to set an integer number of     │
 │  cycles at high (relative) frequencies.  The goal is    │
 │  not to make the last point on the trace line up with   │
 │  the first point, but to make the last point match the  │
 │  one JUST BEFORE the first point.  As you get more      │
 │  cycles on the trace, the signal moves farther between  │
 │  samples, so the sample just before the zero-cross may  │
 │  be well below (or above) zero.  When in doubt, trust   │
 │  the FFT to show this... when you get the lowest        │
 │  skirts, you are closest to the integer alignment.      │
 └─────────────────────────────────────────────────────────┘

 The FFT shows us something besides an increase in bogus
 "skirt" signal when we don't have an integer number of cycles:
 We have also lost some of the true signal energy from the
 peak.  How can we get an accurate reading of our signal?  The
 obvious and best way is to adjust the Xfsample rate (or the
 signal itself, if that is an option) to get integer alignment.
 But with a changing signal, or one that contains more than one
 component frequency, that may not be possible.

 The problem comes from that glitch where the end of the trace
 should wrap back to the start.  Hmmmm... what if we could
 somehow taper both ends of the set of samples down to zero, so
 they always lined up perfectly if we looped them?  What would
 that do to the spectrum?

 Consider what would happen if the signal was amplitude
 modulated (BaAM) with a sinusoid whose period exactly matched
 our NpN-points sampling interval.  The signal would smoothly go
 from zero to full-strength and back to zero, once per cycle.
 Those already familiar with AM may recall that the spectrum
 has two sidebands, one above and one below the carrier
 frequency, separated from it by the modulating frequency.
 This tells us what to expect from our tapered-samples
 spectrum:

 In our case, the modulating frequency is one cycle per N
 points, which is the line spacing of the FFT output.  So
 instead of just the spectral line at our desired "carrier"
 frequency, we will see that one, plus one on each side of it.
 Our ability to resolve the true frequency is thus reduced, but
 if we can get rid of the large leakage tfskirts without needing
 to fiddle with the sample frequency, this might be a bargain.

 Let's use the B0Virtual Source to see what happens:  Set BwWave to
 Sine and BlLevel to half of full scale.  With an X-axis
 Xfsampling frequency of 20 kHz and N = 512, one cycle per N
 samples is 20000 / 512 or 39.0625 Hz.  Set BaAM Hz to 39 and
 BdAM Pct to 100.  The waveform should look very bouncy, since it
 is still being triggered on the "carrier", and the AM wave is
 not synchronized to it.

 Go to the TmTrigger control menu and set TCSource to TAAM.
 You'll see a flat-nosed whale whose nose starts at half of
 full scale, back rises to full scale and swoops down to zero,
 and tail rises back to half-scale... we are triggering on the
 modulator, and modulator zero is the original half-scale
 signal level.  Instead, set the trigger TlLevel to minus
 full scale:  The negative modulator peak is where the output
 goes to zero, so now our trace starts at zero, and yes, ends
 at zero as well... just what we wanted.

 Now flip F0FFT on and look at the spectrum:  A slightly fatter
 peak with skirts almost as low as when we had the sine wave
 set for exact integer cycles.  Change the frequency and the
 peak moves to match, changing only slightly in level with
 nothing much happening to the skirts.  Problem solved!

 The formal name for this process is "windowing", and the
 "window function" is the shape that we multiply the data by.
 In our AM case this is a sinusoid, and with our trigger
 arrangement it is really a cosine wave raised up so the
 negative peaks are at zero.  For true AM, the positive peaks
 are at twice the carrier level, but this would force us to
 always limit our input level to half of full scale.  Instead,
 we can make our raised cosine half as large, so the positive
 peak goes only to unity.  Now when we multiply our data
 samples by this window, we will never need to worry about
 overloading anything, and we can just multiply the final
 spectrum magnitudes by two to correct for this.

 This raised cosine is called a WnHanning window, but there are
 many more shapes in use.  Most are based on variants of this,
 usually with an additional cosine component at twice the
 frequency.  Which one is the best?

 As it turns out, none of the other windows is really all THAT
 much better than our first try, the Hanning window.  There are
 tradeoffs, however, and for critical work it could make a
 difference.  Ideally, we would like to have no leakage tfskirts
 at all, but the best we can do is control their shape.

 The WhHamming window (not to be confused with Hanning!) gives a
 narrower spectral peak than the Hanning at higher levels, in
 exchange for flaring skirts farther down.  The WbBlackman, and
 its derivatives WxBlackman Exact and Blackman-Harris, give a
 wider peak than the Hanning but with even lower skirts.  A
 WfFlat Top gives the widest peak, with skirts about like
 Hamming, but the top of the peak is flattest for the most
 accurate level readings with changing frequencies.

 To familiarize yourself with these different windows, use the
 B0Virtual Source with BdAM Pct set to zero.  (Set the
 TCtrigger source back to Main and the Tltrigger level to zero if
 they are still set from the above AM experiment.)  Set BfFreq to
 give the widest spectral skirts in F2Y-log FFT mode, then
 activate the window (WtWindo) with the W-key.  Use CTRL-W to
 bring up the WmWindow control menu, and select each different
 window type in turn as you watch the shape of the spectrum.
 Change the frequency around and toggle Windo off and on, and
 try toggling TtTrig off and on as well to get the big picture.

 You can see the actual Wvshape of the window function itself by
 flipping to the waveform display while the window menu is
 active.  The shape will be shown superimposed over the
 waveform.  Note that the signal waveform is shown unwindowed
 unless you specifically activate Windo in the waveform mode...
 even if it was previously active in FFT mode.  Daqarta keeps
 these states separate between modes.

 OK, so now that we see how wonderful windows are, we can just
 pick a decent window type and always leave it on in FFT mode,
 right?  WRONG!  There are other aspects to windowing that we
 have not considered:  The effect on transient signals, and on
 broadband signals like noise.


Wp WINDOW PROBLEMS WITH TRANSIENTS:

 Suppose our signal consisted of a transient spike that decayed
 away sinusoidally over many samples... perhaps the acoustic
 response of a bell or plucked string, or the acceleration of a
 mechanical structure after a test impact.  Clearly we would
 have a problem if we windowed this data, since if the spike is
 at the start (the usual case) we might window it away
 completely!


WN WINDOW EFFECTS WITH NOISE:

 Each spectral line in the FFT represents the output of a
 filter... 256 of them for a Np512 point FFT.  Even though we see
 the output as a single narrow line, each filter actually
 accepts frequencies over a finite bandwidth that overlaps with
 adjacent filters.  For a broadband noise signal, with equal
 energy at all frequencies, adjacent filters exactly complement
 each other's responses ("Nice looking skirt!"  "Thanks, yours
 too!") so that the output of each is correct for total power
 when no window is used.

 Unfortunately, the use of a window function has the effect of
 widening each filter so that it sees too much adjacent energy.
 Its output for broadband inputs is thus larger than it should
 be.  In the case of the Hanning window, for example, the noise
 bandwidth of each filter is 50% wider than normal, so its
 power output is 1.5 times larger, or 1.76 GadB greater.

 For this reason it is necessary to use a special bandwidth
 Wccorrection factor when measuring broadband responses with a
 window.  Of course, if the signal is ONLY broadband, then
 there is no need for a window in the first place, because
 there are no regular waveforms to be off-integer.


WM WINDOWING WITH MIXED SIGNALS:

 Windowing presents a dilemma for mixed signals, which are
 really the norm... after all, there is ALWAYS some noise
 present, even if we don't want it.  How do we read both the
 sinusoidal components and the background noise?  If the
 source frequency is off-integer, without windowing there will
 be large leakage tfskirts which may completely swamp any low
 level background noise.  But even with windowing active the
 window itself may have skirt energy in the noise area.

 The best way to handle this situation is to adjust the source
 frequency and/or Xfsample rate to get an integer relation.  If
 this is not possible, you must make certain that the window
 skirts are not obscuring the noise you want to measure.

 Be sure to turn off the Wcbandwidth correction factor when you
 make readings of the spectral peaks, and turn it back on when
 you read the broadband areas.


Wt
 WINDOW FUNCTION TOGGLE (Windo):

 The unshifted W-key toggles a window function that is applied
 to the raw data.  Separate states are maintained for waveform
 and F0FFT modes, so you can apply the window while viewing the
 spectrum, but it won't be applied to the waveform display if
 you flip back to that.  However, you CAN apply the window to
 the waveform if you want to see the same data that a windowed
 FFT would get as its input.  This can be useful not only to
 get a feel for how windows work, but also to check that no
 important aspect near the beginning or end of of a waveform is
 being overly suppressed by the window.

 The spectrum is unaffected by whether or not Windo is active
 in the waveform mode... it never gets "applied twice" when
 set in both modes.

 When Windo is inactive, the 0ltitle line above the trace will
 show Rect to indicate that a Rectangular window is applied
 to the data... the effective window function is unity for all
 data points, so the raw data just passes right through.  When
 Windo is active, the title line will show the window type,
 such as WnHann or WhHamm, which was previously selected by the
 WmWindow control menu.


Wm
 WINDOW FUNCTION CONTROL MENU:

 This CTRL-W menu allows selection of a window function type,
 and allows viewing its shape superimposed on the waveform
 trace.  It also allows a bandwidth correction factor to be
 applied to the FFT scaling results.


Wn WINDOW TYPE:

 The window type controls the shape of the window function
 applied to the raw data.  The proper name of each type is
 shown here, followed by the shortened version used to fit in
 the narrow menu space, then if needed by the 4-character
 abbreviation used in the title line when the window is active.

 Hanning (Hann):
 Good resolution of spectral peaks and good rejection of
 sidelobe leakage "tfskirts" at low levels for input signals that
 don't have an integer number of cycles in the NpN-points data
 set. A good choice for most uses.


Wh Hamming (Hamm):

 Finer resolution of spectral peaks than Hanning, but poorer
 rejection of sidelobe skirts at low levels.


Wb Blackman (Blkman, Bkmn):

 Peak resolution is not as fine as Hanning, but the response
 shape flares out less at lower levels and rejection of
 sidelobes is better.


Wx Blackman Exact (Bkm-Ex, BkmX):
Wr Blackman-Harris (Bkm-Hr, BkHr):

 Blackman Exact and Blackman-Harris are fairly similar to each
 other, but are both included for compatibility with existing
 data sets or preferences.  The peak resolution is similar to
 the regular Blackman, but the response shape flares out even
 less at lower levels.


Wf Flat-Top (FlaTop, Fltp):

 This has the broadest peak resolution, but the best amplitude
 accuracy of any window here.  It has a fairly straight
 response shape at high and middle levels, then flares out like
 the Hamming at lower levels with similarly poor sidelobe
 rejection.  Use this to measure spectral peaks where
 interference from adjacent frequencies is not a problem.

 One application for a Flat-Top window is where you are trying
 to measure the frequency response of a system using A^Peak mode
 Afspectral averaging with a frequency sweep.  Because the input
 frequency is constantly changing, the poor amplitude accuracy
 of other window types causes a jagged or rippled frequency
 response:  Some frequencies fall near a spectral line and give
 accurate, narrow peaks; others fall midway between lines and
 give lower, broader peaks.  The Flat-Top has broad peaks for
 all inputs, and little variation in amplitude.


Wc WINDOW BANDWIDTH CORRECTION (BW CORR):

 When this is set to 'On' it activates a special correction
 factor that accounts for the wider WNbandwidth overlap of each
 FFT line when a window is active.  Use this only when you want
 to find the total energy or power with broadband sources such
 as noise or closely-packed harmonics.  The peak amplitudes
 will be in error, but the energy or power will be correct.
 You will probably only need this when measuring the broadband
 portions of mixed narrow and broadband signals, since if the
 overall signal is broadband, you don't need any window at all.


Wv WINDOW SHAPE VIEW:

 This just allows the shape of the window to be superimposed
 over the waveform display.  It is left On by default, but you
 may want to turn it off for special operations like screen
 Psprinting or to reduce clutter in busy traces.


X0
 X-AXIS (SAMPLE RATE) CONTROL:

 XmX-Axis Control Menu
    XpSample Period
    XfSample Frequency (Rate)
    XlXpand Max and Min
    XbXpand Bar Toggle
 XteXpand Trace
 XceXpand on Cursors
 FxFFT X-Log Display

Xm
 X-AXIS CONTROL MENU:

 CTRL-X selects the X-axis control menu.  Separate controls are
 provided for sample period and sample frequency (even though
 they both have the same ultimate function), allowing you to
 work in the terms that are most relevant to the current
 operation.  Controls are also provided for trace expansion
 (XtXpand) limit settings and the presence of the XbXpand bar.


Xp SAMPLE PERIOD:

 This is just the time between samples, or the reciprocal of
 the sample frequency.  When working primarily with waveform
 data (as opposed to frequency spectra), it is often more
 convenient to think about the sample period, since it is in
 units of time and you are working with time as the 0XX-axis.
 Knowing the active NpN-points value, the extent of the full axis
 is just the number of points times the time per point.


Xf SAMPLE FREQUENCY (RATE):

 The number of samples per second, or sample rate.  The full
 FFT X-axis will be HALF of the sample frequency... which is
 also known as the tANyquist frequency.

 Whether you choose to adjust period or frequency, the control
 is fully "live" (as are almost all Daqarta controls).  This
 allows easy matching of sample rate to a multiple of an input
 frequency... you can scroll the sample rate while you monitor
 the waveform for an integral number of cycles, or monitor the
 spectrum for minimum spread of spectral lines.  This is a very
 poweful technique that can often allow you to avoid using FFT
 W0window functions entirely.

 Typically, a data acquisition board provides a high frequency
 "master clock" source and a programmable counter-timer, the
 output of which initiates each sample.  A value loaded into
 the counter sets the number of "ticks" of the clock between
 counter outputs, so the sample frequency is just the clock
 frequency divided by the counter load value.  Another way to
 look at this is that the Xpsample period is the period of the
 master clock times the counter load.  This means the ultimate
 period resolution of the system can never be finer than one
 period of the master clock... and depending on the counter
 chip configuration may often be two periods.

 When you set the sample period or frequency you are actually
 sending a request to the board driver, which sets the closest
 value it can and reports back what that was.  For boards which
 have no clock or counter, the driver typically uses the main
 system counter-timer which otherwise would be used by DOS to
 update the time-of-day counters every 55 msec.  The source for
 this timer runs at the odd frequency of 1.19318 MHz (period of
 838 nsec), which results in a strange sample period resolution
 for these boards.

 ┌─────────────────────────────────────────────────────────┐
 │  HISTORICAL FOOTNOTE for engineering types:             │
 │  The unusual system timer frequency is a holdover from  │
 │  the original IBM PC, for compatibility reasons.  The   │
 │  IBM designers needed several timing references in the  │
 │  PC system, including the CPU clock, the time-of-day    │
 │  timer, and the TV color burst reference for the early  │
 │  CGA Color Graphics Adapter.  Of these, only the color  │
 │  burst frequency had an absolute requirement for a      │
 │  fixed value, to maintain compatibilty with standard    │
 │  color television signals if a standard TV was used as  │
 │  a monitor.  So the PC ended up with a master           │
 │  oscillator running at 14.31818 MHz, which the CGA      │
 │  divided by 4 to get the standard color burst           │
 │  frequency of 3.579545 MHz.  The master oscillator was  │
 │  divided by 3 to get the 4.77 MHz CPU clock (which      │
 │  only had to be less than the 5 MHz limit of the early  │
 │  8088 chips), and further divided by 4 again for the    │
 │  1.19318 MHz system timer.  The system timer counts up  │
 │  65536 ticks of this input to generate an interrupt     │
 │  every 54.925 msec, and 65536 of those interrupts to    │
 │  give an hour of 3599.59 seconds... Hmmmm.              │
 └─────────────────────────────────────────────────────────┘


Xl XPAND Max and Min:

 These allow scrolling of the X-axis XtXpand area for the current
 mode.  Separate settings are maintained for waveform, F0FFT, and
 FxX-log FFT displays, as well as for the Y-axis of the
 S0spectrogram with NpN of 1024.


Xb Bar:

 Allows you to turn off the bar display that appears beneath
 the X-axis when Xpand is active.

Xt
 eXPAND TRACE (Xpand):

 Hit the X-key to eXpand the displayed F0waveform or spectrum.
 This stretches out a portion of the displayed data for closer
 inspection... it does not change the actual data points.  The
 portion of the trace to be expanded can be selected via items
 in the XlX-axis control menu, or by using the XcXCurs function to
 Xpand the area between the 0rtrace Cursors.  Trace expansion has
 no effect on any ongoing process... you just get a different
 view of it.  Hit the X-key again to go back to the full view.

 When the trace has been expanded, the trace 03grid and 0XX-axis
 are redrawn with new divisions and labels as needed.  Below
 the X-axis an Xpand Bar will appear in the CXaxis color, which
 represents the unexpanded X-axis.  The portion of the original
 axis that has been expanded is represented on the bar in the
 CStrace screen color.  Display of this bar is optional:  You may
 turn it off with the XbXpand Bar item in the X-axis menu.

 There is no Xpand or XCurs function in S0spectrogram mode, but
 when NpN = 1024, only half of the frequency range is visible on
 the Y-axis.  Use the X-axis menu Xpand functions to slide that
 portion up or down in frequency over the whole range.  Or, use
 the PgUp/PgDn keys to do this... they still control the Y-axis
 here, even though that's now frequency instead of the normal
 Fmtrace magnification.  Similarly, FsSHIFT-HOME forces the range
 to start from zero (or any preset value), and SHIFT-END
 restores it.

 Separate Xpand range settings are maintained for waveform,
 spectrum, FxX-log spectrum, and 1024 point spectrogram modes.
 If you activate Xpand while viewing a waveform and then hit
 the F-key to view the spectrum, you will not be in Xpand mode
 there unless you explicitly set it while in that mode.

 This is useful for a common problem:  If you set the sampling
 rate high enough to see a nicely spread out waveform with only
 a few cycles on the trace, then the spectrum will be crowded
 down at the bottom of the frequency range.  Conversely, with
 the Xfsampling rate set to see a mid-screen spectrum, the
 waveform will appear so compressed as to be nearly useless.
 The solution is to shoot for a compromise sampling rate and
 then apply Xpand as needed to get nice traces.

 For waveforms, the maximum expansion allowed is when only 16
 data points are shown, regardless of whether you get there by
 XcXCurs or by manually setting the XlMax and Min values in the
 X-axis menu.  These 16 points can be anywhere within the
 original trace data.  If the expanded portion of a waveform is
 near the start, you can change NpN-points and still see the same
 trace... only the Xpand Bar changes to show that you are
 looking at a different part of the data set with the same
 start and stop times.

 If the expanded portion of a waveform is set to higher trace
 time points with N = 1024 (for instance), then if you shift to
 N = 256 those time points may be beyond the trace area, and
 Daqarta must adjust the expanded portion down to fit.  For
 example, with a 50 µsec Xpsample period (20 kHz rate) you can
 see 51.2 msec of data when N = 1024, but only 12.8 msec
 when N = 256.  So if you set the Xpand area to run from 10.0
 to 20.0 while N = 1024, then when you flip to 256 you will
 find that the Xpand area is from 10.0 to 12.8 msec.

 For spectra, the maximum expansion is based upon N = 1024,
 where you can have no fewer than 16 data points showing.  For
 N = 256 or 512 you will still see the same frequency range,
 but with a limit of 4 or 8 lines displayed, respectively.

Xc
 eXPAND ON CURSORS (XCurs):

 If you hit SHIFT-X, the F0waveform or spectrum between the two
 trace cursors will be expanded to fill the trace.  The XtXpand
 option will be shown active, and the XbXpand bar will appear
 below the X-axis just as if you had hit the unshifted X-key
 to select the Xpand function.  The XCurs option will not be
 shown as active, since you will use the unshifted X-key to
 toggle Xpand mode back off.

 Once XCurs has been hit, the new X-axis Xpand range becomes
 the setting for the normal Xpand function, and the limits will
 appear in the X-axis menu XlXpand Max and Min items.  You can
 then toggle Xpand off and back on with the unshifted X-key to
 return to this range.

 You can apply XCurs repeatedly to get greater and greater
 expansions, until as few as 16 data points are displayed
 in waveform mode, or as few as 4 data points in spectrum mode
 with NpN = 256.

Cc
 COLOR CONTROL:

 CMColor Menus
    CtTrace
    CAAlt / Text
    CSScreen
    CgGrid / Link
    CrCursors
    CXAxes
    ClLabels
    CmMenus
    CPPanel
 C_Color Submenus
    CVVGA Color Fine Adjustment
    06VGA Gray Scale (GrayS)
    CEEGA Color Fine Adjustment
    CCEGA Emulation on VGA
 CpColor Palettes
 CsPalette Operations Submenu
    CsMemory
    CeErase
    CvFile
    CLLoad
 CRModifying a Palette - Step by Step
 CwSpectrogram Color Weights
    CiColor Insert / Delete
 CaSpectrogram Color Assignment (ColorMap) Menu
    C0Palette
    C1Assign
    C2Select


CM COLOR MENUS:

 Color menus allow adjustment of all screen colors.

 CTRL-C invokes the main color menu in normal waveform and
 F0spectrum modes, and also in S0spectrogram mode.

 The first item in each color menu is the PALETTE.  There are
 two separate palette systems:  one for waveform and spectrum
 modes (called "main"), and one for Spectrogram mode.  Each
 system allows a separate multi-palette file to be Cvsaved or
 CLloaded.  Selecting a new palette from among those in the file
 currently loaded will change all screen colors to the new
 palette values.

 For waveform and spectrum modes, screen features like TRACE,
 GRID, and AXES are adjusted by selecting from the upper menu.
 When ENTER is hit, the cursor arrow will move to the boxed
 submenu, leaving behind a place-mark (*).  Submenu items may
 then be selected and adjusted as for normal menus.

 In spectrogram mode, individual color weights may be adjusted
 by a similar upper menu / submenu process.

 This Help system has its own palette in waveform and spectrum
 modes, allowing adjustment of text, link, Help cursor, and
 background colors.  When the upper Help system is active, this
 palette is used automatically, and is the palette that will
 appear when you enter the Color control menu.  If Help is not
 active, you can still manually roll to the Help Palette from
 the Palette item.  The Help Palette is not used for the lower
 Help system, or when Help is active in the Spectrogram
 mode.

 Monitor contrast and brightness controls can have a big effect
 on color balance.  Since Daqarta may allow more control over
 colors than many of the other programs that your system will
 be running, you might want to set the monitor controls for
 optimum results with your other programs.  Then create
 custom palettes for best results with Daqarta, and avoid
 further adjustments to the monitor.  This is particularly
 important if you want to have a smooth Spectrogram color
 sequence, since slight monitor changes can completely change
 the visual weights of adjacent colors.

 Items in the main color menu are:

Ct TRACE:  Sets the color of the main trace.

CA ALT:   Sets the color of alternate traces, used for
        MAMemory Array, Wvwindow shape view, SGstimulus view, etc.

 TEXT:  For the Help mode palette, sets the normal text color.

CS SCRN:  Sets the screen background color of the trace area.
        This color is also used for the expanded portion of
        the XtXpand bar.
        For the Help mode palette, sets the text background
        used when upper Help is active.

Cg GRID:  Sets the color of the verticl and horizontal 03grid dots
        in the trace area.
 LINK:  For the Help mode palette, sets the color of hypertext
        links that the cursor highlight can move to.

Cr CURS:  Sets the color of the trace cursor lines, as well as
        the menu cursor outline.
        For the Help mode palette, sets the color used to
        highlight the current hypertext link.

CX AXES:  Sets the color of the 0Yvertical and 0Xhorizontal axes,
        including the axis lines, tick marks, and all labels.
        This color is also used for for the TmTrigger control
        menu TlLevel/ Slope indicator bar, the A3Averager menu
        Alartifact rejection limit bar, and the portion of the
        XtXpand bar corresponding to the area not expanded.

Cl LABEL: Sets the color of all 0ltitle line labels, the main
        0rcursor readout units labels, the 0Koption key letters,
        and all 0mmessage line entries, including error messages,
        prompts, and comment entries.

Cm MENUS: Sets the color of all 0Mcontrol menu and key option
        items.

CP PANEL: Sets the color of the overall screen background, not
        including the trace background (set by SCRN).



C_ COLOR SUBMENUS:

 Color submenu values that control the screen color of the
 selected upper menu item may be adjusted in two ways:
 ■  The COLOR number is a value from 0 to 63 that refers to
    a particular color.
 ■  The Fine ADJUST values allow control over the mix of the
    three primary colors (Red, Green, and Blue) that make up
    the final color referred to by the above color number.


CV VGA COLOR FINE ADJUSTMENT:

 For VGA boards, the fine adjustments allow values from 0 to 63
 for each of the 3 primaries, for 262144 different possible
 colors that could be assigned to any given color number.  The
 color number is thus completely arbitrary.  For example, color
 number 9 normally has <red, green, blue> values of <0, 0, 63>,
 so it is very blue.  But these could be adjusted to <63, 0, 0>
 and the color would be bright red... and in fact identical to
 the normal color number 36.

 When VGA fine adjustments are made, the new primary values
 become associated with that color number, not the screen item
 that uses that number.  All screen items that use that same
 color number will thus appear in the same color.

 If you attempt to make fine adjustments of the primaries and
 find that you only get a step size of 21 (and the color number
 changes as well), that means you are operating in EGA mode
 instead of VGA mode.

 First, be sure that you really have a VGA graphics card in
 your system.  If you are uncertain, check the connector on
 the back of the card:  It should have 3 rows of pin holes.
 If it only has 2 rows, it is not a VGA card.

 If there are two connectors, your monitor must be able to
 operate while plugged into the one with 3 rows of holes. Some
 older monitors allow switching between EGA and VGA by means of
 a switch marked "Analog / TTL"... it must be in the Analog
 position for VGA.

 Another possibility, especially with an early VGA clone card,
 is that it doesn't support the IBM video detection standards
 properly.  In that case, you can try forcing VGA mode by
 setting V:v on the INIT line of the UfDQA.CFG file.  This
 will use the standard (slooowww) VGA BIOS function for Cppalette
 changes.  V:V invokes Daqarta's direct (default) method to
 eliminate flicker during palette changes, especially on slow
 systems.  No guarantees here!

 Note that if you have an EGA monitor connected to a VGA card
 (via the card's second connector, with two rows of holes), the
 card may still report your system as VGA.  Daqarta will try to
 update the border or "overscan" area surrounding the main
 display to match the Panel color.  Unfortunately, the EGA
 display timing isn't really fast enough to support this, so
 you will probably get a retrace streak near the bottom of the
 screen.  Force EGA mode with V:e to eliminate the border.


06 VGA GRAY-SCALE (GrayS):

 Gray-scale summing (SHIFT-G) allows a color VGA monitor to
 show the view that would be seen with a monochrome VGA
 monitor.  This allows Cpcolor palettes to be optimized for other
 systems like monochrome mllaptops while working on a color
 system.

 The GrayS option is crossed out on EGA systems.


CE EGA COLOR ADJUSTMENT:

 For EGA boards, there are only 64 possible colors, and the
 relationship between a color and its number is fixed.  Thus
 the fine adjust is interlocked with color number, so in the
 above VGA example color number 9 would actually change to
 other numbers as fine adjustments were made, ending at number
 36.  The smaller number of possible colors is translated into
 larger steps in the primary values as well... each primary may
 only have values of 0, 21, 42, or 63.


CC EGA EMULATION on VGA:

 VGA users may force EGA values by holding down the SHIFT key
 while making fine adjustments.  This allows design of color
 schemes that will be compatible with EGA systems.  Just as
 for EGA systems, the forced primaries will cause a new color
 number to be selected that has the matching EGA values.
 The old color number primaries will be unchanged, even if
 they were not EGA-compatible due to prior VGA fine adjust.

 If you are going to do a lot of this, consider setting V:E
 on the INIT line of the UfDQA.CFG file to force EGA mode.


Cp COLOR PALETTES:

 ■  A color palette is the set of all screen colors used at
    one time.
 ■  Multiple palettes can reside in memory.
 ■  Select the 'Palette' item from the menu to choose a new
    palette from memory.   keys scroll through palettes.

 Whenever a change is made to any color of a current palette,
 the palette is copied and given the name 'Work'.  All further
 changes are to 'Work', leaving the original unchanged.

 After the Work palette is created, it resides in memory with
 the other palettes, but with a "provisional" status.  It is
 not lost when scrolling to another palette, and can be
 scrolled back to be modified, but it will be OVERWRITTEN by
 modifying any other palette unless it is first saved to memory
 using the CTRL-PgUp CsPalette Operations submenu MEM option.

Cs
 PALETTE OPERATIONS SUBMENU:

 CTRL-PgUp while in a Color menu invokes a special submenu for
 Palette operations.  Move the menu cursor to the desired
 operation and hit ENTER.  The submenu will immediately vanish,
 and you will be guided by prompts on the message line.  You
 can hit ESC at any time if you change your mind.  To exit the
 submenu without perfoming any of the operations, hit ESC or
 CTRL-PgUp or CTRL-PgDn.

 PALETTE to MEM:
 MEM replaces the current palette with the Work palette, if
 any, or allows renaming the current palette if not.  If the
 current palette is Work, it will be converted into a regular
 palette with whatever name you choose.

 You will be prompted for a name for the new palette, with the
 default being the current palette name.  So if you want to
 replace that with the Work palette and keep the same name, you
 can just hit ENTER at the prompt.

 Palette names are strictly for your own reference, and there
 is nothing to prevent duplicate names.  Only the current
 palette can be replaced, and the prompt is just a way to allow
 you to rename it.  Entering the name of another palette will
 NOT cause that palette to be replaced instead of the current
 one... you will just end up with duplicate names.

 If the current palette is Work, you should enter a name that
 will be meaningful to you.  Don't accept the 'Work' default
 name, or that will become its regular selection name.  Then
 the next time you change any palette, another Work will be
 created that may confuse you.

 Palette memory capacity is limited to 23 normal palettes and
 13 spectrogram palettes beyond those loaded at startup.


Ce PALETTE ERASE:

 ERASE allows the current palette to be erased from memory.
 This may be needed to make room for other palettes, or simply
 to get rid of distractions if you make a lot of trial palettes
 while searching for one that is optimum for your setup.  You
 will be prompted for confirmation and allowed to ESCape.

 You will not be allowed to delete the main Help palette, but
 you can always replace it.  You will likewise not be able to
 delete the last regular palette in either main or Spectrogram
 modes.


Cv PALETTES to FILE:

 FILE saves all main or S0Spectrogram palette memory to disk as a
 multi-palette file, after prompting for a file name.  The
 default names are SGRAM.PAL and MAIN.PAL, or whatever files
 were loaded at startup on the third and fourth lines of the
 UfDQA.CFG file.

 Note that during DDisk recording this option and the LOAD
 option will not be accessible to prevent drive access
 conflicts.


CL LOAD PALETTES from FILE:

 LOAD prompts for the name of a multi-palette file to be read
 into memory, replacing all current main or Spectrogram
 palettes. The default names are SGRAM.PAL and MAIN.PAL, or
 whatever files were loaded at startup by the UfDQA.CFG file.

 During DDisk recording this option and the FILE option will
 not be accessible to prevent drive access conflicts.

CR
 MODIFYING A PALETTE - STEP BY STEP:

 Let's say you want to change the color of the text in this
 H0Help system.  Make sure you are viewing the Help text with the
 upper (25-line) mode in the trace area, so you can see the
 effects of your changes.

 ■  Select the palette to modify:
    Assuming you are not in S0Spectrogram mode (where the Help
    colors must be shared with the Spectrogram itself), use
    CTRL-C to bring up the main color 0Mmenu.  The CpPalette item
    at the top will automatically be set to 'Help' when you
    invoke the color menu while upper Help is active.  If you
    were modifying some other palette, you would need to ENTER
    the Palette item and 0cscroll to the desired palette.

 ■  Select the screen item to modify:
    Move the cursor down to the item you want to change, such
    as TEXT, and hit ENTER to select it.  (Note that since
    upper Help is active, all menu operations will require that
    the CTRL-key be held down to distinguish from Help
    operations.  This applies to both cursor and ENTER keys
    here.)  As soon as you hit ENTER, the cursor will jump to
    the bottom submenu, leaving behind a (*) marker.

 ■  Select the desired C_color submenu item:
    The cursor initially appears at the 'Color' control, but if
    you wish to use individual CVfine controls you should move to
    the 'Red', 'Grn', or 'Blu' Adjust items.  Hit ENTER (or
    CTRL-ENTER in this Help example) to select the desired
    color item.

 ■  Change the color submenu item:
    Use the cursors to scroll the item value up or down as
    desired, or use direct value entry.  Note that for this
    Help example you need CTRL-Up/Dn for scrolling, but you
    do NOT need CTRL-anything for direct entry... just hit the
    digits and the normal ENTER.  As soon as you make any
    change, you will see the Palette at the top of the menu
    change from 'Help' to 'Work'.

 ■  Go back to the screen item Select area:
    When you have set the desired color for the item, hit ESC
    (CTRL-ESC) to return the cursor to the (*) marked item.
    (You could instead scroll up out of the color submenu if
    you wished.)  You may now repeat the process to change any
    other screen item colors.

 ■  Select the original Palette:
    When you have all colors as desired, scroll up to the
    Palette item.  Enter that item and scroll it from the
    'Work' palette that you have just been modifying, back to
    the original... in this case the 'Help' palette.  Then hit
    ENTER (CTRL-ENTER) to select the original palette.

 ■  Invoke the CsPalette Operations Submenu:
    Use CTRL-PgUp to invoke the submenu, which will appear over
    the top portion of the color menu.

 ■  Select the MEM operation:
    Cursor to the MEM item (if the cursor isn't there already)
    and hit ENTER (CTRL-ENTER) to select it.  The submenu will
    vanish, and a prompt will appear on the message line:
        'Palette name: '
    followed by the current palette, 'Help' in this case.

 ■  Replace the current palette with the Work palette:
    Hit ENTER (no CTRL- needed from text entry) and the Work
    palette will replace the current Help palette.  Had you
    wished to also rename this palette to 'Hypr' or some other
    name instead of 'Help', you would enter that name at the
    prompt instead of accepting the 'Help' default.

 ■  Save to File (Optional):
    If you want to use this same palette in future sessions,
    you must save it to a file sometime before the current
    session ends.  Since all palettes of the current mode (main
    or Spectrogram) are saved at once, you may want to defer
    this operation if you will be modifying or adding other
    palettes.  When ready, use CTRL-PgUp to go to the Palette
    Operations Submenu, hit CvFILE, and enter the name of the
    file you wish to save as.  If you accept the default, you
    will be replacing the original file loaded at startup.  If
    you are not sure you want to do that, just select another
    name and you can keep both files... perhaps to use one with
    another version of UfDQA.CFG for a special purpose, or to
    accomodate the preferences of more than one user.


Cw
 SPECTROGRAM COLOR WEIGHTS:

 The CTRL-C color menu in S0spectrogram mode shows the colors
 for each of the 16 intensity weights, from highest at the
 top of the list to the lowest at the bottom.  Note that the
 lowest color is always the same as the screen background.

 Picking effective color sequences turns out to be VERY
 difficult, compounded by the fact that different monitors may
 have profoundly different color balances... and very few are
 user-adjustable in any orderly way, only as an incidental
 side-effect of contrast and brightness adjustments.  This
 means that a good palette for one monitor may look bad on
 another... or bad on the SAME monitor after a contrast or
 brightness adjustment.  Laptops pose a particular problem,
 since most have very poor color saturation.

 To design a custom palette from scratch, set the monitor
 controls where they will hopefully stay, then decide on the
 color sequence... say, black to blue to violet to red.  Set
 the bottom and top colors (black and red) and then guess where
 the middle colors (blue and violet) should fall.  Set those
 colors as desired, then try splitting the gaps.  For example,
 at the step midway between violet and red, set a color that is
 about equal proportions of each by eye.  (The number values
 are not very good guides.)  Then repeat for the other gaps,
 and move to still smaller gaps.

 This whole process is MUCH easier on a VGA system than on an
 EGA, since VGA primary proportions are adjustable in fine
 steps.  For EGAs, you must pick a color sequence with a lot of
 colors in it, since there are less steps between colors.  In
 general, a palette with fewer colors and finer steps looks
 better, but offers poorer actual value resolution because
 there is less contrast between steps.


Ci SPECTROGRAM COLOR INSERT / DELETE:

 While picking colors, you may want to spread or compress the
 colors in one part of the sequence.  The following special
 operations apply only to the Spectrogram color menu:

   CTRL-INS   Moves the entire palette DOWN from the cursor
              position, duplicating the color at that spot in
              the next lower, and losing the bottom color.
   CTRL-DEL   Deletes the color at the cursor, moving the
              upper palette DOWN and duplicating the top.
   SHIFT-INS  Moves the entire palette UP from the cursor,
              duplicating the next higher and losing the top.
   SHIFT-DEL  Deletes the color at the cursor, moving the
              lower palette UP and duplicating the bottom.

 The CTRL-INS and SHIFT-INS commands also assume that since the
 color at the cursor has been duplicated, it will need to be
 changed.  That color item is thus selected for adjustment and
 the main cursor moved to the submenu.


Ca SPECTROGRAM COLOR ASSIGNMENT (ColorMap) MENU:

 Hit CTRL-PgDn while in the CwSpectrogram Color menu to roll to
 the special ColorMap menu.  Hitting CTRL-PgDn again will get
 you back to the regular Spectrogram Color menu.

 The ColorMap menu is needed because only 16 colors can appear
 on the screen at one time in this video mode, and all 16 are
 assigned as part of the color weight sequence for the
 S0Spectrogram.  The other features of the screen like the menu
 cursor, axes, labels, and the menus themselves must thus be
 shown in colors chosen from the same 16 used as weights.  The
 ColorMap menu allows you to make these assignments without
 affecting the color weights.


C0 SPECTROGRAM COLORMAP PALETTE:

 The top item in the ColorMap menu is the CpPalette, which is a
 mirror of the Palette item in the main Spectrogram menu.  You
 can use this to select the palette you want to remap.  Color
 Map assignments are stored along with each Spectrogram
 Palette, both in Csmemory and for palettes Cvsaved to a file.


C1 SPECTROGRAM COLORMAP ASSIGN:

 The Assign submenu below the Palette item shows a list of the
 four features that may be reassigned:
    CURS
    AXES
    LABEL
    MENUS


C2 SPECTROGRAM COLORMAP SELECT:

 Below the Assign submenu is the Select submenu, which is a
 copy of the main CwSpectrogram color weight menu.  When you move
 the cursor to a feature in the Assign submenu, a marker (*)
 will appear in the Select submenu corresponding to the color
 currently assigned to that feature.  Move the cursor to the
 feature you want to change, and the Select marker will move
 correspondingly.

 Now hit ENTER, and the cursor jumps down to the Select
 submenu where the marker was, and a marker is left in the
 Assign submenu to show which feature you are changing.

 Move the cursor up or down in the Select submenu to the new
 color you wish to assign to the feature.  As you move the
 cursor among the colors, the feature will take on the color at
 the current cursor position.  When you find the color you
 want, hit ENTER.  The cursor jumps back to that feature in the
 Assign submenu and is replaced with the marker at that
 location in Select.

Ps
 PRINTING THE SCREEN:

 There are two basic ways to get hard-copy of a Daqarta screen:
 You can use the OsOutSc option (SHIFT-O) to save screen images
 as bitmap (.BMP) files for later printing from Windows Paint
 or another program, or you can use the Print Screen key to
 print them one by one.

 The OutSc option has the advantage that you can capture many
 screen images rapidly while collecting data on a volatile
 system, then print them out later.  You could accomplish the
 same thing with Print Screen by saving each data file with
 O0OutDt during the active session, and later recalling each with
 I0InDat for printing.

 To use Print Screen, you must Pdinstall a printer driver before
 the Daqarta session.  Then, when you have set the desired
 Cpcolor palette and have a selected trace on-screen, hit the
 Print Screen key (PrtSc) and you will be prompted with:
    'Page eject after Print Screen? (Y default/N):'
 Hit ESC to exit, N for No page eject, or any other key to
 get a page eject (form-feed) after the printing is done.

 Daqarta handles the SHIFT-Print Screen key identically to the
 unshifted key.

 A major purpose of the page-eject prompt is to give you a
 chance to bail out if you realize that you have not loaded the
 printer driver.  If you try to print anyway, you will get
 "unpredictable" results... probably a hung system or a page
 full of trash.  (Daqarta has no direct way to check for the
 presence of the driver before accepting the command.)

 If there is something wrong with the printer or its connection
 to the computer, Daqarta will attempt to give diagnostic
 error messages.  These include:
 ■  'Printer not found.'        (Printer cable connected?)
 ■  'Printer off-line.'         (Check button on printer.)
 ■  'Printer out of paper.'
 ■  'Printer error.'            (No printer or unknown error.)

 Printing the screen can take a fairly long time, during which
 the keyboard will not respond.  Eventually you will see:
    'Ready for next command:'
 when the driver has sent all the data to the printer, and you
 may then proceed with other operations while the printer
 completes its task in the background.

 If you have numerous screens to print, you will probably want
 to create a K0Key Macro which can do this unattended using the
 KLLoop command.


Pd INSTALLING THE PRINTER DRIVER:

 In order to print the screen, you must install a resident
 driver before the session.  The one that comes with DOS 5.xx
 and 6.xx is called GRAPHICS.COM and is probably in your DOS
 directory already, along with its associated GRAPHICS.PRO
 file.  It will work with a wide variety of printers, including
 dot-matrix, inkjets, and lasers, as long as they conform to
 the printing protocols of one of the 16 supported IBM and
 Hewlett-Packard model types.  Fortunately, this includes most
 printers, but you may have to experiment to see which
 supported type is the best with your printer.

 You may also want to experiment with third-party printer
 drivers.

 ┌─────────────────────────────────────────────────────────┐
 │  The GRAPHICS.COM that came with versions of DOS prior  │
 │  to 4.00 will NOT work with Daqarta... it only          │
 │  supports CGA screen resolutions, not the 640 x 350     │
 │  resolution used by Daqarta.  The DOS 4.xx version      │
 │  supports this resolution, but only works with a        │
 │  limited range of printers.  Windows 95 and 98 no       │
 │  longer supply this DOS driver... you can use the       │
 │  OsOutSc option to save a .BMP file that can later be     │
 │  printed by Windows Paint or other software.            │
 └─────────────────────────────────────────────────────────┘


 To install GRAPHICS.COM from the command line, you just enter
 'GRAPHICS' followed by the printer type.  The types are:
    COLOR1              IBM Color Printer, black ribbon
    COLOR4              IBM Color Printer, 4-color RGB
                        (Red, Green, Blue, Black) ribbon
    COLOR8              IBM Color Printer, 4-color CMY
                        (Cyan, Magenta, Yellow, Black) ribbon
    DESKJET             Hewlett-Packard DeskJet
    GRAPHICS            IBM Graphics Printer, Proprinter, or
                        Quietwriter, and most Epson compatibles
    GRAPHICSWIDE        Wide-carriage versions of above
    HPDEFAULT           Any Hewlett-Packard PCL printer
    LASERJET            Hewlett-Packard LaserJet
    LASERJETII          Hewlett-Packard LaserJetII and III
    PAINTJET            Hewlett-Packard PaintJet
    QUIETJET            Hewlett-Packard QuietJet
    QUIETJETPLUS        Hewlett-Packard QuietJet Plus
    RUGGEDWRITER        Hewlett-Packard RuggedWriter
    RUGGEDWRITERWIDE    Wide version of RuggedWriter
    THERMAL             IBM PC Convertible Thermal Printer
    THINKJET            Hewlett-Packard ThinkJet

 After the printer type, you may give an optional "switch"
 command.  (See your DOS manual for more details.)  For COLOR4
 or COLOR8 printers only, /B will print the background in color
 instead of white.

 The /R switch is used to reverse black and white colors.  By
 default, the areas that are brightest on the screen will be
 printed in black, and vice-versa.  However, this default
 revrsal only applies to the brightest and darkest colors...
 those in between follow a normal gray-scale.  And if the
 screen background (Panel color) is white, that part won't be
 reversed to black.  Thus, the /R switch restores a normal
 gray-scale to the entire image.

 If you use the /R option, you can use the 06GrayS Gray-scale
 command to preview what the printed output will look like on a
 color monitor.  Note, however, that while GrayS gives 16
 shades of gray, your printer may not support that many.  The
 typical dot-matrix printer (using the GRAPHICS type from the
 list above) will only show 8 of these.

 While you probably want as many shades of gray as possible for
 S0Spectrogram output, you may want more contrast for normal
 waveform and spectrum traces.  A fair amount of
 experimentation with Cpcolor palettes may be required to get
 optimum printed output.  Be sure to save the best palettes for
 each job to your Cvpalette files for later use.

 The default MAIN.PAL and SGRAM.PAL palette files that come
 with Daqarta each contain palettes that should give decent
 printed output to get you started.  These palettes assume a
 VGA system:  EGA users will need to experiment.

 The 'Print' palette in Spectrogram mode is designed for use
 without the /R option, and includes a pre-reversed maximum
 value to print black at maximum fading down to white at
 minimum and background areas.  With the /R option, try 'GreyR'
 for this same appearance, or 'Grey' for white maximum and
 black minimum and background.

 Enterprising experimenters with a knowledge of printer command
 sets may want to note that the GRAPHICS.COM program gets all
 its printer model information from the associated GRAPHICS.PRO
 file, which is in plain mEASCII text.  You may be able to adapt
 this to support different printer types.

 For each model, there is a 'PRINTER' line giving the type as
 it appears on the command line, followed by several lines that
 control the actual output for different screen display modes.

 The 640x350 mode used by Daqarta is specified by a section
 that begins with 'DISPLAYMODE 15,16' and is followed by a
 'SETup' line that gives the proper setup commands for that
 model and mode, then a 'GRAPHICS' line that gives the actual
 graphics commands, a 'PRINTBOX' line that tells how may Gppixels
 of the printer output correspond to each pixel on the screen
 (and possibly a 'ROTATE' code to indicate that the output will
 be rotated 90 degrees on the page).  Finally, there may be a
 'RESTORE' line giving any special commands needed to exit.


m0
 MISCELLANEOUS:

 mAAlert
 UfConfiguration File
 mdDisaster Management
 mFFilters for Noise Rejection
 03Grid Toggle
 mlLaptop Hints
 L0Line Style of Traces
 mNMusical Note Frequencies
 NpNumber of Data Points (N)
 P0Pause
 U0Plug-in Modules
 Q0Quit Daqarta
 mRRemote Control Switch Construction
 mSSine Wave Basics
    mpPhase
    mvMagnitude via Vector Sum
    mwMaking Waves via Sine Wave Synthesis
 SsSingle-Sweep Operation
 SGStimulus Generator
 m<Trigonometric Relationships

mA
 ALERT:

 The Daqarta alert is a short beep under most conditions.
 It is used to notify you to check the message line when
 there is an error, and may also be used in certain other
 circumstances such as if you are trying to exceed some limit,
 etc.

 Some data acquisition board drivers or other U0plug-in modules
 may be using the same system timer that the beeper uses.
 If Daqarta detects that the timer is already in use, it
 alerts you instead by flashing the screen panel background
 color to black, then bright white, then back to normal.

 You can preview the Alert with the &-key (SHIFT-7).  The
 default tone frequency is 880 Hz for 1/8 second.

 You can change the Alert to better suit your needs via CTRL-7.
 (CTRL-SHIFT-7 will also work.)  This will prompt you to enter
 a frequency, and after you enter that you will be prompted to
 enter a duration.  Then the new Alert will be given.  This
 operation is identical to that for the uTUser Tone... check
 that reference for more details.

 The standard computer "beeper" system uses a tiny speaker with
 poor frequency response.  You may need to try several
 different frequencies to get one that is clearly audible.

 You may prefer to always use the flashing alert instead of a
 tone, or you may wish to disable the Alert completely.  If
 you enter a negative frequency (-1 will do), the Alert system
 will rotate between Tone, Flash, Off, and back to Tone on
 successive negative entries.  The new alert will be given
 immediately, so you will know which you have selected.  You
 will not be prompted for a duration, and the existing settings
 for tone frequency and duration will not be changed.

 ┌─────────────────────────────────────────────────────────┐
 │  NOTE:  If you set Alert to Flash or Off, the User      │
 │  Tone will automatically be set the same.               │
 └─────────────────────────────────────────────────────────┘


Uf
 CONFIGURATION FILE:

 This file, named DQA.CFG, gives Daqarta certain initialization
 instructions and tells it which GAADC board 0Bdriver to use, as
 well as which U0plug-in modules to install.  This is a plain
 mEASCII text file, with one module entry per line, that may be
 prepared with any text editor.  Unlike the "installed" drivers
 used with hardware devices in many other systems, the modules
 loaded via this file will only be held in memory during the
 Daqarta session, so you will have your full DOS memory free
 after you Q0Quit.

 A semicolon indicates that the remainder of any line is a
 comment and should be ignored by Daqarta.  You can use this
 at the start of a line to temporarily remove a module from
 your setup, or after a module name to add an explanatory note.

 ┌───────────────────────────────────────────────────────────┐
 │  NOTE:                                                    │
 │  The format for the first 4 lines of DQA.CFG is fixed.    │
 │  Each line MUST be present in the proper order, or else   │
 │  commented out (;) or left blank.  Subsequent lines may   │
 │  be in any order and will load in the order they appear.  │
 └───────────────────────────────────────────────────────────┘

 A typical DQA.CFG file might look like:
    INIT            ;May use M:0, F:0, B:n, and/or V:x params
    DEMO.ADC        ;ADC module MUST come 2nd!
    SGRAM.PAL       ;Spectrogram palette file MUST come 3rd!
    MAIN.PAL        ;Main palette file MUST come 4th!
    ;Above 4 lines must be present in order, or leave
    ;placeholder (empty or ;) lines.

    ;Add-in modules follow, empty or commented (;) lines
    ;ignored:
    STIM3A.GEN      ;Stimulus Generator module

    DDISK13A.DRV    ;DDisk Write BIOS INT 13h replacement

 The first line must start with INIT instead of a module name,
 followed by any parameters for initialization options.  You
 may leave this line blank if no parameters are needed.
 Currently supported options are:
    B:n     Where n is 8 to 64 to set the SGSTIM3A Buffer on an
            absolute segment boundary for Gdfull duplex DMA
            output.

    F:0     To omit all Help Files.  Normally used only when
            in dire need of extra memory, since it only saves
            about 24 Kbytes or so.

    M:0     Tells Daqarta to look for KFDQA.MAC in the current
            directory on start-up.  Otherwise, it looks for
            it in the directory that holds DQA.EXE.  Allows
            you to have different macro files for different
            experiment types, each with its own directory.

    V:x     Force Video type, where x = E to force EGA
            operation on a VGA graphics board, or V to force
            VGA operation on an early VGA clone that doesn't
            support video detection.  Using V:v instead of V:V
            forces the use of the standard BIOS function for
            VGA palette updates.  This is much slower than
            Daqarta's direct method, so you may get an annoying
            flicker on slower CPUs during palette changes.
            However, this may be needed for some clone VGA
            boards with non-standard register usage.

            The EGA BIOS function is fast, and is used with
            both V:E and V:e parameters.  The V:e parameter
            forces a black border (default for EGA boards),
            while V:E allows the border to track CPPanel color
            for emulating EGA with a VGA monitor, or for those
            few EGA monitors fast enough to handle this.  (If
            not, you may see a retrace streak near the bottom
            of the screen.)

 The second line always holds the ADC driver name.  Sometimes
 you may wish to use a system without an GAADC board to analyze
 data collected elsewhere, or you may wish to experiment using
 the built-in test generator when no board is present.  In
 this case, the second line MUST be left blank or commented out
 with a leading semicolon if you do not use 0BDEMO.ADC or some
 other ADC driver.

 Each driver or module entry must include the full name and
 extension of its file.  Each file is assumed to reside in the
 same disk directory as Daqarta and the DQA.CFG file itself.

 After the file name, on the same line, may come any parameters
 needed by that driver, such as board address, RiIRQ or RdDMA
 numbers, model number, conversion speed, or digital output
 port address.  Each consists of a single letter followed by
 a colon, then the parameter value or string.  Additional
 parameters are separated by one or more spaces.  A typical
 example for the DAS16X.ADC driver instead of the above
 DEMO.ADC would be:

    DAS16X.ADC      M:DAS-16G1 A:h330 I:5   ;Comments here!

 The parameters tell the DAS16X driver that the board Model is
 a Keithley Metrabyte DAS-16G1 or equivalent clone, whose base
 Address is at 330 hex, and which should use IRQ 5.  You will
 need to consult the Help system for your particular board
 driver to determine proper parameter usage and value ranges.
 You can view this without a board, or without activating an
 installed board, via the 0AA:0 parameter trick.

 If you need to use a lot of parameters, the line may grow
 quite long.  There is no arbitrary limit to how many
 characters you can include on a line, but for ease of viewing
 in your text editor you may continue on the next line by
 starting it with an underscore.  This may be continued for
 as many lines as needed, with the whole works counted as a
 single line.  For example:

 INIT            ;This is the 1st line.
 DAS16X.ADC      M:DAS-16G1  A:h330  I:5  D:3  C:1
 _ P:L1  R:2.5  S:E10    ;This is still the 2nd (ADC) line.
 _This comment is still part of the 2nd line.
 SGRAM.PAL       ;This is the 3rd line.
 MAIN.PAL        ;This is the 4th line.

 So even though the ADC line is three lines long, it is treated
 as the "second line" and maintains the required line positions
 of the following .PAL entries.

 Any comments must appear only after all parameters, whether
 the entry is a normal single line or continued for multiple
 lines... you can't use multiple parameter lines, each with its
 own comment.  However, once the comment begins, you can extend
 that over additional lines simply by starting each with an
 underscore as before, and they will all be counted as part of
 the original line.

 Note that the underscore option requires that there be some
 text, either parameter or comment, after the file name on the
 original line.  The line break must not come within a single
 parameter (like A:h330), but only between parameters or after
 the last parameter.

 The third and fourth lines always hold the names of any
 default S0Spectrogram and main Csmulti-palette files,
 respectively.  If either or both of these is not used, the
 line(s) MUST be left blank or commented out.

 Subsequent lines hold the names of plug-in modules that you
 wish to include, in the order that Daqarta will load them.
 There is a limit of 24 modules that can coexist at one time,
 including the ADC driver but not the two palette files.
 More modules may be loaded if they do not remain resident
 while Daqarta runs... for example, a module that just modifies
 an initial program setting, but doesn't actually install any
 extra code.

 Check the documentation for any third-party plug-ins to see if
 they need to be loaded in a preferred order.

md
 DISASTER MANAGEMENT:

 mDDisaster Recovery Attempt - CAUTION!
 mBSystem Reboot - CAUTION!
 mCCPU Register Display

mD
 DISASTER RECOVERY ATTEMPT - CAUTION!

 Daqarta is a "open" system, with specifications available
 to all SRregistered users.  This allows programmers to write
 custom U0plug-in modules for special applications.  However, it
 also allows possibile problems to arise due to bugs in modules
 that are not part of the normal Daqarta package.  Because the
 system was designed for "mission critical" use, where data may
 be difficult, expensive, or impossible to re-acquire, Daqarta
 includes a special key sequence to restore main program
 control in the event that a plug-in module gets hung up.

 CTRL-ALT-HOME, depressed in that order, will break out of any
 active routine and return to the main Daqarta processing and
 key handling routine.  This MAY allow you to save critical
 data to a file or otherwise recover from disaster.  The
 message line will show:
    Attempting Disaster Recovery...
 There are a lot of unknowns and caveats here, however.  First
 of all, this can only work if the wayward module did not
 disable the keyboard interrupt.  Second, it is possible for a
 module to insert its "hooks" into the main processing loop, so
 that even if control is wrested from the faulty routine, it
 may be passed right back to it on the next processing pass.

 In an attempt to deal with this latter issue, beginning with
 Daqarta rhversion 1.10 the CTRL-ALT-HOME sequence also enters
 P0Pause mode to halt additional processing attempts.

 If you do need to use this in an emergency, be aware that
 there is no way to know what other damage the defective code
 may have done.  The safest course is to immediately save any
 critical data to disk, then Q0Quit Daqarta and restart, perhaps
 after editing out the suspected offending module from the
 UfDQA.CFG file.  Do NOT assume that you can continue operating,
 or think that you can always recover a second time.

 In short, there are ABSOLUTELY NO GUARANTEES with this!
 However, if it pulls your fat out of the fire even once, it
 will have proved worthwhile.

 The main users of this feature are expected to be those who
 are developing plug-in modules, since code bugs are a fact of
 life in the early stages of software development.  Sometimes
 just the ability to Quit normally without having to do a
 complete reboot after a crash can be a big time saver.

mB
 SYSTEM REBOOT - CAUTION!

 When a U0plug-in module causes a Daqarta lock-up, the first
 response if critical data must be saved should be the above
 Disaster Recovery Attempt.  If that gives the message that
 the attempt is being made, it means that the keyboard is still
 able to respond.  However, if this does not restore enough
 normal operation to save your data, you have no recourse but
 to abandon it and reboot your system.

 CTRL-ALT-DEL performs a "warm boot" from Daqarta just as it
 would from any DOS program.  ALL DATA THAT HAS NOT BEEN SAVED
 TO DISK WILL BE LOST.  This warm boot may be faster than the
 full system hardware test "cold boot" obtained by hitting the
 reset button, and it is definitely easier on your system than
 turning the power off and back on.  However, just as in other
 programs, this won't work if the offending module has disabled
 the keyboard interrupt.  If the Disaster Recovery Attempt gave
 the expected message, then CTRL-ALT-DEL will most likely work.

mC
 CPU REGISTER DISPLAY:

 CTRL-ALT-INS will display the contents of the CPU registers at
 the instant of the key press by temporarily overwriting the
 Key Option area of the screen.  This is unlikely to be of any
 value to the average user under any normal operation.  It is
 included in Daqarta to facilitate debugging by developers
 who are writing drivers for new data acquisition boards or
 other custom U0plug-in modules.

 If you are using a module that is still under development, the
 programmer may request that you activate this display and
 write down the contents of specific registers if you encounter
 certain types of problems.  Use of this display should not
 cause any problems during normal operation, since this feature
 just displays the registers and returns operation to where it
 left off.


mF
 FILTERS for NOISE REJECTION:

 Simple filters can often be made of nothing more than a
 resistor and capacitor.  A high-pass filter could be placed
 just before the input of a preamplifier, and a low-pass on
 its output.  Here's how to make a simple high-pass filter:

                             ┌──────────┐
         ───── C ─────┬──────┤  Preamp  ├────────
                      │      └──────────┘
       Input          R                       Output
                      │
         ─────────────┴──────────────────────────

 This filter has a "cutoff" frequency of
     F = 1 / (2 * pi * R * C).
 Any input component at this frequency will have its amplitude
 reduced by half.  Higher frequencies are passed (that's why we
 call it "high-pass") with less amplitude reduction as the
 frequency rises.  Lower frequencies have their amplitudes
 strongly reduced:  For every halving of frequency below the
 cutoff, the output will be further cut in half.

 Let's say you want to build a 300 Hz high-pass filter.  You
 probably want to pick R somewhere in the 10000 Ohm (10k) to
 100000 Ohm (100k) range.  (Too small may load down the signal
 source, and too large may encourage the circuit to act like an
 antenna and pick up 60 Hz power line noise from the
 surroundings, as well as not allow the preamp to operate
 properly.)  So let's start with 33k, which is the geometric
 middle of that range.  (10k / 33k is about the same as 33k /
 100k.)  Rearranging our formula we find
    C = 1 / (2 * pi * R * F)
      = (2 * 3.1415 * 33000 * 300)
      = 1.6 * 10^-8 Farads      (16 nF, or 0.016 uF)
 If you happen to have this value on hand, you are done.
 However, since resistors are readily available in many more
 values than capacitors, you may need to use the nearest value
 of C that you have, then solve for a new value of R.

 Note that the input impedance of the preamp is in parallel
 with the resistor, and will need to be considered unless it is
 many times larger.  Usually, the impedance is either high
 enough to ignore (over 1 Megohm), or low due to a simple fixed
 resistance across the input of the circuit.

 If you know that this impedance is a simple resistor you can
 select your filter resistor such that the parallel combination
 gives the correct value.

 Otherwise, if you only know a general ballpark range for the
 input impedance, you will probably want to select the filter
 resistor to be around one tenth of this or less.


 mLLOW-PASS FILTER:

 Similarly, you can make a low-pass filter to remove unwanted
 high frequency components:

             ┌──────────┐
        ─────┤  Preamp  ├──── R ────┬────────
             └──────────┘           │
     Input                          C      Output
                                    │
        ────────────────────────────┴────────

 This is just the mirror of the high-pass filter, and it uses
 the same formula.  Here again input signals at the cutoff
 frequency have their amplitudes reduced by half, but now
 HIGHER frequency components are cut in half for every doubling
 of frequency.

 The formula assumes that the output impedance of the preamp
 is much lower than filter resistor, which is usually a safe
 assumption with modern equipment.  Otherwise, its value must
 be added to the resistor value to get the effective R for the
 filter calculation.

 Note that input impedance of whatever follows the output of
 this filter will tend to reduce the signal level by causing
 a voltage divider effect.  You may want to compensate for
 losses by using the UvUser Units / Volt factor for critical
 work.

 You can easily use both high-pass and low-pass filters on
 opposite ends of the same preamp.  If these don't reduce
 unwanted frequencies enough, there are more elaborate filters
 available.  However, these are NOT made by just cascading
 multiple simple filters, and they will require operating power
 as well.  One source for more information about filters is The
 Active Filter Cookbook by Don Lancaster.

 There is one potential problem with using filters to reduce
 noise:  They often change the appearance of the waveform
 beyond removing the unwanted components.  The desired signal
 will typically have its different frequency components shifted
 in time by different amounts, so that what started as a sharp
 pulse or step may become smeared out or even show transient
 oscillations.  More elaborate filters can help this, but these
 can be expensive.

03
 GRID:

 The grid display may be toggled off and on via the G-key.
 This is sometimes useful to resolve fine details in the trace
 that are near a grid dot, especially if the L0trace Line0 style
 is set to show only separate data points with a monochrome VGA
 monitor.  This may also be useful before Psprinting the screen.

ml
 LAPTOP HINTS:

 DPPower Management Problems
 CwSpectrogram Color Weights
 06Monochrome, Optimizing from Color System
 LsSlow Display Response

Ls
 LAPTOP SLOW DISPLAY RESPONSE:

 Many laptop displays have slow response times.  This means
 that very active or "busy" signals can be hard to see, since
 the trace is not in the same place long enough for the slow
 LCD display to actually show them.

 AeExponential averaging can make signals MUCH easier to see on
 these displays, since it essentially "slows down" the activity
 of the signal.  Of course, it also adds a smoothing and noise
 reduction that may not always be desired.  In such cases, use
 P0Pause or SsSingle Sweep to "freeze" the changing signal instead
 of slowing it down.

L0
 TRACE LINE STYLE (Line0, Line1, Line2):

 The unshifted L-key steps between three basic trace line
 styles on successive hits of the key:

 Line0 = POINTS ONLY:
 Only actual data points are shown.  This can make it harder
 to interpret complex traces, but it is occasionally useful to
 see the raw data apart from any interpolation, especially when
 XtXpand has been used to stretch the trace.  This is also the
 fastest type of trace for Daqarta to draw, so if you are
 running on a slow machine this can give you a little extra
 speed.

 This mode is also useful for learning about tdsampling and
 tAaliasing.  Try setting the BvVirtual Source Bwsine wave Bffrequency
 to sub-multiples of the sampling frequency.  At half the
 Xfsample rate (the Nyquist frequency), all the data points form
 a horizontal line... the source makes one full cycle between
 samples, ending up at exactly the same point in the cycle each
 time.  Make the frequency a little higher or lower and observe
 what happens.  Now try one forth of the sample rate, and so
 on.

 At intermediate frequencies you will see interesting
 criss-crossing sine waves appear in the point alignments, as
 the sine wave phase advances just the right amount between
 samples to make points from adjacent cycles seem to line up at
 a much lower frequency.  The technical term for what you are
 doing is "messing around", but besides being fun it is also
 building an intuitive feel for what happens during the
 sampling process... so enjoy!

 Line1 = SOLID LINES:
 Straight lines connect data points.  This is the default line
 style for waveforms.

 Line2 = VERTICAL BARS:
 A vertical line extends from the bottom of the trace up to
 each data point, like a high resolution bar-graph.  This is
 the default FFT line style.  This shows you each data point
 without any interpolation connecting the points as for Line1
 mode, but each point still shows up clearly, unlike Line0 mode
 if adjacent samples have widely different values.  This is the
 slowest line style for Daqarta to draw because it may have to
 put a lot of points on the screen, so you should avoid this if
 display update speed is an issue.

mN
 STANDARD MUSICAL NOTE FREQUENCIES:

 The equal-tempered scale of western music is based upon an
 octave (frequency doubling) that contains 12 notes, or
 "semitones", each of which is 1.059463 (the 12th root of 2)
 times the one below it.

 The standard musical tone frequencies of the equal-tempered
 piano keyboard are tabulated below, but you can find others by
 extending the series.  To find the same note letter in the
 next higher octave, just multiply by 2.  To go down one
 octave, divide by 2.  For example, C0 = C1 / 2 = 32.703 / 2 =
 16.352 Hz.

    Note      Hz     ┌───────────────────────┐
    A0       27.500  │                       │
    A#0      29.135  ├────────███████████████│
    B0       30.868  │_______________________│
    C1       32.703  │                       │
    C#1      34.648  ├────────███████████████│
    D1       36.708  │                       │
    D#1      38.891  ├────────███████████████│
    E1       41.203  │_______________________│
    F1       43.654  │                       │
    F#1      46.249  ├────────███████████████│
    G1       48.999  │                       │
    G#1      51.913  ├────────███████████████│
    A1       55.000  │                       │
    A#1      58.270  ├────────███████████████│
    B1       61.735  │_______________________│
    C2       65.406  │                       │
    C#2      69.296  ├────────███████████████│
    D2       73.416  │                       │
    D#2      77.782  ├────────███████████████│
    E2       82.407  │_______________________│
    F2       87.307  │                       │
    F#2      92.499  ├────────███████████████│
    G2       97.999  │                       │
    G#2     103.826  ├────────███████████████│
    A2      110.000  │                       │
    A#2     116.541  ├────────███████████████│
    B2      123.471  │_______________________│
    C3      130.813  │                       │
    C#3     138.591  ├────────███████████████│
    D3      146.832  │                       │
    D#3     155.563  ├────────███████████████│
    E3      164.814  │_______________________│
    F3      174.614  │                       │
    F#3     184.997  ├────────███████████████│
    G3      195.998  │                       │
    G#3     207.652  ├────────███████████████│
    A3      220.000  │                       │
    A#3     233.082  ├────────███████████████│
    B3      246.942  │_______________________│
    C4      261.626  │                       │ Middle C
    C#4     277.183  ├────────███████████████│
    D4      293.665  │                       │
    D#4     311.127  ├────────███████████████│
    E4      329.628  │_______________________│
    F4      349.228  │                       │
    F#4     369.994  ├────────███████████████│
    G4      391.995  │                       │
    G#4     415.305  ├────────███████████████│
    A4      440.000  │                       │ Concert A
    A#4     466.164  ├────────███████████████│
    B4      493.883  │_______________________│
    C5      523.251  │                       │
    C#5     554.365  ├────────███████████████│
    D5      587.330  │                       │
    D#5     622.254  ├────────███████████████│
    E5      659.255  │_______________________│
    F5      698.456  │                       │
    F#5     739.989  ├────────███████████████│
    G5      783.991  │                       │
    G#5     830.609  ├────────███████████████│
    A5      880.000  │                       │
    A#5     932.328  ├────────███████████████│
    B5      987.767  │_______________________│
    C6     1046.502  │                       │
    C#6    1108.731  ├────────███████████████│
    D6     1174.659  │                       │
    D#6    1244.508  ├────────███████████████│
    E6     1318.510  │_______________________│
    F6     1396.913  │                       │
    F#6    1479.978  ├────────███████████████│
    G6     1567.982  │                       │
    G#6    1661.219  ├────────███████████████│
    A6     1760.000  │                       │
    A#6    1864.655  ├────────███████████████│
    B6     1975.533  │_______________________│
    C7     2093.005  │                       │
    C#7    2217.461  ├────────███████████████│
    D7     2349.318  │                       │
    D#7    2489.016  ├────────███████████████│
    E7     2637.020  │_______________________│
    F7     2793.826  │                       │
    F#7    2959.955  ├────────███████████████│
    G7     3135.963  │                       │
    G#7    3322.438  ├────────███████████████│
    A7     3520.000  │                       │
    A#7    3729.310  ├────────███████████████│
    B7     3951.066  │_______________________│
    C8     4186.009  │                       │
                     └───────────────────────┘


Np
 NUMBER OF DATA POINTS (N):

 Each hit of the unshifted N-key advances the number of points
 per trace from 256 to 512, from 512 to 1024, or from 1024 back
 to 256.  This value refers to the number of samples or data
 points shown on an unXtexpanded waveform display.

 This is also the number of samples that will be processed by
 the FFT if that mode is active, but note that although the raw
 output of the FFT will contain this many points, it takes TWO
 output values to make one frequency line in the F0spectrum
 display, which shows the resultant magnitude of both the
 Cosine (Real) and Sine (Imaginary) outputs of the F?FFT.  So
 there will only be half as many spectral lines in the
 (unexpanded) display as shown by N.

 In general, if you double the number of lines in a spectrum
 by doubling N, any random noise will be spread over twice as
 many spectral lines.  Each line will thus have half the noise
 power (3 GadB lower).  Note that this is exactly the result
 obtained by AWwaveform averaging twice as many sweeps at the
 smaller N, such that the total number of samples considered is
 the same.


P0
 PAUSE:

 The P-key or the grey Pause/Break key enters or exits Pause
 mode.  If the current trace is Live, it will be frozen and the
 0Sstatus will change to Pause.  The Pause option will also be
 highlighted.  If the current trace was already Paused, then
 Live operation will be restored.

 In addition to this explicit manual operation, Daqarta will
 also enter Pause mode at the completion of an A0average.  The
 Pause option will also be highlighted, but the status will be
 shown as Done.

 When Daqarta is in Pause mode, all data collection is halted
 UNLESS you are recording in DiDDisk mode.  In that case, the
 DDisk recording continues and only the trace is frozen.  You
 may want to do this to better examine some detail of the
 trace, without disrupting the actual recording.  If you want
 to stop the recording, use the spacebar DsDDisk Skip or the
 DcRemote Control, if activated.

 Whenever MsMemSv or MrMemRd is used to save to or read from trace
 memory, Pause is also activated.  MemSv just results in the
 normal Pause status display, but MemRd shows the status as
 'Mem n' where n is the memory trace number.

 Similarly, if a fofile is loaded from disk, the status will show
 'FILE'.

 Pause mode is also entered automatically after a SsSingle Sweep
 (Singl) operation.

 Note that during K0Key Macro operation, the grey Pause/Break key
 (but not the P-key) instead functions as a Khmacro Halt or Step
 key, as does NUM-LOCK.


U0 PLUG-IN MODULES:

 Plug-in modules to perform special functions may be installed
 by including the name of each module in the UfDQA.CFG file.
 In addition to modules provided with Daqarta, like the STIM3A
 SGAdvanced Stimulus Signal Generator, other modules may be
 provided by third-party programmers or may be written by
 advanced users for custom applications.

 Daqarta allows these modules to access internal variables
 and functions, and to replace functions with those provided
 by the module.  Modules may access functions and data in
 other modules, enabling standard libraries to be built and
 shared.  Note, however, that a library module should usually
 be loaded before modules that will use it, so that it will be
 found when those modules are initialized at load time.  Load
 order is determined simply by order of appearance in DQA.CFG.

 Due to the complexity of interfacing plug-in modules with main
 Daqarta modes and functions, this is best left to experienced
 developers.  All code is in assembly language, and great
 attention to detail is required.  A plug-in developer's kit
 is being planned to make this easier, with source code for
 typical working modules and a Help compiler for use with the
 H0CTRL-Help system.  Serious developers should 14contact
 Interstellar Research for more information.

 Interstellar Research requests no royalties from developers
 who sell plug-in modules, as long as they make it clear to
 their customers that the sale does NOT include Daqarta
 itself, which is shareware.


Q0
 QUIT Daqarta:

 If you hit the unshifted Q-key to Quit Daqarta, you will be
 asked to hit it again to confirm your intention.  However, if
 you have created or modified any K0key macros, you will instead
 be asked if you want to save them:
    'Save changed Key Macros?  (Y default/N):'
 If you hit the N-key (shifted or unshifted), Daqarta will
 quit immediately.  If you hit anything else, you will be
 prompted for the file name to save the macros as, with the
 default being the normal DQA.MAC KFmacro file.  You might want
 to choose another name if you will be using different macro
 files for different users or different experiments, in which
 case you can have a batch file that selects the proper macro
 file and renames it to DQA.MAC before invoking Daqarta.

 Note that there is no prompt to save changed palettes to a
 file.

mR
 REMOTE CONTROL SWITCH CONTRUCTION:

 A simple manual remote control switch for ArAverager or DcDDisk
 operation can be rigged up at the end of a long cable.  A
 plasic 35mm film cannister makes a handy switch holder:  Drill
 or punch one hole in the lid and one in the bottom of the can.
 Mount a miniature toggle or pushbutton switch in the lid.
 Thread the cable through the can bottom and solder to the
 switch.  Snap the lid on and you're set.  If you can get a can
 with a light grey lid instead of black, you can label the On
 and Off positions of the toggle switch with an indelible
 marker, then cover the lettering with clear tape.  Trim any
 excess tape that overhangs the edge of the lid with a sharp
 utility knife.

 Shielded coaxial cable is the best choice if the remote
 cable must pass into an electrically shielded room.

 The switch setup must be able to provide an acceptable mTTTL
 level to the I/O port on the acquisition board.  Many boards
 provide +5 Volts at their connectors, but if yours does not
 you will have to find it somewhere.  Many serial ports provide
 +5 Volts... check yours with a voltmeter.  If all else fails,
 you can always find +5 Volts inside the case of any regular
 (non-portable) computer at the disk drive connectors, etc, so
 you might be able to tap into that if you feel competent.

 TTL devices require that zero be a short circuit, not an open
 circuit, so you should wire your switch like this:

                                        ┌──── +5 Volts
                                        │
                                        R = 1k to 10k
                 Cable center           │
      ┌─────────────────────────────────┴──── Digital Input
     \  Switch
      └────────────────────────────────────── Digital Ground
                 Cable Shield

 When the switch is open, the digital input receives +5 Volts
 through the resistor, whose value is not critical.  When
 the switch is closed, the digital input is shorted to ground
 and a small current flows through the resistor and switch.


mS SINE WAVE BASICS:

 Consider the second hand on an "old-fashioned" clock face:
 The hand makes an angle relative to a horizontal line drawn
 through the shaft from 9 to 3.  The sine of that angle is
 proportional to the height of the tip of the hand above this
 reference line.  (Heights are negative if the tip is below
 this.)  Start with the hand at 9, and measure the height as it
 passes each numeral on the face:

            ■······························ Top of face
         ■     ■

      ■           ■       Positive


   ■·················■·················■··· Shaft reference


        Negative       ■           ■

                           ■     ■
                              ■············ Bottom of face

   |  |  |  |  |  |  |  |  |  |  |  |  |
   9 10 11 12  1  2  3  4  5  6  7  8  9

 This is one cycle a classic sine wave.

 The AMPLITUDE of the clock sinusoidal wave is the length of
 the hand, which is the peak height above or below the
 horizontal reference line.

 The FREQUENCY of the wave is the number of cycles per unit
 time.  On a clock, the second hand completes one cycle per
 minute.  Although those who deal with rotating machinery use
 Cycles Per Minute (CPM), other users commonly refer to
 frequency in cycles per second, so we would say that the
 second hand completes 1/60 cycle per second.  One cycle per
 second is called one Hertz, abbreviated Hz and pronounced
 "Hurtz" like the car rental agency (although medical doctors
 sometimes say "Hairtz").

 We apply standard scientific prefixes to this, so 1000 Hertz
 is 1 kiloHertz (kHz) and 1/1000 Hz is 1 milliHertz (mHz).  Our
 second hand thus has a frequency of 1/60 Hz or 0.0166667 Hz or
 16.6667 mHz.  Note the small 'm' in 'mHz'.  A large 'MHz' is
 used to refer to 1 million Hertz or MegaHertz.  Small letters
 refer to prefixes less than one, capitals to those more than
 one.  The exception to this is small 'k' for kilo... a tribute
 to the group wisdom of standards committees.  Daqarta allows
 you to enter either 'K' or 'k', but always shows this as 'k'.


mp PHASE:

 Phase is the measure of the starting point of one sinusoid
 relative to another.  In the clock example the reference
 starting point was the 9 o'clock position, so any wave that
 starts there is "in phase" with the reference wave.  If a wave
 starts anywhere else, its angle relative to this reference is
 its "phase angle".  A wave that starts at 6 o'clock (cosine)
 is thus at an angle of 90 degrees relative to the reference
 sine:

            c        ■                          c
         c     c  ■     ■                    c

      c        ■  c        ■              c


   c        ■        c        ■        c        ■


         ■              c        ■  c        ■

      ■                    c     c  ■     ■
   ■                          c        ■

   |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
   6  7  8  9 10 11 12  1  2  3  4  5  6  7  8  9

 In mathematics the 3 o'clock position is always used as the
 starting point, and everything runs counter-clockwise.  Apart
 from a sign change, the results are the same.


mv MAGNITUDE via VECTOR SUM:

 It often happens that we can't directly measure the amplitude
 and phase angle of a sinusoid, but instead we measure its sine
 and cosine "component" amplitudes.  We measured the sine
 component of the clock face (the height of the hand's pointer)
 to get our sine waveform.  The cosine component is measured
 similarly, as the length of the "shadow" of the hand on the
 horizontal axis:

                  ■
             ■         ■
                        .│
         ■            .  │ ■
                     ?   │      Sine component
                   .     │
       ■          ■──────┘   ■
                   Cosine
                  component
         ■                 ■

             ■         ■
                  ■

 We can thus find the true amplitude or "magnitude" as the
 hypotenuse of this right triangle by taking the square root
 of the sum of the squares of the sine and cosine components.
 This is called the "vector sum" of the components.  Similarly,
 we can find the phase as the angle whose tangent is equal to
 the sine component over the cosine component.

 The sine and cosine components are often referred to as the
 "in-phase" and "quadrature" components, especially in
 discussions of older analog methods.  Engineering math types
 prefer to use "real" for the cosine component and "imaginary"
 for the sine component, corresponding to a wonderfully
 intimidating exponential expression called "complex notation",
 perfect for casual dining conversation and impressing
 uninitiated audiences.

mw
 MAKING WAVES VIA SINE WAVE SYNTHESIS:

 Any waveform can be synthesized from pure sinusoids.  You can
 use the Daqarta SGAdvanced Stimulus Signl Generator to
 demonstrate the basics of this by generating the fundamental
 and first few harmonics of square, ramp, or triangle waves.

 You will first need to make sure that you have the STIM3A.GEN
 module in your UfDQA.CFG file.  If you are not certain, you
 can H5check the installed plug-in modules via ALT-H.  You may
 also want to replace the acquisition Board driver on the
 second line of DQA.CFG with the "dummy" board 0BDEMO.ADC driver.
 This will allow you to simulate wiring the analog stimulus
 output of a real board into an input channel so you can view
 it on the main trace and make cursor measurements, etc.

 Restart Daqarta, then activate the B0Board with the B-key and
 use CTRL-G to bring up the StGen menu.  (You can now use
 CTRL-H to access the H0Help system for this module, including
 H4context-sensitive Help relating to the menu cursor position.)
 Set the following menu parameters:

    Master = On
    DAC 0 = active
    DAC 1 = inactive
    DigOut = inactive

 This will display a reduced-size alternate trace superimposed
 above the main trace.  If you are using the DEMO driver, the
 main trace will show a full-sized version, as though the
 stimulus DAC 0 output was connected to the GAADC board
 input Ch0.  You can then turn the STIM3A Display OFF if the
 alternate trace is distracting.

 If you are using a "real" board instead of DEMO, you can
 either connect its DAC 0 output to an input to view the main
 trace, or if that's not convenient you can just ignore the
 main trace and view the STIM3A Display.

 Now move the STIM3A menu cursor to DAC 0 Setup and hit ENTER
 to see the Pg A submenu.  Set that to be the fundamental
 frequency... we'll use 100 Hz in this example:

    Off / On = On
    Wave = Sine
    Freq = 100
    Burst/Cont = Cont
    (Leave other modulators off)
    Level = 100.00%

 Use 0PCTRL-PgUp to move to Pg B and set it as the 3rd harmonic,
 with Freq = 300 and Level = 33.33%, which is 1/3 of the
 fundamental.  Pg C will be the 5th harmonic with a Level of
 20% and and Pg D the 7th at 14.29%.  As you add each harmonic,
 you will see the initial sine wave get steeper sides, and the
 ripples at the peaks get smaller.  Notice how each higher
 harmonic acts to reduce the ripples by providing a
 complementary wave that fills in dips and rounds off peaks.
 Although a perfect square wave requires an infinite number of
 harmonics, it should be clear that if you extended this
 process you could approximate one to any desired degree of
 precision.

 One curious fact:  Notice the "bat-ears" due to overshoot and
 ringing on the intended horizontal portions.  As you add more
 harmonics according to the formula, these ears become sharper
 but the peaks never go below about 9% overshoot with any
 finite number of harmonics.  This is known as "Gibb's
 Phenomenon", and requires a slight modification to the
 harmonic levels to taper them to zero instead of truncating
 the series after some arbitrary harmonic number.  This is
 "windowing" in the frequency domain in order to improve the
 time domain, and is exactly analogous to the time domain
 WTwindow functions commonly used to reduce leakage "tfskirts" or
 "sidelobes" in the frequency domain.

 You may wish to experiment with other wave shapes, like ramps
 or triangles.  A ramp is made just like the square wave, only
 using ALL integer harmonics, not just the odd ones.  So the
 2nd harmonic is 1/2 the fundamental, the 3rd is 1/3, and the
 4th is 1/4.  Set the fundamental level to 50% instead of 100%
 and scale the other components proportionally, since otherwise
 the waveform would have peaks exceeding 100%.

 This will be a "descending" ramp, with the steep side on the
 left.  An identical ramp shifted 90 degrees relative to this
 can be made by setting the phase of the odd components to 180
 degrees.  If you want to see both ramps at the same time for
 comparison, you can build one of them with DAC 1.

 To reverse the ramp to an "ascending" version, you can set all
 the phases to 180 degrees.  A shifted ascending ramp results
 if the odd components are set to 0 degrees and the evens are
 at 180.

 A triangle is made with only odd harmonics, but instead of
 falling off proportional to the reciprocal of frequency like
 the square wave, they fall off with the SQUARE of the
 reciprocal.  In addition, the phase changes between 0 and 180
 degrees with each harmonic used.  Again, you will need to
 start at a reduced level to avoid going over 100%.  Try this:

    Pg      Freq      Phase      Level
    A       100       0          50.00
    B       300       180         5.56    (50 / 3²)
    C       500       0           2.00    (50 / 5²)
    D       700       180         1.02    (50 / 7²)

Ss
 SINGLE-SWEEP (Singl):

 Hitting the unshifted S-key causes a single sweep of NpN
 samples to be collected, processed, and displayed.  During
 this time the Singl option will be shown as active, but
 immediately after it will go off and the P0Pause state will
 become active.  For high Xfsample rates, you probably won't
 even be able to see the Singl highlight, since it will be
 so brief.

 In S0Spectrogram mode, Single-Sweep generates one full screen of
 data, equivalent to 512 sweeps in F0Wave or Spectrum modes.



SG
 STIMULUS GENERATOR (StGen):

 Daqarta allows for arbitrary stimulus generation to be
 provided by a separate plug-in module.  The current offering
 is STIM3A.GEN, the Advanced Stimulus Signal Generator.  This
 is available only to SRregistered users; others can use it only
 with the 0BDEMO driver, or for only 30 sessions with actual
 GAADC/GDDAC hardware.  After 30 sessions, unregistered users
 will still be able to use the older STIM3, available as a
 separate download from the Daqarta Website.

 STIM3A permits continuous signal generation in real-time.
 Each DAC output can combine up to 4 different sources,
 including:

 Waveforms:
  ■  Sine
  ■  Triangle
  ■  Ramp (adjustable slope)
  ■  Square
  ■  Pulse (monophasic or biphasic)
  ■  Arbitrary waveform from file
  ■  Play complete recording from file
        (Adjustable start/stop and rate)

 Random sources:
  ■  White noise, uniform distribution
  ■  Gaussian (normal) distribution white noise
         (Adjustable Standard Deviation)
  ■  Pink noise
  ■  Band-limited noise
         (Adjustable band/gap edges)

 Each waveform can be modulated by any or all
 of:
  ■  Burst (Start, Rise, Duration, Fall, Dwell)
  ■  AM
  ■  FM
  ■  PM (Phase Modulation)
         or PWM (Pulse Width Modulation)
  ■  Frequency Sweep
         (up or down, linear or exponential)

 Random sources can use Burst or AM modulators.  They can also
 be slowed, stepped, smoothed, quantized, or time-shifted.
 (Two identical noise sources combined with a time shift give
 comb-filtered noise, for example.)

 More than one modulator may be used on each source.  AM, FM,
 and PM/PWM modulators can use simple sine modulation
 (adjustable frequency) or one or more of the other sources.
 For example, you can have a basic Pulse waveform, and apply FM
 that uses a noise generator as its source to provide
 controlled jitter.  And that noise source can use AM so that
 the jitter changes in strength, and the AM source can be an
 Arb or Play file that you step through slowly to provide a
 test program of different jitter amounts.

 When STIM3A is operated dynamically, continuous signals can
 have extremely fine frequency resolution (typically better
 than 0.0001 Hz), and frequency sweeps can be so slow that they
 last for hours or days, unlike systems that require the entire
 waveform to be stored in memory.

 Up to 8 digital output lines may be controlled to produce
 pulse trains, bursts, or sync pulses for other equipment.

 Best of all, complete signal configurations may be saved to
 files for automatic load on start-up, or may be saved or
 loaded at any time during operation.


 ┌──────────────────────────────────────────────────────┐
 │  STIM3A currently supports only laboratory-type      │
 │  ADC boards and the ISA-bus Sound Blaster 16/32/64   │
 │  family of Gdfull duplex sound cards.  Other           │
 │  sound cards use their built-in synthesizers for     │
 │  stimulus generation.  See the help system of your   │
 │  0Bparticular card for full details.                   │
 └──────────────────────────────────────────────────────┘

 If the STIM3A.GEN module is present in your UfDQA.CFG file,
 the full H0Help system for it can be accessed by first using
 CTRL-G to bring up the StGen control menu, then hitting CTRL-H
 to get Control Help.

 When first starting out, you may find it helpful to use the
 0BDEMO driver with STIM3A.  When a stimulus output is active, it
 will be sent to the DEMO driver as though it was an ADC input.
 This allows you to visualize the waveform directly, and see
 the effects of changes in control settings.


m<
 TRIGONOMETRIC RELATIONSHIPS:

 sin(A) * sin(B) = 1/2 * cos(A-B) - 1/2 * cos(A+B)
 cos(A) * cos(B) = 1/2 * cos(A-B) + 1/2 * cos(A+B)
 sin(A) * cos(B) = 1/2 * sin(A-B) + 1/2 * sin(A+B)
 sin²(A) + cos²(B) = 1


tm TRADEMARKS:

 Sound Blaster is a trademark of Creative Technology Ltd.
 Windows is a trademark of Microsoft Corp.

G0
 GLOSSARY:

 GAADC (Analog-to-Digital Converter)
 mEASCII Text Editors
 GDDAC (Digital-to-Analog Converter)
 GadB (decibels)
 GdDuplex, Half and Full
 GIIsolation, Electrical
 GOOversampling
 GPPacer
 GpPixel
 rmRMS and rsRoot-Square Summation
 SpScientific Prefixes
 mtTone Switches
 mTTTL

GA
 ADC (Analog-to-Digital Converter):

 This device (also abbreviated A/D) converts real-world analog
 data into the digital form needed by the computer.  ADC inputs
 are almost always voltages (as opposed to currents), and may
 take any value within the ADC's specified range.  For example,
 if the ADC is specified to handle +/-10 Volts, an analog input
 of +1.234567 Volts is perfectly valid.

 The analog input can thus have "infinite" resolution, but the
 ADC output will be limited according to the number of bits it
 can use to represent the value.  If the ADC has 8 bits, for
 example, it can only encode 256 possible values (2^8 = 256).
 If these must handle the entire +/-10 Volt range (20 Volts),
 then resolution will be 20 / 256 or 0.078125 Volts at best.
 So our analog input example might be encoded as 15/256 * 20 =
 1.171875 Volts, or maybe as 16/256 * 20 = 1.250000 Volts, but
 it it will never be "exact".  The difference is called
 "quantization error", and can be reduced by using an ADC with
 more bits.  Most modern ADC boards have 12 or 16 bits.

 On a command from the computer, a timer, or an external
 source, the ADC will "sample" the input voltage very briefly
 and hold that value as a charge on a capacitor, using a
 circuit called a "Sample and Hold" (S/H) or "Track and Hold"
 amplifier.

 During the "hold" time, the held analog voltage is converted
 to a digital number by any of several means.  The most common
 method is called "successive approximation", wherein a trial
 number is converted back to an analog voltage with a Digital
 to Analog Converter (GDDAC) and compared to the held input.
 The trial number is increased or decreased as needed and the
 final number is reported as the ADC output.

 The successive approximation scheme begins with a trial number
 (and hence a DAC output voltage) that is half of the full
 range.  This corresponds to setting the most significant bit
 of the binary output value to a one.  If the input voltage is
 at least half of full-scale, then that bit will remain set as
 part of the final output, otherwise it is cleared to zero.
 We have thus "approximated" the input voltage by a single bit
 value... either it is or is not as big as half-scale.

 Then the next bit is set, adding a quarter-scale voltage to
 the DAC output.  The DAC will now be at 3/4 if the first bit
 was set or 1/4 if not.  Again a comparison is made, and the
 new bit is left set or cleared depending on the outcome.  We
 now have a "two bit" approximation to the input.

 In like manner, each successive bit is tested.  An 8-bit ADC
 thus requires 8 separate set-and-test operations, each giving
 a successively better approximation to the true analog input
 value.  When all are done, the final digital value is
 "latched" on the ADC output lines, and the ADC waits for the
 next command to begin another conversion.

 Throughout this Daqarta Help text, you will see references to
 the "ADC board".  Since PC-type computers don't usually have
 built-in ADC facilities, this just refers to a board that you
 must install into your computer to provide the ADC.  Sound
 cards and laboratory data acquisition cards are thus included
 in this, as well as PCMCIA cards and special modules that can
 plug into a printer port to provide ADC functions.  Some newer
 machines come with sound card functionality built into the
 system motherboard, so they don't need a separate board.

 Regardless of the ADC board type, you must 0Binstall a driver
 for it by specifying its name on the ADC line of the UfDQA.CFG
 file.

mE
 ASCII TEXT EDITORS:

 ASCII stands for American Standard Code for Information
 Interchange, which defines a format for translating between
 raw byte values and text characters.  By adopting this
 standard, files prepared by any program can be read by any
 other program which also supports ASCII.

 Standard ASCII codes were initially defined for values only up
 to 127, and include all normal keyboard-entry characters plus
 control characters like carriage return and line feed.  IBM
 PC-type computers actually support a superset of the original
 ASCII standard, assigning special characters to values from
 128 to 255 including line-drawing and other language
 symbols.  Under DOS, these "High-ASCII" characters can be
 entered from the keyboard by holding down the ALT key while
 entering the code number on the number pad keys.  When ALT is
 released, the character appears.  Daqarta does not support
 this method at present.

 Text editors are like streamlined word processors for dealing
 with ASCII files.  These are typically used for writing
 programs and DOS batch files, for example.  Word processors
 usually can import and export ASCII files when requested, but
 they typically have a "native" (often proprietary) format for
 normal documents.  This allows features that ASCII does not
 support, like different fonts, subscripts, and even embedded
 graphics images.  Since files using these formats use the same
 256 byte values to mean different things, a program expecting
 only ASCII may have serious problems reading them.

 If you are not sure that your word processor is in plain ASCII
 mode, save the file you have created and exit to DOS.  Use the
 DOS TYPE command to view the file.  If you see any characters
 that you didn't type directly, then the file is not ASCII.

 If your favorite word processor doesn't support ASCII, you
 have several alternatives. From Windows, you can use
 Notepad... it is fine for simple jobs like creating and
 editing UfDQA.CFG files and batch files.  From a DOS prompt, use
 the EDIT program that has been included since DOS 4.  If you
 have an earlier version of DOS, there are numerous public
 domain and shareware text editors available.  TED, the Tiny
 EDitor, is a public domain program comparable to Notepad.
 The SemWare Editor Junior (TSE JR) is an excellent shareware
 editor with lots of customizeable features, available at
 http://www.semware.com.  (It was formerly known as QEdit.)


GD
 DAC (Digital to Analog Converter):

 This device (also known as a D/A) converts binary numbers into
 equivalent scaled voltages.  For example, a 12-bit binary
 number can encode 4096 values (2^12 = 4096), from 0 to 4095.
 A typical unipolar DAC might give an output of 10/4095 Volt
 per input value, from 0 to 10 Volts.

 You could make a simple DAC with a bunch of weighted resistors
 connected to the digital outputs of any parallel port such as
 a printer port.  The smallest resistor would connect to the
 most significant bit, and each adjacent bit would get twice
 the value of the one before it.  Here is a crude 4-bit DAC:

   MSB ─────── 10k ───────┬─────────────── OUT
                          │
       ─────── 20k ───────┤
                          │
       ─────── 40k ───────┤
                          │
   LSB ─────── 80k ───────┘


   GND ─────────────────────────────────── GND


 This approach is rarely used inside real DAC chips, due to
 problems with the large resistor values needed as the number
 of bits increases, and the general difficulty in getting exact
 multiples.  Instead, there are "ladder" schemes that use the
 same values over and over.  The exact values don't matter
 as much as their relative matching, and this turns out to be
 much easier to integrate on a chip.  A simple ladder version
 of the above would be:

   MSB ─────── 20k ───────┬─────────────── OUT
                          │
                         10k
                          │
       ─────── 20k ───────┤
                          │
                         10k
                          │
       ─────── 20k ───────┤
                          │
                         10k
                          │
   LSB ─────── 20k ───────┤
                          │
                         20k
                          │
   GND ───────────────────┴─────────────── GND

 The five 20k resistors are all matched, and are exactly twice
 the value of the three 10k resistors.  If you actually build
 this circuit or the prior one, note that they assume that all
 of the digital outputs match and that a 0 output is really 0
 Volts.  That's not guaranteed for typical digital outputs, but
 for the simple 4-bit systems shown here it is good enough.  To
 scale this up to 8 bits or more would require special buffer
 amplifiers to insure matching.


Ga dB (decibels):

 dB stands for "decibel", which is literally one tenth of a
 Bel, a unit named for telephone pioneer Alexander Graham Bell.
 A Bel is the logarithm (base 10) of the ratio between two
 power levels, but the whole Bel is never used... only
 decibels.  So since there are 10 decibels in a Bel:

        dB = 10 * log(P1 / P0)

 where P1 is the power of the signal being measured and P0 is
 some reference power it is being compared to.  The reference
 power is either stated, or implied by a particular standard.

 For example, when talking about frequency response of a
 system, it is common to refer to the upper and lower -3 dB
 frequencies (or simply the 3 dB points, since the minus sign
 is understood).  These are the frequencies where the power is
 reduced to half of what it is in some middle frequency range
 which is used as a reference.  Since the log of 1/2 is
 -0.30103, multiplying by 10 gives about -3 dB.

 Note that dB is a signed value, but the sign is often implied
 by the method of expression.  For example, you could say that
 one power is 3 dB lower than another, or you could say that it
 is -3 dB relative to the other.

 You might want to think of dB as a nonlinear way to express
 'percent' for power measurements;  for example, '-3 dB' is
 just another way of saying '50%', where it is always assumed
 you are talking about power.  It doesn't matter whether the
 power is microwatts or megawatts, half is always -3 dB.

 Why not just stick with percentages?  Consider that the ratio
 between the largest and smallest powers that a system deals
 with may be billions to one; who would want to deal with
 numbers like 0.0000000001 percent?  Rather than counting the
 leading zeroes, we can just use -120 dB.

 Although the dB system may seem awkward at first, it is much
 more intuitive than percentages in actual use.  Since our
 senses (and other systems) respond in a logarithmic fashion,
 the same number of dB gives roughly the same change in
 sensation at different parts of the range.  A sound that is 73
 dB above your threshold of hearing sounds about as much louder
 than +71 dB, as a sound at +56 dB sounds louder than +54 dB.
 You can easily see that there is a 2 dB difference in both
 cases, but try that with percentages: 1995262315% is to
 1258925412% as 39810717% is to 25118864%, but it sure isn't
 obvious!

 Another point to keep in mind is that, like a percentage, a dB
 value is always relative to something.  You can talk about a
 change in a single value, like 'a 7 dB reduction', or you can
 talk about comparing different readings, like 'this harmonic
 is 13 dB below the fundamental'.  In these cases it should be
 pretty clear what is relative to what.  In other cases the
 reference must be explicitly specified.  The common convention
 is to use something like 'dB re: 1 kW', here specifying that
 the 0 dB reference is a power of 1 kW.  Daqarta labels the
 F2Y-log axis as 'dB re:FS' to denote that a 0 dB signal is
 100% of the Full-Scale input level on the current ADC range.
 There are also notations like 'dB SPL' where the 0 dB
 reference is a specified standard value, making these absolute
 dB readings (Gssee below).


 ■  dB from Voltages:
 Although dB is technically a ratio of power levels, it is
 commonly used with voltages by assuming that both voltages are
 driving a constant resistive load, such that:

    Power = Voltage² / Resistance

 So if we have 2 different voltages V1 and V0 and resistance R,
 the R drops out:

    dB = 10 * log((V1² / R) / (V0² / R))

       = 10 * log(V1² / V0²)

       = 10 * log(V1 / V0)²

 Then using the property that the square of a log is equal to
 twice the log:

    dB = 10 * 2 * log(V1 / V0)

       = 20 * log(V1 / V0)

 This assumption of constant resistance may not always be true,
 such as when the voltage is driving a complex load like a
 loudspeaker whose impedance changes with frequency.  But it is
 still proper, for example, for a manufacturer to assume
 constant resistance when discussing sound card amplifier
 performance, since there are no standards for loudspeaker
 impedance versus frequency... and there are a LOT of different
 loudspeakers on the market.

 ■  Typical dB Applications:
 The -3 dB (half-power) point is still the standard for
 reporting frequency response, even though you are actually
 measuring voltage.  The equivalent voltage ratio is 0.707,
 which is half of the square root of 2.

 Although technically incorrect, amplifier gain is often
 expressed in dB based simply upon the ratio of the output
 voltage over the input voltage, even when it is clear that the
 input resistance and output resistance are quite different.
 For example, an typical home audio power amplifier with a
 voltage gain of x20 may be referred to as 26 dB of gain, even
 though the input impedance is 47000 ohms and the output load
 is 8 ohms.

 0aAttenuation is usually given in dB.  Note that use of the word
 "attenuation" implies a reduction from the reference (input)
 level, or negative dB.  So if you see mention of an
 "attenuation of 60 dB", that means the output voltage is 0.1%
 of the input, which might also be described as "60 dB down".
 Here 0 dB is the input signal level before any attenuation.

 ┌─────────────────────────────────────────────────────────┐
 │  There is a real possibility for sign confusion when    │
 │  dealing with "attenuation" and "level", since that     │
 │  same 60 dB of attenuation might instead have been      │
 │  expressed as a level of -60 dB.  This is usually       │
 │  clear from the context, but not always.  The typical   │
 │  problem arises when you ask another person to adjust   │
 │  a control.  It may be a single control, but you may    │
 │  think of it as controlling level ("volume"), and they  │
 │  may think of it as controlling attenuation.  So what   │
 │  happens when you ask for "another 3 dB"?  Do you get   │
 │  3 dB more output, or 3 dB less?  You should agree on   │
 │  a standard, but just to be safe you may want to say    │
 │  something like "3 dB louder".                          │
 └─────────────────────────────────────────────────────────┘

 Distortion is often expressed in dB, as in "The distortion
 at the third harmonic is more than 40 dB down".  This means
 that when the desired or input tone frequency produces an
 output of a certain voltage, the distortion component at 3
 times that frequency is less than 1% as large.

 This same approach is used with Total Harmonic Distortion
 (THD) and Intermodulation Distortion (IM) by combining all the
 distortion components together to get a single dB value.
 However, note that you can't do this by simply adding all the
 individual component dB values.  That's because the sum of
 logarithms is not equal to the log of their sum, and the sum
 of squares is not equal to the square of their sum.  To do
 this properly you would need to add the squared component
 voltages together first, divide by the reference squared,
 and then take the log and multiply by 10:

    dB(total) = 10 * log((V1² + V2² + ... + Vn²) / V0²)

 This gives the rsRMS sum of the components, expressed in dB.

 ■  Working With dB:
 When a voltage is reduced by half, it is -6 dB.  When it's
 doubled, it's +6 dB.  Every halving or doubling changes the
 result by 6 dB, so 1/4 is -12 dB, 1/8 is -18 dB, and so on.

 When a voltage is changed by a factor of 10, there is a 20
 dB change.  So if the output is 60 dB less than the input, the
 voltage is 1/1000.

 A 10 dB change represents a factor of 3.16 voltage change.
 This value has the magical property that the reciprocal has
 the same digits, so -10 dB is a factor of 0.316 voltage
 change.

 A 1 dB change represents about 11% voltage change.

 Putting all these little rules of thumb together, you can make
 approximate conversions between dB and voltage in your head.
 Since adding or subtracting dB is the same as multiplying
 or dividing by the ratios, you can break an oddball value
 into separate steps.

 For example, if an output signal is -56 dB relative to the
 input, you can break it into -40, -10, and -6 dB.  You know
 that every -20 dB is a factor of 10 (one decimal place)
 smaller, so -40 dB is 0.01.  The -10 dB will make that 0.316
 smaller, down to 0.00316.  And since -6 dB is just 1/2, the
 overall output must be 0.00158 of the input.


Gs ■  Absolute dB (SPL, etc):

 Sometimes you will see dB used in special situations to
 represent absolute values.  The dB is still a ratio, but
 it is used with different standard references.  For example,
 dBV uses 1 Volt as a reference, and dBm uses 1 milliwatt.

 In audio work dB SPL refers to Sound Pressure Level, which
 uses a reference of 0.0002 microbar.  (A microbar is a unit of
 pressure equal to a millionth of standard atmospheric
 pressure.)  0 dB SPL is approximately the threshold of hearing
 at the most sensitive frequency of the average normal human
 ear.  (See "Y1Some Formulas For Working With Sound".)

 Consider that the average ear can hear up to about 120 dB SPL
 before pain begins.  This requires a million times more
 voltage to produce than 0 dB, which seems to imply that an
 ideal digital audio system needs at least 21 bits to capture
 the full range.  (20 bits = 2^20 = 1048576, but we need to
 handle both positive and negative voltages, so we would need
 twice that range, or 21 bits.)

 Luckily, we rarely listen in "threshold" conditions with zero
 background noise, and we rarely want to bring ourselves to
 pain, so the theoretical 96 dB range of a 16-bit system is
 usually adequate for most purposes.

 Why does a 16-bit system have a 96 dB range?  Remember that
 every additional bit doubles the number of possible output
 voltages you can produce, and every time you double the
 voltage you add 6 dB to the range.  So 16 times 6 dB = 96 dB.
 Similarly, an 8-bit system would have a 48 dB range, and a
 12-bit system would have a 60 dB range.

 Besides absolute values like dB SPL, you may see some that
 are "semi-absolute", like dB SL (Sensation Level) or dB HL
 (Hearing Level).  In these cases the reference level is a
 subject's own threshold for detection, using some particular
 protocol.

 Let's say you are studying the ability to detect small amounts
 of frequency modulation in brief tone bursts.  You want to
 know if the ability to do this varies with loudness.  Before
 you begin, you determine the minimum level of an unmodulated
 burst that a subject can just detect, and call that 0 dB.
 Then you run all your modulation tests at levels of 20, 40,
 60, and 80 dB above this subject's reference level.

 You repeat this whole procedure for each subject.  Note that
 each may be using different absolute sound levels, since each
 may have a different threshold of hearing.  This method tends
 to compensate for those differences, but note that it also has
 a really big benefit regarding ease of operation:  There is no
 need to make sound level measurements.  You simply adjust the
 signal level to find the reported threshold, read that level
 setting and call it 0 dB, and add the needed dB to get each
 test level.

 Of course, it would be a good idea to also record the actual
 level settings that correspond to the 0 dB threshold in each
 subject.  Then a single YCcalibration measurement for your sound
 system will allow you to determine the approximate absolute
 thresholds of all subjects.


Gd DUPLEX, HALF and FULL:

 This term arises from communications use, where full duplex
 refers to a system that can send and receive simultaneously,
 as in a standard telephone (where only politeness prevents
 both parties from talking at the same time).  Half duplex
 systems can only do one thing at a time, either send or
 receive.

 The "full duplex" designation is often applied to sound cards
 that can acquire input data via an GAADC at the same time they
 are producing output data via a GDDAC.  Note that "full" tells
 nothing about the bit resolution in each direction, and a
 sound card may legitimately be called "full duplex" if it
 can acquire 16-bit data while generating 8-bit data, or vice-
 versa.

 "Full" also tells nothing about the number of channels in each
 direction, and some cards can achieve stereo operation in both
 directions while others can only manage mono... though maybe
 at 16-bits each way.

 The SGSTIM3A Stimulus Generator requires full duplex
 capabilities in order to produce stimulus outputs during data
 acquistion.  (At this time, 0BSB16.ADC is the only sound
 card driver that supports this, for the Sound Blaster 16/32/64
 card family.)

 Laboratory-type boards that generate an interrupt for each
 sample period typically have no problems with simultaneous ADC
 and DAC operation, although they never use the term "duplex".
 On each interrupt, the board driver's interrupt handler simply
 reads the proper data from the stimulus buffer and writes it
 to the DAC or DACs, then reads the ADC data and stores it to
 system memory.


GI ISOLATION, ELECTRICAL:

 WHENEVER ELECTRICAL EQUIPMENT IS CONNECTED TO A LIVING SUBJECT
 THERE IS A DANGER OF ELECTROCUTION due to malfunction.  To
 minimize this risk, all connections to the subject should be
 electrically isolated from the main power lines, including the
 ground or neutral line.  This means that there must be no
 electrical path between the subject and the line.

 Optical isolation is usually the method of choice:  If the
 device being connected to the subject is a monitoring or
 recording amplifier, for example, it is battery-operated so
 that no connection to the main power lines is needed.  The
 isolator then converts the amplified signal from electrical to
 optical form, essentially by using it to drive a special Light
 Emitting Diode (LED) similar to those commonly used as
 indicator lights.  The light is modulated so that its
 intensity is directly proportional to the signal amplitude.

 The light then travels a short distance through an electrical
 insulator (epoxy plastic, for example) before hitting a linear
 photodetector that converts it back to electrical form.  The
 detector part of the circuit is run from the main power lines,
 and is not connected electrically to the LED side (subject
 side) of the circuit in any way.

 This maintains total electrical isolation of the subject from
 the power lines in the event of catastrophic failure of the
 equipment or the power system itself.

 For electrical stimulation of the subject, the idea is the
 same but reversed:  Here the stimulator must be driven by
 batteries, and receives a light signal from a powerline-driven
 modulator.

 Although the isolator assures safety from powerline problems,
 the battery-powered amplifier or stimulator must still be
 carefully designed:  Even small electrical currents can be
 lethal when directly connected to the subject, especially
 across the heart as in recording heart rate, etc.

 For use on human subjects, ALWAYS use properly designed and
 isolated equipment certified for the intended purpose.  For
 small lab animals like rats, mice, and guinea pigs, however,
 the danger is usually considered minimal enough to use
 "home-made" preamplifiers without isolation.  Consult the
 animal use committee at your institution for details.


GO OVERSAMPLING:

 This term usually refers to a situation where the true GAADC
 sample rate is higher than the observed sample rate.  This is
 often the case in special audio ADCs, where a simple converter
 with a small number of bits running at a very high sample rate
 is digitally processed into an equivalent higher resolution at
 a lower rate.

 In Daqarta, "stimulus oversampling" is used by the STIM3A
 driver to allow many laboratory-type boards to generate output
 (GDDAC or digital) samples at higher rates than the incoming ADC
 samples.  For example, some animals can hear frequencies well
 above 20 kHz, to which they may respond with brain waves that
 are below 1 kHz but last for several milliseconds.  Stimulus
 oversampling can provide low distortion stimuli at sample
 rates above 50 kHz, while the screen shows the full response
 duration by effectively sampling the input at lower rates.
 Daqarta would run both the inputs and outputs at the higher
 rate, then discard unwanted input samples.

 But the outputs of some boards are capable of much higher
 rates than the ADC can achieve.  On these boards, Daqarta is
 able to generate stimuli at the higher rates by special timer
 handling that keeps the ADC rates synchronized but within safe
 limits.  Whenever the output rate is higher than the maximum
 ADC rate, Daqarta refers to this as "hypersampling".


GP PACER:

 The device or mechanism which controls sample timing.  This is
 typically a timer chip on the ADC board, which is programmed
 to generate a pulse at the desired rate.  The pulse may then
 start the GAADC conversion directly, or may generate an IRQ to
 Riinterrupt the CPU.  In the latter case, the CPU would need to
 start the ADC sample conversion directly.  For inexpensive
 boards without built-in pacers, Daqarta uses the system timer
 to perform the pacing.

 Some boards have provision to use an external mTTTL pacer input
 to provide synchronization with a user-supplied reference
 signal.  Note, however, that manufacturers may refer to the
 pacer as the device that "triggers" the ADC.  Since they also
 use "trigger" to mean "start collecting a sweep of N samples"
 (as Daqarta does), things can get very confusing.  Usually, a
 reference to "external trigger" really means "external pacer".

 Another word for pacer is "sample clock".


Gp PIXEL:

 The smallest "picture element" that can be displayed in the
 current video mode.  Daqarta uses mode 10h, which gives 640
 horizontal pixels by 350 vertical pixels.  Note that this is
 not the same as monitor resolution or "dot pitch" (typically
 0.28 mm), which is the size of the phosphor dot spacing on the
 screen and is thus related to the smallest pixel that could be
 shown in ANY video mode.  There is no particular alignment
 between the mode pixels and the phosphor dots.  As an example,
 consider a 14 inch monitor with an actual 13 inch viewable
 diagonal.  In mode 10h, the "lit" part of the display has
 dimensions of 10.3 by 8.0 inches, but some of that is merely
 border... the working area is actually 10.0 by 7.7 inches.
 Since there are 25.4 mm/inch, this works out to about 907 by
 699 phosphor dots.  The best way to think of this whole
 process is to imagine that the video card is projecting an
 image through a mask with 640 by 350 holes, and that image
 passes through another mask (the monitor) of the same overall
 size, but with 907 by 699 holes.

rm
 ROOT MEAN SQUARE (RMS):

 Root Mean Square is a way of comparing arbitrary waveforms
 based upon their equivalent energy.  RMS voltage is the
 contant (DC) voltage that would be required to produce the
 same heat in a resistive load, indicating equivalent ability
 to do work.  You can't use a simple "average voltage", since a
 sine wave has positive and negative phases that would average
 to zero, yet it still generates heat regardless of the
 polarity of the voltage.

 The RMS method takes the square of the instantaneous voltage
 before averaging, then takes the square root of the average.
 This solves the polarity problem, since the square of a
 negative value is the same as the square of a positive value.
 For a sine wave, the RMS value thus computed is the same as
 the amplitude (zero-to-peak value) divided by the square root
 of two, or about 0.7071 of the amplitude.  For a repetitive
 waveform like this, an accurate calculation can be done by
 averaging over a single cycle of the wave, but for random
 noise sources the averaging time must be long enough to get a
 good representation of the characteristics of the source.

rs
 ROOT-SQUARE SUMMATION OF COMPONENTS:

 The Root-Square method is used to compute a single value that
 represents the composite of different sine wave components
 whose levels you already know.  You just square each of the
 values and sum them together, then take the square root of the
 total.  If the original values were rmRMS, the result will be
 also be an RMS value.  If the originals were zero-to-peak
 amplitudes, then the result will be the equivalent amplitude
 of a sine wave having the same energy as the sum... you can
 multiply this by 0.7071 to get the RMS value of the
 composite.

 This is the method used to find the total energy in a band of
 frequencies from the FiFFT output.

Sp
 STANDARD SCIENTIFIC PREFIXES:

    Y = Yotta   10^+24
    Z = Zetta      +21
    E = Exa        +18
    P = Peta       +15
    T = Tera       +12
    G = Giga       +9
    M = Mega       +6
    k = kilo       +3    (Daqarta will also accept K)
                    0 =  Base unit (Volts, Hertz, etc)
    m = milli      -3
    µ = micro      -6    (Daqarta will also accept u)
    n = nano       -9
    p = pico       -12
    f = femto      -15
    a = atto       -18
    z = zepto      -21
    y = yocto   10^-24

 Daqarta only accepts the prefix, not the base unit.
 For example, enter 1.234m instead of 1.234 mV.

 If you are using the Edfield-copy option to copy an entered
 parameter value to a comment field, and if you have used
 scientific notation to enter a value outside the above
 range, and if the value is accepted by Daqarta, then you
 will see 'ε' for all prefixes below 'y' (yocto = 10^-24),
 or '!' for all prefixes above 'Y' (Yotta = 10^+24).  (At
 present, this latter can only happen when entering wSWaitS
 delays longer than a million times the age of the universe!)

mt
 TONE SWITCH or TONE GATE:

 This is a device which produces tone bursts typically used as
 auditory stimuli.  It accepts one input from an oscillator
 (the "tone"), and another from a periodic pulse generator (the
 "gate").  When the gate pulse goes high, the tone switch
 gently fades up the level of the tone from 0 to 100%, and when
 the gate goes low, gently fades back to 0.  The tone burst
 thus produced avoids the "click" that would otherwise result
 from merely switching it on and off.  This is important if you
 want to know about the subject's ability to detect the tone
 and not the click.

 Typically, tone switches allow control of rise time, since a
 fast rise time may still be too click-like, while a slow rise
 time may not evoke enough response from the subject.  The
 better tone switches provide for optionally synchronizing the
 tone burst with the tone... they delay the gate pulse until
 the tone goes through a specified zero crossing, insuring that
 each tone burst is absolutely identical.  The polarity of zero
 crossing may be positive, negative (which produces a mirror
 image tone burst), or alternating between the two.

 This may have important benefits for certain experiments,
 where the evoked response contains one component that mimics
 the stimulus waveform and another that is relatively the same
 for each stimulus whether positive or negative.  You can
 cancel the first component by averaging together half positive
 and half negative stimuli, leaving only the independent
 component.  Although the same could be done with a simpler
 tone switch having no synchronization, the random stimuli
 would take much longer to average out.

 With Daqarta, the functions of a tone switch can be easily
 duplicated via the SGSTIM3A Advanced Stimulus Signal Generator
 using its Burst mode.  Unlike the older STIM3, STIM3A can
 produce a wide variety of waveforms and random noise types,
 and can apply the Burst function to any of these, including
 waveforms or .WAV files created elsewhere.

 The FM synthesizer chip in most sound cards can approximate
 tone switch functions, with somewhat limited control over
 the shape of the tone bursts.  The Daqarta sound card drivers
 also allow you to generate bursts of random noise by using
 undocumented features of the synthesizer chip.

mT
 TTL:

 This is a "lingua franca" digital voltage standard for
 computers, named for the the Transistor-Transistor Logic chips
 in early machines which ran from a +5 Volt supply voltage.
 Zero Volts is a digital "zero" or "off", and a nominal +5
 Volts is a "one" or "on".  In true TTL logic, the low voltage
 may be as high as 0.5 and the high voltage may be as low as
 3.5 and the device will still work properly... in fact, real
 devices typically put out something closer to 4.5 Volts when
 running from a 5 Volt supply.

 Newer chip technologies like CMOS (Complementary Metal-Oxide
 Semiconductor, pronounced like "Sea Moss") can be made to run
 on a wider range of voltages, but until recently have been
 standardized at 5 Volts for computer compatibility.  The
 emergence of battery-powered laptop computers has forced
 manufacturers to reduce the supply voltage to the computer
 itself to 3.3 Volts or even lower to conserve power, but
 connections to peripheral devices like printers must still
 adhere to the TTL standard.


a0
 APPLICATIONS:

 Distortion - Theory and Measurement
    d0Introduction
    dHHarmonic Distortion
    dIInharmonic (Intermodulation) Distortion
    dODistortion Orders
    dMDistortion Measurement
    dELow-Level Distortion Analysis Techniques
    dLCreating Low IMD Acoustic Signals

 a1Sound / Event-Triggered Sequences
    aIIntroduction
    aRSound-Triggered Recording
    aSSound-Triggered Spectrograms
    aOOther Sound / Event-Triggered Operations


d0
 DISTORTION - INTRODUCTION:

 Distortion is classified as either linear or nonlinear.
 Linear distortion includes processes that may change the level
 or phase of a signal or its individual frequency components,
 but not add any new components.  Ordinarily these processes
 would be described by their effects, such as "frequency
 response" or "mpphase shift", rather than "linear distortion".

 A nonlinear system (or portion of a system) is one whose
 output is not simply proportional to its input, but instead
 is related by some dOnonlinear equation that may contain
 squared or higher power terms.  All systems exhibit nonlinear
 behavior at their limits (or those wouldn't be the "limits").
 For example, an amplifier has a maximum output voltage
 determined by its power supply, and a loudspeaker has a
 maximum displacement determined by its construction.

 Most modern solid-state amplifiers exhibit "hard" limiting,
 where they behave linearly up to some maximum voltage, then
 can't go beyond that limit... they simply "clip" there.

 Loudspeaker limiting behavior is similar but "softer":  The
 cone encounters increasing stiffness as it nears its
 suspension limits, and decreasing driving force as the voice
 coil moves out of its magnetic field, but no abrupt "brick
 wall" limit as with amplifier clipping until the voice coil
 actually bottoms out.

 In addition to these limiting or "saturation" effects, some
 systems have particular problems with very small signals.
 Many power amplifiers encounter a problem called "crossover"
 distortion.  They use "push-pull" circuitry with separate
 portions for handling positive and negative parts of the
 signal.  This improves efficiency, since only one portion
 needs to be active at a time.

 As the signal passes through zero, the amplifier must switch
 between the positive circuits and the negative circuits.  If
 this hand-off is not done smoothly, there may be a small
 region where neither portion is working and the output jumps
 to zero prematurely.

 Since distortion is typically reported (and perceived) as a
 percentage of the output, an amplifier may produce very high
 output power with very low distortion when it is below its
 clipping point, yet at low output power that same amplifier
 may produce an intolerable amount of distortion due to
 crossover problems:  At low power, the signal is spending
 most of its time near zero, so the distortion there is a
 bigger percentage of the total output.

dH
 HARMONIC DISTORTION:

 When a signal passes through a nonlinear system, it always
 generates harmonic distortion.  A pure sinusoidal input signal
 yields additional output components at multiples ("harmonics")
 of the input frequency.  If the distortion in the positive
 portion of the output is an exact mirror of the negative
 portion, the distortion will contain only odd-numbered
 multiples (odd harmonics).  This is often the case with modern
 solid-state power amplifiers that clip symmetrically on
 positive and negative peaks.

 If an amplifier with symmetrical clipping is driven hard
 enough, the flat tops and steep slopes of the output start to
 look like a square wave.  See "mwMaking Waves Via Sine Wave
 Synthesis" for hands-on experiments that show the odd-harmonic
 structure of square waves, using the SGSTIM3A Advanced Stimulus
 Signal Generator and the 0BDEMO.ADC board driver.

 You can also experiment with variable amounts of clipping by
 using the STIM3A/DEMO setup.  Create identical sine waves on
 two different DAC tone component pages.  You may want to use
 the STIM3A StepN option to insure that the frequency is an
 exact integer submultiple of the sample rate so it will fall
 exactly on a spectral line with no leakage "tfskirts", or else
 you will need to use a W0window function to reduce them.

 If one component is at 100% Level and the other is at zero or
 Off, there will be no clipping.  When both are On they will
 add together to form the composite output, which will clip
 symmetrically at the 100% level when the total exceeds that.
 By increasing the second component Level from 0 to 100% you
 can control the amount of clipping and observe its effects on
 the waveform and spectrum.

 Note that the true harmonic series will extend beyond the
 tANyquist frequency (which is the maximum unexpanded X-axis
 frequency and is half the sample rate), but the higher
 components will be "folded over" or "reflected" by aliasing
 and appear in the spectrum you see.  If one of the reflected
 harmonics lands on one of the true lower harmonics, it will
 add to it or subtract from it depending on its polarity.  (The
 magnitude or power spectrum shows only absolute values, not
 polarities.)

 If the positive and negative portions of a sine wave are not
 symmetrical, then even-harmonic components will also be
 produced.  Old vacuum tube amplifiers (or those that don't use
 push-pull methods) tend to have even harmonics due to this
 phenomenon.

 Using the above clipping setup, you can cause a sine wave to
 clip on only the positive or negative peaks by adding a
 positive or negative constant value.  Just change the second
 sine wave frequency to 0 (DC) and change the phase to +90 or
 -90 degrees.  The Level control will then add a positive or
 negative constant to the first sine wave, causing the total
 output to clip on only one polarity.

 The distortion thus created will be more severe than that from
 a vacuum tube (which has a gentle saturation onset instead of
 an abrupt clipping point), but it will illustrate the presence
 of even harmonics due to asymmetery.

dI
 INHARMONIC (INTERMODULATION) DISTORTION:

 This results when two or more different frequency components
 interact within a nonlinear system.  The output will then
 contain not only harmonics of the original frequencies, but
 also components at sum and difference frequencies that
 typically aren't harmonics of either input.  This is also
 known as "intermodulation" or "IM" distortion (IMD), since the
 result is similar to multiplying two sinusoids together.

 You can demonstrate these sum and difference products by using
 the dHSTIM3A/DEMO setup described above for clipping distortion.
 Set the two sine waves to different frequencies and set both
 amplitudes over 50%.  Clipping will appear on the composite
 waveform, but not on every cycle... only where both waves are
 aligned.

 For example, set both levels to 60% and set the frequencies to
 500 and 700 Hz.  Notice that the most-positive waveform peaks
 are clipped, and that this happens about every 5 msec.  (The
 same is true for negative peaks.)  Now, 5 msec "just happens"
 to be the period of a 200 Hz wave, which is the difference
 between 500 and 700 Hz, and you will indeed see a 200 Hz peak
 in the spectrum, as well as one at the sum frequency of 1200
 Hz.

 In fact, you will see peaks at all multiples of 200 Hz.  If we
 call the higher frequency f2 and the lower f1, then all these
 peaks represent "difference tones" at f2 - f1, 2f1 - f2, and
 all integer multiples Mf1 - Nf2.  (Negative and positive
 frequencies are equivalent here.)


dO DISTORTION ORDERS:

 Many systems have milder nonlinearities than abrupt clipping,
 and are typically described by the order of the equation that
 relates the instantaneous output to input.  A perfectly linear
 system with input X and gain A would produce output Y as:
    Y = AX
 A system with nonlinearities would have the form:
    Y = AX + BX^2 + CX^3 + DX^4 + ...

 In a two-tone dIintermodulation test, the 2nd order term B will
 cause intermodulation components to appear as an f2 - f1
 difference tone.  This is often referred to as the "quadratic"
 difference tone, as in the old "quadratic formula" for solving
 equations with squared terms.  The 3rd order term C will
 result in a "cubic" difference tone at 2f1 - f2.  By studying
 the locations and strengths of the distortion products, it is
 possible to gain insight about the nature of the system.

 Intermodulation distortion is typically a problem when you are
 generating two tones from the same speaker or other source at
 high sound levels.  Since any source is nonlinear at high
 levels, the sound output will include not only the two tones
 you desire (plus harmonic distortion products from each), but
 also intermodulation distortion products at inharmonic sum and
 difference frequencies.

 It is particularly important to reduce intermodulation in
 loudspeaker and audio amplifier designs, since inharmonic
 distortion is subjectively much more objectionable to the ear
 than harmonic distortion.  It is easily detected because it
 adds new tone frequencies that were not present in the
 original signal, and are thus not masked by harmonics of
 voices or instruments in the program material.

dM
 DISTORTION MEASUREMENT:

 To analyze the distortion products, harmonic or inharmonic,
 produced by a system or device under test, you must first
 insure that the stimulus signal itself does not contain these
 same products.  If it does, then they must be accounted for
 when viewing the output of the test system.

 Connect the stimulus signal directly from the source to the
 input of the GAADC board (with suitable attenuation, if needed)
 and observe the spectrum.  You will need to use a W0window
 function to reduce FFT tfleakage skirts unless you carefully
 adjust the source frequency.  Otherwise, the skirts may be
 much larger than the distortion components you are seeking.
 If you are using SGSTIM3A to generate tones, the StepN option
 allows locking the tone frequency to a single spectral line
 without need for windowing.

 Use FeFFT32 mode for best resolution of low-level components.
 If you see unintended frequency components at levels above the
 noise floor, you know there is a problem with the source or
 with the ADC board.  Although ADC problems are not common,
 sound cards in particular often have gain stages ahead of the
 ADC that may exhibit saturation effects.  In any case, if you
 can determine the source of the distortion you may be able to
 deal with it.

 If your stimulus is a single sine wave frequency, you can try
 substituting with a lower-distortion source and see if the
 spectrum improves.  If you can't obtain such a source, there
 are some other tricks you can try:  Reduce the signal with a
 passive attenuator before feeding it to the ADC board.  You
 can use a simple voltage divider made of 2 resistors:

    Source >──── R0 ─────┬──────────────> To ADC
                         │
                         Rg
                         │
       Gnd >─────────────┴──────────────> Gnd

 If both resistors are equal (10 kohms is a good value), the
 signal will be cut in half (-6 GadB).  If the distortion is
 coming from the source, it should now be reduced along with
 the signal by the amount of the attenuation.  If it is not
 reduced that much, the ADC board is clearly at fault and is
 showing the equivalent of dHcrossover distortion.  But if it IS
 reduced that much, the board can't be ruled out yet, since any
 saturation-type nonlinearity would be expected to produce less
 distortion at lower levels.

 A much more elegant and effective test is to measure the
 dIintermodulation distortion of the ADC board, since any system
 nonlinearities will show up there.  This test requires two
 separate sources, which you may already have if you were going
 to measure IM in the test system anyway.

 The beauty of the IM test is that it is easy to create a
 signal with essentially NO intermodulation distortion, even if
 the individual sources have relatively high harmonic
 distortion.  The trick is simply to add the two sources
 together linearly, which you can do with a simple passive
 resistor network:

   Source 1 >─── R1 ─────┬──────────────> To ADC
                         │
   Source 2 >─── R2 ─────┤
                         │
                         Rg
                         │
        Gnd >────────────┴──────────────> Gnd


 You can use 10 kohms for each resistor... the value is not
 critical.  Since resistors are very linear devices, they will
 create essentially NO difference tones.  And it doesn't matter
 how much HARMONIC distortion is present in each source, since
 that won't affect the INHARMONIC distortion which only arises
 when one tone interacts with another in a nonlinear system.

 The two sources can be external oscillators, sound card
 synthesizer outputs, or SGSTIM3A DAC outputs.  You can use one
 GDDAC and one external oscillator, etc.  STIM3A allows the StepN
 option to insure that both DAC output frequencies (and hence
 all distortion products) will fall exactly on spectral lines
 for easy measurements or low-level components.

 The level of each source alone should be high, but within the
 ADC range.  The resistor network with all values equal cuts
 each signal to 1/3 as it combines them, which insures that the
 sum will never exceed the ADC input limits.

 Set the two source frequencies such that difference tones will
 be easy to spot.  For example, if the sources are at 500 and
 700 Hz, the quadratic difference tone would be expected at
 700 - 500 = 200 Hz and the cubic at 2 * 500 - 700 = 300 Hz.
 Neither of these is a harmonic multiple of 500 or 700 Hz,
 so if they are present they will stand out clearly from any
 harmonic distortion in either source.

 On the other hand, if the sources were at 500 and 1000, the
 quadratic difference tone would fall at 1000 - 500 = 500 Hz
 and would thus be covered by the source tone, while the cubic
 would fall at 2 * 500 - 1000 = 0 Hz and would be hard to tell
 apart from harmless DC offset.  In addition, all the upper
 difference tones would be 500 Hz apart and would thus fall on
 harmonics of the inputs.

 There is an additional precaution:  If either source tone has
 harmonics (or harmonic distortion components generated by the
 ADC board) that exceed the tANyquist frequency, then when they
 are reflected down by aliasing they could end up at the same
 locations as the difference tones you wish to monitor.  To
 check for this, first view only one source at a time and look
 for unexpected peaks.

 For example, if one source is 7000 Hz, it could have harmonics
 at 14000, 21000, etc.  If the sample rate is 20 kHz, a 14000
 Hz component is 4000 Hz above the Nyquist reflection point and
 will thus land at 10000 - 4000 = 6000 Hz, while a 21000 Hz
 component will be reflected first at 10 kHz and then again at
 0 to land at 1000 Hz.  If you check each source separately and
 neither alone produces components at the difference
 frequencies, then proceed to turn them both on at once and
 look for intermodulation.

 Alternatively, if you are using external sources or the
 built-in OPL3 synthesizer sources from a 0Bsound card, there is
 a simpler test for harmonics capable of interfering with
 intermodulation measurements:  Apply both tones, then vary the
 X0sample rate and see what happens.  Source and difference tones
 will be unchanged in frequency (though of course the frequency
 scale is changing, so they will move in unison on the screen),
 whereas any reflected harmonics will move independently.

 ┌───────────────────────────────────────────────────────┐
 │  You can't do this when using SGSTIM3A sources, since   │
 │  when you are changing the sample rate there is no    │
 │  automatic recomputation of the waves in the output   │
 │  buffer until you go back to the STIM3A control menu. │
 │  The output frequencies will thus track changes in    │
 │  sample rate, and the display will appear unchanged.  │
 └───────────────────────────────────────────────────────┘

 One more potential problem:  A source with a poor output stage
 might generate intermodulation via leakage from the other
 source back through the resistor network.  If you see
 difference tones and this is suspected, try raising the level
 of one source and cutting the other by a comparable amount, so
 that the total signal to the ADC input is unchanged.  If any
 measured distortion product increases or decreases by the same
 amount, then the problem was in one of the sources... the one
 whose level was changed in that direction.

 Otherwise, if the sources are OK and the new overall level is
 the same, any distortion arising in the ADC board should not
 change much.  (This test and much more on the measurement of
 nonlinearity in ADCs was detailed in an article by Rathmell,
 Scott, and Parker in the October 1997 Journal of the Audio
 Engineering Society.)

 If you see actual difference tones from these tests, you can
 assume that there is intermodulation in your GAADC or some input
 stage on your board.  If the distortion is smaller than what
 you are trying to measure in the test system, this may be
 acceptable.  If not, try cutting both source levels (or the
 board sensitivity) in half.  If that causes the distortion to
 drop by substantially more than 6 GadB, you may still be able to
 use the ADC board with careful attention to input levels.
 Otherwise, you may need to consider a new board.

 If a new board is not an option there are "exotic" ways around
 this problem.  They are cumbersome by comparison, but they
 illustrate general concepts for squeezing the maximum
 resolution from a measurement system:


dE LOW-LEVEL DISTORTION ANALYSIS TECHNIQUES:

 Every measurement system has some finite limit on the range of
 values it can handle.

 Consider the needs of a system to measure the distortion of an
 audio power amplifier.  Typical modern amplifiers may have
 distortion levels (dHharmonic or dIintermodulation) that are below
 the noise floor of your ADC board.  Even with waveform
 AWaveraging to reduce the noise in the measurement, you may find
 that distortion from the board itself is larger than anything
 from the amplifier.

 In other words, if you send a high-level stimulus signal to
 the amplifier (or other low-distortion system) under test,
 then at its output will appear that same signal (perhaps
 greatly amplified), plus one or more much-smaller distortion
 components.  If you want to analyze this composite signal with
 an ADC board, you must provide attenuation such that the large
 stimulus portion will not overload the board's input.

 Even at levels below outright overload, the stimulus portion
 may induce detectable distortion from the board.  If you
 reduce the level in order to reduce this added distortion, you
 will also be reducing the amplifier distortion components you
 are trying to measure.  What is needed is a way to reduce the
 high-level stimulus portion, while leaving the low-level
 portion unaffected.

 One standard method is to apply a "notch" filter to the
 signal, carefully adjusted to cut only the stimulus frequency.
 For measuring intermodulation distortion, you will need a
 notch filter for each of the stimulus frequencies.  Changing
 to new stimulus frequencies requires re-tuning.  Since the
 notch must be very sharp in order to cut only the stimulus
 without affecting nearby difference tones, small tuning errors
 can allow large amounts of stimulus to pass.

 A preferred alternate method is to use simple subtraction to
 remove the stimulus component(s) from the amplifier output
 signal.  This can be done because you have access to both the
 input and output signals for the amplifier.  If you attenuate
 the output to compensate for the amplifier gain, it should be
 identical to the input except for any added distortion.  You
 can then subtract them via a simple difference circuit, also
 known as a "differential amplifier", and obtain the distortion
 components alone.

              ┌───────┐                         To
 Source >──┬──┤  AMP  ├──┬────────────────────> Amplifier
           │  └───────┘  │                      Load
           │         ┌───┴──┐
           │         │ ATTN │
           │         └───┬──┘
           │             │  ┌───────┐  ┌───────┐
           │             └──┤ PHASE ├──┤+      │
           │                └───────┘  │  DIFF ├────> To ADC
           └───────────────────────────┤-      │      Board
                                       └───────┘

 If it happens that the amplifier inverts the signal anyway,
 you could replace the difference circuit with a passive
 resistive summing network, like the one previously shown for
 adding two sources to measure dIintermodulation distortion.

 The attenuator can be a simple "volume control" added to the
 input of the difference circuit.  For finer adjustment of the
 control, use series resistors Ra and Rg to supply the bulk
 of the attenuation when you know the amplifier gain A.

          From
          Amp  >──────Ra───────┐
                               │
                               │
                 ┌─────────┐   │
                 │         ├───┘         To
                 │ Control ├───────────> Diff
                 │   Rc    ├───┐
                 └─────────┘   │
                               Rg
                               │
           Gnd >───────────────┴───────>

 A multiple-turn control will give even finer adjustment.  If
 the control has a total resistance of Rc, select Rg about 10
 times as big, then select Ra = Rg * A.  For example, suppose
 the amplifier has a gain A = 20 and the control has Rc = 1K.
 Then select
    Rg  =  10 * Rc  =  10 * 1K  =  10K
    Rs  =  Rg * A  =  10K * 20  =  200K
 This will allow adjustment for a range of gains from about
 19 to 21.

 Observe the spectrum of the output from the difference circuit
 while you adjust the attenuator for a minimum at the stimulus
 frequency.  If there are two stimulus frequencies, both peaks
 should go down at the same time.  Note that the difference
 stage may be driven into clipping at first, before you find
 the right adjustment, which will create lots of spurious
 spectral peaks.

 Once the stimulus itself is cancelled, the difference output
 can be preamplified to drive the ADC for better sensitivity.
 Consider that if you use the subtractor to null out 48 GadB of
 stimulus (typical, though you can often do even better), you
 can effectively add that 48 dB to the measurement range of the
 ADC.  That's equivalent to adding another 8 bits to the
 resolution of your ADC, not counting what you might gain by
 AWwaveform averaging!

    AVERAGING NOTE:
    Waveform averaging reduces the noise floor to allow
    better resolution of low-level components.  AfSpectrum
    averaging would only show you the average noise
    level... not helpful here.  So A1start the average in
    waveform display mode and then toggle the F0F-key to
    see the spectrum of the waveform average.  Be sure
    FeFFT32 (SHIFT-F) is active for maximum resolution of
    low levels in the presence of large signals.

    For averaging multiple tones produced by SGSTIM3A, the
    TCTrigger Source should be set to TgStim, which triggers
    on the start of the stimulus.  TSInternal mode looks only at
    slope and level, so it would not synchronize to the complex
    waveform.

 Some amplifiers, especially at high frequencies, may introduce
 mpphase shifts that prevent this simple subtraction method from
 reducing the stimulus to near zero.  If it is still big enough
 to cause ADC board distortion, you will need to add a
 compensating phase shift to your subtraction circuit.  You can
 use simple mFhigh-pass or mLlow-pass R-C filters with
 adjustable R (since these produce 90 degree shifts near their
 cutoff frequencies), as long as you recognize that these are
 also changing the effective attenuation.  Adjustment can be
 tricky until you get near the desired null point, since you
 will be adjusting both phase and level controls together.

 The phase adjustment could be done at either subtractor input
 by changing from high-pass to low-pass or vice-versa.  Since
 you typically won't know ahead of time just how much phase
 shift you need, or in what direction, you must be prepared to
 switch things around or change capacitor values.

 If the phase shift is different for each of the two stimulus
 tones in an intermodulation test, and you can't get
 satisfactory results by "splitting the difference" on a single
 phase adjustment, you will need to use a separate source for
 each stimulus tone.  Combine them directly (using the
 resistive network previously shown) to drive the amplifier,
 but provide each with separate phase and level controls before
 combining to go to the subtractor.

 These same techniques will work in many other cases where
 you need to measure extremely small distortions, such that any
 board would be challenged.  The subtraction method will work
 for ANY type of distortion measurement, as long as you have
 access to both the input and output signals of the system
 under test.

 You can measure extremely low levels of distortion with this
 approach, much lower than the residual distortion present in
 the stimulus signal itself.  That's because the stimulus
 distortion is also subtracted away, so all you are left with
 is whatever was added by the device under test.  What's
 more, this method is not limited to simple tone stimuli, or
 even steady-state conditions.  As long as you can adequately
 control for phase shifts, the stimulus can be a complex or
 transient signal, even speech or music.


dL CREATING LOW IMD ACOUSTIC SIGNALS:

 To measure distortion in acoustic systems, you need a good
 microphone with known low distortion of its own.  But to
 measure the dHharmonic distortion of a microphone, you would
 need a pure acoustic wave with no distortion.  Yet how would
 you know the acoustic wave's distortion, unless you already
 had a known microphone?

 The solution is to use dIintermodulation measurements instead of
 harmonic distortion measurements, since harmonic distortion of
 the individual sources does not compromise the results.

 The best way to get two tones with no intermodulation is to
 create them separately via two different loudspeakers or other
 drivers and let them combine acoustically.  Since air is much
 more linear than any driver, there will be very little
 intermodulation.  Some small amount may arise, particularly if
 the sound must be mixed in a closed system, due to sound
 pressure from one source moving the other.

 Note that this technique does nothing to reduce HARMONIC
 distortion, which is generated separately by each source.

 The dual-source method is also useful when studying the
 difference tone distortion products generated by the ear
 itself.  These cause tiny "oto-acoustic emissions" of sound
 from the inner ear, which can be measured by a sensitive
 microphone in the ear canal for clinical diagnosis of certain
 conditions.  The procedure is often referred to as "DPOAE" for
 Distortion Product Oto-Acoustic Emissions.


a1 SOUND / EVENT-TRIGGERED SEQUENCES:

    aIIntroduction
    aRSound-Triggered Recording
    aSSound-Triggered Spectrograms
    aOOther Sound / Event-Triggered Operations


aI SOUND / EVENT-TRIGGERED SEQUENCES - INTRODUCTION:

 Occasionally you may want to start some operation when the
 input signal exceeds a certain Tltrigger level.  The typical
 application is to capture some infrequent event (sound or any
 other signal) for further analysis, but there are much more
 exotic possibilities as well.

 Regardless of what the triggered operation may be, you need a
 way to wait until the trigger, then proceed with the
 operation.  The trigger detection itself should almost always
 be done with TnNorm trigger mode, since it will wait
 indefinitely for the trigger signal.  (TaAuto mode only waits
 for NpN-points samples and then proceeds regardless... and of
 course if TtTrig is toggled off to give TfFree-run there is no
 waiting at all.)

 The simplest situation is when the signal of interest lasts
 less than a sweep duration, so you can see the whole thing on
 the screen at one time.  If all you want to do is analyze that
 one event, you can use the SsSingl (single-sweep) option to
 capture it and P0Pause, allowing you to do whatever you want
 after that (save it to M0memory or a fofile, observe the
 transient F0spectrum, etc.)

 But the most powerful techniques use K0Key Macros to wait for
 the trigger, then execute a series of other commands.  You
 store the keystrokes initially with KSKeySt (SHIFT-K), then play
 them back with KRKeyRn to produce the desired operations.


aR SOUND-TRIGGERED RECORDING:

 Suppose your signal is much longer than the screen, maybe many
 seconds long.  To capture that for later analysis you need to
 use DiDDisk to save the whole thing to a file.  Your macro will
 need to start with the trigger operation, followed by DDisk.
 But you can't use SsSingl here, since that will P0Pause after the
 first NpN points, before the DDisk command.  Instead, you can
 take advantage of the KPWaitP (ALT-W = Wait for Pause) option:

 Note that K0Key Macros normally execute recorded keystrokes in
 rapid succession, with no acquisition or display sweeps
 between them like you would have when entering those same keys
 manually.  But when WaitP is active, sweeps are obtained after
 each recorded key until a Pause arrives to deactivate WaitP.
 Then the remaining keys resume executing at full speed.

 However, your macro doesn't need to wait for a Pause:  After
 the first sweep, it can give another WaitP to toggle that off,
 and then zip through the other keys.  In the simplest case,
 the key options in the macro would be:

    WaitP, unWaitP, DDisk, Enter, unDDisk

 The unWaitP notation is used here for clarity, to indicate
 that the second hit of the WaitP key will toggle it off.
 The Enter is the confirmation of the default fofile name
 prompted by DDisk.  More on unDDisk in a moment.

 So, assuming you have previously set the trigger to TnNorm mode
 and adjusted the trigger Tllevel for your signal, and assuming
 you already have the BiBoard active in R0RTime mode as needed for
 D0DDisk recording (all of which could be done with other
 macros), then the first KPWaitP will stop and wait for the sweep
 to complete.  When the trigger arrives (and the sweep appears
 on-screen), the second WaitP (shown as unWaitP) will
 immediately stop waiting for sweeps and go right to start the
 DDisk recording.

 But wait!  No matter how fast those keys are executed, the
 fact remains that the trigger event has already passed.  If
 you simply start DDisk recording normally, you will only save
 events that happened AFTER that point.  Here is where DDisk
 D-PreStart can be put to good use:  It tells DDisk to reach back
 into the circulating data buffer and start the recording up to
 15000 samples earlier (up to 30000 with 8-bit data).  That's
 usually more than enough to capture the trigger event with
 room to spare, even allowing for fast sample rates and slow
 DDisk file setup time on mediocre CPUs.

 In fact, there is time to change the trigger mode or simply
 toggle TtTrig off after the second WaitP, before DDisk starts,
 if you prefer a different view of the data during the
 recording.

 The most useful approach is usually to DpPreset the DiDDisk file
 size, so that this whole operation can run unattended.  You
 can even invoke this macro with a KLLoop command to collect
 any number of files using the InIncNm option to auto-increment
 the file names.  But note that if you want any operations
 to take place after the Preset recording ends (like changing
 parameters for the next recording, or even just continuing
 with the rest of the Loop), you need to tell the macro where
 the end of the DDisk macro keys are so it won't zip through
 the remaining keys before the recording ends.

 So you need to end the DDisk section of the macro with a
 "terminal" D-key, shown above as unDDisk for clarity.  This
 is the normal command to toggle DDisk recording off, but if
 you create the macro (with KSKeySt) while the Preset size is
 non-zero, it actually stores a special command to wait for the
 automatic end at whatever file size was specified.

 Note that if you were not using the Preset size option, you
 would need to insert a wSWaitS delay after the initial DDisk or
 else the recording would end immediately; the KeySt process
 does not record the time you take between key presses.

 To tell the macro system that the second D-key is just a
 marker to wait for the DpPreset end, it's important that the key
 arrive during the actual Preset recording interval when you
 are creating the macro.  If you wait too long, and the Preset
 ends the recording before you hit the key, then that D-key
 will simply toggle D0DDisk back on again... not what you want!

 But if you want to use a short Preset size, you may not be
 able to hit the key sequence fast enough, especially if there
 are some other key operations you want to include before the
 end of the recording.  The solution is simple:  Just for the
 purpose of setting up this macro, use an extra-large Preset
 size to give yourself plenty of time.  Don't worry about the
 exact length of this initial file... you can always delete or
 overwrite it later.  Then after you end the macro KSKeySt, you
 can set the desired Preset.  You may want to have a "setup"
 macro that does this along with setting modes and trigger
 Tllevels, which at run-time could be invoked before the DDisk
 macro.

 Your macro can do other things during the DDisk recording,
 including invoking other macros or macro KLLoops.  But you must
 make sure that the unDDisk comes at the same macro level as
 the D0DDisk that started the recording... you can't invoke
 another macro that does that.  When the DpPreset end arrives,
 the macro handler will skip ahead to the unDDisk command,
 breaking out of any Loops and ignoring any other commands or
 macros along the way.  Your macro should thus have a structure
 like:

    ... DDisk, Enter, <other macro commands>, unDDisk, ...

 Those other commands could all be rolled into a single macro
 "KNsubroutine", which will not only make things easier to
 modify, but will be faster to key in when you are KSstoring the
 main DDisk macro and the disk is running.

 Before you run your macro, you will need to (manually or via
 other macros):
 ■  Set BiBoard active in RrRTime mode.
 ■  Set trigger Mode to TnNorm.
 ■  Set trigger T+Slope and TlLevel to detect desired event.
 ■  Set DDisk DpPreset file size for length of event.
 ■  Set DDisk D-PreStart to 15000 (or as needed) to capture
    start of event.
 ■  Make sure trace is Live (unP0Paused).

 That last item is important, since the example macro assumes
 the trace is Live.  If it's not, DDisk will not start... it
 will wait for an unPause that never comes (until you KRESCape
 from the macro).  If you will normally be starting from a
 Paused state, you might consider putting an unPause P-key in
 front of the first KPWaitP, or better yet using KOKeyOn followed
 by one P-key to force a Pause, and a second to unPause.

 HOWEVER, you should also consider that no data is going into
 the data buffer during Pause... it just sits there holding
 whatever data was last acquired.  So in the case that the
 trigger event comes immediately after the unPause there will
 be old "data" ahead of it in the buffer, whatever was there at
 the start of the Pause.  When PreStart reaches back to include
 the trigger event, that old data will appear in front of it
 and could easily get confused with the new trigger data.

 This is really a non-issue if you have control over when the
 macro starts relative to when the trigger event arrives, since
 you can start the macro, and then after a moment's delay start
 whatever process will generate the trigger.  But if the
 trigger events come unpredictably, and you want to use this
 auto-unPause method, you should add an appropriate delay in
 the macro to let the buffer accumulate a "cushion" of silence
 before the trigger event shows up.  Use the wSWaitS (SHIFT-W =
 Wait Seconds) option for this, which defaults to 1 second.
 You can change this via CTRL-SHIFT-W to get any delay you
 want, from microseconds to millenia.  The macro will then look
 like:

    KeyOn, Pause, unPause, WaitS, WaitP, unWaitP, DDisk, Enter,
     <other macro commands>, unDDisk, <more>

 To review:
 ■  KOKeyOn, Pause forces a P0Pause, regardless of initial state.
 ■  unPause resumes data acquisition immediately.
 ■  wSWaitS delays (one second, etc) to allow the buffer to fill.
 ■  KPWaitP stops macro key processing and waits for a sweep.
 ■  After the trigger causes a sweep, unWaitP resumes fast
    processing of macro keys.
 ■  D0DDisk prompts for a file name.
 ■  Enter accepts the default (typically using InIncNm) and
    immediately starts saving data to disk, having reached
    back by D-PreStart samples to include the trigger event.
 ■  <other macro commands> may appear during recording.
 ■  The unDDisk command serves as a placemark.  Macro
    execution will wait for the equivalent command to come
    automatically when the DpPreset file size is reached.
 ■  Macro execution continues if there are <more> commands
    after this.

 ┌─────────────────────────────────────────────────────────┐
 │  TIP:                                                   │
 │  In general, whenever you are creating any complex      │
 │  Key Macro, break it down into a series of smaller      │
 │  "building block" macros wherever reasonable.  These    │
 │  can then be KNcalled in various ways from other macros.  │
 │  This technique allows you to go back later and change  │
 │  one of the sub-macros when your needs change, without  │
 │  having to re-enter an entire long key sequence.  For   │
 │  the same reason, it makes it easier to handle any      │
 │  key-entry mistakes.                                    │
 └─────────────────────────────────────────────────────────┘


aS SOUND-TRIGGERED SPECTROGRAMS:

 Suppose you want to view S0spectrograms of transient events, and
 you want good time resolution.  That will require running with
 TtTrig toggled off (Free-run mode) so you can get maximum
 Rooverlap between successive spectra.  You could set up a macro
 so that a trigger event toggled Trig off and Sgram on and
 acquired a SsSingl spectrogram sweep.  But if you want to see
 the leading edge of the transient, you will have to use the
 above D-PreStart DDisk methods.

 But that's not all bad:  One huge advantage of viewing a data
 file with DrDskRd is the ability to use the DoOverlap control.
 You can get any amount of overlap that you want during
 playback, without the system speed limitations that might
 reduce overlap while recording.  So the solution here is to
 create a macro series that records the transient, then
 immediately reads the file back with DskRd and a high Overlap
 setting.  You can set the DskRd Overlap so that a brief event
 is spread out over the entire spectrogram screen, as much as
 desired.

 There are some tricks that can simplify this.  When you use
 PreStart, the recording will typically contain an area of
 silence before the triggering event.  If you are using a high
 overlap to spread out a brief transient, you don't want to
 waste screen space on the silence:  You need a way to advance
 the DskRd file position to the start of the trigger event
 before you start the spectrogram.  For any given system this
 will usually start at a more-or-less constant number of
 samples from the beginning of the file, so you COULD use the
 direct DskRd DgGo To option to advance to that position... after
 you first determine exactly where it is for your system.

 But there is a simpler way that is even better:  You have just
 recorded the file with TnNorm triggering set to detect this
 event, so you can use that same trigger setup again to advance
 to the event in the file.  Once the file is on the screen via
 DskRd, a SsSingl command will instantly advance to show the
 first trigger event.

 Actually, that's not entirely true:  During DvDskRd PLAY mode
 (which you get when you unPause or run Singl), the samples are
 read from the file at a rate that approximates the original
 sample rate.  Set the DxSpeed Factor in the DRDskRd menu (CTRL-D)
 to some high value like x1000, and the sample rate will be as
 fast as possible.  Then the first trigger event will appear
 (almost) instantly after a Singl command.

 But you want your spectrogram to start just before this event,
 not at the current file location just after it.  So use the
 DkALT-< key (ALT-comma) to go back one screen (NpN data points).

 Typically, you will want your recording trigger threshold set
 high enough to avoid false triggers, which means that you miss
 the first few samples while the signal is rising to the
 threshold.  After backing up one screen, those first samples
 will appear at the right end of the trace (since the next
 screen will be starting with the Tltrigger level).  You can thus
 back up by a few more samples (unshifted comma key) until
 those just slide off the right end of the trace.

 Now hit TtTrig to toggle that off to TfFree-run (needed for DskRd
 DoOverlap to work) followed by F0FFT and SgSgram (ALT-S).  The
 expanded spectrogram will appear.  Note that this will take a
 few seconds on slow systems, and is unrelated to the DskRd
 Speed Factor mentioned above... it is the time to process
 and display 512 vertical time-slice spectra.  This runs as
 fast as possible for your system, since you are still in
 P0Pause mode.  The Speed Factor would only apply if you
 unPaused to see a Dvreplay of the spectrogram for the rest of
 the file.

 The macro is thus:
    unPause, unRTime, unBoard, DskRd, Singl, ALT-comma,
      <commas as needed>, unTrig, FFT, Sgram.

 The first three keys are needed since you will be using this
 macro immediately after your DDisk macro ends with a Paused
 trace.  You have to unPause in order to get out of RTime and
 then disable the Board before you can give DskRd.  (That's
 because the file will be the data source, not the board.)

 This assumes that you have set the desired DskRd DoOverlap
 already.  But the best value for that may be unknown at first,
 and you will have to "tweak" it to your preference.  After the
 spectrogram is displayed from the above macro, change the
 Overlap value and use the Dkcomma or period (unshifted < > keys)
 to force a new spectrogram to be redrawn at nearly the same
 file point.  Use the opposite key after the next trial Overlap
 change and you will be back to the same point.  (This is
 easier than using the direct DgGo To to start at the same point
 each time.)

 Alternatively, you can enter the desired time-width of the
 expanded spectrogram directly, using the DWSgram Width control
 (just below the Overlap control).  This accepts time values,
 performs the needed computations, and updates the Overlap
 setting.

 If you want to make this into an ongoing process for screening
 or monitoring, you can use wSWaitS to only display the
 spectrogram for a fixed time, then re-arm the trigger and
 repeat the whole macro in an KLinfinite Loop.  In that case, you
 should keep InIncNm off so that you repeatedly overwrite the
 same "working" file.  Hitting KRESC will break out of the
 infinite loop macro when you see a "keeper" spectrogram, and
 you can then promote the working file to a permanent file by
 moving on to another file name before restarting the process.

 As always, try to build up these complex macros from smaller
 self-contained "KNsubroutine" macros to make is easy to change
 things around without re-keying everything from scratch.


aO OTHER SOUND- or LEVEL-TRIGGERED OPERATIONS:

 There is no need to confine sound-triggering to simple data
 recording.  You can use the basic idea of KPWaitP with TnNorm
 triggering to start just about anything, not just processes
 normally associated with "data acquisition".

 For instance, you could set up your computer to create a sound
 or series of sounds in response to a trigger sound.  You might
 use this for training a bird, or for playing "Hail to the
 Chief" triggered by a loud throat-clearing.  You can create
 the mNmusical notes from tone bursts on a sound card synthesizer
 (one tone on each channel), with SGSTIM3A (up to four tones on
 each channel), or with the PC's built-in speaker by changing
 the uTUser Tone option.

 You could provide a long sequence of digital commands via the
 digital output option of STIM3A, using programmable wSWaitS
 delays between stages, to run a complex industrial process
 when a measured variable exceeded a threshold.

 You don't even need an acquisition board for this, if you use
 the 0BLPTX driver with your printer port.  In the simplest case
 (with the LPTX DigOut option) you could use a switch closure
 for the input signal and drive up to 8 different output lines.
 This only requires wiring things up to a standard DB25
 parallel port connector.

 There is nothing to prevent macros from changing input
 channels or Tltrigger levels to do multiple tasks.  The LPTX
 DigOut option, for example, has four digital inputs which
 could thus allow monitoring four different switch closures.
 (This option also allows you to combine inputs in a weighted
 fashion like a GA4-bit ADC, so you could have a threshold that
 represented certain switch combinations.)

 You can even KQuse Quit in a macro, so that if Daqarta was
 invoked by a batch file, the next command after the trigger
 can be any DOS operation... like dialing your home phone to
 let you know that an event finally happened and has been
 safely handled.  And with a loop in the batch file you can
 re-invoke Daqarta after that, and use the !-key
 KIauto-initialization macro

 The only thing to remember here is that although the time to
 process macro commands is very fast, it is not instantaneous.
 While the time to set up a new note to play music in the above
 example may be imperceptible, there are other cases where
 every millisecond matters.

 For example, you could have a macro that waited for a TnNorm
 trigger and then switched the TCtrigger Source from TSIntern to
 TPPulse and thus generated one or more digital output pulses
 right after the trigger event.  In concept this seems like a
 good way to trigger a photoflash to capture an exploding
 balloon.  In reality there may be a lag of tens of
 milliseconds to change modes, plus fill the sample queue on a
 typical sound card, so you might miss the desired shot.



rh
 REVISION HISTORY:

 Version    Released    Changes:

  2.10      8-1-2001    New separate YMMic Cal and YSSpkr Cal, plus
                        YvSave option, allow calibration of mics
                        or other transducers from a single
                        reference unit.  Supports probe tubes
                        and general Yxtransfer functions.

                        YfTXT2CAL Text-to-Calibration file
                        utility now allows selection of kHz
                        or Hertz for frequency entries.

                        Bug Fix:  TXT2CAL was not properly
                        saving DC or highest frequency.

                        FmSHIFT-Pg keys now provide a quicker way
                        than using the menu control to shift
                        the Y-log YrFull-Scale Reference.
                        Either method now has resolution that
                        matches the current label step spacing.

                        Added 9 more-sensitive F2Y-log ranges,
                        now 21 total, down to as little as 6 dB
                        full scale.  Used with FS Ref control
                        or SHIFT-Pg keys, allows magnified
                        views of any portion of trace.

                        FsSHIFT-HOME and SHIFT-END now support
                        Y-log mode, including both range and
                        FS Ref, with separate retention of
                        settings for each Cal state.

                        FsSHIFT-ALT-HOME now sets the current
                        trace magnification (or Y-log range and
                        FS Ref) to be used when SHIFT-HOME is
                        hit, allowing simple flipping between
                        two preset trace magnifications.

                        Bug Fix:  FeFFT32 Y-log null values (no
                        energy at a given spectrum line) now
                        appear properly at bottom of trace,
                        up to -325 dB if needed.  Previously,
                        nulls showed as only -90 dB, even on
                        ranges that went lower.

                        Bug Fix:  FFT32 spectral averages gave
                        values that were 70% high if real and
                        imaginary components were exactly
                        equal.

                        Bug Fix:  O1OutTx text header now
                        properly shows the name of any active
                        calibration file.


  2.00a     4-11-2001   Serious Bug Fix:  Use of new (v2.00)
                        Y0Y-axis Calibration options could cause
                        system lock-up.

                        Bug Fix:  F3PSD could give erroneous
                        results at samples rates under 1 kHz.

                        Bug Fix:  FeFFT32 of AWaveraged waveform
                        could produce erroneous values for
                        least-significant digits of cursor
                        0rreadouts or O1text file output.

                        Bug Fix:  If a requested file was not
                        found by the fAFile Access system, the
                        error message included a prompt to
                        'Press any key to continue...', but
                        the message persisted even after the
                        key was pressed.


  2.00      3-1-2001    Supports SGSTIM3A Dynamic stimulus
                        generation.

                        For SRunregistered users, free-trial
                        S!prompt appears after 30 sessions,
                        replacing KIAuto-Initialization Key Macro
                        and blocking STIM3A load unless 0BDEMO
                        driver is in use.

                        AHAmplitude Distribution Histogram and
                        APPost-Stimulus Time Histogram options
                        added to A3Averager.

                        Y0Y-axis Calibration menu allows YtTilt
                        correction for Y3Pink noise sources or
                        Y6Step responses.

                        YCCalibration option allows microphone
                        response correction and absolute SPL
                        readout.

                        YrFull-scale Y-axis reference can be
                        set from +200 to -200 dB in 20 dB
                        steps, instead of fixed 0 dB.

                        DDisk recording DMMemory option allows
                        extended system memory to be used for
                        quick recording starts, since no file
                        save prompt until the recording ends.
                        Does not require DDISK13A.DRV even for
                        non-DMA boards, and can save files to
                        floppy disks.

                        D!DDISK13A.DRV replaced older DDISK13.DRV
                        to provide support for drives up to
                        8.4 GBytes, plus built-in compatibility
                        tests.  Only needed for non-DMA boards.

                        Bug Fix:  AaAvAdd and AsAvSub did not work
                        in RrRTime mode, caused lock-up.

                        Bug Fix:  Scrolling Averager ASSweeps
                        request below current sweep count while
                        average was running caused strange menu
                        and averager behavior.

                        Bug Fix:  With TnNorm trigger mode in
                        RTime, infrequent triggers caused RTime
                        mode to exit with an overrun message.

                        Bug Fix:  Starting D0DDisk while drive
                        powered down (eg. laptop) caused
                        lock-up.

                        Bug Fix:  If DDisk recording ended
                        during P0Paused display mode, unPause
                        attempt could cause erroneous 'Live'
                        status or possible lock-up.

                        Bug Fix:  Pause during DDisk recording
                        with non-DMA board could cause RTime
                        exit with overrun message.

                        Bug Fix:  Following link from Help
                        H8Index and ESCaping back to index did
                        not restore the ability to move through
                        the index by hitting desired letter.

                        Bug Fix:  TcTrigger Cycle control now
                        works properly in TfFree-Run RTime mode.
                        Also now works down to settings less
                        than NpNpoints to allow Overlap control.

                        Bug Fix:  MAMemory Array of trace saved
                        during Aeexponential waveform averaging
                        now shows proper screen offset no matter
                        how few sweeps had elapsed.

                        Bug Fix:  Erroneous F2Y-log spectrum of
                        AWwave average with 16-bit FFT mode.
                        (Bug introduced in v1.18.)

                        Bug Fix:  B0Virtual Source could produce
                        overscale values under some conditions,
                        causing high spiky noise floor with
                        16-bit FFT mode.

                        Bug Fix:  DCDisk cache was not being
                        properly disabled when requested,
                        unless it was already empty.

                        Bug Fix:  Reading files saved with
                        W0Windo active could cause apparent 6 dB
                        drop in live signal level after file
                        exit.

                        Bug Fix:  EdCopying parameters to the
                        Memo line was not working with CTRL-2
                        through CTRL-5, only CTRL-1.


  1.18      1-5-2000    Bug Fix:  After a trace was
                        saved to M0Memory from a DrDskRd
                        file and later recalled, CTRL-B
                        ImTrace Info display erroneously
                        showed info for the current board,
                        instead of the board actually used for
                        acquisition.  When that trace was
                        unP0Paused to go back to the DskRd
                        file, Trace Info continued to show the
                        current board.  Various problems with
                        status report after different DskRd and
                        Memory combinations also fixed.

                        Bug Fix:  MAMemory Array of mixed FFT
                        average and instantaneous traces had
                        problems after viewing average traces:
                        Later attempt to view instantaneous
                        traces showed them all apparently the
                        same.

                        Bug Fix:  Changing from a long menu
                        like CwSgram Color to a shorter one like
                        B1Board was not properly restoring the
                        overwritten 0XX-axis units label.

                        First 4 lines of UfDQA.CFG must always
                        use same pre-defined sequence.  A line
                        inserted in that area could formerly
                        have resulted in it being mistaken for
                        a Cvpalette file.  Now, palette files are
                        tested for validity, and start-up is
                        aborted with an explanation if invalid.

                        Bug Fix:  Toggling various options like
                        RtRTime, F0FFT, XtXpand, or NpN points caused
                        displayed submenus (such as SGSTIM3 page
                        menus) to jump up to a higher menu
                        level.

                        Bug Fix:  0PAlternate menu pages (such as
                        SGSTIM3 Misc menu) were not properly
                        restoring internal status upon exit.
                        Afterward, only STIM3 DAC pages A and C
                        were accessible.

                        Bug Fix:  Toggling N points during
                        FxX-log display caused multiple and/or
                        "ghost" cursors on trace.

                        Bug Fix:  After viewing a MAMemory Array
                        the Live trace was not restored
                        properly under some conditions of data
                        format and trace mode.


  1.17b     10-25-99    Bug Fix:  Bug fix in Version 1.17a to
                        block MAMemory Arrays of mixed AfFFT and
                        AWwaveform averages was erroneously
                        blocking other arrays.

                        Bug Fix:  Using B: parameter on
                        SGSTIM3.GEN line in UfDQA.CFG could cause
                        corruption of ADC driver or other code.
                        (Always OK on INIT line.)

                        Bug Fix:  Default message shown with
                        wSWaitS delay was blank.  Now properly
                        defaults to existing E0comment text if
                        no wMWaitS message is requested.

  1.17a     10-12-99    Bug Fix:  Erroneous W0Window type on
                        recalled fofile and M0memory traces, due to
                        bug introduced in Version 1.17.

                        Bug Fix: DWSgram Width control displayed
                        erroneous values, worse at lower end
                        (higher Dooverlap).

                        Bug Fix:  On recall of a file or memory
                        trace, NpNumber of points was retaining
                        prior value even if recalled trace was
                        different.

                        Bug Fix:  Recalled file or memory
                        traces are now displayed with the
                        X0sample rate of the original system that
                        recorded them.  Previously, they were
                        displayed with the closest sample rate
                        of the current system, which might not
                        be the same.

                        Bug Fix:  A MAMemory Array can only show
                        traces that are "comparable".  But if
                        a AWwaveform average was Mssaved while
                        viewing its FiFFT, it was erroneously
                        treated as a Afspectral average if an
                        array of other spectral averages was
                        displayed, giving a trashed trace.  Now
                        such traces are properly excluded from
                        the array.

                        Similarly, such traces were erroneously
                        excluded from arrays of normal waveform
                        averages, but are now properly
                        included.


  1.17      10-5-99     ITFile and trace times are now maintained
                        to 1 second accuracy.  (DOS only stores
                        file time-stamps in even seconds.)

                        Bug Fix:  Real Time Clock and DOS time
                        were being corrupted on Q0Quit, due to a
                        bug in the DOS time-set function.  (To
                        prevent data corruption, Daqarta turns
                        off the system timer interrupts during
                        operation, so the system time needs to
                        be reset from the Real Time Clock.)
                        The DOS bug workaround used here was
                        previously used for file times... they
                        should be OK.

  1.16      6-17-99     Triangle BwWave option added to
                        BvVirtual Source control menu.

                        0BDEMO driver now has Wave option to
                        allow Sine, Square, and Triangle as
                        well as Ramp signals.

                        Bug Fix:  If cursors have been toggled
                        off with VcViewC, they now no longer
                        reappear when fAfile or M0memory traces are
                        viewed.

                        Bug Fix:  Prior W0Window mode is now
                        properly restored after viewing memory
                        trace or MAarray.

                        Bug Fix:  High-resolution FeFFT32 option
                        is now properly re-enabled after
                        viewing memory array.

                        Bug Fix:  Strange Window names appeared
                        in title line when FFT32 memory or file
                        traces were viewed with FFT32 off.

                        Bug Fix:  Loading certain AfFFT average
                        memory array files caused a CPU
                        mCregister display indicating a
                        divide error.

                        Bug Fix:  After viewing memory array
                        files of Np1024 point A0averages, unP0Pause
                        sometimes caused program lock-up.

                        Bug Fix:  After viewing memory array
                        files, toggling ALT-M off now properly
                        restores the trace present before
                        viewing the array.


  1.15      5-22-99     New DWSgram Width control in DRDskRd menu
                        facilitates adjustment of DoOverlap to
                        get desired S0spectrogram expansion with
                        DskRd file data.

                        New Help section on 0aAttenuator Drivers.

                        New Help G0Glossary section on GadB
                        (decibels).

                        Bug Fix:  fAFile access system is now
                        able to display root directory.

                        Bug Fix:  UuUnits, UrU-RMS, and XcXCurs keys
                        are now disabled during H0Help mode, to
                        prevent conflicts.

                        Bug Fix:  When MAMemory Array is toggled
                        while upper Help is active, next Help
                        access no longer goes to lower area.

                        Bug Fix:  Hitting MrMemRd while upper
                        Help is active now exits Help instead
                        of switching to lower area, which was
                        covering MemRd ID prompt.


  1.14      2-20-99     Full Year 2000 compliance with most
                        BIOSes, even if the BIOS does not
                        update the century properly.  (Y2Kure
                        driver also released to make any BIOS
                        fully compliant.)

                        Supports all monochrome VGA monitors.
                        (Those reporting EGA mono status were
                        formerly rejected as being MDA.)

                        0NNetwork Incompatibility topic added to
                        Help system, including instructions
                        for dual-boot batch files.

                        Bug Fix:  Enhanced InIncNm file name
                        auto-increment (added in v1.13) was
                        moving from 009 to 019, 029, etc.

                        Bug Fix:  Scrolling DxSpeed Factor up
                        when Drreading DDisk files did not
                        properly increase apparent speed.

                        Bug Fix:  ITFile time auto-increment for
                        PC/XT (or AT with dead Real-Time Clock)
                        now properly handles date increments,
                        including leap years to 2099.


  1.13a    11-19-98     Bug Fix:  When toggling trigger mode
                        between TaAuto and TnNorm with S0spectrogram
                        in P0Pause mode, sweep was improperly
                        restarted if in RsSequential mode, or
                        system locked up if in RrRTime mode.


  1.13     11-15-98     New OsOutSc option outputs screen image
                        to bitmap (.BMP) file.

                        Improved InIncNm file name auto-increment
                        now allows active digits in main file
                        name, not just extension.  Also works
                        with .PAL Cvpalette files.

                        DfReadout Units for DiDDisk and DrDskRd now
                        allow Samples as well as Bytes,
                        Seconds, and H:M:S formats.

                        UfDQA.CFG file now allows underscore to
                        start continued lines for long
                        parameter lists or comments.

                        The P0Pause key no longer clears the
                        KPWaitP state during DDisk recording,
                        since when Pause is used during DDisk,
                        it does not stop recording, only
                        display.

                        Improved handling of infrequent TnNorm
                        triggers in RrRTime mode.

                        Improved handling of K0Key Macros with
                        DDisk operation.  Now allows automatic
                        DpPreset file end to skip macro commands
                        and break out of KLLoop macros intended
                        only for DDisk.

                        Application note on a1sound-triggered
                        sequences added, taking advantage of
                        improved RTime Norm triggering, DDisk,
                        and Key Macros.

                        Non-Daqarta .WAV files are now properly
                        handled by DrDskRd when they hold 16-bit
                        data but erroneously end on an odd
                        byte.

                        Bug Fix:  Fast CPUs could read the
                        RdDMA pointer so rapidly that it
                        interfered with DMA operation at high
                        transfer rates.  Seen on 200 Mhz CPU
                        in RrRTime mode with 16-bit ADC and dual
                        16-bit SGSTIM3 DACs active at high sample
                        rates on 0BSB16 CT417x board using
                        dual 8-bit DMAs (for a total of 6
                        transfers per sample).  Pointer is now
                        read less frequently.

                        Bug Fix:  Large T-negative trigger delays
                        no longer result in transient bursts
                        of apparent bad data on keystrokes in
                        RsSequential mode.  Only affected trace
                        display, not actual data.

                        Bug Fix:  Toggling NpNumber of points no
                        longer results in cursor "ghosts" when
                        03Grid has been toggled off.

                        Bug Fix:  Starting D0DDisk now forces
                        P0Pause mode if wildcard fAfile access
                        is used to display a list of matching
                        files, to prevent problems with some
                        ADC boards.

                        Bug Fix:  SsSingle-sweep option in RrRTime
                        mode with SGSTIM3 active was not updating
                        trace properly.

                        Bug Fix:  While in RTime S0spectrogram
                        mode, setting too high a X0sample rate on
                        Riinterrupt-driven (non-RdDMA) boards
                        caused an overrun that was not properly
                        handled under some conditions and could
                        cause system lock-up.

                        Cosmetic: T0Trigger menu Tllevel bar always
                        shown with 0 level for TPPulse and TEExtern
                        trigger modes.  Was shown with TSIntern
                        level (inappropriate for these modes),
                        and only when T+slope changed.

                        Bug Fix:  Following a DrDskRd operation,
                        the DpPreset Size option was ignored on
                        subsequent D0DDisk  write operations.

                        Bug Fix:  When DDisk is active, the
                        DfReadout Units  control is now left
                        enabled and the DCCache control is
                        properly disabled.

                        Bug Fix:  The H4context-sensitive Help
                        link for the KPWaitP option was missing.

                        Bug Fix:  When switching to S0spectrogram
                        mode with infrequent TnNorm triggers in
                        RrRTime mode, a TnTRIGGER WAIT condition
                        provoked erroneous or missing axis
                        values.

                        Bug Fix:  wSWaitS was producing erroneous
                        (very long) delays when set below about
                        10 msec with CTRL-SHIFT-W.

                        Bug Fix:  Negative T+Trigger Slope option
                        was erroneously disabled by DrDskRd and
                        not restored afterward.  TCTrigger Source
                        is now disabled and re-enabled instead.

                        Bug Fix:  When viewing a spectrogram of
                        a DskRd file with non-zero DoOverlap
                        setting, toggling TtTrig/Free gave X-axis
                        time calibration for opposite mode.


  1.12c     7-9-98      Initial prompt message added.


  1.12b     7-4-98      Better detection of certain invalid
                        DQA.CFG parameter formats (missing
                        colon, no parameter after colon).


  1.12      6-23-98     Support to allow SGSTIM3 to work with new
                        0BSB16.ADC driver for Gdfull duplex
                        operation on SB16 / 32 / 64 family of
                        sound cards.

                        kaCursor averager reset is now done
                        automatically for RtRTime, F2Y-log, FeFFT32,
                        auto-ZaZero, and TtTrig option toggles, as
                        well as WcBW Corr in W0Window control menu.

                        K0Key Macros now exit KRKeyRn mode if they
                        encounter a disabled option.  (They
                        formerly just did nothing.)

                        Bug Fix:  Key Macros now properly
                        handle cursor motion in CcColor control
                        menus.

                        Bug Fix:  Certain Key Macros had
                        problems Khsingle-stepping past the end
                        of the macro.

                        Bug Fix:  When StGen was active in
                        RsSequential mode with TcTrigger Cycle set,
                        the T0Trigger control menu showed TPPulse
                        mode even if not active.


  1.11      5-18-98     Bug Fix:  At some high X-axis XteXpands,
                        time axis values had wrong scaling.

                        XceXpand on Cursors now gives mAAlert if
                        cursors were too close, but eXpands as
                        much as possible and shows cursors in
                        their proper positions.

                        Bug Fix:  Cursor positions were being
                        forced to low portion of FFT axis when
                        changing from Np1024 to 256 points.

                        Changes to support 16-bit GAADC data over
                        8-bit RdDMA channels on some sound cards.

                        Support to allow board drivers to reset
                        kacursor readout averager on changes,
                        such as sound card synthesizer
                        settings.

                        Cursor averager reset is now done
                        automatically for more main operations,
                        such as changes to X0sample rate and
                        B0Virtual Source.  SHIFT-Up/Dn may be
                        used to override this for tests with
                        Virtual Source.

                        Bug Fix:  Cursor readout averager
                        showed erroneous (full scale) values
                        when kaReadout Avg traces elapsed between
                        0rtrace cursor actions.

                        Bug Fix:  With fast systems and/or slow
                        sample rates or small number of points,
                        last sample of trace was sometimes bad.

                        Bug Fix:  Some boards showed 1-sample
                        discrepancy in trigger point between
                        R0RTime and Sequential modes when using
                        TSInternal Trigger Source.


  1.10a     4-11-98     Bug Fix:  Corrected changes in v1.10
                        that prevented operation on 8088 and
                        286 systems.

                        Bug Fix:  TdTrigger delay point is now
                        properly updated when X0sample rate is
                        changed.

                        Bug Fix:  Interlock added to prevent
                        changes to sample rate while P0Paused in
                        S0Spectrogram mode, since X-axis requires
                        active sampling for time calibration.


  1.10      3-28-98     FeFFT32 high dynamic range option added.

                        Improved mDDisaster Recovery Attempt now
                        enters P0Pause mode.

                        Bug Fix:  AeExponential FFT Average with
                        ASSweeps = 1 caused apparent "lock-up".

                        Bug Fix:  AWWaveform average at high
                        Fmtrace magnifications showed "roll-over"
                        of off-screen portions, instead of clip
                        to screen limits.

                        Bug Fix:  0rCursor readouts were wrong
                        for A^FFT Peak "Average" with linear
                        magnitude (not F2Y-log power) display.

                        Bug Fix:  O1OutTx ASCII file output data
                        values were wrong for F3PSD mode.

                        Bug Fix:  Y-log FFT Average cursor
                        readouts "ran up" to proper reading at
                        start of average.

                        Bug Fix:  After ESCape from H4context-
                        sensitive Help (?-key, ALT-?, CTRL-?),
                        next H0Help invocation now goes to
                        00Contents instead of prior context
                        topic.


  1.09b     3-7-98      Bug Fix:  When a MAMemory Array included
                        averages of differing total sweeps, the
                        trace sizes were improperly scaled.


  1.09a     1-16-98     Bug Fix:  When a H2Help page showed a
                        link on the top line and the screen was
                        scrolled up one line to a page that had
                        no links, a "phantom" link appeared at
                        the top of the new screen.


  1.09      11-18-97    Bug Fix:  For 0BADC boards that use the
                        main system timer to control sampling
                        (DEMO, DAS8JR, LPTX, optional on DAS8X
                        and DAS16X), Sequential operation could
                        occasionally be stalled by a key press
                        during TcTrigger Cycle mode.


  1.08      10-22-97    Bug Fix:  Inverted data format from
                        some boards (0BSB16, SB8, THUNDER) is now
                        handled so that full-scale values
                        no longer "roll over" to opposite trace
                        limits.

                        Bug Fix:  ZaZeroP now handles large data
                        offsets without overflow.

                        Bug Fix:  ZeroP now works properly with
                        ATwave averages, instead of defaulting to
                        ZeroA handler.

                        Bug Fix:  TCTrigger Source now always
                        shows TPPulse option properly.  Since
                        RrRTime doesn't support Pulse, it forces
                        TSIntern mode while active.  On return to
                        RsSequential mode from RTime, Pulse
                        operation is restored but the Source
                        item was previously not updated and
                        erroneously showed Intern.


  1.07      10-7-97     Bug Fix:  When keyboard Caps Lock is
                        active in text entry mode, the LED is
                        now active only in that mode.  Was
                        active only on exit from text mode.

                        Bug Fix:  Bringing up kmKeyboard control
                        menu (CTRL-K) no longer causes long
                        delay on fast CPUs.


  1.06      9-29-97     Bug Fix:  Certain operations with full-
                        scale negative data on 8088 and V20
                        CPUs no longer produce errors.

                        Bug Fix:  CPU register display invoked
                        by division errors in developer code
                        now restores screen text line properly
                        afterward.

                        Bug Fix:  Slow (PC/XT) processors no
                        longer require an extra keypress to
                        activate AOAvg, A2JntAvg, or SsSingl options.

                        Bug Fix:  TPTrigger Pulse option is now
                        properly maintained across TtTrig option
                        toggles, as well as BiBoard toggles.

                        Added support for 8-character IMModel
                        names for board drivers (was 7 max).


  1.05      9-16-97     Bug Fix:  Fast CPUs required more delay
                        code than space allocated.  Replaced
                        in-line I/O delays for T0triggered RrRTime
                        RdDMA operation with calls to single
                        delay routine.

                        Bug Fix:  Under certain conditions it
                        was possible to toggle DrDskRd off while
                        S0Sgram was still active, causing wrong
                        screen colors.


  1.04      9-13-97     Cosmetics:  Command-line parameter now
                        gives an additional 0-9 seconds of
                        delay while showing initial logo,
                        allowing for slow video mode changes on
                        some Energy Star monitors.

                        Cosmetics:  Fixed bug in pacer for logo
                        return beam dissolve-to-text that
                        caused slow action on fast systems.


  1.03      9-7-97      Bug Fix:  0sGAP/OVL text was not getting
                        displayed after S0Sgram title redraw.


  1.02      8-31-97     Bug Fix:  AaAvAdd/AvSub options were
                        improperly locked out.

                        Bug Fix:  ArRemote Average option was
                        installing improperly and corrupting
                        averager mode changes.


  1.01      8-25-97     Improved Ttlow-speed waveform scrolling.


  1.00      8-14-97     Initial release.



 INDEX:
 dLAcoustic Signals, Creating with Low IMD
 GAADC (Analog-to-Digital Converter)
 mAAlert
 tAAliasing, Sampled Data
 0PAlternate Menu Pages
 CAAlternate Trace Color
 TAAM Trigger Source, Virtual Source
 BaAmplitude Modulation
 FaAmplitude Resolution
 GAAnalog-to-Digital Converter (ADC)
 trAnalysis Frequency Resolution
 a0Applications - Distortion Measurement
 a1Applications - Sound / Event-Triggered Sequences
 MAArray, Memory  (See also MMemory Array)
 AlArtifact Limits
 ARArtifact Rejection
 AMArtifact Skipping, Manual
 AhArtifact Skipping, Remote
 mEASCII Text Editors
 C1Assign Colors, Spectrogram
 GaAttenuation, dB
 0aAttenuator Drivers
 KIAuto-Initialization Key Macro
 KLAuto-Repeat Key Macro (Loop)
 TaAuto Trigger Mode
 ZaAuto Zero
 EaAuxiliary Comment Editor (EdAux)
 AaAvAdd
A A0AVERAGER OPERATION:
 AaA.  Add (AvAdd)
 AlA.  Artifact Limits
 ARA.  Artifact Rejection
 A5A.  Automatic Remote Artifact Rejection
 A3A.  Control Menu
 ADA.  Dither:  Noise + Averaging = Resolution
 AeA.  Exponential Averaging
 AHA.  Histogram - Amplitude Distribution
 AiA.  Interference
 A\A.  Instantaneous \ Average Toggle
 A4A.  Joint Average Control Menu
 J\A.  Joint Average Spectrum \ Wave Toggle
 A2A.  Joint Average Start (JntAv)
 AmA.  Mode
 AnA.  Noise
 AMA.  Manual Artifact Skipping
 AhA.  Manual Remote Artifact Skipping
 A^A.  Peak "Averaging"
 APA.  Post-Stimulus Time Histogram (PSTH)
 ArA.  Remote Control
 A+A.  Skip
 AfA.  Spectral Averaging
 A1A.  Start (Avg)
 AsA.  Subtract (AvSub)
 ASA.  Sweeps
 0CA.  Sweeps Count Display
 ATA.  Theory
 AtA.  Triggering
 AmA.  True
 AWA.  Waveform Averaging
 A1Avg
 AsAvSub
 CXAxis Colors

 CSBackground Screen Color
 WcBandwidth Correction, Window
 0NBatch File for Eliminating Network Drivers
 mABeeper, Alert
 fBBinary Data File Formats
 OsBitmap (.BMP) Files, Screen Image
 ADBits, Dither Increase
 IBBits, Trace Info
 BbBits, Virtual Source
 YfBK4134 Microphone Calibration Example File
 WbBlackman Window (Bkmn)
 WxBlackman Exact Window (BkmX)
 WrBlackman-Harris Window (BkHr)
 B0Board
 0BBoard Drivers
 IMBoard Model, Trace Info
 KhBreak, Halt/Step Key Macro

 DCCache, Hard Drive and DDisk
 UCCalibration - Menu
 YCCalibration Files
 YvCalibration, Microphone
 YkCalibration, Speaker
 YxCalibration, Transfer Functions
 AWCoherent Averaging
 CcCOLOR CONTROL:
 0PC.  Alternate Pages
 CAC.  Alternate Trace
 CXC.  Axes
 C1C.  ColorMap Assign
 C0C.  ColorMap Palette
 C2C.  ColorMap Select
 CMC.  Control Menus
 CrC.  Cursor
 CEC.  EGA Color Fine Adjustment
 CCC.  EGA Emulation on VGA
 CeC.  Erase Palette
 CgC.  Grid
 CiC.  Insert / Delete (Sgram)
 ClC.  Label
 CgC.  Link, Help
 CLC.  Load Palette File
 CsC.  Memory, Palette
 CmC.  Menu Color
 CRC.  Modifying a Palette - Step by Step
 CsC.  Palette Operations Submenu
 CpC.  Palettes
 CPC.  Panel
 CvC.  Save Palette File
 CSC.  Screen Background
 CwC.  Spectrogram Color Weights
 CaC.  Spectrogram Color Assignment (ColorMap) Menu
 C_C.  Submenus
 CAC.  Text, Help
 CtC.  Trace
 CVC.  VGA Color Fine Adjustment
 EaComment, Auxiliary Text (EdAux)
 MrComment, Changing on Recalled Trace
 EdComment, Copy Parameter to Field
 EmComment Editor (Edit)
 E1Comment Editor Key Usage
 0mComment / Message Line
 EsComment, Saving to a Log File (EdSav)
 UfConfiguration File
 0BConfiguring Driver Parameters
 14Contact Interstellar Research
C 0MCONTROL MENUS:
 0pC.  Pick List
 0xC.  Toggle
 0cC.  Cursor-Adjust
 0dC.  Direct Entry
 0_C.  Submenus
 aOControl, Process - Level / Event Triggering
 GAConverter, Analog-to-Digital (ADC)
 GDConverter, Digital-to-Analog (DAC)
 F1CPM Mode
 0cCursor-Adjust Menu Items
 CrCursor Color
 CxCursor Exchange (CursX)
 kfCursor Fixed Step
 ksCursor Max Step
 kcCursor Rate
 kaCursor Readout Averaging
 0rCursor Readouts
 icCursor Runs with IntCr
 CxCursX
 TgCycle, Stimulus Trigger
 TcCycle, Trigger

 GDDAC (Digital-to-Analog Converter)
 12Daqarta General Description
 SRDaqarta Shareware Registration
 IDDate, Trace Info
 GadB (decibels), Definition and Discussion
 FmdB Range (Y-log mode)
 TdDelay, Trigger
 wSDelay, Wait Seconds (WaitS)
 wDDelay, Other Techniques
 KVDescriptive Key Macro Name Viewer
 DiDDisk
 D!DDISK13A.DRV Special DDisk Driver
 MdDelete Memory Traces
 CiDelete Spectrogram Color
 tfDFT Frequency Resolution
 GDDigital-to-Analog Converter (DAC)
 0dDirect Entry Menu Items
 DiDIRECT-TO-DISK (DDisk) OPERATION:
 DCD.  Cache Write Mode
 DTD.  Direct Write Mode
 DMD.  Memory Write Mode
 DpD.  Preset File Size
 D-D.  PreStart
 DfD.  Readout Units
 D0D.  Recording
 DmD.  Recording Control Menu
 DcD.  Remote Control
 DsD.  Skip and Pause
 aRD.  Sound-Triggered Recording
 DdDIRECT-TO-DISK DRIVE COMPATIBILITY:
 DaD.  DEMO Board Tests
 DOD.  Overview
 DPD.  Power Management Problems, Laptops
 DDD.  RAM Drive Operation
 D!D.  Special Driver DDISK13A.DRV
 DrDIRECT-TO-DISK FILE READ (DskRd):
 DGD.  Automatic Glitch Scan
 DqD.  Automatic Peak Scan
 DvD.  Automatic Replay
 DRD.  Control Menu
 DgD.  Direct Go-To
 DoD.  Free-Run Overlap Control
 DkD.  Manual Movement
 DtD.  Triggered Replay
 DSD.  Scrolling
 DWD.  Spectrogram Width
 DxD.  Speed Factor
 DwD.  WAV Files, Non-Daqarta Format
 0BDisable - Board Setup
 mdDisaster Management
 DCDisk Cache, using with DDisk
 RuDisplay Updates, RTime vs Sequential
 FmDisplay Range / Magnification
 tRDiscrete Sine and Cosine References
 GaDistortion, dB Measurement
 a0Distortion - Theory and Measurement
 AHDistribution, Histogram
 ADDither: Noise + Averaging = Resolution
 RdDMA Operation
 UfDQA.CFG Configuration File
 EsDQALOG.TXT Log File
 KFDQA.MAC Key Macro File
 0ADriver Help Without Board
 0aDrivers, Attenuator
 0NDrivers, Batch File for Eliminating Network
 0BDrivers, Board
 DVDskRd
 GdDuplex, Half and Full
 FeDynamic Range, Increasing with FFT32

 EaEdAux - Edit Auxiliary Text
 E0Edit Comment Functions
 E1Edit Key Usage
 EsEdsav Comments to Log File
 CEEGA Color Fine Adjustment
 CCEGA Emulation on VGA
 0NEMM386, Batch File for Avoiding
 DkEND Key, DskRd File Motion
 fAEND Key, File Access
 MsEND Key, MemSv
 E1END Key, Text Editor
 mNEqual-Tempered Musical Scale Frequencies
 CeErase Color Palette
 H3ESCape Help Item
 0cESCape Menu Item
 0EEuropean Notation
 a1Event-Triggered Sequences
 CxExchange Cursors (CursX)
 XceXpand on Cursors (XCurs)
 XteXpand Trace (Xpand)
 AeExponential Averaging
 TEExtern Trigger Source

 tFFast Fourier Transform (FFT)
 FiFFT / WAVEFORM OPERATION:
 FaF.  Amplitude Resolution
 ZaF.  Auto Zero (Zero)
 F1F.  CPM Mode
 F0F.  FFT / Waveform Modes
 FeF.  FFT32 High Dynamic Range Mode
 F?F.  Fourier Transform Theory
 FfF.  Frequency Resolution
 FmF.  Magnification
 FhF.  Magnification vs Help
 F3F.  Power Spectral Density (PSD)
 F2F.  Power Spectrum (Y-log)
 FtF.  Time Resolution
 FxF.  X-Log
 EdField, Parameter Copy to
 RfFIFO Operation
 InFile Name Defaults
 foFILE OPERATIONS:
 fAF.  Access System
 fBF.  Binary Data File Formats
 DiF.  Direct-to-Disk (DDisk) Recording
 DrF.  Direct-to-Disk File Reading (DskRd)
 InF.  File Name Auto-Increment (IncNm)
 I0F.  Input Binary Data from File (InDat)
 KDF.  Key Macro use with
 O0F.  Output Binary Data to File (OutDt)
 OsF.  Output Screen Image to Bitmap File (OutSc)
 O1F.  Output Text Data to File (OutTx)
 fOF.  Overwrite Confirmation
 YCFiles, Calibration
 CvFile, Color Palette Save
 CLFile, Color Palette Load
 H9Files, Help System
 mFFilters for Noise Rejection
 mAFlash, Alert
 WfFlat-Top Window (Fltp)
 BtFM Triggering, Experiments
 TFFM Triggering, Virtual Source
 0AForcing Driver Installation Without Board
 IFFormat, Board Data (Trace Info)
 Y1Formulas, Sound
 m<Formulas, Trigonometric
 F?FOURIER TRANSFORM THEORY:
 trF.  Analysis Frequency Resolution
 tcF.  Conceptual Analyzer
 tfF.  DFT Frequency Resolution
 tRF.  Discrete Sine and Cosine References
 tFF.  Fast Fourier Transform (FFT)
 tCF.  Fundamental Time - Frequency Domain Concepts
 tiF.  Introduction
 tpF.  Practical Analyzer
 tsF.  Sine Wave Synthesis
 taF.  Sine Wave Analysis
 tdF.  Sampled Data for the Discrete Fourier Transform
 tAF.  Sampled Data Aliasing
 TfFree-Run Trigger Mode (Free)
 S!Free Trial Period - 30 Sessions
 mNFrequencies, Musical Note
 BfFrequency, Virtual Source
 BmFrequency Modulation, Virtual Source
 FfFrequency Resolution
 YvFrequency Response Calibration
 GdFull Duplex
 YrFull-Scale (0 dB) Reference Adjust
 FsFull-Scale Trace Magnification

 GaGain, dB
 BuGaussian Noise Sources
 0GGetting Started
 mwGibb's Phenomenon
 G0Glossary
 PdGRAPHICS.COM Printer Driver
 06Gray-Scale Summing
 03Grid Toggle

 KhHalting a Running Key Macro
 WhHamming Window (Hamm)
 WnHanning Window (Hann)
 DdHard Drive Compatibility with DDisk
 kdHardware Delay, Keyboard
 krHardware Rate, Keyboard
 dHHarmonic Distortion
 H0HELP SYSTEM:
 H4H.  Context-Sensitive
 H2H.  Display Formats (5-line and 25-line)
 H9H.  Files
 H3H.  Hypertext Operation
 H7H.  Key Preview
 H1H.  Key Summary
 H6H.  Main vs. Control
 H5H.  Plug-in
 0AHelp, Driver Without Board
 FeHigh Dynamic Range via FFT32
 mFHigh-Pass Filter
 AHHistogram, Amplitude Distribution
 APHistogram, Post-Stimulus Time (PSTH)
 rhHistory, Daqarta Revisions
 TcHold-Off, Trigger (Cycle)
 GOHypersampling

 KSID, Key Macro
 MiID, Trace Memory
 OsImage File (.BMP), Screen Capture with OutSc
 kfIncrement Value by Fixed Step
 I0InDat
 dIInharmonic (Intermodulation) Distortion
 UfINIT line, in DQA.CFG file
 KIInitialization Macro, Automatic
 I0Input Binary Data from File (InDat)
 KRINSert = Run Key Macro (KeyRn)
 CiInsert / Delete Spectrogram Color
 icIntCr for Cursor Run Response
 AiInterference, and Averaging
 dIIntermodulation Distortion
 TSIntern Trigger Source
 RiInterrupts
 14Interstellar Research, Contacting
 A\Instantaneous \ Average Toggle
 GIIsolation, Electrical

 A2Joint Average (JntAv)  (See also AAverager Operation)
 A4Joint Average Control Menu
 J\Joint Average Spectrum \ Wave Toggle

 0KKey Options
K K0KEY MACROS:
 KIK.  Auto-Initialization
 KSK.  Creating and Storing (KeySt)
 KXK.  Descriptive Name, Changing
 KVK.  Descriptive Name Viewer
 KFK.  Files
 KOK.  Forcing an Option State (KeyOn)
 K1K.  Introduction
 KhK.  Halting
 KMK.  Memory Management
 KNK.  Nested (Subroutines)
 KQK.  Quit from
 r#K.  Random Value Entry
 KRK.  Running (KeyRn)
 KDK.  Saving Traces to Files with
 KhK.  Single-Step
 a1K.  Sound / Event-Triggered Sequences
 KRK.  Text vs Option keys
 KTK.  Tips
 uTK.  User Tone
 KPK.  Wait for Pause (WaitP)
 wSK.  Wait Seconds Delay (WaitS)
 kiKEYBOARD CONTROL:
 CxK.  Cursor Exchange (CursX)
 kfK.  Cursor Fixed Step
 ksK.  Cursor Max Step
 kcK.  Cursor Rate
 kdK.  Hardware Delay
 krK.  Hardware Rate
 mXK.  Keyboard Control Utility (XKBD.EXE)
 kaK.  Readout Averaging
 kmK.  Response Control Menu
 SLK.  Sticky Shift Keys
 RkKeyboard Response, RTime vs Sequential
 KOKeyOn
 KRKeyRn
 KSKeySt

 ClLabel Color
 mlLAPTOP HINTS:
 06L.  Monochrome, Optimizing from Color System
 DPL.  Power Management Problems
 LsL.  Slow Display Response
 CwL.  Spectrogram Color Weights
 D!LBA (Linear Block Address) and DDISK13A.DRV
 TlLevel, Trigger
 BlLevel, Virtual Source
 GaLevel vs. Attenuation, dB
 UfLine Continuation in DQA.CFG file
 L0Line Style, Trace
 CgLink Color, Help
 0SLive Trace
 YmLoad Mic Cal File
 YsLoad Spkr Cal File
 CLLoad Color Palette File
 EsLog File DQALOG.TXT
 KLLoop, Key Macro
 mLLow-Pass Filter

 K0Macros (See also KKey Macros)
 FsMagnification, Forcing and Restoring Full-Scale
 FmMagnification, Trace
 FhMagnification vs Help
 mvMagnitude via Vector Sum
 TsMain Trigger, Virtual Source
 dMMeasurement, Distortion
M MAMemory Array
 MmMEMORY ARRAY CONTROL MENU:
 MFM.  File
 MLM.  Label
 MWM.  Label Width
 MMM.  Limit
 MOM.  Order
 MPM.  Posn or Lbl Step
 MSM.  Sort
 MDM.  Step
 CsMemory, Color Palette
 DMMemory, DDisk Write Mode
 MdMemory Delete
 MrMemory Read (MemRd)
 MsMemory Save (MemSv)
 M0Memory, Trace (See also TTrace Memory)
 CmMenu Color
 0MMenus, Control  (See also CControl Menus)
 0mMessage Line
 wMMessage, WaitS
 YmMic Cal File Load
 YMMic Cal On/Off
 YfMicrophone Calibration Files, Creating From Text
 YCMicrophone Calibration Files, Introduction
 YvMicrophone Calibration Files, Saving
 WMMixed Signal Windowing
 AmMode, Averager
 BdModulation Depth, AM Virtual Source
 U0Modules, Plug-in
 M0Multiple Traces (Memory Arrays)
 BxMultiplier Mode, AM Virtual Source
 aOMusic - Sound-Triggered
 mNMusical Note Frequencies

 KVName, Descriptive Key Macro Viewer
 T-Negative Trigger Delay
 KNNested Key Macros
 0NNetwork Incompatibility
 AfNoise, Apparent Reduction With Spectral Averaging
 ADNoise, Dither and Resolution
 NpNoise, and Number of Data Points (N)
 AwNoise, Reduction With Waveform Averaging
 BnNoise, Virtual Source
 BuNoise, Uniform vs Gaussian
 WNNoise, Windowing Effects
 TnNorm Trigger Mode
 mNNote Frequencies, Musical
 NpNumber of Data Points (N)
 E1NUM-LOCK, not allowed for editing
 KhNUM-LOCK, Halt/Step Key Macro

 IFOffset Binary Data Format
 a1Operations, Sound / Event Triggering
 dOOrders, Distortion
 O0OutDt
 O0Output Binary Data to File (OutDt)
 OsOutput Screen Image to Bitmap File (OutSc)
 O1Output Text Data to File (OutTx)
 O1OutTx
 TcOverlap Control via Trigger Cycle
 RoOverlap Operation
 DoOverlap, Scrolling with DskRd
 DWOverlap - Spectrogram Width with DskRd
 GOOversampling
 fOOverwrite Confirmation, File

 GPPacer, defined
 CpPalette
 CRPalette, Modifying - Step by Step
 C0Palette, Spectrogram Color Assignment (ColorMap)
 CPPanel Color
 0PParallel Menu Pages
 0BParameters, Board Configuration
 EdParameters, Copy to Comment Field
 UfParameters, INIT line in DQA.CFG file
 fpParameters Saved with Files and Memory Traces
 YrPascal, Units Conversion
 P0Pause
 DsPause, DDisk
 KhPause key (grey), Halt/Step Key Macro
 KPPause Wait, Key Macro (WaitP)
 A^Peak "Averaging"
 ZaPeak-to-Peak Measurements with ZeroP
 mpPhase, Sine Wave Basics
 mNPiano, Standard Keyboard Frequencies
 0pPick List ("Radio Button") Menu Items
 Y3Pink Noise Response Correction
 GpPixel, defined
 U0Plug-in Modules
 NpPoints, Analysis (N)
 APPost-Stimulus Time Histogram (PSTH)
 F3Power Spectral Density (PSD)
 F2Power Spectrum (Y-log)
 PdPrinter Driver, Installing
 PsPrinting the Screen - Directly
 OsPrinting from a Screen Image File
 YxProbe Tube Microphone, Calibration
 aOProcess Control, Level / Event Triggering
 0NProtected Mode, Batch File for Avoiding
 riPseudo-Random Source
 APPSTH (Post-Stimulus Time Histogram)
 TPPulse Trigger Source

 EaQuit, EdAux Text Saved at
 Q0Quit Daqarta
 KQQuit from Key Macro

 0pRadio Button Menu Items
 DDRAM Drive Operation with DDisk
 r#Random Value Entry
 riRandomize Pseudo-Random Source
 FmRange, Display
 MrRead Trace from Memory (MemRd)
 0rReadouts, Cursor
 R0REAL-TIME / SEQUENTIAL OPERATION:
 RuR.  Display Updates
 RdR.  DMA
 RfR.  FIFO
 RiR.  Interrupts
 RkR.  Keyboard Response
 RoR.  Overlap Operation
 RrR.  Real-Time (RTime) Mode
 RtR.  Real-Time vs Sequential Mode
 RsR.  Sequential Mode
 mBReboot System
 DiRecording, Direct to Disk (DDisk)
 aRRecording, Sound-Triggered
 mDRecovery, Disaster
 mCRegister Display, CPU
 SRRegister Daqarta Shareware
 S!Reminder - Free Trial Period (30 Sessions)
 AhRemote Artifact Skipping
 A5Remote Artifact Skipping, Automatic
 ArRemote Control, Averager
 mRRemote Control Switch Construction
 13Requirements, System
 FaResolution, Amplitude
 ADResolution, Dither Increase
 FfResolution, Frequency
 FtResolution, Time
 icResponse, Cursor Run with IntCr
 kmResponse, Keyboard Control Menu
 rhRevision History
 rmRMS (Root Mean Square)
 rsRoot-Square Summation
 RrRTime

 GISafety, Live Subjects and Electrical Isolation
 XfSample Frequency (Rate)
 XpSample Period
 X0Sample Rate Control
 tdSampled Data for the Discrete Fourier Transform
 YvSave Cal File - Calibrating Microphones
 CvSave Color Palette File
 MsSave Trace to Memory (MemSv)
 SpScientific Prefixes
 CSScreen Background Color
 OsScreen Image to Bitmap File
 PsScreen Print
 0TScreen Tour
 DSScroll, DDisk File Read
 H1Scroll, Help System
 MAScroll, Memory Array
 TtScroll, Slow Waveform Display
 MrScroll, Trace Memory
 0cScroll, Value Adjust
 XlScroll, Xpand Limits
 SLScroll Lock, Sticky Shift
 C2Select Colors, Spectrogram
 RsSequential Mode
 S0Sgram  (See also SSpectrogram)
 WvShape View, Window
 SRShareware Registration, Daqarta
 SLShift Keys, Sticky
 KhSingle-Step in Key Macro
 SsSingle-Sweep Operation
 taSine Wave Analysis
 mSSine Wave Basics
 tESine Wave Products (Experiment)
 tsSine Wave Synthesis
 mwSine Wave Synthesis, Experiments
 A+Skip, Averager
 DsSkip, DDisk
 T+Slope, Trigger
 DCSMARTDRV and DDisk
 MSSort, Memory Array
 Y1Sound Formulas
 a1Sound-Triggered Sequences
 TCSource, Trigger
 YkSpeaker Calibration
 YvSpeaker Calibration Files, Saving
 AfSpectral Averaging
S S0SPECTROGRAM (Sgram):
 CaS.  Color Assignment (ColorMap) Menu
 C1S.    Assign
 C0S.    Palette
 C2S.    Select
 CiS.  Color Insert / Delete
 CwS.  Color Weights
 SmS.  Control Menu
 StS.  Sensitivity
 aSS.  Sound-Triggered
 SgS.  Toggle
 SyS.  Y-Axis
 DWSpectrogram Width - DDisk Read
 tcSpectrum Analyzer, Conceptual
 tpSpectrum Analyzer, Practical
 0sSpeed Display
 YsSpkr Cal File Load
 YSSpkr Cal On/Off
 Y1SPL Conversion To Other Units
 GaSPL (Sound Pressure Level), dB - Defined
 0SStatus Display
 Y6Step Response Correction
 SLSticky Shift Keys
 TGStim Source, Trigger
 TgStimulus Cycle, Trigger
 SGStimulus Generator
 GOStimulus Oversampling
 0_Submenus
 KNSubroutines, Nested Key Macros
 AsSubtract Average (AvSub)
 YvSweep Step Mode For Reponse Calibration
 ASSweeps Request, Averager
 0CSweeps Count Display, Averager
 T0Sync (Trigger)
 AWSynchronous Averaging
 0NSystem Configuration, Changing to Eliminate Drivers
 13System Requirements
 0SSystem Status, Daqarta

 CAText Color, Help
 mEText Editors, ASCII
 ATTheory, Averager
 F?Theory, Fourier Transform
 WTTheory, Windowing
 YtTilt Response, (+3 dB / +6 dB) (Pink / Step)
 ITTime, Trace Info
 tCTime - Frequency Domain Concepts
 FtTime Resolution
 BTTimed Virtual Source
 wSTimer (WaitS)
 0lTitle Line
 0xToggle Menu Items
 mATone, Alert
 mtTone Switches
 uTTone, User
 0wTrace Area
 CtTrace Color
 ImTRACE INFO MENU:
 IBT.  Bits
 IMT.  Board Model
 IDT.  Date
 IFT.  Format
 ITT.  Time
 L0Trace Line Style
 FmTrace Magnification
 FsTrace Magnification, Forcing and Restoring Full-Scale
 FhTrace Magnification vs Help
T M0TRACE MEMORY:
 MAT.  Arrays
 MdT.  Delete
 MiT.  Introduction
 MrT.  Memory Read (MemRd)
 MsT.  Memory Save (MemSv)
 M0Traces, Multiple (Memory Arrays)
 tmTrademarks
 YxTransducer Calibration
 YxTransfer Functions (Xfer Cal Files)
 WpTransient Problems, Windowing
 S!Trial Period - 30 Sessions
 TtTrig
 T0TRIGGER OPERATION:
 TAT.  AM Source
 TaT.  Auto Mode
 AtT.  Averager
 TmT.  Control Menu
 TcT.  Cycle
 TdT.  Delay
 TrT.  Delay Range
 TET.  External Source
 TFT.  FM Source
 TfT.  Free Mode
 TST.  Internal Source
 TiT.  Introduction
 TlT.  Level
 TsT.  Main Source
 T-T.  Negative Delay
 TnT.  Norm Mode
 TPT.  Pulse Source
 T+T.  Slope
 TGT.  Stim Source
 TgT.  Stimulus Cycle
 a1T.  Sound / Event-Triggered Sequences
 TCT.  Source
 TtT.  Toggle (Trig/Free)
 0tTrigger Status
 AtTriggering, Averager
 m<Trigonometric Relationships
 AmTrue Average
 mTTTL
 IFTwo's Complement Data Format
 YfTXT2CAL (Text-to-Calibration File) Utility

 BuUniform vs Gaussian Noise Sources
 UCUNITS CONTROL:
 UmU.  Control Menu
 UvU.  Factor
 UuU.  Toggle (Units)
 UnU.  Units Name
 UrU.  RMS Magnitude Spectrum Units (U-RMS)
 uTUser Tone

 mvVector Sum
 CVVGA Color Fine Adjustment
 VtView Trace (View)
 VcView Trace Cursors and Readouts (ViewC)
 0AViewing Driver Help Without a Board
 B0VIRTUAL SOURCE:
 BAV.  AM Triggering
 BaV.  Amplitude Modulation
 BbV.  Bits
 BiV.  Board Toggle (Board)
 BvV.  Control Menu
 BtV.  FM Triggering
 BfV.  Frequency
 BmV.  Frequency Modulation (FM)
 BlV.  Level
 BdV.  Modulation Depth
 BxV.  Multiplier Mode
 BnV.  Noise
 BTV.  Timed
 BuV.  Uniform vs Gaussian Noise Sources
 BwV.  Waveform: Sine, Ramp, Square, Triangle

 KPWaitP - Key Macro Pause Wait
 wSWaitS - Wait Seconds Delay
 DwWAV Files, Non-Daqarta Format
 fBWAV Files, Daqarta Format
 AWWaveform Averaging
 BwWaveform, Virtual Source
 CwWeights, Spectrogram Color
 DWWidth, Spectrogram - DDisk Read
 WtWindo
 W0WINDOWING:
 WcW.  Bandwidth Correction
 WbW.  Blackman (Bkmn)
 WxW.  Blackman Exact (BkmX)
 WrW.  Blackman-Harris (BkHr)
 WmW.  Control Menu
 WfW.  Flat-Top (Fltp)
 WNW.  Noise Effects
 WMW.  Mixed Signals
 WnW.  Hanning (Hann)
 WhW.  Hamming (Hamm)
 WvW.  Shape View
 WTW.  Theory
 WpW.  Transient Problems
 WtW.  Window Function Toggle (Windo)

 X0X-axis (Sample Rate) Control
 XmX.  Control Menu
 XtX.  eXpand Trace (Xpand)
 XcX.  eXpand on Cursors (XCurs)
 XpX.  Sample Period
 XfX.  Sample Frequency (Rate)
 XbX.  Xpand Bar Toggle
 XlX.  Xpand Max and Min
 FxX.  X-Log Display
 DWX-Axis, Spectrogram Width - DDisk Read
 0XX-Axis Units
 XcXCurs - eXpand on Cursors
 YxXfer Cal Files (Transfer Functions)
 mXXKBD.EXE
 FxX-Log Display
 XbXpand Bar Toggle
 XlXpand Max and Min
 XtXpand Trace

 Y0Y-Axis Control Menu:
 YCY.  Cal Files
 YkY.  Calibrating Speakers
 Y1Y.  Formulas For Working With Sound
 YmY.  Load Mic Cal File
 YsY.  Load Spkr Cal File
 YMY.  Mic Cal On/Off
 YrY.  Reference (0 dB) Adjust
 YvY.  Save Cal File - Calibrating Microphones
 YSY.  Spkr Cal On/Off
 YtY.  Tilt (+3 dB / +6 dB) (Pink / Step)
 YfY.  TXT2CAL Utility
 YxY.  Xfer Cal Files (Transfer Functions)
 SyY-Axis, Spectrogram
 0YY-Axis Units
 F2Y-log Power Spectrum

 ZaZero, Auto
 YrZero dB Reference Adjust


 Copyright 1997 - 2001 by Interstellar Research.
 All rights reserved.
00Om10H0H1H2H3H6H8H4H7H5H90G12130NS!SR140T0Y0X0t0wVt0l0C0s0M0p0x0c0d0E0_0P0rVc0mE0EmE1EdEsEa0S0K0B0a0A0DfofAInfOfBO0O1OsI0fpDiD0DmDpD-DfDcDsDTDMDCDdDOD!DaDPDDDrDVDwDRDkDgDuDvDtDxDqDoDSDWDGK0K1KSKXKRKVKhKPwSwMwDr#riuTKNKLKQKOKMKFKIKTKDM0MiMsMrMdMAMfMmMLMWMOMMMSMDMPMFR0RtRsRrRoRiRdRfRuRkS0SgSySmStT0TiTtTmTaTnTfTCTsTATFTSTETGTPT+TlTdT-TrTcTgUCUuUmUnUvUrY0YtY3Y6YCYfYMYmYSYsYvYkYxYrY1A0ATAwAiAnAWAtARAMAhA5AeADAHAPAfA^AOA1A+A\A3AmASAlArAaAsA2J\A4B0BiB1BvBbBwBfBlBnBuBmBtBaBABdBxBTImIIIBIFIMIDITkikmkdkrkskckfkaicSLCxmXFiF?titstatEtctptrtdtAtRtftFtCF0FaFmFsFhZaFtFfF1F2FeF3FxW0WTWpWNWMWtWmWnWhWbWxWrWfWcWvX0XmXpXfXlXbXtXcCcCMCtCACSCgCrCXClCmCPC_CV06CECCCpCsCeCvCLCRCwCiCaC0C1C2PsPdm0mAUfmdmDmBmCmFmL03mlLsL0mNNpP0U0Q0mRmSmpmvmwSsSGm<tmG0GAmEGDGaGsGdGIGOGPGprmrsSpmtmTa0d0dHdIdOdMdEdLa1aIaRaSaOrhAABCCDEFGHIJKKLMMNOPQRSSTTUVWXYZûÅ%2·"( 1ª9≥AδDºLÆO√P&W[éh
k|·|╩â±è≈ÉbôΓôÑ£-áoúP⌐è«╜»▓~│Æ╜╚┐d┼╔i╬O╨ÿ╥t╙┤┘═▐D≡÷╝■ú÷áQ5╜=æBDèYi/p9x âî┐ör¥ñ┤ºá«B▓σ╣l╛╘─║╬╒â╫%▐Θσ╗µüΩ4√ô■∩⌐K
▒Paï²▓6d█ -#─&╓.pCF⌐K-Zï\%jεqα|√Æ6Ü╤┤j╖┴Z╠ ╙4┌ôµ╣Θ╟√
#Φ	<Z!╕"+;3╬?D^PÑSyTBY╣\M`¡a2k¥x°{~
kü╒çwÄ┤úî¡┬╢ÿ╜ⁿ┼R╔à╩╓¼┌▐mΩå∞6°á	t┬εoê!%y&⌠0"7R>IÉN½U[`Ga╕q╚skvKy┼y╙{f~£å8è[ï+æj¿░÷╦û╨╙%╪b┌±²ìº≈+C2!J%F0]BⁿQò[é^▌`#eδj ôª°╢/╟╠╩?╠ö╨"╙C╫╪╪A▄çα╜µ┐Θ▐Θ₧√Φ²î à,ôàΓ╢┤~¡*▄1>¡DèIMNÑZ╚_X`{c╥h╤ü±â£è∩ï(ÄmÉlò_û/ùDÜ▀íÑφ⌐≤¼/┤S╢╕┬╝`┬²╒:▌éΓ┴Θw≡F÷ß%«.}:≤BEßF\╤bugLäTåcë#Å7ÿ[ƒ¼Ñ▒W│¼╓^╪B▌÷α╝σ╞µΘôΘFΩkΩ¼δo∩▌±∞≥ß≤}⌡L≈IS─:Φâδ"#σ#τ$├%ô&#()o)∩)ì+!5}6}8╔:>úD┐FqHJ╒Z a∞e░hj╘j├nxÄ9Éτùù╡╢t┐{├┼╞₧╨ƒ╪≈┘¥┌▌╔σ∙è²w	ñ		

	M	₧	▌!	(	╣;	π=	xL	XM	╓M	-O	m]	>g	»p	/Æ	l₧	╞ñ	µ¡	n│	L╖	ú╗	;└	├	|╟	├╨	φ╘	τ╓	┘α	]φ	s≤	$·	.
O<
KB
C
╪H
╥n
τà
uæ
8G▓u"å$┌),i4ε6Æ?J@CêEF$F1JtLeMQASU╘Y#Z«^╓c#h╥joαo'r╞t╝v│xáü¡╔Ñå5╫¥₧√