16.11.2012 Views

EEG/ECG data fusion using Self-Organising Maps

EEG/ECG data fusion using Self-Organising Maps

EEG/ECG data fusion using Self-Organising Maps

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>EEG</strong>/<strong>ECG</strong> <strong>data</strong> <strong>fusion</strong> <strong>using</strong> <strong>Self</strong>-<strong>Organising</strong> <strong>Maps</strong><br />

Nuno Bandeira 1 , nb@di.fct.unl.pt<br />

Victor Sousa Lobo 2,1 , vsl@di.fct.unl.pt<br />

Fernando Moura-Pires 1 , fmp@di.fct.unl.pt<br />

1 Computer Science Department, Faculty of Science and Technology / New<br />

University of Lisbon, Portugal<br />

2 Portuguese Naval Academy, Lisbon, Portugal<br />

Abstract<br />

Empirical results are presented concerning<br />

<strong>data</strong> <strong>fusion</strong> performed over several<br />

combinations of <strong>EEG</strong>/<strong>ECG</strong> channel readings of<br />

sport shooting athletes. Our purpose in applying<br />

different <strong>data</strong> <strong>fusion</strong> approaches was that of<br />

finding a satisfactory set of features, such that<br />

would allow us to build adequate classifiers on<br />

the <strong>data</strong>. The resulting <strong>data</strong> sets were used for<br />

building SOMs (<strong>Self</strong>-<strong>Organising</strong> <strong>Maps</strong>), used<br />

for visual inspection of coherence between<br />

clusters found and shooting accuracy.<br />

Keywords: <strong>Self</strong>-<strong>Organising</strong> <strong>Maps</strong>, <strong>EEG</strong>, <strong>data</strong><br />

<strong>fusion</strong><br />

1. Introduction<br />

According to sport shooting experts, the<br />

shooter’s ability to concentrate on the shooting<br />

task is crucial in improving one’s performance,<br />

once high physical technique levels have been<br />

achieved (steady body position, respiration,<br />

muscular and eye-movement control). Since<br />

concentration is mainly a cerebral activity,we<br />

conducted an experiment where <strong>EEG</strong> and <strong>ECG</strong><br />

signals were read and digitised in real-time<br />

during the shooting activity. Previous work (see<br />

[9]) suggested that these could be good<br />

indicators of concentration.<br />

Once we had all the <strong>data</strong> (around 80Mb -120<br />

Mb per shooting session), we had to devise<br />

adequate pre-processing techniques in order to<br />

handle the high volume of <strong>data</strong>. Many<br />

techniques are known for transforming <strong>EEG</strong><br />

<strong>data</strong> into feature vectors suitable for clustering<br />

and classification [2][10][11][3]. We opted for<br />

the use of Fast Fourier Transforms (FFT) as<br />

described in the next section.<br />

But the best that the FFT could give us were<br />

different types of channel spectra, therefore<br />

resulting in 20 spectra per shot, one per <strong>EEG</strong><br />

channel. Since we wanted to apply SOMs to<br />

visually inspect potential hidden relations in our<br />

<strong>data</strong>, we also had to find ways of merging all<br />

channels into single feature vectors. Different<br />

approaches were tried and are described in<br />

sections 4 and 5.<br />

2. <strong>EEG</strong>/<strong>ECG</strong> signal acquisition<br />

and pre-processing<br />

The subjects from which we recorded our <strong>data</strong><br />

are shooters from the sport shooting team of the<br />

Portuguese Navy. So far we have recorded <strong>data</strong><br />

from 7 such shooters, but because of difficulties<br />

with the recording software, in this paper we<br />

only present the results of shooters numbers 3<br />

to 7. Each shooter spent one morning at a<br />

shooting range, firing up to 12 rounds of 5<br />

shots. For each shot, besides the <strong>EEG</strong> and <strong>ECG</strong>,<br />

we kept the target, and classified the shot<br />

according to the score obtained (10 is right on<br />

the centre, 0 is outside the target). We then<br />

considered that shots with a score of 9 or 10<br />

were good, 7 or 8 were average, and up to 6<br />

were bad.<br />

The electrodes were placed according to the<br />

standard 10-20 system [7][8].<br />

The electrode leads are connected to a<br />

Braintronics ISO1032 preamplifier, that sends<br />

