comtech aha corporation Product Specification AHA Galaxy Simulation Tool Kit User’s Guide PSGalaxy_STIK-0100 A subsidiary of Comtech Telecommunications Corporation 2345 NE Hopkins Court Pullman WA 99163 tel: 509.334.1000 fax: 509.334.9000 www.aha.com comtech aha corporation Table of Contents 1.0 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 Conventions, Notations and Definitions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2.0 Galaxy Software License. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3.0 Software Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3.1 System Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 4.0 Galaxy Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 4.1 Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 4.2 Iterations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 4.3 Feedback. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 4.4 Soft Decision Inputs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4.5 Helical Interleaving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4.6 Shortening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5.0 AHA TPC Simulation Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5.1 Graph/Control Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5.2 Active Configuration Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 5.3 Galaxy Configuration Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5.4 Currently Plotting Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 5.5 Current Plots Group. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 5.6 Selected Curve Status Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 5.7 Zoom Controls Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 5.8 External Data and Noise Source DLL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 6.0 AHA Galaxy API Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 6.1 Programming Parameters Defined . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 6.1.1 Xcode, Ycode and Zcode Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 6.1.2 Galaxy Control Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 6.2 AHA Galaxy Matlab Simulation API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 6.2.1 Flow Chart, Matlab Example Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 6.3 AHA Galaxy C Simulation API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 6.3.1 Galaxy API Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 6.3.2 Flow Chart, Galaxy API Example Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 6.4 Installation Tips and Possible Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 7.0 Related Publications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Appendix A: PSGalaxy_STK_0100 AHA Software License. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 A subsidiary of Comtech Telecommunications Corporation i comtech aha corporation Figures Figure 1: Figure 2: Figure 3: Figure 4: Figure 5: ii Galaxy Block Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Input Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2D Helical Interleaving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Encoded/Interleaved Data Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 AHA TPC Simulation Software. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 A subsidiary of Comtech Telecommunications Corporation PSGalaxy_STK_0100 comtech aha corporation 1.0 INTRODUCTION The Galaxy Simulation Tool Kit is a Turbo Product Code (TPC) simulator and Application Programmers Interface (API) that enables communication systems developers to integrate TPC coding/decoding technology with system level simulations. It allows system developers to evaluate the performance of TPC technology under various modulation formats and channel models prior to building a hardware based system. Two API options are available, a C/C++ API and a Matlab API. The C/C++ code API includes a sample project (developed with MSVC++ v6.0) which gives samples of all API calls. The Matlab API also includes a sample script (developed with Matlab v5.0) which illustrates the API call. Included with both APIs is an electronic user guide. This user guide is intended to assist designers in understanding how to operate the Galaxy Simulation Tool Kit. It is also a reference guide for understanding the various parameters that the user will specify prior to performing simulations of Turbo Product Codes (TPCs). Additional reference materials regarding TPCs are available from AHA in the form of Application notes and product specifications Please note that the Galaxy Simulation Tool Kit is a licensed product subject to AHA’s software license agreement. A copy of this agreement is included in the appendix of this document for your reference. Be sure to carefully review this agreement as you will be asked to accept the agreement when you run the software on a computer. 1.1 CONVENTIONS, NOTATIONS AND DEFINITIONS – Code block - A data stream to be encoded or decoded is segmented into blocks for processing by the TPC core logic. Data in a code block is configured as a 2D, 3D or enhanced array. – Axis iteration - Decoding one axis of an array (all x rows, all y columns, or all z columns). – Full iteration - Decoding all axes of an array (all rows and columns). – Soft value - Input to the decoder from either an Analog/Digital Converter(ADC) or digital demodulator. Soft decode inputs to the TPC decoder are used as confidence estimates of the binary value. – Code rate - Ratio of the number of data bits to the number of data and ECC bits. – Axis code rate - Ratio of the number of data bits to the number of total bits for a given axis. – Data rate - The rate at which unencoded data is input to the device when encoding or output from the device when decoding. PSGalaxy_STK_0100 – Channel Rate - The rate at which encoded data is output from the device when encoding or input to the device when decoding. Note that system channel rate may be different due to external synchronization marks or other overhead. – (n1,k1)x(n2,k2) - A general representation of a 2D block code for use in the descriptions to follow in this specification. For example, in a (64,57)x(64,57) code; n1,n2=64 represents the length of the data + ECC bits, and k1,k2=57 represents the length of only the data bits. 3D codes are represented as (n1,k1)x(n2,k2)x(n3,k3) – Vector - One row or column of data in a block. – Latency - The time from the first bit of a block in to first bit of the same block out. – Hex values are represented with a prefix of “0x”, such as register “0x00”. Binary values do not contain a prefix. 2.0 GALAXY SOFTWARE LICENSE The Galaxy Simulation Tool Kit is a licensed product subject to AHA’s software license agreement. The software is provided for evaluation purposes only. The software cannot be copied or shared to unauthorized users. By installing the software the user is obligated to abide by the terms of the software license. A complete copy of this agreement is included in appendix A of this document for your reference. 3.0 SOFTWARE INSTALLATION Insert the Galaxy Simulation Toolkit CD and run the setup program. The program instructs the user to select a directory to place the Galaxy software and documentation. The following directories are created, and the files expanded and copied to the appropriate directory: •AHA TPC Simulation •Galaxy Toolkit •Matlab Toolkit •TPC Publications 3.1 SYSTEM REQUIREMENTS The minimum recommended system for using the Galaxy simulation toolkit is a Pentium class PC running at least at 400 MHz with 128 MBytes of RAM. It will run on either Windows95/98 or Windows NT. Approximately 10 MBytes of free disk space is required for installation. The C/C++ API requires Microsoft Visual C++ 5.0 or higher. The Matlab API requires Matlab version 5.3 or higher. A subsidiary of Comtech Telecommunications Corporation Page 1 of 20 comtech aha corporation 4.0 GALAXY CONFIGURATION Prior to encoding or decoding using Galaxy, configuration parameters must be set. During encoding, the device appends Error Correction Code (ECC) bits to the current block and then outputs the encoded block. When decoding, Galaxy accepts soft decision values and stores the data internally. The block is then decoded iteratively by running it through the soft in/soft out (SISO) decoder. Galaxy iterates to the maximum programmed iteration limit set by the numIter configuration parameter. 4.1 CODES Galaxy Turbo Product codes are applied along orthogonal axes as 2 dimensional (2D) product codes, 3 dimensional (3D) codes, and enhanced product codes. The codes applied along each axis do not have to be the same (e.g. the blocks do not have to be square). Table 1 lists the constituent code choices for the X, Y, and Z axes. Note, code shortening can be applied along any axis to achieve an exact block size as required by the application. Table 1: Galaxy Constituent Codes CODE AXIS CODE AXIS RATE (256,247) (128,120) (64,57) (32,26) (16,11) (8,4) (256,256) (128,127) (64,63) (32,31) (16,15) (8,7) (4,3) .965 .938 .891 .823 .688 .500 .996 .992 .984 .969 .938 .875 .75 CODE TYPE Extended Hamming Extended Hamming Extended Hamming Extended Hamming Extended Hamming Extended Hamming Parity Parity Parity Parity Parity Parity Parity In addition to the 2D and 3D codes, Galaxy also supports enhanced Turbo Product Codes (“hyper” parity axis) which provide another dimension of error correction. Enhanced TPCs are parity codes applied along diagonals (the “hyper” axis) in the 2D or 3D blocks. The choice of code rate depends on many things including desired overall code rate, data rate, gate count, latency requirements, etc. The overall code rate is the product of the axes code rates. Page 2 of 20 4.2 ITERATIONS Decoding is done in an iterative fashion. Each full iteration begins by passing an x-row into the Soft Input Soft Output (SISO) decoder. The SISO output is multiplied by a programmable X feedback (xfbk) value. The completion of all x-rows constitutes one axis iteration. Next, each y-axis column is passed into the SISO decoder. The SISO output is multiplied by the programmable Y feedback value. The completion of all y-columns constitutes one axis iteration. If a 3D code is being decoded, each z-axis column is passed into the SISO decoder. The SISO output is multiplied by the programmable Z feedback (zfbk) value. The completion of all zcolumns constitutes one axis iteration. One full iteration is completed when one X and one Y axis iteration is complete for a 2D code; or one X, one Y, and one Z axis iteration is complete for a 3D code. The iterations continue until the iteration counter equals the number of iterations set in the numIter parameter. 4.3 FEEDBACK The TPC algorithm uses feedback, or weighting, values for performance tuning. After each axis iteration, the output of the Soft In, Soft Output (SISO) Decoder is multiplied by the feedback constant for that axis. These values are then fed back into the SISO for future iterations. The feedback multiplier values used for each code axis can vary from 1/32 to 31/32 depending on the number of iterations and system parameters (soft input bits, resolution). The feedback multipliers must be tuned to give optimum decoder performance in a given system. The following describes the tuning process. The choice of feedback multiplier has no effect on throughput or latency. For 2D square codes (Xcode = Ycode), a typical feedback multiplier value for both axes at 3 or 4 iterations is 16/32. For 3D cubic codes (Xcode = Ycode = Zcode), a typical feedback multiplier value at 6 iterations is 12/32. When using non-square or non-cubic codes, the following general rules should be applied. Parity codes should have their feedback multiplier values set higher than Hamming codes when mixed. For example, in a (32,26)x(32,26)x(4,3) code, the X and Y feedback (xfbk and yfbk) multipliers should be set to 16/32 while the Z feedback (zfbk) should be set to 18/32 or 20/32. When mixing Hamming codes with shorter Hamming codes, the feedback multiplier should be set slightly higher for the shorter code. A subsidiary of Comtech Telecommunications Corporation PSGalaxy_STK_0100 comtech aha corporation For example, in a (64,57)x(32,26) code, the X feedback (xfbk) multiplier could be set to 16/32, while the Y feedback (yfbk) multiplier could be set to 18/32. The feedback values must be tuned for the number of iterations allowed in a system. For less iterations than the above guidelines, the feedback values should be increased. For more iterations, the values should be decreased. For example, when using a (64,57)x(64,57) code with only 2 iterations, the feedback multiplier for both axes should be set to 20/32. Conversely, in a system that allows 12 or more iterations, the value for the feedback should be lowered to 16/32. Suggested Feedback Starting Values X FEEDBACK Y FEEDBACK Z FEEDBACK CODE COMBINATION (xbck) 16/32 20/32 30/32 12/32 16/32 30/32 2D Hamming, Hamming 2D Hamming, Parity 2D Parity, Parity 3D Hamming, Hamming, Hamming 3D Hamming, Hamming, Parity 3D Parity, Parity, Parity (zbck) N/A N/A N/A 12/32 20/32 30/32 Intermediate Storage Dual Port RAM Output Data Storage Dual Port RAM (2x input block size) (1x or 2x block size) (2x block size) MD_ICSN MD_IWRN MD_IADDR MD_IDATAI MD_OCSN MD_ORDN MD_OADDR MD_ODATAO OD_ICSN OD_IWRN OD_IADDR OD_IDATAI OD_OCSN OD_ORDN OD_OADDR OD_ODATAO Galaxy Block Diagram ID_ICSN ID_IWRN ID_IRDN ID_IADDR ID_IDATAI ID_IDATAO ID_OCSN ID_OWRN ID_ORDN ID_OADDR ID_ODATAI ID_ODATAO Figure 1: (ybck) 16/32 20/32 30/32 12/32 16/32 30/32 Input Data Storage Dual Port RAM SYNCIO TPC Engine IACPT OACPT SYNCI SCYNIO SYNCO ORDY OACPT SYNCO CLK RESETN CONFIG JTAG_OUT JTAG_IN ODATA TPC Core JTAG Controller PSGalaxy_STK_0100 ORDY CONFIG SYNCI ODATA IRDY SCAN_OUT IACPT IDATA SCAN_IN IRDY Boundary Scan IDATA Boundary Scan Table 2: The feedback may also need to be tuned depending on the number of soft input bits (quant_size). This parameter will only affect the optimum feedback multiplier value slightly, meaning that it should be adjusted by only 2/32 or 4/ 32 to allow for these differences. Since systems vary widely, the system designer should experiment with various feedback multiplier values to obtain the best performance. Recommended starting values for feedback are listed in Table 2. The code combination shows 2D and 3D combinations of Hamming and parity codes. A subsidiary of Comtech Telecommunications Corporation Page 3 of 20 comtech aha corporation 4.4 SOFT DECISION INPUTS The inclusion of confidence information input to the decoder can significantly improve the performance of the decoder. The confidence information is in the form of soft decision bits from the demodulator. The more bits of soft information that are available, the more powerful the error correction. Two parameters that determine how Galaxy interprets soft decision input data are quant_size (Quantization Size) and quant_mult (Quantization Multiplier). Quant_size is the number of bits for each data value input to the Galaxy decoder. Quant_mult is a scalar to be multiplied times each input data value. The multiplier improves the performance of the decoder when using smaller values for quant_size (1, 2, or 3 bits). For example, if a system is using 2 soft bits (values range from 0 to 3), and the internal decoder resolution is set to 5 bits (values range from 0 to 31), then a quant_mult of 9 could be used to increase the range of the input values (new range is from 0 to 27). The software will automatically add the correct constant to center the input values in the internal resolution range. Quant_mult must be an odd integer. A general rule for setting the quant_mult is: Figure 2: Note: 4.5 0 1 2 3 ... 64 65 66 67 . . . 127 128 129 130 . . . . . . 191 192 193 . . . ... ... ... ... ... ... ... ... 4032 4033 . . . ... . . . 4095 ... 63 The number reflects the bit order, including generated ECC bits. The encoded, scrambled data output is taken along diagonal lines starting with bit 0 as shown below. The order of the interleaving is noted for each diagonal line. Figure 3: 2D Helical Interleaving 1 2 4 127 0 1 2 3 ... 64 65 66 67 . . . 127 128 129 130 . . . . . . 191 192 193 . . . ... ... ... ... ... ... ... ... 4032 4033 . . . ... . . . 4095 inres – 1 2 quant_mult ≤ -----------------------------quant_size – 1 2 Input Block 3 ... 126 63 HELICAL INTERLEAVING The Galaxy core can optionally scramble (helical interleave) when encoding and descramble when decoding. Scrambling data spreads bursts of noise across all axes of the block code for the best error correction performance in burst channel use. The scrambling is applied after encoding takes place. Descrambling takes place before the decoding operation. Helical interleaving is applied along a diagonal path through the encoded block. Data is output along diagonal lines from the upper left to lower right corner (for a 2D code). The first diagonal output starts with the bit row 1, column 1 followed by the diagonal starting at row 1, column 2. For 3D codes, instead of reading diagonally through the 2D array, interleaving reads diagonally through a cube of data. The example below shows how interleaving is applied for a 2D (64,57)x(64,57) code. Page 4 of 20 For the (64,57)x(64,57) block, the data is: 0, 65, 130, ..., 4095, 1, 66, ..., 4031, 4032, 2, 67, ..., ..., 63, 64, ..., 4094 for a total of 4096 bits output. The decoder can automatically deinterleave the block to restore it to its original order. Figure 4: Encoded/Interleaved Data Output 0 65 130 . . . 4030 4095 1 66 131 . . . 4031 4032 2 67 132 . . . 3968 4033 3 68 ... ... ... ... ... ... ... ... ... ... 63 64 129 . . . 4029 4094 Data bits are output from the encoder in row order from left to right. 3D helical interleaving/ deinterleaving is done by reading/writing cells diagonally through the x, y, and z dimensions. Note A subsidiary of Comtech Telecommunications Corporation PSGalaxy_STK_0100 comtech aha corporation that the data rate drops when interleaving and/or deinterleaving. 4.6 SHORTENING Shortening refers to removing a specific number of data symbols from an X, Y, or Z axis (Xshort, Yshort, and Zshort parameters), removing data symbols from the code block (shortb), or removing rows of data symbols from the code block (shortr). The purpose of applying shortening is to adjust a code size down to exactly match a particular application’s required size and channel rate. The way shortening is implemented is that leading data symbols or rows of symbols are removed. The decoder knows the block size and shortening parameters and can insert zeroes into the code block in place of the shortened values for purposes of decoding. After the block is decoded these inserted zeroes are then removed before outputting the corrected data block. For more information on shortening TPCs, please refer to application note: ANTPC02. 5.0 N0) setting chosen. This Eb/N0 value takes into account the code rate. The received noisy channel data is quantized into soft decision values with the number of bits set in quant_size in the Register Configuration window. These soft values are sent to the TPC decoder. The output of the decoder is compared with the original data. All bit errors are counted. The BER is computed as bits in error out of decoder divided by total bits transmitted. AHA TPC SIMULATION SOFTWARE The AHA TPC Simulation Software allows the user to model the performance of Turbo Product Codes (TPCs). The TPCs are fully configurable and support the Galaxy library of Turbo Product Codes. The software is designed to run under Windows (95, 98, or NT4.0). This software is the property of Comtech AHA Corporation (AHA) and is protected under the terms outlined in the software license agreement (see HelpAbout AHA TPC Simulation). 5.1 GRAPH/CONTROL WINDOW In this window, the TPC Simulation software generates Eb/No vs. Bit Error Rate (BER) curves showing the performance of the code programmed in the Configuration/Currently Plotting window. All the settings (Codes, Iterations, Quantization, Feedback, etc.) for how the Galaxy core would perform are configured in the registers. The simulation setup for Bit Error Rate (BER) curve generation is as follows: 1) Random data is input to a TPC encoder. The binary output of the encoder is converted to channel symbols. For this simulation, a binary ‘1’ is converted to a floating point 1.0 value, while a binary ‘0’ is converted to a floating point -1.0 value. Additive White Gaussian Noise (AWGN) is added to the channel symbols, according to the Energy per Bit vs. Noise power (Eb/ PSGalaxy_STK_0100 A subsidiary of Comtech Telecommunications Corporation Page 5 of 20 comtech aha corporation Figure 5: Page 6 of 20 AHA TPC Simulation Software A subsidiary of Comtech Telecommunications Corporation PSGalaxy_STK_0100 comtech aha corporation 5.2 ACTIVE CONFIGURATION GROUP New Available Configurations: Galaxy Core Simulation Run a new Turbo Product Code simulation using the Galaxy core library of codes. When selected, a Galaxy Configuration window pops up. Load Data Point file Load a previously generated data point file. Plot Curve Generation Settings Group: Begin computing the Bit Error Rate statistics for the selected code and plot the results. The Plot Configuration Window pops up. The curve generation settings are programmed in the Plot configuration window. Minimum Block Errors Per Point Specify the minimum number of errors required for each plotted point in the Eb/No vs. BER graph. Typically, each point is based on approximately 50% more than this amount. Eb/No Start Specify a starting Eb/No value for the plot. Eb/No Step Specify the Eb/No step size in dB. BER Limit to stop at Specify how deep in Bit Error Rate the plot gets computed. Graph Settings Group: Key String A comment field for the graph window. Line Color Allows the user to select the color for plotting. Advanced Plot Controls Advanced Plot Controls Window: The Advanced Plot Controls are accessed by selecting the advanced button in the Plot Configuration Window allowing you to select Alternate Data Sources or define your own Noise Model. The Alternate Data Source can either be a binary data file that is continually cycled through (the file is rewound when the end is reached) or you can specify a DLL. The DLL feature allows you to generate your own data source to see how it performs with certain codes. The function in the DLL has a specific form and PSGalaxy_STK_0100 information on how to construct an appropriate DLL can be found with the Alternate Data Source sample code that was delivered with this release. The Alternate Noise Model can be specified as a DLL much like the Alternate Data Source. The function in the DLL has a specific form and information on how to construct an appropriate DLL can be found with the Alternate Noise Model sample code that was delivered with this release. A subsidiary of Comtech Telecommunications Corporation Page 7 of 20 comtech aha corporation OK Once plot configurations are defined, begin plotting by pressing the “OK” button. This starts the plotting of a curve. A copy of the current configuration is created in a separate window so you can see the setting 5.3 for the generated curve. Multiple curves can be generated at the same time by repeating this operation with the new configuration. GALAXY CONFIGURATION WINDOW This window opens when you select New → Galaxy Core Simulation → OK a new Turbo Product Code simulation . . . From the Graph/Control Window. X code Code for X axis of TPC array. Valid values are: extended hamming codes: (8,4), (16,11), (32,26), (64,57), (128, 120), (256, 247), simple parity codes: (4,3), (8,7), (16,15), (32,31), (64,63), (128,127), (256,255) and uncoded: (8,8), (16,16), (32,32), (64,64), (128, 128), (256, 256). (X code) - short Number of rows to shorten from the X axis. Shortening allows the user to exactly match any block size less than the maximum. Y code Code for Y axis of TPC array. Valid values are: extended hamming codes: (8,4), (16,11), (32,26), (64,57), (128, 120), (256, 247) and simple parity codes: (4,3), (8,7), (16,15), (32,31), (64,63), (128,127), (256,255). (Y code) - short Number of rows to shorten from the Y axis. Shortening allows the user to exactly match any block size less than the maximum. short bits Short bits Allows shortening of partial rows. Short bits refers to number of bits to be shortened. Z code Code for Z axis of TPC array. Valid values are: extended hamming codes: (8,4), (16,11), (32,26), (64,57), (128, 120), (256, 247), simple parity codes: (4,3), (8,7), (16,15), (32,31), (64,63), (128,127), (256,255) and uncoded: (8,8), (16,16), (32,32), (64,64), (128, 128), (256, 256). (Z code) - short Number of rows to shorten from the Z axis. Shortening allows the user to exactly match any block size less than the maximum. This option is only available for 3D codes. short rows Short rows allows shortening of partial planes by specifying the number of rows to be shortened. Enhanced TPC Enhanced TPC allows another dimension of coding in addition to X,Y,Z codes. Feedback Group: Feedback is used by Turbo Product Codes as a weighting function applied to the computed decode values during the iterative decoding. After each axis iteration, the output of the Soft In Soft Out (SISO) Decoder is multiplied by the feedback constant for that axis. These values are then fed back into the SISO for future iterations. X Feedback Feedback multiplier for the X-axis. Range: 1/32 to 31/32. Recommended starting value is 16/32. Y Feedback Feedback multiplier for the Y-axis. Range: 1/32 to 31/32. Recommended starting value is 16/32. Page 8 of 20 A subsidiary of Comtech Telecommunications Corporation PSGalaxy_STK_0100 comtech aha corporation Z Feedback Feedback multiplier for the Z-axis. Range: 1/32 to 31/32. Recommended starting value is 16/32. Enhanced Feedback Feedback multiplier for the Enhanced mode. Range: 1/32 to 31/32. Recommended starting value is 24/32. Enhanced Parity Feedback Feedback multiplier for the Enhanced mode. Range: 1/32 to 31/32. Recommended starting value is 24/32. Quantization Group: Quant Bits Input quantization size. Specifies the number of bits for each symbol input to the TPC core. Range: 1 to 12 bits. Use 1 bit for hard decision input data. The default is 6 bits. Quant Mult The Quantization Multiplier is a shift applied to the input values to put them near the center of the quantization range. If you have 3 or more Quant Bits, leave Quant Mult set to the default value of 1. Quant Limit Quantization limit is a clipping factor applied in the demodulator model to scale the decode input data. Resolution Group: In The number of soft decision bits for each decode input symbol. Set In = QuantBits + 1. For hard decision input data set In to 4. Defaults to 7. Out The number of soft decision bits for each decode output symbol. Set Out = In + 1. Defaults to 7. Iteration Settings Group: Max Iterations Maximum Iterations is the number of iterations used by the decoder. Range: 1 to 256. Modulation Group: The Galaxy Simulation software supports built in BPSK modulation as well as user defined modulation. BPSK Selecting BPSK enables BPSK modulation of the encoded data. Other Modulation Allows user defined modulation. The modulation is contained in a file. Modulation File User provided modulation file. Example modulations for QAM16, QAM64, and 8 PSK are included with the evaluation software (see modulation files: qam16.mod, qam64.mod, and psk8.mod). PSGalaxy_STK_0100 A subsidiary of Comtech Telecommunications Corporation Page 9 of 20 comtech aha corporation 5.4 CURRENTLY PLOTTING GROUP The code currently being calculated and plotted will be listed in the Currently Plotting message window. Whenever a new data-point is created the graph is updated. If you wish to stop the current plot then you can press the “Stop” button. If you are satisfied with the current point that is being generated you can press the Next Point button to move to the next Eb/No point. Every plot that is generated is added to the key in the upper right corner of the graph window and is designated by the code that it represents. More than one curve can be generated at a time by selecting an active configuration and hitting the plot button. Stop Stop calculating data points for the present curve. Next Point Next Point button allows the user to stop calculating errors at the present Eb/No value and move on to the next Eb/No value. Pause / Continue Pause/Continue button allows the user to stop the current plot and then resume. 5.5 CURRENT PLOTS GROUP Remove The Remove button allows the user to remove the highlighted plot and label from the plotted graph. Save The Save button allows the user to save the highlighted plot data points to a user defined file. This function will save to a data file the data points from the graph window. The format for a data file is one x y value per line. For example, 0 0.25 0.5 0.127012 0.0907417 0.084484 0.75 1 1.25 1.5 0.0723518 0.0397889 0.0214485 0.0131982 Data files for comparison with other codes are available from Comtech AHA Corporation upon request. Modify You can modify the color of a plot by pressing the “Modify” button. This allows the user to modify the plot label and color. Page 10 of 20 A subsidiary of Comtech Telecommunications Corporation PSGalaxy_STK_0100 comtech aha corporation 5.6 SELECTED CURVE STATUS GROUP The following curve status information is displayed for the currently plotting curve. Current DB: Current DB refers to the current Eb/No value that is being simulated. Current BER: Current BER refers to the approximate Bit Error Rate for point being calculated. Blocks Left: Blocks left is an estimate of the number of blocks left to complete the simulation for the current point. Ave Iterations: Average Iterations is the average number of decode iterations required per block for the current point. Num Blocks: Number of Blocks is the number of blocks that have been modeled for the current point. Num Block Errors: Number of Block Errors is the number of blocks that had decode errors for the current point. Num Bits: Number of Bits is the number of bits that have been decoded for the current point. Num Bit Errors: Number of Bit Errors is the number of bits that have been decoded incorrectly for the current point. 5.7 ZOOM CONTROLS GROUP You can zoom in and out on the current graphs by selecting different X-axis and Y-axis values. Y Min Range: 0 to -30 Y Max Range: 0 to -30 X Min Range: -3 to 25 X Max Range: -3 to 25 PSGalaxy_STK_0100 A subsidiary of Comtech Telecommunications Corporation Page 11 of 20 comtech aha corporation 5.8 EXTERNAL DATA AND NOISE SOURCE DLL The AHA TPC Simulation software has the ability to use functions found in external DLLs for generating noise and data. In the AHA TPC Simulation alternate noise and data samples directory you will find an example of each of these options. There are two projects built with MSVC++ 6.0 in the included directory. •datagenerator.dsw •noisegenerator.dsw Each of these projects builds a sample DLL from the source code located in the associated *.cpp file. Information about what parameters are passed to each of these functions can also be found in the *.cpp files. The projects build the DLLs and place them in either the Debug or Release directories depending on which build method you chose. To use these 6.1.1 DLLs in the AHA TPC Simulation Windows eval software, select the “Advanced” button on the “Plot Configuration” window. Please refer to the online help for more information. 6.0 AHA GALAXY API PROGRAMMING Galaxy library functions are provided for purposes of evaluating the Turbo Product Codes supported by the Galaxy licensed cores by allowing the user to integrate the functions into either a Matlab system model or a “C” program system model. 6.1 PROGRAMMING PARAMETERS DEFINED Parameters that are used in both APIs are defined here. XCODE, YCODE AND ZCODE PARAMETERS Code[5:0] selects a code for each axis. This section applies to Xcode, Ycode, and Zcode parameters in both of the APIs. bit5 UNCODED AXIS Table 3: bit4 PARITY bit3 code[3] bit2 code[2] bit1 code[1] bit0 code[0] Constituent Codes (different from AHA4501) code[3:0] 0x02 0x03 0x04 0x05 0x06 0x07 0x08 EXT HAMMING PARITY ONLY (PARITY=0) (PARITY=1) na 8,4 16,11 32,26 64,57 128,120 256,247 4,3 8,7 16,15 32,31 64,63 128,127 256,255 PARITY - Set to 0 for extended Hamming and 1 for parity only. UNCODED AXIS -Set to 1 for uncoded axis, 0 for coded axis. Page 12 of 20 A subsidiary of Comtech Telecommunications Corporation PSGalaxy_STK_0100 comtech aha corporation 6.1.2 GALAXY CONTROL PARAMETERS xfbk feedback value for x axis, xfbk = feedback_value * 32 yfbk feedback value for y axix, yfbk = feedback_value * 32 zfbk feedback value for z axis, zfbk = feedback_value * 32 hfbk feedback value for hyper axis, xfbk = feedback_value * 32 hfpbk feedback value for hyper parity axis, xfbk = feedback_value * 32. quant_size number of soft input bits for the decoder (1 to 6 bits) quant_mult sets the shift value (must be odd). inres number of input bits outres number of output bits heli_interleave1 = enable helical interleaving numIter maximum number of iterations (1 to 256) Xcode a 6-bit value to put in the register that will set the X Axis code. See Table 1, Galaxy Constituent Codes, (i.e. 16x11 == 4). Ycode a 6-bit value to put in the register that will set the Y Axis code. See Table 1, Galaxy Constituent Codes, (i.e. 16x11 == 4). Zcode a 6-bit value to put in the register that will set the Z Axis code. SeeTable 1, Galaxy Constituent Codes, (i.e. 16x11 == 4). Xshort number of bits to shorten in x direction Yshort number of bits to shorten in y direction Zshort number of bits to shorten in z direction shortb bit shortening for partial rows shortr row shortening for partial plane enhanced 1 = enable enhanced mode encode_flagmatlabgalaxyapi specific parameter, 1 = enable encoding, 0 = decoding. inbits matlabgalaxyapi specific parameter, an array containing the input data bits to be either encoded or decoded. evm galaxyapi.dll specific parameter, GalaxyStruct structure returned by GalaxyInit() function. PSGalaxy_STK_0100 A subsidiary of Comtech Telecommunications Corporation Page 13 of 20 comtech aha corporation 6.2 AHA GALAXY MATLAB SIMULATION API Matlabgalaxyapi is an API containing one function, matlabgalaxyapi(). The function performs either encoding or decoding depending on whether the encode_flag is set to one or zero. A path to these files may be specified from the Matlab command line prompt or within a Matlab script file. If the path where the toolkit exists is: c:\AHA\Galaxy Simulation Toolkit\Matlab Toolkit, then use the following command line script: cd ([‘c:\AHA\Galaxy Simulation Toolkit\Matlab Toolkit ‘]). To run the example script from the Matlab command line prompt type: galaxy_matlab_sim. Galaxy_matlab_sim.m is an example Matlab script file that encodes and decodes a block of data. The Galaxy Windows evaluation software should be run first to determine the optimum settings for the Turbo Product Code parameters. Call the API function by defining Galaxy control parameters then make the following function call from a Matlab script file or Matlab command line prompt. Array_bits = matlabgalaxyapi(encode_flag,... numIter,... heli_interleave,... xcode,... ycode,... zcode,... xshort,... yshort,... zshort,... shortb,... shortr,... enhanced,... xfbk,... yfbk,... zfbk,... hfbk,... hpfbk,... quant_size,... quant_mult,... inres,... outres,... inbits); Page 14 of 20 A subsidiary of Comtech Telecommunications Corporation PSGalaxy_STK_0100 comtech aha corporation 6.2.1 FLOW CHART, MATLAB EXAMPLE PROGRAM Define Galaxy Control Parameters Define an array and fill with uncoded binary data values Encode the data Map the encoded data to maximum confidence soft decision values Decode the soft decision data 6.3 AHA GALAXY C SIMULATION API Galaxyapitest.c is an example source file. It is best to run the GALAXYAPITEST demo from a DOS window with output rerouted to a file by using the command line: galaxyapitest > out.txt, and then display the output file. 6.3.1 GALAXY API FUNCTIONS GalaxyInit(); /* Initialize the evaluation software for TPC encoding or decoding operation and returns a pointer to a GalaxyStruct structure that is needed in all the other API calls. */ GalaxyGetLastError(); /* Returns a char pointer to a string giving the last error produced. */ GalaxyConfigure(evm, xcode, ycode, zcode, enhanced, xshort, yshort, zshort, shortb, shortr, xfbk, yfbk, zfbk, hfbk, hpfbk, numIter, heli_interleave, inres, outres, quant_size, quant_mult); /* Configure Galaxy with the Galaxy control parameters. parameters: see Section 6.1 */ GalaxyDumpSettings(evm); /* Read current settings for the parameters set by GalaxyConfigure and send to stdout. */ GalaxyEncodeDataBits(evm,rawData,encodedBlock); /* Encode the raw data using software parameters: evm rawData PSGalaxy_STK_0100 The GalaxyStruct structure returned by GalaxyInit() The Raw Data, an integer array of bits (1 bit per array location). A subsidiary of Comtech Telecommunications Corporation Page 15 of 20 comtech aha corporation */ encodedBlock The Encoded Data, an integer array of bits (1 bit per array location). GalaxyDecodeEncodedBlock(evm,afterChannelBlock,decodedBlock); /* Decode the encoded block using the Galaxy software. parameters: evm The GalaxyStruct structure returned by GalaxyInit(). afterChannelBlock The Noisy Data, an integer array of soft values (1 value per array location). decodedBlock The Decoded Data, an integer array of bits (1 bit per array location) */ GalaxyFreeResources(evm); /* Free memory resources. parameters: evm */ The GalaxyStruct structure returned by GalaxyInit() GalaxyGetDataSize(evm); /* Returns the number of data bits in the current configuration (shortening is taken into account) parameters: evm */ The GalaxyStruct structure returned by GalaxyInit() GalaxyGetBlockSize(evm); /* Returns the number of data plus ECC bits in the current configuration (shortening is taken into account). parameters: evm */ The GalaxyStruct structure returned by GalaxyInit() GalaxyCopyDataBits(evm,eccBlock,dataBlock); /* Strip data bits from the eccBlock and place in the dataBlock. parameters: evm eccBlock dataBlock */ Page 16 of 20 The GalaxyStruct structure returned by GalaxyInit(). The block with ECC bits included. The block with OUT ECC bits. A subsidiary of Comtech Telecommunications Corporation PSGalaxy_STK_0100 comtech aha corporation 6.3.2 FLOW CHART, GALAXY API EXAMPLE PROGRAM Initialize the software for encoding and decoding Define Galaxy Control Parameters Configure Galaxy Generate the uncoded data block Encode the data block Run the data through a simple channel model (add some noise) Decode the noisy block of data 6.4 INSTALLATION TIPS AND POSSIBLE PROBLEMS 1. DLL file not in current directory or Windows\System directory. Program exits gracefully with a Windows Error message. 7.0 RELATED PUBLICATIONS DOCUMENT # PB4501 PB4501EVM PB4501EVSW PBGALAXY PBGALAXY_EVSW PBGALAXY_STK PSGALAXY_IG PS4501 ANTPC01 ANTPC02 ANTPC03 ANTPC04 PSGalaxy_STK_0100 DESCRIPTION AHA Product Brief – AHA4501 Astro 36 Mbits/Sec Turbo Product Code Encoder/Decoder AHA Product Brief – AHA4501 TPC EVM ISA Evaluation Module AHA Product Brief – AHA4501 TPC Windows Evaluation Software AHA Product Brief – Galaxy Core Generator Turbo Product Code Decoder Cores AHA Product Brief – AHA Galaxy TPC Windows Evaluation Software AHA Product Brief – AHA Galaxy Simulation Tool Kit AHA Product Specification – AHA Galaxy Turbo Product Code Cores Integrator’s Guide AHA Product Specification – AHA4501 Astro 36 Mbits/Sec Turbo Product Code Encoder/Decoder AHA Application Note – Primer: Turbo Product Codes AHA Application Note – Use and Performance of Shortened Codes with the AHA4501 TPC Encoder/Decoder) AHA Application Note – Turbo Product Code Encoder/Decoder with Quadrature Amplitude Modulation (QAM) AHA Application Note – Use and Performance of the AHA4501 TPC Encoder/Decoder with Differential Phase Shift Keying (DPSK) A subsidiary of Comtech Telecommunications Corporation Page 17 of 20 comtech aha corporation DOCUMENT # PB4501 PB4501EVM PB4501EVSW ANTPC05 ANTPC06 ANTPC07 TPCEVAL Page 18 of 20 DESCRIPTION AHA Product Brief – AHA4501 Astro 36 Mbits/Sec Turbo Product Code Encoder/Decoder AHA Product Brief – AHA4501 TPC EVM ISA Evaluation Module AHA Product Brief – AHA4501 TPC Windows Evaluation Software AHA Application Note – AHA4501 Turbo Product Code Encoder/ Decoder Designers Guide AHA Application Note – AHA4501 Turbo Product Code Encoder/ Decoder Frequently Asked Questions (FAQ) AHA Application Note – Turbo Product Codes for LMDS AHA Evaluation Software – Turbo Product Codes - Windows Evaluation Software A subsidiary of Comtech Telecommunications Corporation PSGalaxy_STK_0100 comtech aha corporation APPENDIX A: AHA SOFTWARE LICENSE COMTECH AHA CORPORATION LICENSE AGREEMENT IMPORTANT READ CAREFULLY: This Comtech AHA Corporation License Agreement (hereinafter “AGREEMENT”) is legally binding agreement between YOU (either as an individual or an entity) and Comtech AHA Corporation., its parents, successors, subsidiaries, suppliers and/or licensors (collectively referred to hereinafter as “AHA”). THIS LICENSE applies to a copy of the AHA TPC Simulation Software (hereinafter “SOFTWARE”). By the process of installing, copying or otherwise using this SOFTWARE, YOU hereby agree to be bound by the terms and conditions of this Agreement. If YOU do not agree to all of the terms and conditions of this Agreement, return this software to AHA with written notice stating that you do not accept THIS LICENSE. YOU ARE ADVISED THAT ANY THIRD PARTY SOFTWARE PROVIDED HEREWITH, INCLUDING, BUT NOT LIMITED TO ANY GNU OR non-AHA ROUTINE, ALGORITHM, CODE, OBJECT, DATA FILE OR OTHERWISE WHICH MAY BE PROVIDED HEREWITH IS INCLUDED SOLELY FOR USE AT YOUR OPTION FOR PURPOSES OF DEMONSTRATION AND EVALUATION OF THIS SOFTWARE. AHA MAKES NO REPRESENTATIONS AS TO THE INTEGRITY, ACCURACY, VALIDITY OR RELIABILITY OF ANY SUCH GNU OR non-AHA ROUTINE, ALGORITHM, OBJECT, CODE, DATA FILE OR OTHERWISE AND SHALL NOT BE RESPONSIBLE FOR ANY LOSSES OR DAMAGES WHICH MAY BE SUSTAINED OR WHICH MAY OCCUR AS A RESULT OF THE INSTALLATION, COPYING OR USE OF THIS SOFTWARE AND/OR ANY THIRD PARTY GNU OR non-AHA ROUTINE, ALGORITHM, OBJECT, CODE, OR DATA FILE. YOU ARE FURTHER ADVISED THAT THE SOFTWARE YOU ARE INSTALLING, COPYING OR USING MAY CONTAIN LESS FEATURES, FORMS OR FUNCTIONS THAN ANY COMMERCIALLY AVAILABLE VERSION OF THIS SOFTWARE OR COMMERCIALLY RELEASED PRODUCT INCORPORATING THIS SOFTWARE AND AHA MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, AS TO THE ACCURACY, VALIDITY, OR RELIABILITY OF THIS SOFTWARE. This AGREEMENT is a license agreement and is not intended to operate as an agreement for sale or transfer of any rights in the SOFTWARE, except as expressly provided herein. AHA continues to own the SOFTWARE, including any copies thereof, and solely grants to YOU a non-exclusive right to use this SOFTWARE for demonstration and evaluation purposes only. AHA EXPRESSLY RETAINS ANY AND ALL RIGHTS NOT EXPRESSLY GRANTED HEREUNDER THIS AGREEMENT AND NOTHING IN THIS AGREEMENT SHALL CONSTITUTE A WAIVER OF AHA’S RIGHTS UNDER U.S. OR INTERNATIONAL PATENT, TRADEMARK, OR COPYRIGHT LAW OR ANY OTHER FEDERAL OR STATE LAW. Grant of License: Subject to the provisions contained in this AGREEMENT, AHA hereby grants YOU a non-exclusive and non-transferable license to install and use this SOFTWARE for demonstration and evaluation purposes only. YOU MAY NOT COPY THIS SOFTWARE IN ANY MANNER OR FORM, EXCEPT FOR A SINGLE COPY FOR ARCHIVAL PURPOSES PROVIDED SUCH COPY CONTAINS ALL OF THE SOFTWARE’S PROPRIETARY NOTICES, INCLUDING A COPY OF THIS AGREEMENT. Restrictions: YOU may not modify, translate, change, decompile, reverse engineer, disassemble, create derivative works or otherwise alter this SOFTWARE (except to the extent expressly authorized by law) without the express written consent of AHA. ANY AND ALL SUCH MODIFICATIONS, CHANGES, ALTERATIONS OR DERIVATIVE WORKS SHALL REMAIN THE SOLE AND EXCLUSIVE PROPERTY OF AHA TO THE MAXIMUM EXTENT UNLESS OTHERWISE PROHIBITED BY LAW. YOU may not copy this SOFTWARE, or any supporting documentation accompanying this SOFTWARE (except for archival purposes as previously set forth herein) without the express written consent of AHA. PSGalaxy_STK_0100 A subsidiary of Comtech Telecommunications Corporation Page 19 of 20 comtech aha corporation YOU may not rent, lease, assign or otherwise transfer any rights to this SOFTWARE granted hereunder this AGREEMENT without the express written consent of AHA. YOU may not alter, remove, or destroy any proprietary mark, trademark, patent or copyright markings, notices or labels placed upon or contained within the SOFTWARE or any supporting documentation which may accompany the SOFTWARE. Support: YOU shall not be entitled under the terms of this AGREEMENT to receive any support services of any kind whatsoever. Disclaimer of Warranty: THIS SOFTWARE AND ANY SUPPORTING DOCUMENTATION PROVIDED HEREWITH ARE PROVIDED FOR DEMONSTRATION AND EVALUATION PURPOSES ON AN “AS-IS” BASIS, WITH NO WARRANTIES OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY OF MERCHANTABILITY, IMPLIED WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE, OR ANY WARRANTY OF NONINFRINGEMENT, WHETHER ALLEGED TO ARISE BY OPERATION OF LAW, BY REASON OF CUSTOM OR USAGE OF TRADE OR BY COURSE OF DEALING. Limitation of Liability: BY ACCEPTING THIS AGREEMENT, AND THE TERMS HEREUNDER, YOU SPECIFICALLY ACKNOWLEDGE THAT THE ENTIRE RISK ARISING OUT OF ANY INSTALLATION, COPYING OR USE OF THIS SOFTWARE IS SPECIFICALLY AND SOLELY ALLOCATED TO AND REMAINS WITH YOU. TO THE MAXIMUM EXTENT PERMITTED UNDER THE LAW, AHA SHALL NOT BE LIABLE FOR ANY CONSEQUENTIAL, INCIDENTAL, DIRECT, INDIRECT, SPECIAL, PUNITIVE OR OTHER DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, ANY DAMAGES FOR LOST BUSINESS OR PROFITS OR OTHER PECUNIARY LOSS ARISING OUT OF THIS AGREEMENT AND/OR THE INSTALLATION, COPYING OR USE OF THE SOFTWARE. Termination: This AGREEMENT shall automatically terminate in the event YOU breach any of the terms or conditions of this AGREEMENT. Upon the expiration or termination of this AGREEMENT for any reason, all licenses granted hereunder shall terminate and YOU shall destroy all copies of the SOFTWARE. General Provisions: In the event that any provision of this AGREEMENT shall be held to be illegal, unenforceable or in conflict with any law of federal, state or local government having jurisdiction over this AGREEMENT, the validity and enforceability of all other remaining provisions shall not be affected thereby. This AGREEMENT constitutes the full and complete understanding and obligations between YOU and AHA and is complete in and of itself. This AGREEMENT fully supersedes any and all prior understandings or agreements pertaining hereto and is not subject to any other terms or conditions not clearly set forth herein. This AGREEMENT may not be modified or altered, except by a written instrument signed by YOU and an authorized representative of AHA. This AGREEMENT shall be governed by and determined in accordance with the laws of the State of Washington, excluding its conflicts of laws provisions and excluding the 1980 United Nations Convention on Contracts for the International Sale of Goods. Both parties agree that any dispute pursuant to this AGREEMENT shall be submitted to binding arbitration under the rules of the American Arbitration Association. Page 20 of 20 A subsidiary of Comtech Telecommunications Corporation PSGalaxy_STK_0100