hi ch rth in :fL •1e limits lS a the Earth non 994, I the er, nain asure . and s fore- ience vi de used lND l to j to tell ·dis- ch se ed to md the ed ;ence e, m 11autics ;chat, .A dia- l • )0 or nous, i,000 1itch mu al J, .Y'""'<l .0, Wade G. Holcomb, l 185 Linde New Haven, Connecticut 065 TRY NMR WITH YOUR OLD CW RIG Using amateur radio equipment to perform nuclear magnetic resonance _experiments W ant to try something new and differ- ent with your old CW rig? Consider building your own experimental nuclear magnetic resonance (NMR) instrument. With it, you can experience the thrill of sending and receiving radio signals to the protons of . hydrogen atoms. As a matter of fact, it's entire- ly possible to duplicate discoveries made short- ly after World War IT with that old CW rig of yours, plus a surplus magnet similar to those that formed part of a radar magnetron. Of course, some readjustment will be necessary to get your old rig tuned to the correct frequency. You'll also need an oscilloscope and an auto- matic keying circuit. For those who enjoy construction and trou- bleshooting, this experiment could be the basis of a science fair project using dated ham rig components. Special interests in RF circuits or computer software are very useful in building Photo A. Magnet with RF tank coil with two tubes of salad oil. Four steel support columns also serve as the return magnetic field circuit. The field is about 731 Gauss. Communications C
16
Embed
r~ :fL TRY NMR WITH - diy Physics Blog · Once I find the resonant proton frequency, I measure it within one cycle using a frequency counter. This frequency allows a very accurate
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
hi ch rth in r~ :fL
•1e limits lS a the Earth non
994, I the ~ther
er,
nain asure . and s foreience vi de used
lND l to j to tell ·disff~ ch se ed to md the
ed ;ence e, m 11autics ;chat, .A dial •
~lec)0 or
nous, i,000 1itch mu al
J, .Y'""'<l .0,
Wade G. Holcomb, l-185 Linde
New Haven, Connecticut 065
TRY NMR WITH YOUR OLD CW RIG Using amateur radio equipment to perform nuclear magnetic resonance _experiments
W ant to try something new and different with your old CW rig? Consider building your own experimental
nuclear magnetic resonance (NMR) instrument. With it, you can experience the thrill of sending and receiving radio signals to the protons of
. hydrogen atoms. As a matter of fact, it's entirely possible to duplicate discoveries made shortly after World War IT with that old CW rig of yours, plus a surplus magnet similar to those
that formed part of a radar magnetron. Of course, some readjustment will be necessary to get your old rig tuned to the correct frequency. You'll also need an oscilloscope and an automatic keying circuit.
For those who enjoy construction and troubleshooting, this experiment could be the basis of a science fair project using dated ham rig components. Special interests in RF circuits or computer software are very useful in building
Photo A. Magnet with RF tank coil with two tubes of salad oil. Four steel support columns also serve as the return magnetic field circuit. The field is about 731 Gauss.
Communications C
24 Winter 1996
Photo B. The four-poster magnet is 18 inches on each side. A bottle of salad oil is inserted inside a 3.11 tank circuit. Credit cards can be erased if one is not careful.
your own amateur NMR system. Figure 1 shows a functional block diagram of the major components required to perform amateur NMR.
What is nuclear magnetic resonance?
The hydrogen atom contains one proton at its center. Nuclear magnetic resonance (NMR) and magnetic resonance imaging (MRI) techniques make use of two magnetic fields-a fixed field and a variable radio frequency (RF) field-in a manner that lets an observer make physical measurements based on the proton's reaction to these fields. This method allows one to study the properties of many common substances using components familiar to radio amateurs.
While information on NMR is mostly accessible to those with training in one of the physical sciences, Reference 1 offers detailed explanations of the fundamentals of NMR using a descriptive, mostly nonmathematical approach. The rapid development of medical MRI systems required that a trained support force be available. This book is often used by institutions to teach support personnel, and is one of several books written to fill this need.
Many atomic nuclei have "spin" and charge. Spin is the atomic equivalent of angular momentum in everyday life. According to quantum theory, a nucleus with spin can only take certain energy levels in a magnetic field. We can visualize the nucleus spinning like a bar magnetic on its axis, producing an associated magnetic field. It is the interaction of this field with external
fields that separates nuclear energy levels and allows NMR to occur. The magnetic moment (current times enclosed area) is sometimes called a nuclear magneton. The hydrogen atom has a 2.79 nucle.ar magneton value.
A small bottle of salad oil contains a large number of possible radio signal sources (about 6 x 10E+22 per cubic milliliter). Photo A shows two tubes of salad oil inside a tank circuit between the poles of my magnet. In my magnetic field, only about one atom per million atoms is a potential contributor, on a chance basis, to a detectable RF signal following an RF pulse. A huge number of such atoms results in a detectable signal. The strength of the detected signal can be as much as 5 µ V.
The duration of the RF keying pulse and its power level must be determined by experimentation to find the correct amount of energy to "flip" protons. Best results are obtained when the flip is 90 degrees from the static field. For instance, it's possible to have too great a pulse duration or power level, which might result in flipping the protons 450 degrees, a complete circle plus 90 degrees. The detectable signal would be similar to the correct amount!
Finding a magnet
Magnets are still available from surplus catalogs. When choosing a magnet, remember that the RF signal frequency's purity is a function of the field's uniformity. The magnet's uniformity is equal in importance to its field strength in procuring good results. Obtaining a uniform field is a never-ending goal for NMR and MRI
~ w;:a,J.~)Qj4,¥¥.J!l'l?#Wi!fi ... f ~41Rl +;t ~~"''r-:1 ""'-....,-· --
~ 3 § §' 8' ::J
"' 0 a ~ ~
N ln
f !""
~ = ~. ~ !!!..
~ ~
"' 9
~ ~ i ?
FREQUENCY COUNTER
U F J
TANK COIL PLACED AT RIGHT ANGLE TO FIXED FIELD
50 OHM ATTENUATOR 1 to 80 db
KEYING
PSI.I 1111
N FREQ = ~257 • FIELD STRENGTH CGAUSS>
s
r------, LINEAR
POWER AMP Ten-Tee
TUNING C
MATCHING C
SIMULATED TX NO I SE I QUARTER IJAUE LI NE BLOCKER
1N91%
LOW NOISE PRE AMP
REAL TO A/O BOARD COMPUTER
TIMING KEYING
I ORTA DISPLAY I QUAD TO A/D BOARD
DIRECT CONUERSION
RECEIVER
Photo C. A dot/dash RF pulse to the tank coil holding an oil sample in a magnetic field sends back an RF Hahn echo. This is one of the first subjects a new NMR student finds out about (see references).
workers. A tolerance of 5 to 10 parts per million over a volume the size of a golf ball would make a very useful amateur magnet. A change of 1 gauss will mean a change of 4257 Hz in the observed frequency. Moving a metal chair near the magnet can distort the magnetic field and detune your system.
It's even possible to make tests using the Earth's magnetic field at a frequency about 2000 Hz, using audio in place of RF equipment. Perform these tests in your backyard, away from cars or other large metal objects. Several papers appeared during the 1950s
Photo D. Amiga screen shows the real and quadrature of the Hahn echo held RAM memory, this display is the average of 16 echoes. A dual AID converter board suitable for stereo music will do this nicely.
26 Winter 1996
showing excellent results in measuring small variations in the Earth's magnetic field.2
Simple NMR experiments
The vertical field strength of my 500 pound magnet (see Photo B) is about 731 gauss, approximately 1400 times the Earth's magnetic field'at my QTH. This magnet is quite temperature sensitive, almost 1 gauss/degree C. I usually have to readjust my master oscillator to find the hydrogen proton freqm:ncy if the room temperature changes. My magnet's field strength increases in cold weather.
Once I find the resonant proton frequency, I measure it within one cycle using a frequency counter. This frequency allows a very accurate method of determining the magnetic field strength. The relationship of frequency to magnetic field strength is given by Larmor's constant:
f-magnetic field in gauss x 4257
In my magnet, the NMR frequency is 3.11 MHz, for a field strength of 0.073 lT, (The ST unit of Tesla, T, equals 10,000 gauss.) This is near the amateur 80-meter CW band.
My RF tank circuit looks like an 80-meter final tank coil (see Photo B). It's driven by short duration RF pulses at 3.11 MHz. When the RF field is applied, the protons spinning in the plane of the static field rotate out of the plane of the field. When the RF field is turned off, the protons return to the plane of the static field, with two degrees of rotational freedom.
The protons' spins, after the RF pulse is turned off, go through a spiral trajectory-like an orange being peeled from one end to the other--emitting a weak RF signal into the resonant tuned tank circuit. The detected RF signal takes the form of a damped sine wave. This damped wave is called a free induction decay (FID), which can last several seconds in a very uniform field, or perhaps only a few milliseconds in a non-uniform field. I sometimes judge the best spot in my magnet by positioning my sample for the longest FID.
This recovery is described by two time constants, T 1 and T2, which can be measured later if the data is stored in computer memory. These two time constants, longitudinal (Tl) and transverse (T2), describe these return spins to the static field, and can indicate the effect of nearby atomic neighbors on the observed hydrogen protons. For instance in pure water, the two time constants are equal to each other, but this isn't so in salad oil or other complex compounds.
System requirements
The amateur radio requirements needed to
. ,/'\
bounce an RF signal off the earth-moon-earth (EME} are equivalent to those required for listening to the proton's spin (see Figure 1). As you know, these are atransmitter, receiver, antenna, keyer, a low-noise receiver front end, a T /R system, and a display. The keyer in my system is a computer interface board and software. I use a direct conversion receiver.
I use a computer with a timer board to generate a dot and dash pattern to key the transmitter with the two required pulses-a 90-degree dot followed by a 180-degree dash. The dot lasts 100 µS and the dash 200 µS in a typical pattern, with a 25 mS spacing. This is repeated after a 500-mS delay. Several different timing patterns are required to determine the proton spin time constants (Tl and T2). You could try it with a hand key, but you wouldn't get the accuracy you need.
The Hahn echo,3 in Photos C and D, appearing at 25 mS from my "dot" 90-degree pulse, is captured with a computer analog-to-digital board and stored in computer memory, much as one digitizes a note of music. Later, I use cotnputer software to determine the frequency spectrum (Photo E) of the stored echo by Fast Fourier Transform (FFT}. The spectrum line width helps me determine the magnetic field uniformity at the position of my sample.
History
I.I. Rabi was known to have been a radio amateur, and was photographed at the controls of this "wireless telegraph" station as a teenager, around 1912.4 He's given credit for the general concepts of using two magnetic fields to overcome the field created by the atom's rotating electron, which shields the atomic nucleus. He was awarded an unshared Nobel prize in 1944 for this work, while doing radar development for the war effort. More Nobel awards were presented to others for carrying out advances on this method in the months following the end of World War II using circuits developed by the wartime radar laboratories.5-7 No complete study has been published covering the scientific history of the development of NMRandMRI.
Work in progress
At present, I'm measuring time constants and doing spectrum analysis of Hahn echoes to measure field purity. This should be easy for amateurs to repeat using almost any computer. I did my first Fast Fourier Transform on an Apple II+ based on an article in BYTE for viewing music spectrum. This required writing a 6502 machine language FFT routine. This
Photo E. Frequency spectrum of Hahn echo shown in Photo D, found by using computer software. Baseline is 10 kHz wide. Width at the 50 percent amplitude point is about 200 Hz and may be used to judge magnetic field uniformity. Phase spectrum is shown in background.
allowed the Apple to become my first audio spectrum display about 10 years ago. I hope to obtain my first 2-dimensional MRI picture, perhaps an image of a sectional slice through an orange, soon.
I'll have to develop computer software and gradient amplifiers to drive the gradient coils shown in Photo A before this is possible. Complex patterns of gradients and RF pulses are needed to acquire a 2-D image plane, which must then be "decoded" using 2-dimensional spectrum analysis. With the help of Dave Reddy, NlRBJ, I've developed computer software that will perform a double-precision 128 x 128 2-D FFT on a generic 486DX 66-MHz PC clone in about 4 seconds-much faster than the expensive array processors used for these kinds of reconstructions in the recent past.
We've tested this software by reconstructing raw data of a water-bottle phantom originally acquired on a Yale University experimental NMR system. Photo F shows the raw data, which looks like ripples spreading in water, and Photo G depicts the finished magnitude and phase images. Note that the finished images are inverted, and the air bubble at the top of the bottle with its meniscus is shown at the bottom.
Summary
If you 're interested in transmitters, receivers, or computer software, you '11 find the effort required to capture the radio signals emitted by the proton's spin a challenge. Everything I've done can be recreated using common amateur
Communications Quarterly 27
28 Winter 1996
Photo F. Raster display of two 64K arrays showing RF data received from an oil sample. MRI images look like holo· grams before the 2-D FFT data reduction. This represents a 128x128x12 bit array.
Photo G. After a 2-D FFT computer analysis (Photo F) shows a cross-sectional slice through the oil sample bottle. These two images now occupy the same memory space as the images in Photo F. Process requires 4 seconds on a 486DX 66-MHz computer.
parts, a magnet, and some patience. Amateurs with RF circuit and computer experience are · well-equipped to learn about NMR. I had to learn many new terms-like Larmor's Constant, FFI', FID, Tl, T2, and many others-before I was comfortable with this new field that uses RF and computer equipment to perform tasks which would have been material for science fiction stories not too many years ago. •
REFERENCES 1. H.J. Smith and F.N. Ranallo. A Non-Mathematica/ Approach to Basic MRI, Medical Physics Pub. Corp., 1989. 2. G.S. Waters, "A Measurement of the Earth's Magnetic Field by Nuclear Induction," Nature, 73:691, 1955. 3. E.L. Hahn, Physics Review 270: 80, 1950. 4. J.S. Rigden, Rabi Scientist and Citizen, Basic Books, Inc., 1989. 5. C.L. Stong, '"How amateurs can build a simple magnetic resonance spectrometer, Scientific American 200:171-178, April 1959. 6. G:E. Pake, "Magnetic Resonance," Scientific American, pages 58-66, August 1958. .
7. l.L. Pykett, "NMR Imaging in Medicine," Scientific American 246:78-88, May 1982.
If you're involved with music or speech processing applications with your computer, you've probably wished you could look at the frequency spectrum of your sampled signals. This may not be as difficult as you might guess, because here is a simple, straightforward fast Fourier transform (FFT) subroutine that can do the trick in just a few seconds.
A Microhistory of the Fast Fourier Transform
The analysis of waveforms for harmonic content has a long and fascinating history. Bernoulli and Euler developed the mathematics of the transform while experimenting
. with musical strings in 1728, nearly a hundred years before Jean Baptiste Fourier gave his name to the equations. Interest in prediction of the tides led Lord Kelvin to build a mechanical harmonic synthesizer that inspired the construction of increasingly complex mechanical harmonic analyzing machines. This trend culminated in the MaderOtt machine of 1931, which is on display at the Smithsonian Institute in Washington DC.
With the growth of the telephone and the communication industry came sampling theory and the discrete Fourier transform. At first, discrete Fourier transforms were hand calculated and tabular forms called "schedules" were soon employed to speed the process. With the development of digital computers in the 1940s this task became somewhat easier to perform. The number of calculations required still made the concept of real time discrete Fourier transforms unlikely even on the ever faster new computers.
Then in the 1960s a number of matrix theory mathematicians, including J W Cooley and J W Tukey, went back to the "schedules" and discovered that a great many of the terms were redundant and could be factored out. The procedure they evolved became known a~ the fast Fourier transform, which reduces the number of cal· \..Ulations to the point that special hardware can be built to perform the transform in real time and display the frequency spectrum continuously on a video display.
The Basic Concepts
A number of books have been published describing the mathematics of the fast Fourier transform in some detail. _-\ few of these contain sample programs in FORTRAN, ALGOL, or BASIC. However, the use of a high level language to perform th is computation not only costs a great deal in speed and efficiency, but also obsct;res the simple binary processes that characterize the algorithm. Since high level languages do not usually support bit manipulation, these processes can become almost as time consuming as the arithmetic.
Clearly, assembly language programming of the fast Fourier transform offers many advantages, but the literature seluom provides any examples of assembly level code to illustrate how the equations are implemented. Thus the prograrT' described in this article may well be the reinvention of someone else's "wheel "
The details of the inner workings of th.-: fast Fourier transforms are left to the t~chnical references, but the basic concepts are not
. difficult to grasp. The transform involves complex products which behave ;n the manner of the coordinates of a rotiting vector. When this vector is at angles which are multiples of 90 degrees, the sine and co-sine terms of the equations become+ 1, 0, or -1. Since terms containing these >.tiues do not require computed multiplication, the arithmetic becomes very simple. Other terms cancel each other out in order to simplify the equations at other angles. By factoring these terms our of the transform, many unnecessary calculations may be eliminated.
The input data may be thought of a> elements of an input matrix which will be multiplied by a transform matrix. The product is a matrix containing the transformed data. The redundant elements may be factored out of the transform matrix, converting ;t to the product of a number of simpler transforms. For an input array of 256 points, a discrete Fourier transform would requirl' 256 by 256 complex products or 262, 144 binary multiplications. The fast Fourier transform reduces th is to eight simpler tr an~-
. forms and ultimately requires 8 by 2 by 256 ·complex products, or 16,384 binary multiplications (l/16 the number of previous
.·multiplications). Even greater savings are reaJized as the number of points increases.
.·.. Each of the simplified transforms oper\:;, ates on the data in pairs of complex points. '. The real and imaginary parts of a pair are \ transformed and the new values placed back ·· in the array so that the transform is per
formed "in place." The algorithm then < moves on to the next pair until all pairs , have been transformed. The process is re-
peated for each of the eight stages of our •• 256 point transform, but on each pass the
··,distance between pairs is changed. On the first pass, adjacent points are
paired. After completing a pair the algorithm skips down to the next. In a sense, the data has been split into 128 adjacent 2 point transforms. These 128 groups are known as
cells. On each subsequent pass the distance between elements of the pair is doubled. In the second pass there are 64 cells, each four elements wide. On the final pass there is only one cell containing all 256 elements.
This process of forming pairs and cells causes the elements of the array to become scrambled. On the final pass the data is completely mixed up and must be sorted out before it can be used. The way it is scrambled is very interesting, though. If each element is assigned a binary number that represents its location in the array, the scrambled data makes it appear that the computer has read this binary address backwards. It is as if the binary word were swapped end for end so the most significant bit (MSB) appears where the least significant bit (LSB) should be.
This rearrangement of the data may be corrected by swapping each data point with its bit reverse addressed mate. The procedure
Figure 7: Fast Fourier transform of a square wave using the author's technique. The real (or sine) part of the transform is shown in (a). The imaginary (or cosine) part of the transform is shown in (b). The resulting transform is at (c). The resulting transform values are normally found by taking the square root of the sum of the squares of the cosine and sine elements. In order to save computational time, however, the author takes the sum of the absolute values of the terms, which introduces slight errors into the relative magnitudes of the components.
Listing r:~ Routine in 6800 assembly language to perform u 256 point fast Fo11tier transform.
NAM FFTll2 OPT O,S,NOGEN
********************** ** FAST FOURIER ** ** TRANSFORM ** ** SUBROUTINE ** ********************** ** BY R. H. LORD ** ** 21 APRIL, 1978 ** ********************** ** ** THIS SUBROUTINE. PERFORMS A 256 POIIH FFT ** ON THE DATA IN THE INPUT [>ATA TABLE. ** INPUT DATA IS ASSUMED TO BE TWO'S COMPLEMENT. ** THE SUBROUTIHE GENERATES A COSINE <REAU AND SINE ** ( Ir1AGINAR'1') DATA TABLE AT "REAL" AN[> "!MAG"
. ** THE RESULTANT TRANSFORM DATA IS 128 POINTS ** SYMMETRICALLY REFLECTED ABOUT THE CENTER OF ** THE 256 POINT TABLE. ** ** THE SUBROUTINE ASSUMES THAT THE INPUT DATA ** IS ALL REAL AND THEREFORE DOES t~OT MANIPULATE ** THE IMAGINARY PORTION UNTIL AFTER THE FIRST ** PASS. ** ** ALL DATA AREAS MUST BE ON PAGE BOUNDARIES <XX00) ** SINCE THE ROUTINE MANIPULATES ONLY THE LSB'S. ** ** THE HJO'S COMPLEMENT MULTIPLICATION IS KEPT AS A ** SEPARATE SUBROUTINE. IT MA'1' BE PERFORMED WITH
· ** A CONVENTIONAL SOFTWARE MUL TIPL'r' SUBROUTINE ** OR WITH A HARD~lARE MULTI PLIER FOR HIGHER SPEED. ** . ** THE SUBROUTINE SCALES THE DATA ~lHENEVER
** IT ANTICIPATES OVERFLOW. THE SCALE FACTOR ** CO!JNT IS AVAILfiBLE IN "SCLFCT". ** ** ** ** ********************** ** DATA AREAS ** **********************
SINE TABLE POINTER CELLS FOR THIS PASS CELL COUNTER FOR PASS PAIRS/CELL CELL OFFSET<DISTANCE) ANGLE INCREMENT SCALE FACTOR CTR. TEMPORARY COSINE TEMPORARY SINE TEMP. REAL DATA TEMP. IMAG DATA MULTIPLY MSB MULTIPLY LSB SOFTWARE MP'1' ACCUM.
is called "bit swapping" and may be performed either at the end of the fast Fourier transform or before it is begun. The pretransform swap is more convenient because less points need be swapped and because the vector rotation within each cell is simpler. In the posttransform version the vector angles would also have to be bit swapped.
Implementation
Now that we have looked at the concept, let us look at how it can be implemented. The algorithm has been written as a subroutine (see listing 1) to be called by a signal gathering and display program. It assumes that this program has stored some time dependent data in 2's complement form and that a 256 byte sample of this is to be transformed to the frequency domain.
The fast Fourier transform subroutine begins with an address lookup table for the data area~. This table makes the reassignment of these areas very simple. The INPUT data area may be anywhere in memory, but the SINE, REAL, and !MAG arrays must be at address page boundaries (ie: at hexadecimal XXOO). and REAL and I MAG must be in adjacent pages forming a continuous 512 byte block. These restrictions greatly simpli· fy address calculation within the program. SINE is the address of a 256 byte sine and cosine lookup table which must be loaded in with the transform subroutine.
The first instruction of the subroutine clears the variable SCLFCT which keeps track of the number of times the data nas to be scaled to prevent overflow. The !MAG array is then cleared and at MOVE the INPUT data is copied into REAL, where the transform will take place. The data is then prescrambled to put it in bit reverse crder. · for the transform process. The bit reversed address is calculated by rotating the least significant bit of the address into the carry and rotating the reversed address out in the opposite direction. The new address is compared with the first address to prevent swapping the data back to the original order, then the two array elements are exchanged.
Once the swapping is complete, the data is ready to be transformed. The fast Fourier transform is performed in eight separate passes; before each pass begins, the dat'" is tested by SCALE to prevent any overflow. For the first pass there are 128 cells formed by adjacent pairs of data. In this pass the vector angle steps in multiples of 180 degrees. This means that all the sine terms are 0 and the cosine terms are either + 1 or -1. Also there is no data yet in the !MAG array. The general equations thus become greatly simplified and the pass is reduced to addition and subtraction among elements of the
** START OF TRANSFORM ** *****************************
ORG BRA
$0200 START JUMP AROUND PARAMETERS
***************************** ** ADDRESS LOOK-UP TABLE ** ** FOR DATA AREAS ** ***************************** INPD FDB INPUT SET UP DATA AREAS REAL FDB REALT IMAG FDB IMAGT SINE FDB SINET
***************************** **
00087 020A 7F 002F START CLR SCLFCT NOTHING SCALED YET 00088 ** 00089 ***************************** 00090 . ** INPUT DATA SET-UP ** 00091 ***************************** 00092 020D FE 0206 CLEAR LDX · IMAG CLEAR OUT IMAG. 00093 0210 5F CLR B SET UP COUNTER 00094 0211 6F 00 CLR1 CLR 0,x CLEAR MEMORY 00095 0213 08 INX
· 00096 0214 SA DEC B ' 00097 0215 26 FA . 00098 0217 FE 0202 MOVE
***************************** ** PRE-TRANSFORM BIT SWAP **
00112 ***************************** 00113 0231 FE 0204 LDX REAL SET UP DATA PO INTERS 00114 0234 DF 20 STX RLPT1 00115 0236 DF 22 , STX RLPT2 00116 0239 cg 08 .~BITREV LDA B #8 00117 023A 96 21 LDA A RLPT1+1
··, 00118 023C 46 BRV1 ROR A
SET BIT COUNTER GET POUHER 1 REVERSE BIT ORDER FOR SECOND POINTER COUNT BITS
. 00119 023D 79 0023 ROL RLPT2+1 00120 0240 SA DEC B 00121 0241 26 F9 BNE BR'./1
)i ~;·;\,,, 00122 0243 96 23 LDA A RLPT2+1 GET REVERSED B~'TE •,'.!;t., 0: ~/ 00123 0245 91 21 CMP A RLPT1 +1 COMPARE ~JI TH #1 i' '· '.<·i 00124 0247 25 0E BCS S~JP1 BRANCH IF ALREADY SWAPPED
~":?'f'i 00125 0249 DE 20 S~JAP LDX RLPT1 GET POINTER 1 y?<'!: 00126 0248 A6 00 LDA A 0, X GET VAL 1 '.•::{~fA\ 00127 024D DE 22 LDX RLPT2 GET PO I !HER 2 , "·;:''"': 00128 024F E6 00 LDA B 0, X GET VAL 2 ;}_r{{i~00129 0251 A7 00 STA A 0, X REPLACE WITH VAL 1 :·"!';{;00130 0253 DE 20 LDX RLPT1 GET FIRST POINTER
00131 0255 E7 00 . . STA B 0, X COMPLETE SWAP ,00132 0257. 7C .0021 SWP1 INC RLPT1+1 DO NEXT POINT PAIR 00131 025A 26 DC . ;· BNE BITREV UNLESS ALL ARE DONE
:r:m~~l, ... ··.; ~~~;:ill;~=~~;;~;=:~~ 00138 r:·:···'f¥:',. \i :;, .... ** · ARE MULTIPLES OF 180 DEG. ** 00139 11"'·--~~·ff': >".'; **. THERE ARE NO PRODUCT TERMS. ** 00140 • ' :·{ ·;_ ":·:· .,. ,; **' AND NO IMAGINARY TERMS YET ** 00141 . ' fttt 1~· ,.~'1; 0 ** HENCE A FAST VERSION OF PASS 1 ** 00142 :,;/ ·' ·'·•.~··' .. '•'· "·.~\ ************************************* 00143('02sc. BD· 0313 PASS1 JSR . SCALE . SCALE IF ANY OVER-RANGE DATA . . "t/r;;;gL ·. . ..
~J(~.::Z.'~~-=.~~~~:.~·. I~ . :~?- ~
REAL array. Considerable time is saved by making this pass separate and bypassing the unneeded table lookup and multiply routines.
Once this pass is completed, the arithme· tic gets much more complex. The remaining seven passes are performed by a general fast Fourier transform algorithm. It begins at FPASS by setting up 64 cells of four elements with the pairs separated by two units. The vector angle is set to increment by 90 degrees by setting DELTA to 64. At NPAS': the pointers are set up for the first cell and the pass then begins with a sine and cosine table lookup. The complex data pair is then processed using the standard fast Fourier transform equations:
After each pair has been transformed tht~ angle is incremented by DELTA and th:; next pair processed. When all pairs in a ceF have been transformed the rou;:ne moves down to the next cell and returns to NCELi.. to continue the process. When tht last eel! has been done, CELCT becomes 0 and th;:~
pass is complete. At the end of each pass the number of
cells and the angle increment arc divided it, half and the pair separation and number of pairs per cell are doubled. The whole process is then repeated by branching to NP ASS until the end of the last pass wher. the num· ber of cells becomes 0. The routine then branches to DONE and returns to the calling program.
The SCALE subroutine is used to anticipate and prevent overflow of the 8 bit data. It is called before each pass and begins by testing the value of each data point. if any point exceeds the range of -64 to +64 the subroutine branches to SCL4 where the en- . tire array is scaled down by a factor of 2. The variable SCLFCT is incremented to indicate the total number of times the data has been scaled.
The multiply routine has been placed at the end of the program to make substitution of other versions easy. The original program was written for a hardware multiplier similar to the device described by Bryant and Swasdee in April 1978 BYTE, page 28. To eliminate the need for such exotic hardware, a software multiply routine has been substituted with some increase in transform time. After the multiplication is completed
·.--,'.
·--··"""~""'""' ·····-·~ ........
'.t.-_·
~ Listing 7, continued:
00144 025F FE 0204 LDX REAL SET I.JP POINTERS the data must' be scaled up by a factor of
00145 0262 DF 20 STX RLPT1 2. This is becausF the sine and cosine terms
00146 0264 DE 20 PA1 LDX RLPT1 GET POINTER represent fractional binary values. Tfie least
00147 0266 A6 00 LDA A 0, x GET RM significant bit is shifted in from the iower 00148 0268 E6 01 LDA B 1 .• x AND F:N byte to preserve accuracy. 00149 026A 36 PSH A SAl/E F:M 00150 026B 1B ABA RM'=RM+RN 00151 026C A7 00 STA A 0,x STORE NEW RM' Analyzing the Results
00152 026E 32 PUL A GET OLD RM 00153 026F 10 SBA RN'=RM-RN After working with all this mathematics
00154 0270 A7 01 STA A LX STORE RN' and software, what do you end up with? We 00155 0272 7C 0021 INC RLPT1+1 MOl/E TO NEXT PAIR started with a 256 point time domain sample 00156 0275 7C 0021 INC RLPT1+1 00157 0278 26 EA BNE PA1 KEEP GOING TILL DONE
in REAL. The fast Fourier transform con-
00158 ******************************** verts this to a frequency domain sample cor-
00159 ** COMPUTATION OF FFT ** responding to the spectrum of the input.
00160 ** PASS 2 THRU N ** The first element of each array represents
(10161 ******************************** the DC component of the input. The next 00162 027A 86 40 FPASS LDA A 1164 SET UP PARAMETERS element represents the sine wave with period 00163 027C 97 2A STA A CELNUM FOR CELL COUNT 00164 027E 97 2E STA A DELTA AND ANGLE
equal to the duration of the input sample.
00165 0280 86 02 LDA A 112 AND FOR Each remaining element depicts a multiple
00166 0282 97 2C STA A PAIRNM PAIRS/CELL of this frequency until the middle of the
00167 0284 97 2D STA A CELDIS DISTAtKE BEnJEEN PAIRS array is reached, representing 128 cycles per
00168 0286 BD 0333 NPASS JSR SCALE KEEP DATA IN RANGE period. The remainder of the array is sym-00169 0289 96 2A LDA A CEU~UM GET NUMBER OF CELLS metrical to the first 128 points. 00170 0288 97 2B STA A CELCT PUT IN COUNTER 00171 028D FE 0204 LDX REAL SET UP POINTERS
Each element in the REAL and !~AG
00172 0290 DF 20 STX RLPT1 arrays represents informat101 about one fre-
00173 0292 DF 22 STX RLPT2 quency component of the input sample. But
00174 0294 FE 0206 LDX IMAG why do we end up with two arrays, and 00175 0297 DF 24 STX IMPT1 what do the cosine terms of REAL and the .00176 0299 DF 26 STX IMPT2 sine terms of lMAG really mean to Ls? c.:su-00177 029B FE 0208 NCELL LDX SINE 00178 029E DF 28 STX SINPT
ally this information is described in terms of . . amplitude and phase of the component. and
00179 02A0 06 2C - LDA B PAIRNM GET PAIRS/CELL CTR.
··+ 00180 02A2 96 21 NC1, LDA A RLPT1+1 GET POINTER 1 LSBY often the phase information is of little inter-
00181 02A4 9B 2D ADD A CELDIS ADD PAIR OFFSET est. The cosine and sine terms represent the 00182 02A6 97 23 STA A RLPT2+1 SET BOTH POINTER 2'S X and Y components of a vector with 1ength 00183 02A8 97 27 STA A. IMPT2+1· and angle equal to the ampiitude and phase 00184 02AA 37 PSH B SAl/E PAIR CTR 00185 02AB DE 28 LDX SINPT SET UP SINE LOOKUP terms that we are after. All we have to do is
00186 ,02AD.A6 00:. ··. LDA A 0, x GET COSINE OF ANGLE find the length of the vector from the square
00187 02AF 97 30 STA A COSA SAVE ON BASE PAGE ·root of the sum of squares of the cosine and
.. 00188 0281 A6 40 LDA A 64,X GET SINE sine terms . 00189 0283 97 31 STA A SINA AND SAVE IT The only problem is th2t this calculation ~0190 02B5 DE 22 LDX RLPT2 GET "REAL" POINTER 2 requires almost as much time as the trans-. 00191 02B7 A6 00 LDA A 0,x GET RN 00192 02B9 36 PSH A SAVE IT
form, due to the square root. If we bypass
00193 02BA D6 30 LDA B COSA GET COSINE the root and display the sum of squares (the
00194 02BC BD 036A JSR MPY MAKE Rt~*COS<A> power spectrum) we miss most of the detail
00195 02BF 97 32 STA A TREAL. SAVE IT of the lesser components. I have found that 00196 02C1 32 PUL A RESTORE RN the highly unmathematical solution of dis-00197 02C2 06 31 LDA B SINA GET SINE playing the sum of the absolute values is fair-00198 02C4 BD 036A JSR MPY RN*SIN<A) 00199 02C7 97 33 STA A Tlt1AG
ly satisfactory, although it introduces some
00200 02C9 DE 26 LDX IMPT2 GET !MAG. POINTER 2 error in the relative amplitude of peaks. This
00201 02CB A6 00 LDA A 0,x GET IN value is then sent to a digital to analog con-
00202 02CD 36 PSH A SAVE IT verter for display on an oscilloscope. 00203 02CE D6 31 LDA B SINA GET SINE 00204 02D0 BD 036A JSR MPY lN*SINlA) Putting the Fast Fourier Transform to Work 00205 02D3 9B 32 ADD A TREAL TR=RN*COS+IN*SIN 00206 02D5 97 32 STA A TREAL 00207 02D7 32 PUL A RESTORE IN This program has a number of interesting
00208 0208 D6 30 LDA B COSA GET COSINE applications for speech recognition, image
00209 02DA BD 036A JSR MP'1' lN*COS(A) processing, and the synthesis of musical in-00210 02DD 90 :n SUB A TI MAG Tl=IN*COS-RN*SIN struments. A recent issue of The Computer 00211 02DF 97 33 STA A TI MAG 00212 02E1 DE 20 LDX RLPT1
Music journal even describes a program for
00213 02E3 A6 00 LDA A 0,x GET Rl1 transcribing recordings back into sheet music
00214 02E5 16 TAB SAVE IT (see bibliography, page 118).
''ifi{;'. Purchasing a microcomputer system, even at ri?T today's lo~ prices'. is a significan~ investment. · ,,>>.And to ubhze that investment to its full extent
.'7-':_
· requires a solid base in system software. Don't · jutit 4ccept what comes with your hardware ...
there's a better alternative!
... · . , . ,. OPUS/ONE: Business-oriented, block·struc· ':\{&~>'· lured . high-level language. Includes such · · .. ' .. '.J~ C::apabilities as extended arithmetic precision ' <,' (up to 55 digits), multi-character variable
·f,• names, and easy to use string operations. -:> I~c1udes a built-in DOS with random access '"' files. ) . OPUS/ONE ..•................... $99.00
... ~. :. ·:
?:i'
OPUS/TWO: Extends the capabilities of OPUS/ONE with such features as. error trapping, machine code and OPUS subroutine
' . calls, overlays, and more disc file commands. OPUS/TWO .................... $195.00
~J>~i::·:: TEMPOS: The ultimate microcomputer ~~Y::.~.··· .>system software.package. A multi-user/multi,,:· ::;,,. ·: tasking OOS which will handle up to 7 ;:;; . .-; , .. interrupt-driven terminals simultaneously, in a ~-1· ~· true time-sharing environment. Includes
~'..:: .' ~~S~~l~:;;~~~~ED, ASSEMBL, and
~!\:.·" : -.. '" TEMPOS ...... ". ................ $785.00 i· ' · ,: . . All packages are upward-compatible. That is; ~!g, :}":, >: ,· programs and data developed under ~'t'.:\;if:' OPUS/ONE may be run at any higher level, up [}. -:~:~j-~,.(~j; to and including TEM~O~. . :. , , . ~!.(;:,,_ , {"i. Standard device drivers are available for many ;t: if'!··~/. common peripherals; all packages include
,/~/~' System .Genera!ion capabil.ity, allowing the : · c::;;;. user to mteractiuely add drivers for any 1/0 ' ' .. ':'"•device, including disc drives
/;;:{,like to know more? Circle the inquiry number ,_., below or contact your dealer for your free
'.:_c;opy of our system software brochure! For ;'~ iclQrmatioo. Qf~ your user's mr.ll~ ~and~"!.~~~""@ roward ~'iti'.N:~~ P°'lr'<!So!:'l\.~'.h.511::1!!: ·~~~u~·~~~
. To get meaningful information from the \~f transform, the input data must be sampled
''judiciously. While this program in theory is •capable of analyzing 128 harmonics of a given sample, this is only true when the input represents exactly one complete cycle of the waveform being analyzed. Most data just doesn't come packaged that way.
To accurately measure the pitch of a sound you must sample many cycles. To
···,. analyze harmonics you want to sample few. The best result for real data will always be a compromise between range (bandwidth) and resolution. Both can be increased only by analyzing more points, which takes more time.
After experimenting with one sample at a ' time you will probably want to try continu·
ous analysis. The input data pointer at hexa· decimal address 0202 can be moved through an input buffer by the program that calls the transform. At roughly three seconds per transform, the data cannot suitably be ana· lyzed in real time. A sample of a few seconds of data can be continuously analyzed and the changes slowly displayed. This is proba· bly most easily accomplished by transferring the "sum of absolute value" data to a dis· play buffer which is then scanned by an
,)}-'--.,, interrupt driv~n display program.
Bigger, Better, and Faster
Like most software, this program exists
l; • ~:!r:~:~~:r~~~~;~,~~:::7~,:~r:: iii plier took slightly under one second. This I:'·· . relatively minor improvement was probably
~,:,k,.·.:l.l .. ·.:·'.·.····. ·.· :~~a~~~:~~t~~l t~~~1~~~~.1~:FtpD~t~:~:~: ~·, display can be created. I plan to try a version ~~~> . for the 6502 microprocessor with hope of i;:;'~. · adding still more speed.
The algorithm is simple enough so that . lJ_. · conversion should be easy. Enterprising
~.~:.-,·,·~.· ; 8080 and Z-80 enthusiasts shouldn't have ~· too much trouble adapting the' principles to .'.\(, . their computers, either. < Conversion to
i~[, . :~~~~ :i~~c~s~opnos~~l;,~Tth~ug~ ~~: p~~;~~~ ~'. ~~~~e;~ing scheme would have to be aban·
t:: . I hope this program will provide you with ~; a tool that will be a lot of fun to play with. :e\ . Please write and tell me what uses you find ~: ,~or it and any improvements you would like , . .o suggest.
Continued on page 118
Listing 7, continued:
00286 035C 44 LSR A DIVIDE IT BY 2 00287 03~:.D 80 40 SUB A 11$40 MAKE IT 2'S COMP. 00288 035F A7 00 STA A 0, x 00289 0361 08 INX BUMP PO ItffER 00290 0362 5A DEC B NEXT POitff 00291 0363 26 F3 BNE SCL6 00292 0365 33 PUL B 00293 0366 5A DEC B NEXT PAIR 00294 0367 26 EC BNE SCL5 00295 0369 39 RTS RETURN 00296 ******************************** 00297 ** 2'S COMP. MULTIPLY SUBR. ** 00298 ******************************** 00299 036A 97 37 MPY STA A t1PA+1 STORE MULTI PLIER 00300 036C 07 39 STA B MPA+3 AND MULTIPLICAND 00301 036E 4F CLR A 00302 036F 97 36 STA A MPA CLEAR MSB'S 00303 0371 97 38 STA A t1PA+2 00304 0373 97 34 STA A MSB'r' CLEAR PRODUCT 00305 03'.75 97 35 STA A LSBY 00306 0377 5D TST B 00307 0378 2C 03 BGE MPY1 NEGATIVE MUL TIPLICAtW ? 00308 037A 73 0038 COM MPA+2 EXTEND NEG TO MSB 00309 037D 70 0037 MPY1 TST MPA+1 00310 0380 2C 03 BGE MPY2 NEG MULTIPLIER ? 003'.11 0382 73 0036 COM MPA EXTEND NEG TO MSB 00312 0385 C6 0F t1P'r'2 LDA B #15 SET UP COUNTER 00313 0387 77 0036 MPY3 ASR MPA SHIFT X RIGHT 00314 038A 76 0037 ROR MPA+1 00315 038D 24 0C BCC MPY4 BIT WAS ZERO 00316 038F 96 39 LDA A 'MPB+3 ADD Y TO PRODUCT 00317 0391 9B 35 ADD A LSBY 00318 0393 97 35 STA A LSB'r' 00319 0395 96 38 LDA A MPA+2 MSB'S 00320 0397 99 34 ADC A MSB'r' 00321 0399 97 34 STA A MSBY 00322 0398 78 0039 MPY4 ASL MPA+~· SHIF.T 'r' LEFT 00323 039E 79 0038 ROL MPA+2 00324 03A1 :-.A DEC B 00325 03A2 26 E3 Bt~E MPY3 00326 ** 00327 ** SCALE IT UP ** 00328 ** 00329 03A4 96 34 LDA A MSBY 00330 03A6 79 0035 ROL LSBY 00331 03A9 49 ROL A (10332 ** 00333 ** RETURN m TH PRODUCT IN A 003~4 ** 00335 03AA 39 RTS 00336 ******************************** 00337 ** mo OF FFT PROGRAM ** 00338 ******************************** 00339 END
1. Brigham, E Oran, The Fast Fourier Transform, Prentice-Hall, Englewood Cliffs NJ, 1974.
2. Bryant, J, and Swasdee, M, "'How to Multiply in a Wet Climate," BYTE, volume 3, number4, April 1978, page 28.
3. Cooper, James W, The Minicomputer in the Laboratory, John Wiley and Sons Inc, New York, 1977. .
4. Moorer, J, "On the Transcription of Musical Sound by Computer," Computer Music Journal, volume 1, number 4, November 1977,
. page 32. . 5. Stearns, Samuel D. Digital Signal Analysis,
Hayden Book Co Inc, Rochelle Park NJ, 1975.
Listing 2: The object code listing in hexadecimal format of the assembly language program given in listing 1. This listing can be used to manually enter the program or as a confirmation copy for the PAPERBYTEtm bar code representation given in figure 2. The format used for this listing is a 2 byte address field, followed by up to 76 bytes of data, with a l byte check digit at the end of each line. Note that the data in hexadecimal locations 0400 to 04FF constitute the sine and cosine lookup table which must be loaded with the transform subroutine.
0200 20 08 08 00 OS 00 06 00 04 00 7F 00 2F FE 02 06 Fl 0210 SF 6F 00 08 SA 26 FA FE 02 02 DF 20 FE 02 04 DF 34 0220 22 DE 20 A6 00 08 DF 20 DE 22 A7 00 7C 00 23 26 39 0230 FO FE 02 04 DF 20 DF 22 C6 08 96 21 46 79 00 23 58 0240 SA 26 f9 96 23 91 21 25 OE DE 20 A6 00 DE 22 E6 Al 0250 00 A7 00 DE 20 E7 00 7C 00 21 26 DC BD 03 33 FE IC 0260 02 04 DF 20 DE 20 A6 00 E6 01 36 IB A7 00 32 10 CA 0270 A7 01 7C 00 21 7C 00 21 26 EA 86 40 97 2A 97 2E 3E 0280 86 02 97 2C 97 2D BD 03 33 96 2A 97 2B FE 02 04 88 0290 DF 20 OF 22 FE 02 06 DF 24 DF 26 FE 02 08 DF 28 ID 02AO D6 lC 96 21 9B 2D 97 23 97 27 37 DE 28 A6 00 97 73 02BO 30 A6 40 97 31 DE 22 A6 00 36 D6 30 BD 03 6A 97 81 02CO 32 32 D6 31 BD 03 6A 97 33 DE 26 A6 00 36 D6 31 4o 02DO BD 03 6A 9B 32 97 32 32 D6 30 BD 03 6A 90 33 97 7C 02EO 33 DE 20 A6 00 )6 9B 32 A7 00 DE 22 DO 32 E7 00 4A 02FO DE 24 A6 00 16 9B 33 A7 00 DE 26 DO 33 E7 00 96 B7 0300 29 9B 2E 97 29 7C 00 21 7C 00 2S 33 SA 26 93 96 CC 0310 21 9B 2D 97 21 97 25 7A 00 2B 27 03 7E 02 98 74 BB 0320 00 2A 27 OC 78 00 2C 78 00 2D 74 00 2E 7E 02 86 4E 0330 39 00 00 FE 02 04 SF 37 C6 02 A6 00 08 81 CO 22 AC 0340 04 81 40 24 08 SA 26 F2 33 SA 26 EB 39 33 7C 00 E9 03SO 2F FE 02 04 SF 37 C6 02 A6 00 8B 80 44 80 40 A7 ED 0360 00 08 SA 26 F3 33 SA 26 EC 39 97 37 D7 39 4F 97 17
0400 7F 7F 7F 7F 7F 7F 7E 7E 7D 7D 7C 7B 7A 79 78 77 C9 0410 76 75 73 72 71 6F 6D 6C 6A 68 66 6S 63 61 SE SC A4 0420 SA S8 S6 SJ SI 4E 4C 49 47 44 41 3F JC 39 36 33 78 0430 31 2E 28 28 2S 22 IF IC 19 16 12 OF OC 09 06 03 A2 0440 00 FD FA F7 F4 Fl EF. EA E7 E4 El DE DB D8 D5 02 BF 04SO CF CD CA C7 C4 Cl BF BC B9 B7 B4 B2 AF AD AA A8 Bl 0460 A6 A4 A2 9F 9D 9B 9A 98 96 94 93 91 8F SE 8D 8B 78 0470 8A 89 88 87 86 8S 84 83 83 82 82 81 81 81 81 81 40 0480 81 81 81 81 81 81 82 82 83 83 84 85 86 87 88 89 37 0490 8A SB 8D SE SF 91 93 94 96 98 9A 9B 9D -9F A2 A4 5C 04AO A6 A8 AA AD AF B2 B4 B7 B9 BC BF Cl C4 C7 CA CD ~8
04BO CF D2 D5 DB DB DE El E4 E7 EA EE Fl F4 F7 FA FD SE 04CO 00 03 06 09 OC OF 12 16 19 IC IF 22 25 28 28 2E 71 04DO 31 33 36 39 JC 3F 41 44 47 49 4C 4E 51 S3 S6 S8 4F 04EO SA SC SE 61 63 6S 66 68 6A 6C 6D 6F 71 72 73 7S 88 04FO 76 77 78 79 7A 7B 7C 7D 7D 7E 7E 7F 7F 7f 7F 7f CO
o o o o o o o o o o n o o o o o o o o ! 0 0 0 0 0 0 0 0 0 I I I I I I I I I 0 I 2 3 4 ·5 6 7 8 9 0 I 2 3 4 5 6 7 8
o n o o o o o o o o o o o o o o o o o o o I 2 l 2 2 2 2 2 2 2 2 3 3 l 3 3 J 3 3 l 3 9 D 2 3 4 5 6 7 8 9 0 I 2 3 4 5 6 7 8 9
0 () () 2 2 2 0 I 3 0 A 2
--=== ~=
1--~ -~
-=
0 () 0 2 2 2 4 6 7 B 3 C
'
0 0 () 0 () () 0 () () () 0 () 0 0 (l () 0 0 0 0 () 0 0 0 2 2 2 2 2 3 3 3 J 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 9 A C D ~ 0 2 3 5 6 8 9 0 I 2 4 5 7 8 A B D E F 4 B 3 B 3 B 3 C 4 C 4 C 0 6 E 6 C 3 C 4 A 2 A F
~UARTERLY THE JOURNAL OF COMMUNICATIONS TECHNOLOGY
Winter 1996
• Optical Communications B Oscillators with Low Phase Noise and Power Consumption • Try NMR with Your Old CW Rig • • NEC-WIN BASIC for Windows-A Review • Ulysses Verifies the Shape of the Interplanetary ·;'i\ Magnetic Field
• Simple and Inexpensive High-Efficiency Power Amp • The MRF-255 RF Power Field-Effect Transistor • Fractal Loops and the Small Loop Approximation • Factors in HF-ARQ System Throughput • Instruments for Antenna Development and