the signal to a Braintronics CONTROL 1032<br />

amplifier. There the signals are amplified,<br />

filtered by a 50Hz notch filter and a 4 th order<br />

70Hz low-pass filter. A DATA TRANS-<br />

LATION DT2821 ADC board is then used to<br />

digitise the resulting signals.<br />

The recorded <strong>data</strong> consists of 22 signals,<br />

recorded with 12 bit resolution and a 512Hz<br />

sampling rate. Channel 22 is the <strong>ECG</strong>, from


where the heart beat rate is extracted <strong>using</strong> a<br />

simple spectra based algorithm. Channel 18 is<br />

the signal of the right ear, that is used as<br />

reference for the differential amplifiers, and<br />

thus contains no information. The remaining 20<br />

channels are all subject to the same initial preprocessing.<br />

First, the last 5 seconds before the<br />

shot are selected (2.5K points). This signal is<br />

then broken up into 9 blocks of 512 points, with<br />

50 % overlap between them (so as to later<br />

obtain a Walsh periodogram). Each of these<br />

blocks is then multiplied by a Hamming<br />

window to reduce frequency leakage, and it’s<br />

spectrum is calculated with a 512 point FFT.<br />

Thus each channel produces 9 spectra with 256<br />

bins of real frequencies and a width of 1Hz.<br />

Since we used a 70Hz low-pass filter and<br />

standard <strong>EEG</strong> bands range from 1-30Hz we<br />

opted for <strong>using</strong> only the lower 30 bins.<br />

Thus, when all information is used, we have<br />

20 <strong>EEG</strong> channels with 9 spectra of 30 bins,<br />

totaling 5400 <strong>EEG</strong> features, plus one heart beat<br />

rate feature. All subsequent pre-processing is<br />

done on this <strong>EEG</strong> <strong>data</strong>.<br />

3. SOM - <strong>Self</strong> <strong>Organising</strong> <strong>Maps</strong><br />

<strong>Self</strong>-<strong>Organising</strong> <strong>Maps</strong>, also known as<br />

Kohonen <strong>Maps</strong>, in honour of its creator, are<br />

thoroughly described in [5] and have been<br />

widely used in many applications, including as<br />

a tool for <strong>data</strong> <strong>fusion</strong> [4] (an excellent<br />

bibliography can be found in<br />

http://www.cis.hut.fi/nnrc/index.html). The<br />

SOM concept is based on the human brain’s<br />

cortex interactions, simplified in a model in<br />

which different prototypes (neurones) try to<br />

represent the input <strong>data</strong> by competing with each<br />

and every other neurone in every iteration, for a<br />

better mapping of the input <strong>data</strong>.<br />

The basic SOM algorithmic procedure is as<br />

follows:<br />

1. For a given training pattern x:<br />

1.1 Calculate the distance of each neurone to<br />

the training pattern x (Calculation phase)<br />

1.2 Find the neurone with smaller distance,<br />

and call it the winner W (Voting phase)<br />

1.3 Change the network neurones with a<br />

function G, which depends on the learning<br />

rate α, the distance d to W (in the output<br />

plane), and the neighbourhood function F.<br />

Due to the nature of the neighbourhood<br />

function, only the neurones closer to W (in<br />

the output space) will be changed. (Update<br />

phase)<br />

2. Update the learning rate α and the<br />

neighbourhood function F according to<br />

some rule<br />

3. Repeat steps 1 and 2 for the next training<br />

pattern, until some stopping criteria is<br />

reached.<br />

In all our analysis we ran our algorithms 6<br />

times with different initial values, to make sure<br />

that the process always converged to the same<br />

final map. Whenever this did not happen, we<br />

simply increased the number of iterations and<br />

the initial learning radius until a stable solution<br />

was found.<br />

A distributed SOM implementation was also<br />

used in building the maps for the largest <strong>data</strong>set<br />

(5401 features). A detailed description of this<br />

algorithm and its empirical evaluation can be<br />

found in [1].<br />

To visualise the results of the clustering<br />

performed by SOM, we frequently used Umatrices<br />

[12]. The U-Matrix of a SOM is<br />

obtained by calculating the distance, in the<br />

input space, between neighbouring neurones.<br />

These distances are then represented on a map<br />

in grayscale (black being the greatest distance,<br />

and white the smallest). Clusters can easily be<br />

identified as clear areas (nearby neurones)<br />

separated by dark ridges (large distances to<br />

other clusters).<br />

4. Data <strong>fusion</strong><br />

Since our main objective was finding an<br />

adequate set of features that would provide high<br />

visual correlation between the <strong>EEG</strong> signal and<br />

shooting performance, most of our work at this<br />

stage was concentrated on <strong>data</strong> <strong>fusion</strong>.<br />

Due to this fact, <strong>data</strong> <strong>fusion</strong> was performed<br />

<strong>using</strong> different types of feature aggregation,<br />

motivated by several different reasons. Each<br />

choice of feature aggregation led to a different<br />

training set, upon which the clustering<br />

procedure was applied.<br />

The training sets used were:<br />

I) All the features (1 set of 5401 features).<br />

In this training set, all features mentioned in<br />

Section 2 are used. It seems reasonable that<br />

this approach would capture the dynamics of<br />

the signal prior to the shot. In this set, the<br />

heart beat rate is also used.<br />

II) All average spectra. (1 set of 601 features).


In this training set, we averaged the spectra of<br />

each channel, and by doing so assumed that<br />

the signals are stationary during the 5 seconds<br />

before the shot. Each resulting spectrum is the<br />

average of 9 spectra, and thus the signal to<br />

noise ratio is improved considerably. In this<br />

set, the heart beat rate is also used.<br />

III) Average spectra separated by hemisphere (2<br />

sets of 330 features).<br />

In these training sets, we separated the <strong>data</strong> in<br />

right and left hemisphere. Each hemisphere<br />

consists of 8 <strong>EEG</strong> channels unique to that<br />

hemisphere, plus the three central channels<br />

(Fz, Cz, Pz [7][8]). This choice of features is<br />

motivated by the fact that the left and right<br />

sides of the brain are reasonably distinct and<br />

all but one of the shooters were right handed<br />

and used the right eye for aiming. We<br />

performed clustering on each side separately,<br />

and later merged the results.<br />

IV) Average spectra by channel (19 sets of<br />

30 features).<br />

In these training sets, we used the spectra of<br />

each channel as a separate training set. By<br />

analysing the ability to cluster the <strong>data</strong><br />

sensibly, based on each channel<br />

independently, we tried to determine if there<br />

were any channels more relevant to the task at<br />

hand.<br />

V) Characteristic frequency bands (4 sets of<br />

120 features for the alpha band, 320 for beta,<br />

and 80 for delta and theta).<br />

In these training sets, power spectra within<br />

each band (alpha, beta, delta, and theta [6])<br />

were selected for all channels. Since each<br />

band has a different width, the number of<br />

features selected varies. According to classic<br />

literature in the area [6] these frequency bands<br />

correspond to well established activity<br />

patterns within the brain, and thus are the<br />

natural choice for discriminating between the<br />

shots.<br />

5. Decision <strong>fusion</strong><br />

Decision <strong>fusion</strong> was used for merging the<br />

results obtained in III and IV. The generated<br />

<strong>data</strong>sets were used in building the<br />

corresponding SOMs, which were then labelled<br />

<strong>using</strong> the same <strong>data</strong>sets. Labelling a SOM<br />

consists in finding the winning neurone in a<br />

SOM for each <strong>data</strong> vector in the <strong>data</strong>set and<br />

appending the <strong>data</strong> vector’s class label to the<br />

neurone’s label. This labelling (usually called<br />

calibration in SOM terms) allowed us to use the<br />

SOMs as classifiers, simply by having each<br />

neurone belong to the class that, in its label, is<br />

most frequent.<br />

Two different strategies were applied in<br />

f<strong>using</strong> the SOMs classifications:<br />

- Majority (III, IV). This is the simplest<br />

decision <strong>fusion</strong>, where the final class is<br />

simply the most ocurring class in the<br />

lower level classifiers. It is used for<br />

evaluation of variation in SOMs<br />

classifications.<br />

- Use of another SOM layer (IV). In this<br />

case, the results of the classification by<br />

the original SOMs are fed as features to a<br />

f<strong>using</strong> SOM. It is then used for visual<br />

inspection of dispersion of the first level<br />

SOMs classifications. Higher levels of<br />

agreement on the first level SOMs should<br />

lead to a smooth <strong>fusion</strong> SOM. If the<br />

decision <strong>fusion</strong> SOM is messy or has<br />

outliers, then there is disagreement on the<br />

first level SOMs. In such cases, simply by<br />

glancing at the outliers’ neighbours it’s<br />

easy to spot which class most of the first<br />

level classifiers chose for it.<br />

6. Results<br />

With all <strong>data</strong>sets, with the exceptions of VI<br />

that will be discussed later, and certain channels<br />

of IV, the <strong>data</strong> was clustered by shooter. We<br />

present these results for the first <strong>data</strong>set in<br />

Figure 2, and the others are very similar.<br />

Since the <strong>data</strong> is clustered by shooter, it<br />

cannot be clustered by score. So as to cluster by<br />

score, it is necessary to join all good shots in<br />

one cluster and bad ones in another, thus<br />

mixing in those clusters the different shooters<br />

(which as in this case does not happen). Thus,<br />

to classify the shots by score we have to analyse<br />

the <strong>data</strong> of each shooter individually.<br />

None of the <strong>data</strong>sets tested provides good<br />

clustering by score for all shooters. However, 2<br />

of the individual channels (F7 and T3) provided<br />

reasonable clustering by scores, even when all<br />

shooters are considered simultaneously.<br />

Furthermore, some of the shooters have their<br />

shots clustered by score with some of the<br />

<strong>data</strong>sets. Shooter 3 has his shots clustered by<br />

score in <strong>data</strong>set IV (channel Cz), shooter 4 in<br />

<strong>data</strong>set V, shooter 5 in <strong>data</strong>sets II, IV and V,<br />

and shooter 7 in <strong>data</strong>set IV. With shooter 6 no


<strong>data</strong>set was capable of clustering his shots by<br />

score.<br />

To visualise the maps produced, we shall<br />

represent the mapped shots as crosses if they<br />

correspond to good shots, triangles if they<br />

correspond to average shots, and circles<br />

otherwise, as shown in Figure 1.<br />

Figure 1 - Legend for the maps<br />

The results for each of the training sets<br />

presented in section 4 are as follows:<br />

I) Training set with all 5401 features.<br />

Different shooters are clearly identified for, as<br />

we can see in Figure 2, shooters 4 and 5 have<br />

very distinct clusters (separated from the others<br />

by dark lines in the U-Matrix), and shooters 6,<br />

7, and 3, while in the same cluster, are mapped<br />

to different areas. To obtain these maps we used<br />

the distributed version of SOM mentioned in<br />

section 3. This allowed us to reduce the total<br />

training time of each map from 2h21m to<br />

1h16m when <strong>using</strong> 2 machines, and even more<br />

when more machines where available.<br />

6 6 6 6 6 7 7 4 4 4 4<br />

6 6 7 7 7 4 4 4<br />

7 6 6 6 6 6 7 4 4 4<br />

6 6 6 6 6 6 4 4 4<br />

6 6 6 6 6 3 3 3 4<br />

6 5 3 3 3 4 4 4<br />

5 5 5 5 3 3 3<br />

5 5 5 5 3 3 3 4 4 4<br />

Figure 2 - U-Matrix obtained after applying a<br />

SOM to training set I.<br />

If we train SOM maps for each individual<br />

shooter, the results are generally bad.<br />

II) Training set with Average Spectra (601<br />

features)<br />

This training set is only useful for shooter 5.<br />

In Figure 3 we can see that all good shots are<br />

on the upper right corner, while the average<br />

shots are on the bottom left. Furthermore, in<br />

the U-Matrix presented in Figure 4 we can see<br />

that there is a clear distinction between these<br />

two areas. It could be argued that there are<br />

some good shots in the “bad area”, but these<br />

are probably outliers that correspond to lucky<br />

shots that are good despite the bad conditions.<br />

Figure 3 - Map obtained with training set II<br />

for shooter 5<br />

9 9 10 9<br />

8 10 9<br />

10 9 9 9<br />

8 9 8 9<br />

Figure 4 - U-Matrix obtained with training set<br />

II for shooter 5.<br />

III) Training set with average spectra separated<br />

by hemisphere (2 sets of 330 features).<br />

We were unable to obtain good clusters of the<br />

<strong>data</strong> by scores for any shooter with this <strong>data</strong>set.<br />

However, as with all others, we could cluster<br />

rather easily by shooter. When we fused the<br />

results obtained by each hemisphere, we<br />

managed to obtain the results presented in<br />

Table 1.<br />

3 4 5 6 7 All<br />

Best<br />

Hemisphere<br />

50 70 57 53 45 47<br />

Fusion 53 70 70 58 60 55<br />

Gain 3 0 13 5 14 8<br />

Table 1 - Percentage of correct classification<br />

for each shooter, with and without decision<br />

<strong>fusion</strong><br />

IV) Training set with average spectra by<br />

channel (19 sets of 30 features).<br />

10


IV.i) Individual Channels<br />

Channels F7 (left frontal), and T3 (left<br />

temporal) proved to be quite good at clustering<br />

by score. Figure 5 shows the results for all<br />

shooters, and we can see an area of bad shots on<br />

the left center, and an area of “con<strong>fusion</strong>” on<br />

the lower right, with good shots on most other<br />

areas.<br />

Figure 5 - Map obtained with training set IV,<br />

channel T3, for all shooters.<br />

When considering individual shooters, shooter<br />

5 again has his shots clustered by score, but<br />

now we can also do the same for shooter 7 and<br />

3, as can be seen in Figure 6 and Figure 7.<br />

Figure 6 - Map obtained with training set IV,<br />

channel Cz, for shooter 3.<br />

Figure 7 - Map obtained with training set IV,<br />

channel Fz, for shooter 7<br />

IV.ii) Fusion by majority<br />

As can be seen in Table 2, the biggest<br />

improvements were achieved with shooter 4<br />

and all shooters together, with an increase of<br />

18% and 17% of correct answers. Average<br />

improvement was 11%.<br />

3 4 5 6 7 ALL<br />

Best<br />

channel<br />

57 72 75 56 60 51<br />

Fusion 67 83 75 69 78 68<br />

Gain 10 11 0 13 18 17<br />

Table 2 - Percentage of correct classifications<br />

for each shooter, with and without decision<br />

<strong>fusion</strong><br />

IV.iii) Fusion by another SOM layer<br />

As expected from shooter 4’s low error rate<br />

in <strong>fusion</strong> by majority, his map is pretty<br />

clean, having only one average shot amidst<br />

the bad shots, as can be seen in Figure 8.<br />

Figure 8 – Results of <strong>fusion</strong> of the individual<br />

channels by a SOM, for shooter 4.


Figure 9 - Results of <strong>fusion</strong> with a SOM layer<br />

for shooter 6.<br />

Figure 10 - Results of <strong>fusion</strong> with a SOM<br />

layer for shooter 3.<br />

On the other hand, the maps of Figure 9 and<br />

Figure 10 show that shooters 3 and 6 are in very<br />

distinct situations, although their results in<br />

<strong>fusion</strong> by majority are quite similar. In shooter<br />

6’s map there are many neurones that have both<br />

good and average class labels, indicating that<br />

this set of features is not good enough. In<br />

shooter 3’s map, we can observe that this<br />

choice of features led to an embedding of the<br />

average shots amidst the good ones (in the<br />

SOM’s 2D projection). This leads to the<br />

conclusion that, for the <strong>data</strong> vectors in the<br />

bottom left corner, most of the single-channel<br />

SOMs classified these good shots as below<br />

average. So in this case, what we have is not a<br />

mix-up, but a set of <strong>data</strong> vectors that should be<br />

put aside and carefully analysed. A possible<br />

solution to this kind of error could be the<br />

addition of another classifier, prior to decision<br />

<strong>fusion</strong>, that would mainly handle this cluster.<br />

V) Training sets with characteristic frequency<br />

bands (alpha beta, delta and theta).<br />

The alpha band, separated the shooters better<br />

then most others, with the advantage that it uses<br />

only 6 features. It was also useful in separating<br />

shooter 5’s shots by score, as can be seen in<br />

Figure 11.<br />

Figure 11 - Map obtained with training set V,<br />

Alpha band, for shooter 5.<br />

The beta band provided the best separation of<br />

all amongst shooters. It was however useless in<br />

separating by score, as was the theta band.<br />

The delta band provided a reasonable clustering<br />

of shooter 4’s scores, as can be seen in Figure<br />

12.<br />

Figure 12 - Map obtained with training set V,<br />

delta band, for shooter 4.<br />

6. Conclusion<br />

Our main objective in this first phase of our<br />

work was to gain further insight over our <strong>data</strong>,<br />

which was accomplished. Although most of the<br />

<strong>data</strong> <strong>fusion</strong> possibilities had a strong imprint of<br />

each individual’s personal <strong>EEG</strong> traces, we were<br />

able to find some clues as to what were the<br />

important frequency ranges in each case. These<br />

have already led us to try and find new criteria<br />

that combine different frequency bands, on<br />

which we are currently working.<br />

The <strong>data</strong> from the <strong>ECG</strong> did not influence in<br />

any way our results, since it was almost


constant for each shooter, and even amongst<br />

shooters the differences were not significant.<br />

Our use of SOMs as a clustering tool for<br />

visual inspection of our <strong>data</strong> <strong>fusion</strong> options was,<br />

as we expected, very useful. Also, decision<br />

<strong>fusion</strong> wise, we found SOMs to be very useful<br />

as a visual inspection tool of a set of classifiers.<br />

High coherence means cleaner, smoother maps,<br />

messy maps mean lots of variance within the<br />

classifier set and maps with disjoint clusters<br />

could be good indicators that an extra classifier<br />

is needed to handle specific <strong>data</strong> partitions.<br />

7. Bibliography<br />

[1] Bandeira N, Lobo V, Moura-Pires F:<br />

Training a <strong>Self</strong>-Organizing Map Distributed on<br />

a PVM Network, Proceedings of IEEE Joint<br />

Conference on Neural Networks, 1998<br />

[2] John ER, Prichep LS : Principles of<br />

Neurometric analysis of <strong>EEG</strong> and Evoked<br />

Potentials, Electroencephalography, 4th ed<br />

(Niedermeyer E, ed), Williams & Wilkins,<br />

1993, 989-1003<br />

[3] Kalayci T, Özdamar Ö : Wavelet preprocessing<br />

for automated neural network<br />

detection of <strong>EEG</strong> spikes, IEEE Engineering in<br />

Medicine and Biology, March/April 1995, 160-<br />

166<br />

[4] Lobo VS, Bandeira N, Moura-Pires F:<br />

Distributed Kohonen Networks for Passive<br />

Sonar Based Classification, Proceedings of the<br />

International Conference on Multisource-<br />

Multisensor Information Fusion – FUSION 98<br />

[5] Kohonen T : <strong>Self</strong>-Organizing <strong>Maps</strong>,<br />

Springer-Verlag, 1995<br />

[6] Niedermeyer E: The Normal <strong>EEG</strong> of the<br />

Waking Adult, in Electroencephalography, 4th<br />

ed (Niedermeyer E, ed), Williams & Wilkins,<br />

1993, 131-152<br />

[7] Nuwer MR, et al.: IFCN guidelines for<br />

topographic and frequency analysis of <strong>EEG</strong>s<br />

and EPs. Report of an IFCM committee.<br />

[8] Reilly E: <strong>EEG</strong> Recording and Operation of<br />

the Apparatus, in Electroencephalography, 4th<br />

ed (Niedermeyer E, ed), Williams & Wilkins,<br />

1993, 104-124.<br />

[9] Schober F, Schellenberg R, Dimpfel W :<br />

Reflection of mental exercise in the dynamic<br />

quantitative topographical <strong>EEG</strong>,<br />

Neuropsychobiology 1995;31; 98-112<br />

[10] Silva FL : <strong>EEG</strong> analysis: Theory and<br />

Practice, Electroencephalography, 4th ed<br />

(Niedermeyer E, ed), Williams & Wilkins,<br />

1993, 1097-1123<br />

[11] Silva FL : Computer-assisted <strong>EEG</strong><br />

diagnosis: Pattern recognition and brain<br />

mapping, in Electroencephalography, 4th ed<br />

(Niedermeyer E, ed), Williams & Wilkins,<br />

1993, 1063-1086<br />

[12] Ultsch A: Siemon, H.P.; “Exploratory<br />

Data Analysis Using Kohonen Networks on<br />

Transputers”, Dep.of Comp.Science, Dortmund<br />

FRG, December 1989.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!