Easy To Use Patents Search & Patent Lawyer Directory

At Patents you can conduct a Patent Search, File a Patent Application, find a Patent Attorney, or search available technology through our Patent Exchange. Patents are available using simple keyword or date criteria. If you are looking to hire a patent attorney, you've come to the right place. Protect your idea and hire a patent lawyer.


Search All Patents:



  This Patent May Be For Sale or Lease. Contact Us

  Is This Your Patent? Claim This Patent Now.






Register or Login To Download This Patent As A PDF




United States Patent 3,807,392
Harris April 30, 1974

ELECTRO-CARDIOGRAPHIC PATIENT MONITORING AND MORPHOLOGY RECOGNITION METHOD

Abstract

An electro-cardiographic patient monitoring and morphology recognition method utilizing a digital computer which is shared by eight patients. The ECG signal of each patient is sampled at 8-millisecond intervals, with samples of different patients being provided to the computer at 1-millisecond intervals. The computer is programmed to recognize atypical characteristics in the ECG signals and to control a 3-second analog recording of the ECG signal of any patient for whom an atypical condition is determined.


Inventors: Harris; George J. (Framingham, MA)
Assignee: American Optical Corporation (Southbridge, MA)
Appl. No.: 05/192,191
Filed: October 26, 1971


Related U.S. Patent Documents

Application NumberFiling DatePatent NumberIssue Date
820554Apr., 19693616791

Current U.S. Class: 600/515
Current International Class: A61B 5/04 (20060101); G06F 19/00 (20060101); G06F 17/00 (20060101); A61b 005/04 ()
Field of Search: 128/2R,2.5R,2.6A,2.6F,2.6G,2.6R,2.6V,2.1R

References Cited

U.S. Patent Documents
3658055 April 1972 Abe et al.
3524442 August 1970 Horth
3606882 September 1971 Abe et al.
3654916 April 1972 Nielsen
3618693 November 1971 Nachev et al.
3434151 March 1969 Bader et al.
Primary Examiner: Kamm; William E.
Attorney, Agent or Firm: Wall; Joel Nealon; William C.

Claims



What I claim is:

1. A method to be practiced on a machine for processing digital samples of successive electro-cardiographic waveforms of a patient comprising the steps of:

a. generating at least two different series of digital function values from the successive digital samples being processed,

b. performing tests on successive function values in each of said at least two series,

c. selecting the tests which are performed on said function values in step (b) from a predetermined group of tests to obtain selected tests that are dependent upon the results of the tests performed on earlier function values,

d. registering the sequences of the results of the tests performed in step (b) on the function values generated for the electro-cardiographic waveforms which occur during a learning interval,

e. thereafter determining if the sequence of the results of the tests performed in step (b) on the function values generated for a subsequent electro-cardiographic waveform is different from all of the sequences registered during said learning interval, and

f. characterizing the morphology of an electro-cardiographic waveform of the patient in accordance with the results of the tests performed in step (b).

2. A method in accordance with claim 1 wherein the tests performed in step (b) are comparisons of said function values with threshold levels associated with respective ones of said series of function values.

3. A method in accordance with claim 2 further including the step of:

d. continuously up-dating the threshold levels used in the comparison tests in accordance with predetermined numbers of most recent respective function values.

4. A method in accordance with claim 3 further including the steps of:

g. performing a special test on successive function values in one series of function values to determine the presence of an R wave in an electro-cardiographic waveform, and

h. operating upon only particular function values in the performance of steps (e) and (f) for each electro-cardiographic waveform, the particular function values being those generated from a group of successive digital samples which occur during a predetermined time interval which brackets and has a fixed time relationship to the time when the presence of the respective R wave is determined.

5. A method in accordance with claim 3 wherein the function values in one series of function values generated in step (a) are proportional to the magnitudes of the digital samples being processed, and the function values in a second series of function values generated in step (a) are proportional to differences between the magnitudes of the digital samples.

6. A method in accordance with claim 3 wherein the function values in one series of function values generated in step (a) are dependent upon differences between the magnitudes of respective digital samples and the average magnitude of a predetermined number of earlier digital samples.

7. A method in accordance with claim 3 further including the steps of:

e. computing the sum of a group of function values in one series of function values which are generated for each individual electro-cardiographic cycle,

f. computing the average of the sums computed for a predetermined number of most recent electro-cardiographic cycles, and

g. determining if the sum computed in step (e) for an individual electro-cardiographic cycle is greater than the average computed in step (f) by more than a predetermined amount.

8. A method in accordance with claim 3 further including the steps of:

e. performing a special test on successive function values in one series of function values to determine the presence of an R wave in an electro-cardiographic waveform,

f. computing the time interval between the determinations of the presence of two successive R waves,

g. computing the average of the time intervals computed in step (f) for a predetermined number of most recent R waves, and

h. determining if the time interval computed in step (f) is greater than the average computed in step (g) by more than a predetermined amount.

9. A method in accordance with claim 3 further including the steps of:

e. performing a special test on successive function values in one series of function values to determine the presence of an R wave in an electro-cardiographic waveform,

f. computing the time interval between the determinations of the presence of two successive R waves,

g. computing the average of the time intervals computed in step (f) for a predetermined number of most recent R waves, and

h. determining if the time interval computed in step (f) is less than the average computed in step (g) by more than a predetermined amount.

10. A method in accordance with claim 3 further including the steps of:

e. performing a special test on successive function values in one series of function values to determine the presence of an R wave in an electro-cardiographic waveform,

f. computing the time interval between the determinations of the presence of two successive R waves,

g. computing the average of the time intervals computed in step (f) for a predetermined number of most recent R waves, and

h. determining if any time interval computed in step (f) is less than the average computed in step (g) by more than a predetermined amount and the immediately succeeding time interval computed in step (f) is greater than the average computed in step (g) by more than a predetermined amount.

11. A method in accordance with claim 3 further including the steps of:

e. performing a special test on successive function values in one series of function values to determine the presence of an R wave in an electro-cardiographic waveform,

f. computing the time interval between the determinations of the presence of two successive R waves, and

g. determining the presence of a premature ventricular beat in accordance with two time intervals computed in step (f) which separate three successive R waves and in accordance with the characterizing in step (c) of the electro-cardiographic waveform associated with the second of the three successive R waves.

12. A method in accordance with claim 11 further including the step of:

h. counting the number of premature ventricular beats whose presence are determined during a fixed time interval.

13. A method in accordance with claim 3 further including the steps of:

e. computing the sum of a group of function values in one series of function values which are generated for each individual electro-cardiographic cycle,

f. computing the average of the sums computed for a predetermined number of most recent electro-cardiographic cycles,

g. determining if the sum computed in step (e) for an individual electro-cardiographic cycle is greater than the average computed in step (f) by more than a predetermined amount,

h. performing a special test on successive function values in one series of function values to determine the presence of an R wave in an electro-cardiographic waveform,

i. computing the time interval between the determinations of the presence of two successive R waves, and

j. determining the presence of a premature ventricular beat in accordance with two time intervals computed in step (i) which separate three successive R waves and in accordance with a determination made in step (g) that the sum computed for the electro-cardiographic cycle associated with the second or the third of the three successive R waves is greater than the average by a predetermined amount.

14. A method in accordance with claim 3 wherein each function value in one series of function values generated in step (a) is proportional to the sum of the magnitudes of a predetermined number of most recent digital samples.

15. A method in accordance with claim 1 wherein the tests performed in step (b) are comparisons of said function values with threshold levels associated with respective ones of said series of function values.

16. A method in accordance with claim 15 further including the step of:

d. continuously up-dating the threshold levels used in the comparison tests in accordance with predetermined numbers of most recent respective function values.

17. A method in accordance with claim 16 further including the steps of:

e. registering the sequences of the results of the tests performed in step (b) on the function values generated for the electro-cardiographic waveforms which occur during a learning interval, and

f. thereafter determining if the sequence of the results of the tests performed in step (b) on the function values generated for a subsequent electro-cardiographic waveform is different from all of the sequences registered during said learning interval.

18. A method in accordance with claim 16 wherein the function values in one series of function values generated in step (a) are proportional to the magnitudes of the digital samples being processed, and the function values in a second series of function values generated in step (a) are proportional to differences between the magnitudes of the digital samples.

19. A method in accordance with claim 16 wherein the function values in one series of function values generated in step (a) are dependent upon differences between the magnitudes of respective digital samples and the average magnitude of a predetermined number of earlier digital samples.

20. A method in accordance with claim 16 further including the steps of:

e. computing the sum of a group of function values in one series of function values which are generated for each individual electro-cardiographic cycle,

f. computing the average of the sums computed for a predetermined number of most recent electro-cardiographic cycles, and

g. determining if the sum computed in step (e) for an individual electro-cardiographic cycle is greater than the average computed in step (f) by more than a predetermined amount.

21. A method in accordance with claim 16 further including the steps of:

e. performing a special test on successive function values in one series of function values to determine the presence of an R wave in an electro-cardiographic waveform,

f. computing the time interval between the determinations of the presence of two successive R waves,

g. computing the average of the time intervals computed in step (f) for a predetermined number of most recent R waves, and

h. determining if the time interval computed in step (f) is greater than the average computed in step (g) by more than a predetermined amount.

22. A method in accordance with claim 16 further including the steps of:

e. performing a special test on successive function values in one series of function values to determine the presence of an R wave in an electro-cardiographic waveform,

f. computing the time interval between the determinations of the presence of two successive R waves,

g. computing the average of the time intervals computed in step (f) for a predetermined number of most recent R waves, and

h. determining if the time interval computed in step (f) is less than the average computed in step (g) by more than a predetermined amount.

23. A method in accordance with claim 16 further including the steps of:

e. performing a special test on successive function values in one series of function values to determine the presence of an R wave in an electro-cardiographic waveform,

f. computing the time interval between the determinations of the presence of two successive R waves,

g. computing the average of the time intervals computed in step (f) for a predetermined number of most recent R waves, and

h. determining if any time interval computed in step (f) is less than the average computed in step (g) by more than a predetermined amount and the immediately succeeding time interval computed in step (f) is greater than the average computed in step (g) by more than a predetermined amount.

24. A method in accordance with claim 16 wherein each function value in one series of function values generated in step (a) is proportional to the sum of the magnitudes of a predetermined number of most recent digital samples.

25. A method in accordance with claim 1 further including the steps of:

d. registering the sequences of the results of the tests performed in step (b) on the function values generated for the electro-cardiographic waveforms which occur during a learning interval, and

e. thereafter determining if the sequence of the results of the test performed in step (b) on the function values generated for a subsequent electro-cardiographic waveform is different from all of the sequences registered during said learning interval.

26. A method in accordance with claim 1 further including the steps of:

d. performing a special test on successive function values in one series of function values to determine the presence of an R wave in an electro-cardiographic waveform, and

e. utilizing only particular test results in the performance of step (c) to characterize each electro-cardiographic waveform, the particular test results being those of tests performed in step (b) on a group of successive function values which are generated for a predetermined time interval which brackets and has a fixed time relationship to the time when the presence of the respective R wave is determined.

27. A method in accordance with claim 1 wherein the function values in one series of function values generated in step (a) are proportional to the magnitudes of the digital samples being processed, and the function values in a second series of function values generated in step (a) are proportional to differences between the magnitudes of the digital samples.

28. A method in accordance with claim 1 wherein the function values in one series of function values generated in step (a) are dependent upon difference between the magnitudes of respective digital samples and the average magnitude of a predetermined number of earlier digital samples.

29. A method in accordance with claim 1 further including the steps of:

d. computing the sum of a group of function values in one series of function values which are generated for each individual electro-cardiographic cycle,

e. computing the average of the sums computed for a predetermined number of most recent electro-cardiographic cycles, and

f. determining if the sum computed in step (d) for an individual electro-cardiographic cycle is greater than the average computed in step (e) by more than a predetermined amount.

30. A method in accordance with claim 1 further including the steps of:

d. performing a special test on successive function values in one series of function values to determine the presence of an R wave in an electro-cardiographic waveform,

e. computing the time interval between the determinations of the presence of two successive R waves,

f. computing the average of the time intervals computed in step (e) for a predetermined number of most recent R waves, and

g. determining if the time interval computed in step (e) is greater than the average computed in step (f) by more than a predetermined amount.

31. A method in accordance with claim 1 further including the steps of:

d. performing a special test on successive function values in one series of function values to determine the presence of an R wave in an electro-cardiographic waveform,

e. computing the time interval between the determinations of the presence of two successive R waves,

f. computing the average of the time intervals computed in step (e) for a predetermined number of most recent R waves, and

g. determining if the time interval computed in step (e) is less than the average computed in step (f) by more than a predetermined amount.

32. A method in accordance with claim 1 further including the steps of:

d. performing a special test on successive function values in one series of function values to determine the presence of an R wave in an electro-cardiographic waveform,

e. computing the time interval between the determinations of the presence of two successive R waves,

f. computing the average of the time intervals computed in step (e) for a predetermined number of most recent R waves, and

g. determining if any time interval computed in step (e) is less than the average computed in step (f) by more than a predetermined amount and the immediately succeeding time interval computed in step (e) is greater than the average computed in step (f) by more than a predetermined amount.

33. A method in accordance with claim 1 further including the steps of:

d. performing a special test on successive function values in one series of function values to determine the presence of an R wave in an electro-cardiographic waveform,

e. computing the time interval between the determinations of the presence of two successive R waves, and

f. determining the presence of a premature ventricular beat in accordance with two time intervals computed in step (e) which separate three successive R waves and in accordance with the characterizing in step (c) of the electrocardiographic waveform associated with the second of the three successive R waves.

34. A method in accordance with claim 33 further including the step of:

g. counting the number of premature ventricular beats whose presence are determined during a fixed time interval.

35. A method in accordance with claim 1 wherein each function value in one series of function values generated in step (a) is proportional to the sum of the magnitudes of a predetermined number of most recent digital samples.

36. A method to be practiced on a machine for processing digital samples of successive electro-cardiographic waveforms of each of a plurality of patients comprising the steps of:

a. extending to said machine successive groups of digital samples, each group containing a digital sample of each of said patients,

b. generating at least two different series of digital function values for each patient from the successive digital samples being processed for that patient,

c. performing tests on successive function values in each of the at least two series for each patient,

d. selecting the tests which are performed on said function values in step (c) from a predetermined group of tests to obtain selected tests that are dependent upon the results of the tests performed on earlier function values,

e. registering the sequences of the results of the tests performed in step (c) on the function values generated for the electro-cardiographic waveform of each patient which occur during a learning interval,

f. thereafter determining if the sequence of the results of the tests performed in step (c) on the function values generated for a subsequent electro-cardiographic waveform of each patient is different from all of the sequences registered for that patient during said learning interval, and

g. characterizing the morphology of an electro-cardiographic waveform of each patient in accordance with the results of the tests performed in step (c) on that patient's function values.

37. A method in accordance with claim 36 wherein the tests performed in step (c) for each patient are comparisons of the function values of that patient with respective threshold levels associated with respective ones of the series of function values of that patient.

38. A method in accordance with claim 37 further including the step of:

e. continuously up-dating the threshold levels for each patient used in the comparison tests in accordance with predetermined numbers of most recent respective function values of that patient.

39. A method in accordance with claim 38 wherein each function value in one series of function values generated in step (a) for each patient is proportional to the sum of the magnitudes of a predetermined number of most recent digital samples of that patient.

40. A method in accordance with claim 36 wherein the tests performed in step (c) for each patient are comparisons of the function values of that patient with respective threshold levels associated with respective ones of the series of function values of that patient.

41. A method in accordance with claim 40 further including the step of:

e. continuously up-dating the threshold levels for each patient used in the comparison tests in accordance with predetermined numbers of most recent respective function values of that patient.

42. A method in accordance with claim 41 further including the steps of:

f. registering the sequences of the results of the tests performed in step (c) on the function values generated for the electro-cardiographic waveforms of each pateint which occur during a learning interval, and

g. thereafter determining if the sequence of the results of the tests performed in step (c) on the function values generated for a subsequent electro-cardiographic waveform of each patient is different from all of the sequences registered for that patient during said learning interval.

43. A method in accordance with claim 41 wherein each function value in one series of function values generated in step (a) for each patient is proportional to the sum of the magnitudes of a predetermined number of most recent digital samples of that patient.

44. A method in accordance with claim 36 further including the steps of: e. registering the sequence of the results of the tests performed in step (c) on the function values generated for the electro-cardiographic waveforms of each patient which occur during a learning interval, and

f. thereafter determining if the sequence of the results of the tests performed in step (c) on the function values generated for a subsequent electro-cardiographic waveform of each patient is different from all of the sequences registered for that patient during said learning interval.

45. A method in accordance with claim 36 further including the steps of:

e. performing a special test on successive function values in one series of function values for each patient to determine the presence of an R wave in an electro-cardiographic waveform of that patient, and

f. utilizing only particular test results in the performance of step (d) to characterize each electro-cardiographic waveform of a patient, the particular test results being those of tests performed in step (c) on a group of successive function values of that patient which are generated for a predetermined time interval which brackets and has a fixed time relationship to the time when the presence of the respective R wave is determined.

46. A method in accordance with claim 36 wherein the function values in one series of function values generated in step (a) for each patient are proportional to the magnitudes of the digital samples of that patient being processed, and the function values in a second series of function values generated in step (a) for each patient are proportional to differences between the magnitudes of the digital samples of that patient.

47. A method in accordance with claim 36 wherein the function values in one series of function values generated in step (a) for each patient are dependent upon differences between the magnitudes of respective digital samples of that patient and the average magnitude of a predetermined number of earlier digital samples of that patient.

48. A method in accordance with claim 36 further including the steps of:

e. computing the sum of a group of function values in one series of function values for each patient which are generated for each individual electro-cardiographic cycle,

f. computing for each patient the average of the sums computed for that patient for a predetermined number of most recent electro-cardiographic cycles, and

g. determining if the sum computed in step (e) for an individual electro-cardiographic cycle of each pateint is greater than the average computed in step (f) for that patient by more than a predetermined amount.

49. A method in accordance with claim 36 further including the steps of:

e. performing a special test on successive function values in one series of function values for each patient to determine the presence of an R wave in a electro-cardiographic waveform of that patient,

f. computing the time interval between the determinations of the presence of two successive R waves of each patient,

g. computing for each patient the average of the time intervals computed in step (f) for that patient for a predetermined number of most recent R waves, and

h. determining if the time interval computed in step (f) for each patient is greater than the average computed in step (g) for that patient by more than a predetermined amount.

50. A method in accordance with claim 36 wherein each function value in one series of function values generated in step (a) for each patient is proportional to the sum of the magnitudes of a predetermined number of most recent digital samples of that patient.

51. A method for processing successive electrocardiographic waveforms of a patient comprising the steps of:

a. generating at least two different series of sampled functions from the successive waveforms being processed, the sampled functions in each series being generated at a rate substantially higher than the rate at which successive wave-forms occur,

b. performing tests on successive sampled functions in each of said at least two series,

c. selecting the tests which are performed on said sampled functions in step (b) from a predetermined group of tests to obtain selected tests that are dependent upon the results of the tests performed on earlier sampled functions,

d. registering the sequences of the results of the tests performed in step (b) on the sampled functions generated for the electro-cardiographic waveforms which occur during a learning interval,

e. thereafter determining if the sequence of the results of the tests performed in step (b) on the sampled functions generated for a subsequent electro-cardiographic waveform is different from all of the sequences registered during said learning interval, and

f. characterizing the morphology of an electro-cardiographic waveform of the patient in accordance with the results of the tests performed in step (b).

52. A method in accordance with claim 51 wherein the tests performed in step (b) are comparisons of said sampled functions with threshold levels associated with respective ones of said series of sampled functions.

53. A method in accordance with claim 52 further including the step of:

d. continuously up-dating the threshold levels used in the comparison tests in accordance with predetermined numbers of most recent respective sampled functions.

54. A method in accordance with claim 53 wherein each sampled function in one series of sampled functions generated in step (a) is proportional to the sum of the magnitudes of a predetermined number of most recent samples of an electro-cardiographic waveform.

55. A method in accordance with claim 51 wherein the tests performed in step (b) are comparisons of said sampled functions with threshold levels associated with respective ones of said series of sampled functions.

56. A method in accordance with claim 55 further including the step of:

d. continuously up-dating the threshold levels used in the comparison tests in accordance with predetermined numbers of most recent respective sampled functions.

57. A method in accordance with claim 56 further including the steps of:

e. registering the sequences of the results of the tests performed in step (b) on the sampled functions generated for the electro-cardiographic waveforms which occur during a learning interval, and

f. thereafter determining if the sequence of the results of the tests performed in step (b) on the sampled functions generated for a subsequent electro-cardiographic waveform is different from all of the sequences registered during said learning interval.

58. A method in accordance with claim 56 wherein each sampled function in one series of sampled functions generated in step (a) is proportional to the sum of the magnitudes of a predetermined number of most recent samples of an electro-cardiographic waveform.

59. A method in accordance with claim 51 further including the steps of:

d. registering the sequences of the results of the tests performed in step (b) on the sampled functions generated for the electro-cardiographic waveforms which occur during a learning intervals, and

e. thereafter determining if the sequence of the results of the tests performed in step (b) on the sampled functions generated for a subsequent electro-cardiographic waveform is different from all of the sequences registered during said learning interval.

60. A method in accordance with claim 51 further including the steps of:

d. performing a special test on successive sampled functions in one series of sampled functions to determine the presence of an R wave in an electro-cardiographic waveform, and

e. utilizing only particular test results in the performance of step (c) to characterize each electro-cardiographic waveform, the particularl test results being those of tests performed in step (b) on a group of successive sampled functions which are generated for a predetermined time interval which brackets and has a fixed time relationship to the time when the presence of the respective R wave is determined.

61. A method in accordance with claim 51 wherein the sampled functions in one series of sampled functions generated in step (a) are proportional to the magnitudes of samples of the waveforms being processed, and the sampled functions in a second series of sampled functions generated in step (a) are proportional to differences between the magnitudes of samples of the waveforms.

62. A method in accordance with claim 51 wherein the sampled functions in one series of sampled functions generated in step (a) are dependent upon differences between the magnitudes of respective samples of the waveform being processed and the average magnitude of a predetermined number of earlier samples of the waveform.

63. A method in accordance with claim 51 further including the steps of:

d. computing the sum of a group of sampled functions in one series of sampled functions which are generated for each individual electro-cardiographic cycle,

e. computing the average of the sums computed for a predetermined number of most recent electro-cardiographic cycles, and

f. determining if the sum computed in step (d) for an individual electro-cardiographic cycle is greater than the average computed in step (e) by more than a predetermined amount.

64. A method in accordance with claim 51 further including the steps of:

d. performing a special test on successive sampled functions in one series of sampled functions to determine the presence of an R wave in an electro-cardiographic waveform,

e. computing the time interval between the determinations of the presence of two successive R waves,

f. computing the average of the time intervals computed in step (e) for a predetermined number of most recent R waves, and

g. determining if the time interval computed in step (e) is greater than the average computed in step (f) by more than a predetermined amount.

65. A method in accordance with claim 51 wherein each sampled function in one series of sampled functions generated in step (a) is proportional to the sum of the magntiudes of a predetermined number of most recent samples of an electro-cardiographic waveform.
Description



This invention relates to patient monitoring and electro-cardiographic morphology recognition methods, and more particularly to the use of a programmable digital computer to implement such methods. This application is a continuation-in-part of my co-pending application Ser. No. 820,554, filed on Apr. 30, 1969, and which has matured into U.S. Pat. No. 3,616,791 and is entitled "Electro-Cardiographic Morphology Recognition System."

It is common today, in the intensive care units of many hospitals, to monitor continuously the ECG signal of a cardiac patient. It is, of course, impractical to station a doctor or a trained nurse at the bedside of the patient on a full-time basis for the purpose of observing a trace of the ECG signal on a scope. In some cases, what is done instead is to produce a continuous trace of the ECG signal for periodic review by trained personnel. However, this is also impractical not only because of the high cost but also because the trace requires a considerable amount of time for its review. It has been suggested to overcome these problems by triggering a short trace only when an abnormality in the ECG signal is detected. Various relatively unsophisticated systems have been proposed in the prior art for determining such abnormalities, e.g., heartbeat rate detection circuits, etc.

One of the main difficulties in the design of any system of this type is that the "normal" ECG signal varies from patient to patient. Most normal ECG waveforms include P,Q,R,S and T waves, the QRS complex containing most of the useful information. But the waveforms vary widely from patient to patient and each patient can have a different "normal" electrocardiogram. It is for this reason that it is exceedingly difficult to design equipment which can detect "abnormal" heartbeats. Except for certain very pronounced conditions, there is no such thing as a typical abnormality for all patients.

The problem is not only with the shape of the ECG waveforms. There is also no such thing as a normal "timing" of the ECG pulses. (Of course, a normal range can be defined for all patients, but when a patient is to be closely monitored it is best to detect deviations from his particular norm, rather than rates outside the much broader normal range.) The time periods which make a pulse "premature" or "late" vary not only from patient to patient, but from time to time with the same patient as well. What is important with respect to the timing of the ECG signal of any individual patient is that deviations from the norm for that particular time of day be detected, rather than deviations from a broad range which may characterize the beating of the patient's heart over a relatively long period of time.

Similarly, the timing and shape of a patient's ECG signal may be normal, yet the width (the integral of the rectified waveform) of any single waveform may be excessive. Again, the normal width of the waveform varies not only from patient to patient, but from time to time with the same patient. All of these factors make it exceedingly difficult to design a system which satisfactorily detects abnormalities in the ECG signal of a patient.

In the system disclosed in my above-identified application, the ECG signal from a patient is recorded on a two-second endless tape belt as is known in the art. Whenever an abnormal signal is detected, the two previous seconds of the ECG signal are recorded on a trace together with the ECG signal during the next second. The system includes circuitry for learning the "normal" characteristics of any patient's ECG signal, and which thereafter detects deviations from the learned characteristics to control the start of a three-second recording and any other appropriate alerting actions.

A learning/detecting sub-system is provided which responds to the shape of the QRS complex of each ECG waveform. The ECG signal is differentiated and various analog functions of the ECG signal and its derivative are developed. A set of flip-flops is provided to define the system state. The flip-flops cycle from an initial state during the period of each heartbeat. The instantaneous system state depends both on the previous system state and the instantaneous values of the analog functions formed from the ECG signal. The final system state is in effect a representation of the sequence of the function values, which sequence is in turn a function of the shape of the QRS complex.

During a 15-second learning interval, the system registers all of the final states which are developed for the individual ECG wavefroms occurring during the interval, except those associated with premature beats. Thereafter, the system compares the final state represented by the set of flip-flops with the final states included in the learned patterns. If any ECG waveform results in a final state which is not one of those previously registered (or "learned"), it is an indication that the morphology of the waveform is of interest to the cardiologist, and a 3-second trace is made.

The system is designed to learn eight different final system states and to detect subsequent deviations from them. The state sequencing is designed to terminate in a respective state for each of eight function value sequences which correspond to respective relatively common ECG waveshapes. While these waveshapes are the most frequent, they are by no means universal. It is to be expected that in some patients the "normal" ECG waveshapes will be considerably different from all of those in mind when the state sequencing was designed. This is of no consequence. The flip-flops still cycle in accordance with the instantaneous values of the analog functions, and during the 15-second learning process the system still ends up in several final system states which can be considered normal for that patient. Thereafter, if any final system state is different from all of those previously learned, an abnormality is detected to control the trace. Thus, it is not necessary to pre-program the system with every conceivable ECG waveform. All that is necessary is to provide a mechanism for analyzing the ECG signal and to enable the system to remember the results of the analyses during the learning process. Subsequent different results are treated as abnormal.

As described above, it is not possible for the system to learn a "normal" timing sequence even for any individual patient because the normal time separation of the pulses for any patient can vary from time to time. The important criterion is a deviation from the average time separation over the preceding few beats. A circuit is provided to determine the average time separation between heartbeats. The instantaneous time separation between successive pulses is then monitored and deviations by more than pre-set percentages from the average time separation result in indications of premature beats, late beats and compensatory pauses. These deviations from the continuously learned normal (or average) timing sequence can be programmed to trigger the 3-second trace.

Similar remarks apply to the width measurement. The widths (areas) of a few successive waveforms are continuously averaged and an instantaneous deviation from the average width can be programmed to trigger the trace.

The major shortcoming of the system disclosed in my co-pending application is its relatively high cost. A separate piece of hardware must be provided for each patient whose cardiac activity is to be monitored. The main object of the present invention is to provide a more economical way to monitor a coronary patient.

In accordance with the principles of the present invention, instead of providing a separate piece of hardware for each patient, a small computer is appropriately programmed and interfaced to the monitoring equipments of several patients (eight, in the illustrative embodiment of the invention). The cost of the computer per patient is much less than the cost of the hardware per patient heretofore required. By operating the computer on a time-shared basis, considerable economies can be achieved.

The computer is programmed to perform the same tasks (with some differences) that are performed by the hardware disclosed in my co-pending application, with particular stress being placed on the detection of ventricular premature beats (VPB's). The computer operates upon sampled data and performs its programmed functions at very high speeds; it can therefore process a number of samples from several different patients in the interval between two consecutive samples from any one patient. The number of patients who may be serviced by the same time-shared computer is limited only by the operating speed and memory size of the computer. Additional advantages of the computer approach are that the overall reduced hardware for accomplishing the same task for a number of patients is more reliable while at the same time being less costly. Also, because the computer program can be changed if desired, the system is considerably more flexible than the hardware embodiment.

Further objects, features and advantages of the invention will become apparent upon a consideration of the follwoing detailed description in conjunction with the drawings, in which:

FIG. 1 depicts schematically an overall system for monitoring the cardiac activity of eight patients, the system including a general-purpose digital computer 38;

FIG. 2 illustrates eight typical QRS waveforms together with additional waveforms and information which characterize the system operation as will be explained in detail below;

FIG. 3 depicts the interaction of the various subroutines to be described separately below, and the manner in which they relate to the Executive program;

FIGS. 4-22 depict flow charts for the following subroutines (the function of each to be described below):

FIG. NO. Subroutine Name 4 DFP 5 DTP1 6 DTP2 7 RWD 8A -8B RRP 9 HFP1 10 HFP2 11 LFP 12 ARP1 13A -13B ARP2 14 TCP1 15 TCP2 16A -16B MCP 17 LRN 18 MRP 19 MPV 20 VRP 21 FVP 22 MFP

fig. 23 depicts the flow chart for the wait loop of the Executive program;

FIG. 24 depicts the flow chart of the Operator Interrupt Executive program; and

FIGS. 25A-25C depict the flow chart of the External Interrupt Executive program.

FIG. 1 -- SYSTEM HARDWARE

FIG. 1 depict an overall system comprised of several conventional blocks of equipment. Analog multiplexer 10 is provided with eight input lines 0-7 which are derived from conventional ECG monitors connected to respective patients. Analog ECG signals appear on these eight lines. Depending upon the values of three address bits appearing on cable 24, one of the eight input lines is extended through the multiplexer to output conductor 16. This conductor is extended to the input of analog-to-digital converter 18 which provides an 8-bit data word on its output cable. Gate 32 is shown in heavy outline to indicate that it represents eight separate AND gates. Each bit in the 8-bit output word of the converter is extended to an input of a respective one of the gates. There are also provided eight OR gates 36, with the output of each of gates 32 being extended to one input of a respective one of the eight gates. The output of the eight gates, an 8-bit data word, is extended over data line 46 to computer 38.

In the illustrative embodiment of the invention, the eight monitored patients are represented by the numbers 170-177 (in octal code). The three bits on cable 24 represent the numbers 0-7. The three bits are extended to an input of adder 26, signals representative of the octal number 170 being extended over cable 27 to other inputs of the adder. Thus the output of the adder is an 8-bit word ranging between the octal values 170-177 to represent a respective patient. The computer operates upon the octal numbers 170-177 as representing patient numbers. The 8-bit patient number at the output of adder 26 is extended to a set of eight gates 34. The outputs of these gates are extended to respective ones of the second inputs of the eight OR gates 36. Thus the 8-bit word on data line 46 at the output of the OR gates represents a patient number (170-177) when the eight gates 34 are enabled, and it represents the digital value of one of the input analog signals when the eight gates 32 are enabled. In the illustrative embodiment of the invention, positive data values are represented by the octal numbers 000-167 and negative data values are represented by the octal numbers 200-377, with the remaining numbers 170-177 representing patient numbers. The assignment of patient codes is arbitrary and it will be apparent to those skilled in the art that other selections may be made. However, it is desirable that the data values and patient numbers be mutually exclusive. That is, when a patient number appears on the data line input to the computer, it should not erroneously be interpreted as a data value; conversely, a data value should not be treated as a patient number.

A 1-kHz clock 22 is provided for extending step signals to the input of patient counter 20. Each clock waveform consists of a positive 0.5-millisecond pulse followed by a negative 0.5-millisecond pulse. The leading edge of each positive pulse sets flip-flop 60 in the 1 state; it also advances patient counter 20, whose three output bits cycle between 000 and 111 and then start over again. When the flip-flop is in the 1 state, the eight gates 34 are enabled. At this time a patient number (170-177) is extended over data line 46 to the computer. During the time that the flip-flop is in the 1 state, inverter 28 extends a low potential to the second input of each of gates 32. However, as soon as DONE conductor 62 is pulsed by computer 38, the flip-flop is reset in the 0 state, the eight gates 34 are disabled, and the eight gates 32 and converter 18 are enabled by inverter 28; an eight-bit data word from converter 18 appears on data line 46. The computer processes a patient number at the beginning of each 1-millisecond cycle; at the start of the processing it pulses the DONE conductor to make a data word available when it will be needed after a few microseconds of patient number processing. In the illustrative embodiment of the invention, an 8-bit patient number appears on the data line for a few microseconds, followed by an 8-bit data value for the respective patient which appears for the duration of the respective 1-millisecond cycle. Thereafter, a new patient number appears on the data line for a few microseconds, followed by a respective data value for the duration of the 1-millisecond cycle for the respective patient, etc.

Conductor 30 is connected to the external interrupt line input of the computer, the computer being "interrupted" each time a positive step appears at the interrupt line input. Consequently, the computer is interrupted from an external source at 1-millisecond intervals -- with the appearance of a new patient number on the data line, the computer is ready to process a new data value for the respective patient, as will be described below. The pulsing of conductor 62 at the start of the patient number processing functions to make the new data value available for processing when it is needed.

A keyboard and printer 40 are provided, the keyboard and printer being conventional in design and usually being supplied together with the computer. The keyboard and printer are connected to the computer over an interrupt line 50, and over a data line 48 which transmits eight bits in either direction. When the operator presses a key on the keyboard, a signal is transmitted over interrupt line 50 to the computer to interrupt its operation so that it will examine data line 48. The 8-bit word on the data line represents the character typed by the operator. When the computer determines that a print-out is required, an appropriate code is transmitted over the data line to the printer. Typically, the operator would key in a character and, if the character is valid as determined by the program, an "echo" signal would be sent over the data line to the printer to cause it to type the character keyed in by the operator. In the event the "echo" signal is not transmitted to the printer, the operator is made aware that an invalid character has been typed.

The computer itself can be any of many different kinds, although in the illustrative embodiment of the invention it is a PDP -11, marketed by the Digital Equipment Corporation. The computer is shown as having 16 output conductors, an on/off pair being extended to each of eight recorders 14-0 through 14-7. When an on signal is transmitted to a recorder, it starts recording the analog signal appearing at the output of its respective 2-second delay element. The eight input signals are extended to respective inputs of the eight delays 12-0 through 12-7. When each recorder is turned on, it records the analog signal of the respective patient starting with the signal from the patient which appeared at the input to the multiplexer two seconds earlier. When an off signal is transmitted by the computer to a recorder, the recorder turns off. As will be described below, three seconds elapse between the transmission of on and off signals to any recorder, the on signal being transmitted as soon as the computer determines that there is something unusual about the cardiac waveform of a respective patient and that his ECG signal should be recorded. Each recording comprises the two seconds immediately preceding that part of the ECG signal which triggered the trace, and the one second immediately following. Although 16 separate outputs are provided to allow the computer to control the eight recorders, it will be understood by those skilled in the art that the actual implementation of the system might entail the use of address and data buses which are extended in common to all of the recorders; an address on the address bus enables a particular one of the recorders, and an on or off code word on the data bus informs the recorder of the action required of it.

The system itself is made of conventional blocks. Insofar as the computer program is concerned, the most important point to note is that the computer is interrupted from an external source at 1-millisecond intervals. During each 1-millisecond cycle, there first appears a patient number on the external data line 46, followed a few microseconds later by a data value for the respective patient.

It should also be noted that in the system of FIG. 1 the computer simply controls the turning on and off of the eight recorders and the typing of verifying characters by the printer. As will be described in detail below, the computer determines specific information which can be of considerable value to a physician. While in the illustrative embodiment of the invention this information is used simply to trigger a trace, it will be apparent to those skilled in the art that once this information is available the computer can be programmed to control its print-out in a conventional manner. For example, of the nine items of information determined by the computer for each heartbeat of each patient, one of them is the detection of two successive premature beats. A typical print-out might consist of the patient number, the fact that such a condition was detected, and the time of day when it occured.

FIG. 2 -- EIGHT TYPICAL ECG WAVEFORMS AND RELATED PROGRAM-GENERATED SIGNALS

The second line of FIG. 2 depicts eight typical ECG waveforms, the two rightmost waveforms being those which occasionally occur with some VPB's. The eight waveforms are those described in my above-identified co-pending application. The waveforms are identified by the symbol FDP; as will be described below, each time a data word (representative of the signal amplitude of a respective patient) is operated upon, the program develops an amplitude-related data word called FDP which is required by the morphology recognition subroutine. Samples of the ECG signal of each patient are taken at 8-millisecond intervals, and the FDP waveforms of FIG. 2 should be considered as sample values representative of the magnitude of an ECG signal at any instant. (The sampling rate of 125 Hz for each ECG signal is high enough to insure that the sampled data accurately represents each signal.) The program develops two threshold values labeled +THRESH and -THRESH, and each instantaneous FDP signal is compared to both threshold values. Whenever an FDP value exceeds +THRESH, a test to be described below as the "A" test is passed. The top waveform in FIG. 2 shows the time interval during each waveform that successive samples exceed +THRESH to result in the passing of the A test. Similarly, the "B" test is passed whenever the FDP value is negative and its magnitude exceeds the magnitude of -THRESH. The third waveform in FIG. 2 shows the time interval during each waveform that this condition exists.

In the system disclosed in my co-pending application, an ECG input signal is differentiated and the differentiated signal is used to detect certain characteristics of the ECG waveform. A comparable (digital) signal is developed in the present embodiment. This signal is labeled DIFSUM and DIFSUM values are computed for each patient at 8-millisecond intervals. The succession of DIFSUM values is analogous to the derivative of the ECG signal although, in the program implementation of the invention, the DIFSUM values are actually derived by forming differences between successive samples.

The DIFSUM values are also compared to the threshold values +THRESH and -THRESH. Whenever a DIFSUM sample exceeds the +THRESH threshold value, the "D" test is passed. The fourth line of FIG. 2 shows the time interval during each waveform when, if a sample of the waveform is taken, the D test is passed. Similarly, if a DIFSUM value is negative, the "C" test is passed whenever the magnitude of the negative DIFSUM value exceeds the magnitude of the -THRESH threshold level. The sixth line in FIG. 2 shows the time interval during each waveform that the C test is passed if a DIFSUM value is formed and tested.

Beneath the sixth line of FIG. 2 there are shown eight combinations of letters such as AD, C etc. These combinations are designed to show the sequence in which the four tests are passed for each waveform. For example, in the case of the ECG waveform corresponding to the leftmost FDP waveform in FIG. 2, during the first part of the waveform the A and D tests are passed together, and toward the trailing end of the waveform the C test is passed alone. This combination is shown as AD, C. As another example, in the case of the third waveform the A and D tests are both passed when at least one sample of the ECG signal is processed, the B and C tests are then both passed when a later sample of the same signal is processed, and finally the D test alone is passed when a still later sample is processed. The combination is shown as AD, BC, D. The passing of the A, B, C and D tests in the program implementation of the invention is comparable to the appearance of the A, B, C and D characteristics in the ECG signal as detected by the hardware embodiment of the invention disclosed in my co-pending application.

Finally, FIG. 2 depicts the "type" number of each waveform, the type number serving to clarify the MCP program to be described below. For example, if during the processing of the samples of the ECG signal of a respective patient the B and C tests are both passed when the same sample is processed, then the waveform is of type 5. If the D test is then passed, the waveform is of type 6 instead. If the D test is passed but then the A test is also passed together with the D test when another sample is operated upon, the waveform is characterized by the sequence BC, AD and it is of type 7. If toward the end of the waveform the C test is passed, then the waveform is of type 8.

The value of FIG. 2 is that it not only depicts typical ECG waveform morphologies, but it also provides a "continuous" picture of what the A, B, C and D tests are looking for as the tests are performed on each input sample.

FIG. 3 -- INTERACTION OF EXECUTIVE PROGRAM AND SUBROUTINES

FIG. 3 serves primarily to indicate the relationships of the various subroutines, each of the subroutines being contained within an individual box in the drawing. The legend at the lower-left corner of the drawing characterizes the times of performance of the various subroutines. Any subroutine box which contains an inner border (there are only two such subroutines -- RRP and TCP2) is executed each time that the last sample for a particular patient gave rise to a determination that an R wave is present. Any box with two short lines in its upper-left corner represents a subroutine which is executed every time a "data point" (or sample) is operated upon. For example, referring to FIG. 3, when a new data point (NDP) is received, the DFP and RWD subroutines are executed. If the RWD subroutine determines that the present data point, together with previously operated upon data points, constitute an R wave, then a respective bit in the 8-bit RWORD is set to a 1. The RWORD is operated upon by the EXECUTIVE program which, in response to a 1 for the particular patient being present in a respective bit position of the word, causes the RRP subroutine to be executed for that patient. This subroutine is concerned with the time intervals separating successive R waves.

Any subroutine whose respective box on FIG. 3 has two short lines in its lower-left corner is executed at every strobe time. After the detection of an R wave, a period of 232 milliseconds is provided during which the morphology of the ECG waveform of the patient whose R wave was just detected is still examined. The RWD subroutine controls the setting of bits in the 8-bit STWORD 232 milliseconds following the detection of R waves -- the detection of an R wave for a particular patient results in a 1 being placed in the respective bit position of the STWORD. Just as the RWORD is utilized by the EXECUTIVE program, so is the STWORD. A strobe time for a particular patient is caused to occur 232 milliseconds after the detection of an R wave for that patient, at which time several of the subroutines on FIG. 3 are executed.

Any subroutine whose respective box is provided with two short lines in the lower-right corner is executed at 2-second intervals. There is only one such subroutine -- DTP2.

Finally, the HFP2 subroutine, the only one with two short lines in the upper-right corner of its respective box, is executed every 256 milliseconds.

The EXECUTIVE program calls for the executions of the individual subroutines. The keyboard and printer "input" to the EXECUTIVE program is symbolized by the box labeled TTY. Although not shown in FIG. 3, it is to be understood that the EXECUTIVE program also "looks for" 8-bit data words (patient number or waveform sample) on the external data line whenever an external Interrupt signal is detected. Each sample is symbolized by the letter NDP, which represent a "new data point." The NDP word which is developed by the EXECUTIVE program is required by the DFP and HFP1 subroutines as shown in FIG. 3.

The EXECUTIVE program also requires for its proper operation certain other data. For example, the RWORD and the STWORD, required by the EXECUTIVE program, are derived by the RWD subroutine as described above. Furthermore, the EXECUTIVE program, upon receipt of a new sample, updates three "counters" referred to as 1MINTMR, 2SECTMR and 256MSTMR. Each of these counter words is reset to zero when it reaches a respective value indicative of a count of 1 minute, 2 seconds or 256 milliseconds. Since new data samples are received at 1-millisecond intervals, each time one of the counter words is incremented it is an indication that another one millisecond has elapsed. The EXECUTIVE program includes steps for detecting when any one of the three counter (timer) words has reached the limit which represents the respective time interval having elapsed. Similar remarks apply to the 3SECTMR timer words, except that a separate 3-second timer word is provided for each patient, as opposed to the other three timer words which are shared by all patients. The RRTMR word is incremented by the EXECUTIVE program every millisecond, and is an indication of real time. The only other data word delivered by the EXECUTIVE program is ADP. As will be described below, each time a new data point (NDP) is received for a patient, his respective AVLEV value is subtracted from the NDP value to produce an ADP value required by the LFP subroutine.

Before proceeding to a detailed description of the subroutines, it will be helpful to briefly review the function of each subroutine so that their interactions depicted in FIG. 3 can be partially understood at this stage. The new data points (NDP) of each patient, when they are received at intervals of 8 milliseconds, are utilized by the DFP subroutine which performs a function comparable to the differentiation function described in my co-pending application. Each new data point is stored as the last data point (LDP) for the respective patient, and the DFP subroutine forms the difference NDP-LDP, referred to as DIFSUM, each time a new data point is operated upon. The DIFSUM value which is derived for each patient when a current data point is being operated upon is an indication of the rate of change of the magnitude of the ECG signal of the patient.

The function of the DTP1 subroutine is to determine the maximum value of DIFSUM for each patient during a 2-second interval. This maximum value, called DMAX, represents the peak magnitude of the derivative of the ECG signal of the patient. The DMAX value for each patient is up-dated every time a new data point is operated upon. The DTP2 subroutine functions to derive a theshold value, called DTHRESH, for each patient. The DTHRESH threshold value for each patient is equal to one-half of the average DMAX value for the respective patient computed during each of the preceding eight 2-second intervals. The DTHRESH threshold value for each patient, which is up-dated every two seconds to take into account variations in the peak-to-peak value of the respective ECG signal, is used by the RWD subroutine, one of whose functions is to determine whether the current DIFSUM value for a patient exceeds his respective DTHRESH value.

The HFP1 subroutine forms a running sum of the NDP values for each patient; each patient has a FILTAR value which is the sum of the last eight NDP values. The FILTAR value for each patient, while up-dated for every data point, is not used by the HFP2 subroutine except at intervals of 256 milliseconds. At the end of the execution of the HFP2 subroutine for a particular patient, that patient's FILTAR value is reset to zero. Since the HFP2 subroutine is executed only at 256-millisecond intervals, and a new data point is received for each patient at 8-millisecond intervals, it is apparent that the FILTAR value which is supplied by the HFP1 subroutine for use by the HFP2 subroutine is the sum of 32 NDP values for each respective patient. The HFP2 subroutine first divides the FILTAR value for the current patient by 32 to derive a number which is the average value of 32 successive NDP values for the patient. The HFP2 subroutine further stores the last eight average values computed, and then determines the average of these eight average values. This overall average -- which is the average value of the NDP values during the last 8.times.256 milliseconds, that is, the average value over approximately the last two seconds, is referred to as AVLEV. The EXECUTIVE program subtracts the AVLEV value of each patient from each NDP value for that patient to derive an ADP value. The ADP value thus represents the magnitude of the ECG signal after its average value, or DC component, is removed. The function of the HFP1 and HFP2 subroutines is that of a high-pass filter.

The function of the LFP subroutine, which is executed each time a new data point is received for a patient, is that of a low-pass filter. The LFP subroutine derives an FDP value for each patient which is the average value of the current ADP value and the three previous ADP values. By summing four successive ADP values, and dividing the sum by 4, the result -- FDP -- is less affected by high-frequency noise than the ADP value. Of course, a new FDP value is computed for each new data point, even though it is a function of the value of the present data point and the three previous ones.

The RWD subroutine compares the current DIFSUM value for each patient to his respective DTHRESH threshold value. When three successive DIFSUM values exceed the threshold, it is an indication that an R wave has been detected. The RWD subroutine performs several functions in response to the detection of an R wave. First, a respective bit position in the RWORD is set to 1 to indicate to the EXECUTIVE program that an R wave has been detected for the current patient. (After the EXECUTIVE program has taken the appropriate action for the current patient in response to the detection of an R wave, the respective bit is reset to 0.) The RWD program, following detection of an R wave, then counts 29 successive new data point values for the current patient. Since they occur at 8-millisecond intervals, 232 milliseconds must elapse before 29 new samples are counted. After the 232-millisecond period has elapsed, the corresponding bit position in the STWORD is set to 1 to indicate to the EXECUTIVE program that the waveform in progress has terminated; it is now "strobe" time for that patient.

The RWD subroutine serves two other functions. The MCP subroutine, by the time the R wave has been detected, has determined the morphology type (MTYPE) of the waveform. The RWD subroutine sets the MORPH word for the current patient equal to MTYPE. Also, the real time clock word RRTMR is used by the RWD subroutine to set the RRNEW word. Thus RRNEW represents the real time when the R wave was detected.

The only input to the RRP subroutine is RRNEW -- the time of day when the R wave of the current patient was detected. The RRP program stores the eight most recent RRNEW values for each patient so that the average time interval between R waves can be determined. The RRP subroutine generates a LATE indication if an R wave is late, that is, the elapsed time since the previous wave exceeds the average interval between R waves by 11 percent. It generates a PRE indication if the current R wave is premature, that is, the elapsed time since the previous wave is less than the average interval between R waves by 11 percent. The subroutine generates a CP indication, representative of a compensatory pause, if the current R wave was late and the previous R wave was premature. The EPRE indication is generated in the case of an exceptionally premature beat which results when the time interval between the current R wave and the previous one is less than 50 percent of the running average. Finally, a SECPRE indication results when two successive premature beats are detected.

The ARP1 subroutine operates on successive FDP values. An AREA value for each patient is reset to zero at each strobe time and thereafter the absolute magnitude of each FDP value is added to the AREA value. The AREA value is a measure of the area (integral) of each waveform. The ARP2 subroutine is provided with an 8-word buffer for each patient in which are contained the eight last AREA values for the patient. From these eight values, an average AREA value, referred to as AAV is formed. If the AREA value of the current waveform is greater than the average value by more than 25 percent, the ENLRGD indication for the patient is set equal to 1 to indicate that the area of the current waveform is greater than the average of the preceding eight waveforms by at least 25 percent. (Instead of providing a separate ENLRGD word for each patient, since the ENLRGD indicator is either a 0 or a 1, a single ENLRGD word can be provided with one bit in the word being associated with each patient. Similar remarks apply to the other patient indications.) The ARP2 subroutine also generates a PENLRGD indication which represents whether the previous R wave of the same patient was enlarged.

The TCP1 subroutine is executed once every millisecond -- whenever a new data point is received. The subroutine derives a MAX value for the current patient which is the absolute magnitude of the largest FDP value operated upon during the course of the R wave in progress. The TCP2 subroutine utilizes the eight most recent MAX values derived for the current patient to derive two equal (but opposite polarity) threshold levels referred to as +THRESH and -THRESH. The threshold values are up-dated every time a determination is made that an R wave has been detected.

The two threshold values for each patient are utilized by the MCP subroutine which is also called by the EXECUTIVE program whenever a new sample is operated upon. The MCP subroutine determines the morphology type number of the R wave which is in progress. Each FDP value, which is a measure of the magnitude of the ECG signal, is compared to the plus and minus threshold values to determine the passing of the A and B tests referred to above. Similarly, each DIFSUM value, which represents the instantaneous value of the derivative of the ECG signal of the current patient, is also compared to the two threshold values to determine whether the C and D tests referred to above are passed. Depending on the sequence in which the four tests are passed, the MCP subroutine characterizes the waveform as being one of eight types, and sets a respective bit in the MTYPE word for the current patient. It will be recalled that the RWD subroutine, at strobe time for the current patient, sets the MORPH word for the patient in accordance with the present value of the MTYPE word. Thus the MORPH word which is used by the MRP and LRN subroutines represents the morphology type number of the waveform after it has terminated.

The RWD subroutine detects the occurence of an R wave when the absolute magnitudes of three successive DIFSUM values exceed the DTHRESH threshold value. As soon as the R wave is detected, the corresponding bit in the RWORD is set. The EXECUTIVE program is immediately informed of the occurrence of an R wave. However, the MORPH word is not set equal to the MTYPE word developed by the MCP subroutine because the morphology type of the R wave cannot be completely determined by the time the presence of the R wave is detected. Referring to FIG. 2, it will be seen that information contained in the tail end of an R wave (also called the S wave) can determine its type number. For this reason, the RWD subroutine does not set the MORPH word until the strobe time determined by the same subroutine, that is, until 232 milliseconds after the detection of the R wave. By the time 232 milliseconds have elapsed after the detection of the R wave, the MCP subroutine has fully determined the type number of the wave.

The LRN subroutine performs the learning function. During a learning interval (the operator starts the learning interval by keying in a predetermined code via the keyboard) eight R waves for the identified patient are examined as to their morphology types. At every strobe time during the learning interval, the morphology type number of the R wave just analyzed is stored for subsequent comparison to morphology type numbers determined for the same patient during monitoring. As will be described below, in the event a learning routine is necessary, it is not begun until 2 seconds have elapsed after the operator's request for it. This insures that all signals settle down before any learning is begun in the event the patient was first connected to the monitoring equipment just prior to the learning request. The LRN program generates an LTYPE word for each patient. Each bit in the 8-bit word for each patient corresponds to a respective morphology type number, a 1 in any position representing the occurrence of the respective morphology type waveform during the learning interval for that patient.

The MRP subroutine is executed at every strobe time. It simply compares the present morphology type number of the waveform just analyzed to all of those learned during the learning interval. If the morphology of the present waveform is not one of those previously learned, an UNLRND indication is set to indicate that the present waveform was not previously learned. The MRP subroutine also generates a PUNLRND indication which represents whether the previous waveform was similarly not one of those learned during the learning interval.

The MPV program detects the occurrence of two premature beats in succession, and is called for by the EXECUTIVE program at every strobe time. One input to the MPV subroutine is the SECPRE indication for the current patient -- a "MULTIPLE" condition can be present only if two premature beats in succession have been detected. The waveforms of the current and previous beats are then examined to see if they are atypical as well as premature. Each of the waveforms is considered to be atypical if it was either enlarged or it has a morphology type other than one of those learned during the learning interval for the current patient. Since both the present and the previous waveforms must be examined, the four other inputs to the MPV subroutine are the ENLRGD, PENLRGD, UNLRND and PUNLRND indications for the current patient. If two successive atypical premature beats are detected, the MULTIPLE indication for the current patient is set.

The VRP subroutine, which is called by the EXECUTIVE program at every strobe time, determines whether the previous (not the current) waveform was a VPB. One of the criteria for the setting of the VPB indication by the VRP subroutine is that the previous premature beat was followed by a compensatory pause interval. In other words, a true VPB is present only if the beat was premature and it was followed by a late beat. The CP indication, which is generated with the detection of the current late beat, is thus one input to the VPR subroutine. But for the previous beat to have been a VPB, it is also necessary that its morphology have been unusual in the sense that its area was enlarged, or its morphology type number was not one of those learned during the learning interval. Consequently, two of the other inputs to the VRP subroutine are the PUNLRND and PENLRGD indications. It will be called that the PENLRGD indication represents the enlargement of the previous waveform. In the case of a ventricular premature beat, however, it is possible that the waveform will be greatly enlarged at its end -- after the occurrence of strobe time. Consequently, the excessively enlarged area will not actually be detected by the system until the current waveform is analyzed, with the ENLRGD indication being set. Consequently, the ENLRGD indication for the current waveform is also an input to the VRP subroutine -- if the current waveform is enlarged, it is assumed that the previous premature beat (which has now been followed by a late beat) was a true VPB.

It would appear that the MPV subroutine -- which is designed to detect two VPB's in succession -- could theoretically operate upon only the VPB indication generated by the VRP subroutine for the current waveform and the VPB indication generated for the previous waveform of the same patient. However, this cannot be done because the MPV subroutine does not really indicate the occurrence of of two VPB's in succession as a VPB is defined by the VRP subroutine. The VRP subroutine generates a VPB indication only if a premature beat is followed by a compensatory pause interval. Consequently, the VRP subroutine cannot possibly detect two VPB's in succession. The VRP subroutine is designed to generate a VPB indication if a particular condition of considerable value to a physician is detected, namely, a premature beat followed by a compensatory pause interval, with the premature beat having an unusual morphology. The MPV subroutine, on the other hand, does not look for the presence of a compensatory pause interval. The MULTIPLE indication is set only if each of two successive premature beats have unusual morphologies. It follows that, at any strobe time, the VRP subroutine and the MPV subroutine together can set only one of the VPB and MULTIPLE indications.

The FVP subroutine, also called for by the EXECUTIVE program at every strobe time, is designed to detect an excessive number of VPB's within any 1-minute interval. If such a condition is detected, the FREQUENT indication is set for that patient. The MFP subroutine, also called for by the EXECUTIVE program at every strobe time, is designed to detect a MULTIFORM condition. The two inputs to the subroutine are the MORPH word for the current waveform, together with the VPB indication. Every VPB, as determined by the VRP program, has a morphology which may be one of those not learned during the learning interval. But it is of interest to determine whether the VPB's themselves have more than one type of morphology. For this reason, the MFP subroutine maintains a record of the morphology type of the first VPB which is detected for a patient. Thereafter, whenever another VPB is of a different morphology type the MULTIFORM indication is set. The occurrence of a VPB having a second morphology is then "remebered," and the occurrence of a VPB with a third type of morphology similarly results in a MULTIFORM indication, etc.

With this brief description of the various subroutines and their interactions, it is possible to analyze each of the subroutines in detail. Thereafter, the EXECUTIVE program will be described.

FIG. 4 -- DFP SUBROUTINE

At the bottom of FIG. 4, there are symbolically depicted six memory locations associated with each patient which are required for the DFP subroutine. Also associated with each patient is another location which contains a DIFFERENTIAL BUFFER POINTER. The POINTER word is actually an address of one of the four locations for each patient which are grouped together and referred to as a DIFFERENTIAL BUFFER. The POINTER identifies in succession the four locations in the BUFFER and then starts over again.

The DFP subroutine is called whenever a new data point is received. As will be described below, the EXECUTIVE program inserts the number of the patient whose data point has just been received in a register (RO). The DFP subroutine first gets the DIFFERENTIAL BUFFER POINTER for the current patient by using the RO register contents to identify the address containing the required POINTER. The POINTER which is thus retrieved is the address of one of the four memory locations which comprise the DIFFERENTIAL BUFFER for the current patient. The subroutine then gets the LDP -- the last data point for the current patient. The last data point for the current patient is contained in one of the six memory locations associated with the current patient and used by the DFP subroutine. Similarly, the DFP subroutine gains access to the NDP -- the value of the new data point. The NDP value is made available by the EXECUTIVE program.

After retrieving the LDP and the NDP, the DFP subroutine forms the difference DIFF. This value simply represents the amount by which the new data point differs from the last data point. The DFP subroutine also stores the new data point in the LDP location associated with the current patient. This is necessary in order that the new data point be treated as the LDP the next time that a sample for the current patient is operated upon.

The DIFFERENTIAL BUFFER has stored in it the last four DIFF values computed for the current patient. The POINTER identifies the location of the oldest DIFF value in the 4-word DIFFERENTIAL BUFFER. This oldest DIFF value is taken from the BUFFER and is subtracted from the DIFSUM value stored for the current patient. The DIFSUM value, as will become apparent below, is a running sum of the last four DIFF values. By subtracting the oldest DIFF value from DIFSUM, the subroutine eliminates the effect of the oldest DIFF value on the sum. In order to up-date the sum, the DIFF value just computed (NDP-LDP) is added to DIFSUM, after the oldest DIFF value has been subtracted from it. The new DIFSUM value is stored in the location used for this purpose for the current patient.

Although DIFSUM has been up-dated, it is necessary to store the just-computed DIFF value because when the fourth sample starting from the present time for the current patient is operated upon (32 milliseconds from the present time), the present DIFF value must be subtracted from DIFSUM in order to cancel its effect on the running sum. The DIFF value is inserted in the DIFFERENTIAL BUFFER in the location identified by the POINTER. Thus the new DIFF value is placed in the same location which previously contained the oldest DIFF value (the one computed 32-milliseconds prior to the current sample). Thereafter, the POINTER is incremented so that it identifies the next memory location in the DIFFERENTIAL BUFFER. The next location must be identified because it now contains the oldest DIFF value, and it is this value which is required at the start of the DFP subroutine the next time that it is executed for the same patient (8 milliseconds from the present time).

But the four memory locations which comprise the DIFFERENTIAL BUFFER for the current patient are identified by four successive addresses, and consequently if the POINTER is continuously incremented eventually it will identify a location which is not one of the four in the DIFFERENTIAL BUFFER. For this reason, a test is performed to see if the POINTER points past the end of the BUFFER. If it does not, then as shown in the flow chart, the POINTER is stored for use in connection with the same patient when the DFP subroutine is called by the EXECUTIVE program 8 milliseconds from the present time. On the other hand, if the POINTER points past the end of the BUFFER, then the POINTER is reset to the start of the BUFFER so that it identifies the first location in the BUFFER. The reset POINTER is stored, just as it is when it is incremented and then not reset, and a RETURN is made to the EXECUTIVE program.

The function of the DFP subroutine is to operate upon each new data point (NDP) and to use it to up-date the DIFSUM value for the current patient. The DIFSUM value is a measure of the difference between successive data points. It is actually a continuously up-dated quantity which characterizes the way the new data points are changing, and is comparable to the derivative of the ECG signal. The reason that a running sum is used to represent the derivative function is that this technique eliminates the effect of high-frequency noise. Each DIFSUM value is actually the difference between the present data point and the data point for the same patient which was received 32 milliseconds earlier because DIFSUM is the sum of four differences and the three intermediate data point values cancel each other out. Thus if NDP.sub.n = data point n, then DIFSUM = (NDP.sub.n -NDP.sub.n.sub.-1)+(NDP.sub.n.sub.-1 -NDP.sub.n.sub.-2)+(NDP.sub.n.sub.-2 -NDP.sub.n.sub.-3)+(NDP.sub.n.sub.-3 NDP.sub.n.sub.-4) = NDP.sub.n -NDP.sub.n.sub.-4. However, samples are not taken at 32-millisecond intervals because DIFSUM values are required at 8-millisecond intervals. The reason that each sample is not simply subtracted from the immediately succeeding sample to derive a DIFSUM value is that by separating the two samples used to compute DIFSUM by 32 milliseconds, high-frequency noise pulses will have less of an effect on the difference since the noise has a high probability of occurring between the two samples without affecting the magnitude of either one of them.

It should be noted that the sampling rate of one sample every 8 milliseconds for each ECG waveform is high enough (relative to the frequencies which characterize an ECG signal) so that even using the "filtering" technique of the DFP subroutine -- which provides a form of difference measurement based on 32-millisecond intervals -- the DIFSUM value is still a good measure of the way the ECG signal changes. The DIFSUM value, as shown in FIG. 3, is required by the DTP1, RWD and MCP subroutines.

FIG. 5 -- DTP1 SUBROUTINE

The DTP1 subroutine is executed each time a new data point for any patient is operated upon. The absolute magnitude of DIFSUM for the current patient is compared to the DMAX value for the current patient. If the absolute magnitude of DIFSUM is less than DMAX then, as shown in FIG. 5, no change is made in DMAX and a RETURN is made to the EXECUTIVE program. On the other hand, if the absolute magnitude of DIFSUM for the current patient is greater than the DMAX value for the current patient, then the DMAX value is changed to the absolute magnitude of the current DIFSUM value. It is thus apparent that the purpose of the DTP1 subroutine is simply to derive a DMAX value which is equal to the absolute magnitude of the largest DIFSUM detected for the current patient. It should be noted that were DMAX never reset to zero, then it could represent the magnitude of a very large DIFSUM value which was computed a long time ago even though all DIFSUM values computed over the last few minutes, or even hours, were much smaller. For this reason, DMAX is cleared by the DTP2 subroutine of FIG. 6 -- at a time to be described in connection with that subroutine.

FIG. 6 -- DTP2 SUBROUTINE

The DTP2 subroutine is called by the EXECUTIVE program every 2 seconds for each patient. After two seconds have elapsed, when "housekeeping" chores for a particular patient are being attended to, the DTP2 subroutine is executed. The subroutine is executed eight times (over the course of 8 milliseconds, although each execution requires only several microseconds) at the start of every 2-second interval.

A DMAX BUFFER is provided for each of the eight patients, each BUFFER containing eight words. A POINTER is also associated with each DMAX BUFFER and at the start of the DTP2 subroutine the DMAX BUFFER POINTER for the current patient is retrieved. This POINTER identifies the location in the 8-word BUFFER which contains the oldest DMAX value for the current patient, and this oldest value is obtained from the BUFFER. (As will become apparent, the DTP2 subroutine forms a running sum of the type formed by the DFP subroutine, except that DMAX values are operated upon rather than DIFF values.) This oldest DMAX value is subtracted from a DTSUM word associated with the patient, and the new DMAX value is then added to DTSUM. The DTSUM value is thus a running sum of eight DMAX values. The average DMAX value could be obtained by dividing DTSUM by 8. But what is desired is half of the average and for this reason DTSUM is divided by 16, as indicated in FIG. 6, to derive a DTHRESH value (see FIG. 3). The DTHRESH value is thus one-half of the average of the eight most recent DMAX values for the current patient. It is used as a threshold by the RWD subroutine to determine when three successive DIFSUM values exceed the threshold. In such a case, it is presumed that an R wave has been detected because it is during the occurence of an R wave that successive DIFSUM values differ from each other by considerably more than the average difference between successive values.

In order to continuously up-date DTSUM, it is necessary to continuously up-date the DMAX BUFFER so that the eight most recent DMAX values are available. Thus after DTHRESH is formed, the POINTER is used to insert the newest DMAX value in the BUFFER so that it replaces the oldest DMAX value. The POINTER is then incremented, and a test is made to see if it points past the end of the BUFFER. If it does, the POINTER is reset to the start of the DMAX BUFFER. In either case, the POINTER is then stored so that it can be used for the same patient two seconds later when the DTP2 subroutine is called by the EXECUTIVE program. At the same time, DMAX is cleared so that the DTP1 subroutine, which is executed every time a new data point is received for the current patient, can start off from zero; were DMAX not cleared, very large DIFSUM values which occurred long ago in the past could cause DTHRESH to be so great that no DIFSUM value might exceed the threshold in the event the entire ECG signal, for one reason or another, is now at a lower level.

Because the DTP2 subroutine is executed for each patient only once every 2 seconds, and DMAX is cleared at the end of the subroutine execution, the DTP1 subroutine determines the largest DIFSUM value for the current patient which occurs during a 2-second interval, and the DTP2 subroutine operates upon this value together with the seven previously determined DMAX (largest DIFSUM) values. Thus, the DTHRESH threshold value is based upon the DIFSUM values which occur during the preceding 16 seconds. The threshold value is equal to one-half of the average of the absolute magnitudes of the eight largest DIFSUM values, each of which occurred during a respective one of the eight preceding 2-second intervals. The averaging technique utilized by the DTP2 subroutine is similar to that utilized by the DFP subroutine, but it serves a different purpose. The DFP subroutine functions to filter out the effects of noise in each computed DIFSUM value. The DPT2 subroutine is used to continuously up-date a threshold value to which each DIFSUM value computed by the DFP subroutine is compared by the RWD subroutine.

FIG. 7 -- RWD SUBROUTINE

The RWD subroutine is executed whenever a data point is received. The basic function of the subroutine is to detect the occurrence of an R wave. An R wave is assumed to have been detected when the absolute magnitudes of three successive DIFSUM values exceed the DTHRESH threshold level for the current patient. When an R wave is first detected, as will be described below, the STRTMR (strobe timer) word for the patient is set to 1 and it is then incremented at 8-millisecond intervals. When the RWD subroutine is first entered, a test is made to see if the STRTMR word is zero. If it is not, it is an indication that the R wave was detected upon receipt of a sample within the last 232 milliseconds and an immediate branch is taken to the step in which STRTMR is incremented. The STRTMR value is then examined to see if it is 30, and if it is not an immediate branch is made to RETURN; a RETURN is made to the EXECUTIVE program. However, if the STRTMR word has been incremented to 30 then it is an indication of strobe time. Since it is when the RWD subroutine is executed for a sample which is determinative of the presence of an R wave that the STRTMR word is set to 1, and the RWD subroutine is executed for the same patient once every 8 milliseconds, it is apparent that when the 29th sample (after the sample determinative of the presence of an R wave) is operated upon the value of STRTMR will be 30. Thus it is not until 232 milliseconds after a determination is made of the presence of an R wave that the question "does STRTMR equal 30?" is answered in the affirmative. At this time the number of the current patient is used to set a corresponding bit in the STWORD. When a 1 is present in this 8-bit word it is an indication that it is the strobe time for the respective patient, that is, that the 232-millisecond refractory period for the patient has terminated. By this time the MCP subroutine has determined which of the eight morphology type numbers characterizes the waveform which was detected 232 milliseconds earlier. The MORPH word for the current patient is set equal to the MTYPE value determined by the MCP program; the MORPH word indicates the morphology type number of the R wave just processed.

At this time the STRTMR word of the current patient is reset to zero because the RWD subroutine must once again start looking for R waves in the ECG signal of the current patient. Also, the MTYPE word for the current patient is set to zero; as will be described in connection with the MCP subroutine, the MTYPE word for each patient must be reset to zero at strobe time, that is, when the MCP program should start to analyze the characteristics of a new R wave. Also, as will be described in connection with the MCP subroutine, each patient is provided with an MCP POINTER which controls the processing of FDP and DIFSUM values for a patient whenever a new sample is received. At the start of the processing for a new R wave, the MCP POINTER for any patient must be set to ACHK for reasons to be described below.

Following the setting to zero of the STRTMR word for the current patient, subsequent executions of the RWD subroutine result in an affirmative answer to the question in the first step of the subroutine. Since an R wave is characterized by large magnitudes of DIFSUM values, the test which is performed is to compare the magnitude of the current DIFSUM value with the DTHRESH value for the respective patient. (There is a different DTHRESH value for each patient, the DTP2 subroutine being executed every 2 seconds for each patient). If the magnitude of DIFSUM is greater than DTHRESH, the value of TRYPOS associated with the current patient is incremented. Initially, the value of TRYPOS is zero. After TRYPOS is incremented a test is made to see if it equals 3. If it does not, it is an indication that three successive, large, positive DIFSUM values have not been detected and a RETURN is made to the EXECUTIVE program.

The test for verifying the presence of an R wave is whether three successive DIFSUM values of the same polarity exceed respective positive or negative threshold levels. Two counter words -- TRYPOS and TRYNEG -- are maintained for each patient, and each of these counter words indicates the number of successive DIFSUM values which exceeded a respective polarity threshold level. If DIFSUM is greater than DTHRESH (DTHRESH is a positive value), then the TRYPOS count is incremented, as described above, and then tested to see if it is equal to 3. It should be noted that at the same time TRYPOS is incremented, TRYNEG is cleared. No matter what the count of TRYNEG, since a positive DIFSUM value has been detected, the count of previous successive, large-magnitude, negative DIFSUM values is no longer required.

If the result of the second test executed in the program indicates that DIFSUM is not greater than DTHRESH, then there are two possibilities. First, DIFSUM may be positive but less than DTHRESH: second, DIFSUM may be negative. But, in either case, if the TRYPOS count is not 0, it should be reset to 0 because the current DIFSUM value does not exceed DTHRESH, and three successive large DIFSUM values, which include the one or two immediately preceding values, cannot possibly be detected. Thus, as shown in the flow chart, TRYPOS is cleared.

But a test must now be performed to see if DIFSUM is a very large negative value. It is compared with -DTHRESH, and if DIFSUM is not less than -DTHRESH, then TRYNEG is cleared. It is only when three successive, large, negative (or positive) DIFSUM values are received that the presence of an R wave is assumed; as soon as a DIFSUM value is operated upon which does not exceed the threshold, TRYNEG is reset to 0. Since TRYPOS has previously been cleared, a RETURN is now made to the EXECUTIVE program.

On the other hand, if the DIFSUM value is less than -DTHRESH, then TRYNEG is incremented. A test is performed to see if it is equal to 3 and, if it is, then just as in the case where TRYPOS is equal to 3 it is assumed that an R wave has been detected.

After TRYPOS or TRYNEG has been incremented to a value of 3, the number of the current patient (in the RO register) is used to set a corresponding bit in the 8-bit RWORD. Each bit in this word corresponds to a respective patient and if a bit is a 1 it is an indication that an R wave for the respective patient has been detected and that the EXECUTIVE program should take the appropriate action. It is the RRP subroutine which now is called into action but this subroutine requires the time when the R wave was detected. The RRTMR timer word is up-dated by the EXECUTIVE program every millisecond and thus represents the time of day to the nearest millisecond. The value of RRNEW for the current patient is set equal to RRTMR; the eight RRNEW words thus represent the times of day when the last R waves were detected for the respective patients.

When an R wave has been detected, the STRTMR word for the current patient is set to 1 so that when the RWD subroutine is called by the EXECUTIVE program to process a new DIFSUM value for the current patient, the only step which will be taken will be to increment STRTMR until after 232 milliseconds it is eventually equal to 30.

It is also necessary that the TRYPOS and TRYNEG words be set equal to zero at the same time inasmuch as one of them has been incremented three times to a value of 3 by the time a determination is made of the presence of an R wave. After they are cleared, a RETURN is made to the EXECUTIVE program.

FIGS. 8A and 8B -- RRP SUBROUTINE

The RRP subroutine, which is executed whenever an R wave is detected, is used to determine timing information for successive R waves of a patient. It will be recalled that the RRNEW value for each patient set by the RWD program represents the time of day when the last R wave of that patient was determined to be present. An RROLD word is provided for each patient, and the value of this word is the time of day when the previous R wave for the patient was determined to be present. The first step in the RRP subroutine is to subtract RROLD from RRNEW. The difference -- RRINT -- represents the time difference (in milliseconds) between the last R wave and the present R wave. It should be noted that in this step RRINT is set equal to the absolute difference between RRNEW and RROLD. Since RRTMR, from which RRNEW is derived, is incremented by the EXECUTIVE program at 1-millisecond intervals, it is apparent that eventually the value of RRNEW exceeds the maximum number which any word can represent, an overflow results with RRTMR being reset to zero, and a new timing count begins again. Thus it is possible for RROLD to be greater in magnitude than RRNEW following an overflow condition in RRTMR. By taking the absolute magnitude of the difference between the two values, RRINT equals the time difference between successive samples in all cases.

After RRINT is computed, RROLD is up-dated by making it equal to RRNEW; thus, the next time that the RRP subroutine is executed, the time of day when the present R wave was detected will be treated as the time of day when the previous R wave was detected.

As will be described below, RRAV for each patient is the average value of the time intervals between R waves. A test is made to see if RRINT is greater than RRAV by 11 percent. If it is not, both LATE and CP for the current patient are set to 0, and a branch is taken to the next test. On the other hand, if RRINT is too large, it is an indication that the present beat was late, and the LATE indication for the current patient is set equal to 1. The PRE indication for the current patient, as will be described below, is equal to 1 if the previous beat was premature. Thus if PRE and LATE are both equal to 1, it is an indication that the present beat is a late beat which followed an early beat. That represents a compensatory pause and the CP indication for the current patient is set equal to 1. On the other hand, if both PRE and LATE are not equal to 1, the CP indication is set equal to 0.

In the next test, RRINT is tested to see if it is less than RRAV by 11 percent. If it is not, it is an indication that the present beat is not premature and both PRE and SECPRE are set equal to 0. The SECPRE indication is used to indicate whether two premature beats have occurred in succession, and that cannot be the case where the present beat is not premature.

But if the present beat is premature, then a test is made to see whether PRE -- which represents the prematurity of the previous beat -- is 1. If it is not, it is an indication that while the present beat is premature, the previous beat was not; accordingly, PRE is set equal to 1 but SECPRE is set equal to 0. On the other hand, if the previous beat was also premature and that is represented by PRE being a 1, then SECPRE is set equal to 1 to indicate that two premature beats in succession have been detected. There is no need to set PRE to a 1 to indicate that the present beat is premature since the PRE indication is already a 1 as a result of the previous beat.

The next step which is performed determines whether the present beat is so early that the RRINT value is less than 50 of RRAV. If the present beat is so early that RRINT is less than 0.5RRAV, then EPRE indication is set equal to 1; if the present beat is not less than RRAV by more than 50 percent, then EPRE is set equal to 0.

Although the steps on FIG. 8A show the manner in which the five indications LATE, PRE, CP, SECPRE and EPRE are derived, the various tests are based on the value of RRAV -- the average value of the time intervals between R waves for the current patient. The steps depicted in FIG. 8B are those used to derive the average value RRAV. Ordinarily, it would be expected that a type of circular BUFFER used in several of the other subroutines could be used to store, for example, the last eight values of RRINT, with RRAV being computed by taking the average of the eight most recent RRINT values. This, in fact, is done but one safeguard must be taken. It is possible that a very long time may elapse between two R waves, for example, if for one reason or another the monitor is momentarily disconnected from the patient. Since the RRTMR timer word is incremented at 1-millisecond intervals, it is possible that when the first R wave of the patient is detected after monitoring resumes, the value of RRTMR (RRNEW) may be very large, while RROLD may be very small. This would give a very large value for RRINT, and the addition of this large value to the average value of RRINT which is being maintained might result in an overflow, with the result that the average value (after overflow), rather than being large, might be very small. This would result in erroneous timing indications until enough additional RRINT samples were taken which, after averaging, would provide a reasonable average value. For this reason the averaging technique depicted in FIG. 8B, while very similar to those considered above, takes into account the possibility of an overflow as a result of a very large RRINT value.

An 8-word RRINT BUFFER is provided for each patient, together with a POINTER for identifying one of the eight locations in the BUFFER. The POINTER is first used to get the oldest RRINT value from the 8-word BUFFER for the current patient. The oldest RRINT value is then subtracted from INTSUM for the current patient, each patient's INTSUM value being the sum of the eight RRINT values in the respective BUFFER. After the oldest RRINT value is subtracted from INTSUM, the difference is stored as PRTLSUM. The new RRINT value is then added to PRTLSUM and the sum is stored as NEWSUM. The value NEWSUM is the value which should be used in the usual case where there is no overflow, that is, NEWSUM is not so large that it cannot possibly be the sum of eight reasonable RRINT intervals. The value of NEWSUM is tested to see if the addition of the new RRINT value to PRTLSUM resulted in an overflow. If there is no overflow, then the value INTSUM Is set equal to NEWSUM: as mentioned above, INTSUM is the sum of the eight most recent RRINT values in the BUFFER for the current patient and that is exactly what NEWSUM is. The POINTER for the current patient is then used to insert the new RRINT value in the BUFFER in the location which previously contained the oldest RRINT value, and the POINTER is then incremented. Since INTSUM is the sum of the eight RRINT values now in the BUFFER, INTSUM is divided by 8 to determine RRAV -- the desired result, namely, the average of the eight most recent interpulse intervals.

On the other hand, if an overflow results when the new RRINT value is added to PRTLSUM, it is an indication that something is wrong and that the new RRINT value should not be added to PRTLSUM in the usual manner to derive INTSUM. Thus, INTSUM is set equal to PRTLSUM. The value INTSUM is thus the sum of only seven RRINT values. Since the new RRINT value is not used to increase the value of INTSUM, a zero is inserted in the location in the BUFFER represented by the POINTER, and the POINTER is then incremented in the usual manner. The value of RRAV is not changed and the old value is used. During the next execution of the subroutine for the current patient (assuming that there is no overflow) the value of INTSUM, from which the oldest RRINT value is subtracted and to which the new RRINT value is added, represents the sum of only seven PRINT intervals since, as a result of the detection of an overflow in NEWSUM during the previous execution of the subroutine for the current patient, an RRINT value was not added to INTSUM. But while INTSUM is less than it should be, that is not nearly as bad as having an INTSUM which might perhaps be of a negligible value were the overflow condition not taken into account.

It should be noted that in the case of 16-bit words, it is not expected that there will be any overflow in NEWSUM when the new PRINT value is added to PRTLSUM. If an 8-bit word computer is used, two words should be used for the variables INTSUM, PRTLSUM and NEWSUM so that a 16-bit word is available for each of these variables. Sixteen bits can represent a maximum decimal number of 65,536. Since the number is incremented every millisecond, the maximum number of seconds which can be represented is 65.536. Since the number is incremented every millisecond, the maximum number of seconds which can be represented is 65.536. Since the variables represent the sum of at most eight inter-pulse intervals, it is apparent that overflows under "normal" circumstances will not occur because eight seconds will not elapse between successive heartbeats. It is only in the unusual case of an interruption of the processing of R waves that such a large value of RRINT might be computed which, when added to INTSUM, would result in an overflow condition and therefore an extraordinary low value of INTSUM and necessarily RRAV. For this reason, the subroutine is provided with steps to take into account an unusually large value of RRINT.

After the new RRAV value is computed and the POINTER is incremented, a test is performed in the usual manner to see if the POINTER points past the end of the RRINT BUFFER for the current patient. If it does, the POINTER is reset to the start of the RRINT BUFFER. The POINTER is then stored and a RETURN is made to the EXECUTIVE program.

FIG. 9 -- HFP1 SUBROUTINE

The function of the HFP1 subroutine is to add together successive NDP values for each patient. The sum is labeled FILTAR, and each time a data point is operated upon it is added to the FILTAR value of the respective patient. At the end of the HFP2 subroutine to be described below, the FILTAR value for each patient is reset to zero so that the sum of a new series of NDP values may be obtained.

FIG. 10 -- HFP2 SUBROUTINE

The function of the HFP2 subroutine, which is called by the EXECUTIVE program every 256 milliseconds, is to obtain the average for each patient of the previous 256 NDP samples. (These samples are taken during an interval slightly in excess of 2 seconds). The average, referred to as AVLEV, is used by the EXECUTIVE program to develop an ADP value from each NDP sample. Each ADP value is the same as the NDP sample except that the AVLEV value is subtracted from NDP, in effect removing DC components from the ECG samples. Subroutines HFP1 and HFP2 thus function as a high-pass filter.

At the start of the HFP2 subroutine, the FILTAR value of the current patient is divided by 32 and labeled HF. Since the HFP2 subroutine is executed once every 256 milliseconds and the HFP1 subroutine is executed for each patient once every 8 milliseconds, it is apparent that the final FILTAR value utilized by the HFP2 subroutine is the sum of the last 32 NDP values for the current patient. For this reason, each HF value is obtained by dividing FILTAR by 32 -- HF for the current patient is his average NDP, over the last 32 samples.

An HF BUFFER POINTER for each patient is provided, and the POINTER for the current patient is first retrieved. This POINTER points to the location in an 8-word HF BUFFER for the current patient which contains the oldest HF value for the patient. This value is retrieved from the BUFFER and then subtracted from HFSUM for the current patient, HFSUM being the sum of the eight most recent HF values. After the oldest HF value is subtracted from HFSUM, the newest HF value is added to it, and the POINTER is used to insert the new HF value in the BUFFER in the location which previously contained the oldest HF value. The POINTER is then incremented so that it points to the now oldest HF value in the BUFFER.

The value HFSUM is thus the sum of eight average values, each average value being the average of 32 NDP samples. The average level of the NDP samples over eight 256-millisecond intervals is obtained by dividing HFSUM by 8 and storing the result as AVLEV. A separate AVLEV is provided for each patient so that the EXECUTIVE program can subtract the AVLEV value for each patient from any one of the patient's data points.

As is usual whenever a BUFFER is employed for averaging purposes, the HFP2 subroutine determines whether the BUFFER POINTER points past the end of the BUFFER. Only if it does is the POINTER reset to the start of the HF BUFFER. The new POINTER value is stored and FILTAR for the current patient is then cleared so that a new 32-sample average can be taken. A RETURN is then made to the EXECUTIVE program.

When the EXECUTIVE program subtracts the AVLEV value for each patient from that patient's new data points (NDP) to derive adjusted data points (ADP), in effect what is being done is to filter out DC and low-frequency components in the ECG signal.

FIG. 11 -- LFP SUBROUTINE

Each time a new data point is received for a patient, that data point is averaged with the three preceding data points for the same patient; it is the average value -- FDP -- of four adjusted data points (ADP) which is used by subsequent subroutines. A four-word ADP BUFFER is provided for each patient together with a BUFFER POINTER which identifies one of the four words in the BUFFER. At the start of the LFP subroutine, the POINTER for the current patient is retrieved. The POINTER identifies the location in the respective BUFFER containing the oldest ADP value and this value is obtained and then subtracted from FILSUM. Thereafter, the new ADP value is added to FILSUM. FILSUM then represents the sum of the last four ADP values for the current patient, there being, of course, eight FILSUM variables -- one for each patient.

By dividing FILSUM for the current patient by 4, the average ADP is obtained; this average adjusted data point is labeled FDP.

The POINTER is then used to insert the new ADP value in the BUFFER at the location previously containing the oldest value. The POINTER is then incremented and tested to see if it points past the end of the BUFFER. If it does, the POINTER is reset to the start of the BUFFER. The POINTER is then stored for use by the LFP subroutine eight millisecond later and a RETURN is made to the EXECUTIVE program.

The LFP program performs a low-pass filtering function. By use of the subroutine, the effect of high-frequency noise components is reduced. A sudden burst of noise might affect a single sample, but because each FDP is the average of four samples the noise contribution to the FDP value is only one-fourth of what it otherwise would be. Also, it is likely that noise will have opposite effects on different samples in each group of four; by adding four samples together, it is found that much of the noise cancels itself out.

FIG. 12 -- ARP1 SUBROUTINE

Each FDP sample, as described above, is generated upon receipt of a patient sample. The FDP samples represent an ECG signal which has had both low-frequency (AVLEV) and high-frequency (LFP subroutine) components filtered from it. The FDP samples are those used to represent the ECG signal in subsequent processing.

The ARP1 subroutine adds the magnitude of each FDP sample to the AREA value for the current patient. Thus AREA is the sum of the absolute magnitudes of successive FDP samples. The AREA value is a measure of the integral of the ECG signal, that is, the area under the ECG signal. As shown in FIG 12, in the event of an overflow -- the result of a very large-area waveform -- the AREA value for the current patient is not increased by the value of the absolute magnitude of the current sample; instead, the AREA value is left unchanged. It is already so large by the time an overflow occurs that its value, even if no longer increased, is sufficient to control the generation of an "enlarged area" indication.

As will be described in connection with the ARP2 subroutine, the AREA value for each patient is examined at every strobe time and then cleared. Since a strobe time occurs 232 milliseconds after the detection of an R wave, at a time when it is fairly certain that the R wave has terminated, it is apparent that the AREA value for each patient, when it is used, represents the area under one complete ECG waveform.

FIGS. 13A and 13B -- ARP2 SUBROUTINE

The function of the ARP2 subroutine is to generate a signal for each patient labeled ENLRGD which represents whether the area under the last-detected R wave is greater than a running average of the R-wave areas. The ARP2 subroutine is called by the EXECUTIVE program at strobe time by which time the ARP1 subroutine has completed the latest AREA measurement. If the area of an R wave is excessive, ENLRGD is set equal to 1. But two of the other subroutines to be described below require area information for the previous R wave of the current patient. For this reason, the PENLRGD indication for the current patient is set equal to the present value of his ENLRGD indication. The latter indication was derived at the end of the processing of the previous R wave and it is now transferred to PENLRGD which, if a 1, represents a previously enlarged R wave.

Immediately after PENLRGD is set equal to ENLRGD, a test is made to see if the AREA value for the current patient is greater than the AAV average for the current patient by at least 25%. The value AAV represents the average area of the eight most recent waveforms of the current patient. If an excessive area is detected, ENLRGD is set equal to 1. (A single 8-bit word may be used to represent the eight ENLRGD values for the eight patients being monitored, a different bit in the single word being associated with each patient.) If AREA is not excessive, then ENLRGD is set equal to 0.

The remainder of the subroutine relates to the updating of the AAV value for the current patient, and the steps which are executed are very similar to those shown on FIG. 8B for the RRP subroutine. An 8-word BUFFER is provided for storing the eight most recent AREA values for each patient. Similarly, a BUFFER POINTER is provided for each patient to identify the location in the respective BUFFER which contains the oldest AREA value. The subroutne first gets the BUFFER POINTER for the current patient and using the POINTER retrieves the oldest AREA value from the BUFFER. An AREASUM value is also associated with each patient and represents the sum of the eight entries in the AREA BUFFER of the patient. The oldest AREA value is subtracted from AREASUM, and the difference is stored as PRTLSUM. Then the new AREA value is added to PRTLSUM and the sum is stored as NEWSUM.

It will be noted that the steps thus far are the same as those in FIG. 8B. It was explained above that in connection with the RRP subroutine it is necessary to derive PRTLSUM because it must be used rather than NEWSUM for the setting of INTSUM in the event there is an overflow in NEWSUM. This could arise in the case where an R wave is not received for a long time and the RRINT value which is generated is excessively large. The reason for the overflow test in the ARP2 subroutine is different. Since each AREA value which is contained in the 8-word BUFFER is the sum of the absolute magnitudes of all FDP samples in one heartbeat cycle, it is possible that the sum of eight of these large values might result in an overflow even under ordinary circumstances. It is for this reason that NEWSUM is tested for an overflow before AREASUM is set.

In the event of no overflow, AREASUM is set equal to NEWSUM, the POINTER is used to insert the new AREA value in the BUFFER, the POINTER is incremented, and the average AREA -- AAV -- is set equal to AREASUM divided by 8. On the other hand, in the case of an overflow, AREASUM is set equal to PRTLSUM. Since the new AREA value was not added to the running sum of the AREA value, the POINTER is used to insert a zero in the BUFFER and AAV is not changed (just as RRAV is not changed in FIG. 8B of the RRP subroutine). The POINTER is then incremented.

The usual test is then performed to see if the POINTER points past the end of the BUFFER, and if it does it is reset to the start of the BUFFER. The POINTER is then stored so that it will point to the oldest AREA value location in the BUFFER of the current patient the next time the ARP2 subroutine is called by the EXECUTIVE program for the same patient. Also, the AREA value for the current patient is reset to zero so that a new area measurement may be made for the next waveform. A RETURN is then made to the EXECUTIVE program.

FIG. 14 -- TCP1 SUBROUTINE

The TCP1 subroutine is every similar to the DTP1 subroutine of FIG. 5. The latter subroutine functions to set DMAX for the current patient equal to the largest value of the absolute magnitude of DIFSUM which is computed during every 2-second interval (since the DTP2 subroutine resets DMAX and this subroutine is called for each patient only once every two seconds). The TCP1 subroutine performs a similar function but it operates on FDP values rather than DIFSUM values. A variable MAX is provided for each patient and MAX is compared to the absolute magnitude of each FDP value. If the absolute magnitude of the new FDP value is greater than MAX, then MAX is set equal to it. Since the TCP2 subroutine of FIG. 15 operates upon MAX and then clears it, and the TCP2 subroutine is executed for each patient only once following the detection an R wave, it is apparent that each MAX value is equal to the absolute magnitude of the largest FDP value detected for the current patient during one heartbeat cycle.

FIG. 15 -- TCP2 SUBROUTINE

The TCP2 subroutine is very similar to the DTP2 subroutine of FIG. 6 in that threshold values are derived from eight values stores in a BUFFER. Referring to FIG. 15, the first step in the program is to retrieve the POINTER value for the MAX BUFFER for the current patient, the POINTER pointing to the oldest MAX value stored in the BUFFER. This oldest MAX value is then obtained and subtracted from TSUM for the current patient, TSUM representing the sum of the eight values in the BUFFER. The new MAX value is then added to TSUM. The value TSUM thus represents the sum of the absolute magnitudes of eight FDP samples, each sample being the largest during a respective heartbeat cycle. The average of the largest FDP samples could be obtained by dividing TSUM by 8. But in order to derive threshold values, TSUM is divided by 16. Two threshold values are derived so that it can be determined when an FDP sample exceeds a positive threshold or a negative threshold. The threshold value +THRESH is set equal to TSUM divided by 16, and the threshold value - THRESH is set equal to the negative of this value.

The POINTER is then used to insert the new MAX value in the BUFFER, and the POINTER is incremented. As in the case of all subroutines using buffers of this type, the POINTER is examined to see if it points past the end of the BUFFER, and if it does it is reset to the start of the BUFFER. The POINTER is then stored, and the MAX value for the current patient is cleared so that the absolute magnitude of the largest FDP sample in the next waveform can be derived. A RETURN is then made to the EXECUTIVE program.

It should be noted that because the DTP2 subroutine is called every two seconds for each patient, the threshold DTHRESH (used in the RWD subroutine to determine the presence of an R wave) is an average value based on samples which were received during the previous 16 seconds. However, the +THRESH and -THRESH threshold values are averages based on the ECG signal during a shorter period of eight heartbeat cycles because the TCP2 subroutine is executed for each patient whenever an R wave is detected. The +THRESH and -THRESH threshold values are used by the MCP subroutine as thresholds for both FDP and DIFSUM samples.

FIGS. 16A and 16B -- MCP SUBROUTINE

The function of the MCP subroutine is to perform four different tests, as shown by the legend at the top of FIG. 16A, on the FDP and DIFSUM values for each patient when a new sample for the patient is received. The MCP subroutine "remembers" which tests have been passed and characterizes the waveform as being one of eight different morphology types in accordance with the sequence in which the various tests are passed. The tests which are performed for each new sample depend on the previous tests which were passed. For this reason, an MCP POINTER is provided for each patient which is used, when a new sample for the patient is received, for branching to some point in the MCP subroutine which controls the execution of a test in accordance with previous tests which were passed.

The first test which is performed is the A test: does FDP exceed +THRESH for the current patient? (Each patient has his own threshold values since the TCP2 subroutine develops separate threshold values for each patient). The first instruction in the first A test which is executed is stored in location ACHK as shown in FIG. 16A. For this reason, when the first sample for a new patient is received, the MCP POINTER for that patient must point to location ACHK. It will be recalled that the RWD subroutine determines the presence of an R wave and then counts 29 new samples before setting a corresponding bit in the STWORD to indicate strobe time for the current patient. Referring to the RWD subroutine of FIG. 7, it will also be seen that the morphology type of the previous waveform of the current patient, represented by the MTYPE word for the patient, is used to set the MORPH word of the patient. After the strobe time, the MCP subroutine must start to analyze a new waveform for the patient. It is for this reason that the last step in the RWD subroutine, before the RETURN to the EXECUTIVE program, is to load the MCP POINTER for the current patient with location ACHK so that the test which will be performed on the first new sample for the patient will be the A test. For the same reason, the MTYPE word for the patient is set to zero since the characterization of a new R wave is to begin.

Referring to FIG. 16A, the first step is to branch to a location identified by the MCP POINTER for the current patient. The MCP POINTER can take on any one of eight different values as indicated. Initially, the MCP POINTER identifies location ACHK for controlling an A test. The first FDP value for the current patient which is received is examined to see if it exceeds the +THRESH threshold for the patient. If it does not, a B test is performed to see if FDP is less than -THRESH. If it is not, a RETURN is made to the EXECUTIVE program. If the A and B tests are both failed in succession, it is an indication that the FDP sample should not control the characterization of the waveform. Referring to FIG. 2 and the eight letter designations (AD, C, etc.) on top of the type number labels, it will be seen that the first thing which is checked to characterize a waveform in any of the eight categories is to see if both the A and D tests are passed together, or both the B and C tests are passed together. But if both of the A and B tests are failed, it is apparent that neither of the combined tests AD and BC can be passed as a result of the receipt of the present sample.

On the other hand, suppose that the A test is passed. Referring to FIG. 2, the passing of the A test without the passing of the D test is of no consequence. For this reason, after the A test is passed, the D test is performed. If the D test is not passed a RETURN is made to the EXECUTIVE program. On the other hand, if the D test is also passed, the waveform can be characterized as being of type 1 (see FIG. 2). For this reason, the MTYPE word for the current patient is set equal to 00000001.

But the waveform is not necessarily of type 1 because if additional characteristics are observed it should be characterized as one of types 2, 3 or 4. It is seen that each of types 2, 3 and 4 requires the passing of the C test if the type number is to be changed from 1 to one of the other three numbers. For this reason, after MTYPE is set equal to 00000001, the C test at location CCHK1 is performed. If the test is not passed, a RETURN is not made immediately to the EXECUTIVE program. Were a RETURN made with no other step being performed, the MCP POINTER for the current patient would still identify location ACHK, and upon receipt of the next sample for the current patient the A test would be performed once again. But since the A and D tests have been passed, the next characteristic which should be looked for is the passing of the C test (DIFSUM less than -THRESH). For this reason, before a RETURN is made, the MCP POINTER is loaded with CCHK1. The next time that a sample is processed for the same patient, the first test which will be performed is the C test at location CCHK1. If it is not passed, the same test will be performed for the next sample, etc.

However, if the C test is passed, then it is apparent that the waveform is not of type 1, and instead is of type 2 since the combination AD, C has been determined. For this reason the 1 in the MTYPE word is shifted to the left so that the new MTYPE word (00000010) represents type 2.

But referring to FIG. 2, once a waveform is characterized as type 2 (AD, C), it is still possible that it may be of type 3 if the B test is passed, while the C test is once again passed, because in such a case the combination BC will have occurred after the combination AD. For this reason, immediately after the waveform is determied to be of type 2 with the passing of the C test, the test at location CBCHK is performed. This is another C test and, of course, is passed the first time it is performed since the same test at location CCHK1 must be passed before the program reaches the instruction stored at location CBCHK. After the C test is passed, the B test is performed. If it is not passed, a RETURN is made to the EXECUTIVE program. But before the return is made the MCP POINTER is up-dated to identify location CBCHK. The next time that the MCP subroutine is executed for the current patient, the C test at location CBCHK will be performed. If the C test at location CBCHK is not passed for the next sample, there is no need to perform the B test and a RETURN is made to the EXECUTIVE program. (Although the MCP POINTER is once again set to represent location CBCHK, this has no effect on the subroutine since the MCP POINTER already identifies location CBCHK). It should be noted that there is no need to execute the second C test for the first sample which results in the passing of the C test at location CCHK1. The second C test at location CBCHK is provided only for subsequent samples. For these subsequent samples, the C test at location CCHK1 should not be performed since the waveform has already been characterized as type 2. Instead, the two tests for the C and B characteristics, which start at location CBCHK, are executed.

If for any sample the C and B tests are both passed, it is an indication that the combination CB followed the combination AD. The waveform is thus determined to be of type 3 and the 1 in the MTYPE word is shifted to the left so that the new MTYPE word is 00000100 to represent type 3. But referring to FIG. 2 it will be seen that if, following the detection of the B and C characteristics, the D test is passed, then the waveform is of type 4 rather than of type 3. For this reason, after the MTYPE word is set to represent type 3, the D test at location DCHK2 is performed. If the D test is not passed, the MCP POINTER is set to DCHK2 so that when subsequent samples for the current patient are received, the D test will be performed. As soon as the D test is passed the MTYPE word is shifted one position to the left so that the new word -- 00001000 -- characterizes the waveform as being of type 4. Once the waveform is so characterized, it cannot be characterized as being of another type -- the analysis of the waveform characteristics has been completed. Therefore, the MCP POINTER is set to RETURN. For all subsequent samples, as soon as the MCP subroutine is entered, a branch is made right back to the EXECUTIVE program which called the subroutine in the first place. In effect, the MCP subroutine is skipped for all subsequent samples after that one which results in the categorizing of the waveform in type 4.

Returning to FIG. 16A, it is only when a sample passes both of the A and D tests together that the MTYPE word is set equal to 00000001 and that the waveform must necessarily be categorized as one of types 1, 2, 3 or 4. But suppose that the first sample which results in the passing of two tests is a sample which results in the passing of the B and C tests. In other words, the FDP value for the sample is not greater than +THRESH so that the A test at location ACHK is failed, but the FDP value for the sample is less than -THRESH and the DIFSUM value for the sample is also less than -THRESH. In such a case, the waveform is of type 5 and the MTYPE word which is originally equal to zero is set to represent type 5. The MTYPE word is so set by setting it equal to 20.sub.8 (binary 00010000).

But the passing of the B and C tests together is not enough to fully characterize the waveform because the waveform can still be one of types 6, 7 or 8. Referring to FIG. 2, it will be seen that for the waveform to be one of these three types rather than type 5 it is necessary for the D test next to be passed. Accordingly, immediately after the MTYPE word is set equal to 20.sub.8, the D test at location DCHK1 is performed. If the test is failed, the MCP POINTER is set equal to DCHK1 so that subsequent samples result in the execution of the D test at location DCHK1. If the test is passed, then the waveform is determined (thus far) to be of type 6 (BC, D); accordingly, the MTYPE word is shifted one position to the left so that it represents the binary number 00100000. But the waveform might be of type 7 if after the passing of the D test, the A and D tests are passed together. For this reason, the D test at location ADCHK is performed immediately (and it will necessarily be passed the first time it is performed since the D test at location DCHK1 was passed) and then the A test is performed. If the A test is not passed the MCP POINTER is set to ADCHK so that for the next sample the D test at location ADCHK is executed. The reason for providing a second D test at location ADCHK is the same as the reason for providing a second C test at location CBCHK -- the D test at location DCHK1 cannot be performed for subsequent samples since the waveform has already been characterized as being of type 6; it is necessary to provide the same D test at another location.

If for some subsequent sample the D and A tests starting at location ADCHK are passed, the waveform is of type 7 and the MTYPE word is shifted one position to the left so that it represents type 7.

But that, too, is not enough because if the C test is then passed, as seen in FIG. 2 the waveform is of type 8. For this reason, immediately after the MTYPE word is shifted so that the 1 in it appears in the next to the most significant bit, the C test at location CCHK2 is performed. If the test is not passed, the MCP POINTER Is set to CCHK2 so that all subsequent samples are tested by executing the C test. As soon as the C test is passed, if it is passed, the MTYPE word is shifted one more position to the left so that it represents type 8. Since once a waveform has been characterized as being of type 8 its characterization cannot change, the MCP POINTER is set to RETURN, and then a RETURN is made to the EXECUTIVE program. The next time that a sample for the current patient is received, the MCP subroutine is effectively skipped since the final type number for the waveform in progress has been determined.

FIG. 17 -- LRN SUBROUTINE

The LRN (learning) subroutine is only rarely executed. A LRN POINTER is provided for each patient and can assume any one of four values. Two of these values are used by the EXECUTIVE program to control when a call is made for the LRN subroutine. The other two LRN POINTER values represent locations of instructions in the LRN subroutine. In the usual case, the LRN POINTER for each patient is zero and, when tested by the EXECUTIVE program, results in the skipping of the LRN subroutine.

In order to control the learning routine, the operator keys in the number of the patient whose waveforms are to be learned, and the EXECUTIVE program then sets the LRN POINTER of this patient to -1. As will be described in connection with FIG. 23, after the LRN POINTER of any patient is set equal to -1, the calling of the LRN subroutine is delayed for 16 seconds. This allows transients to settle in the event the patient was connected to the monitoring system just prior to the operator command. During the 16-second settling time, the DTHRESH threshold value for the patient settles down to represent a valid threshold level to be used by the RWD subroutine for the detection of R waves. After 16 seconds have elapsed, the LRN POINTER of the patient is set equal to COUNTDOWN and the patient's LCOUNTER word is set to zero, as will be described below.

When the LRN subroutine is then called, as will be described in connection with the EXECUTIVE program of FIG. 23, the first step is a branch to either location COUNTDOWN or location LMORPH. The first eight branches are to location COUNTDOWN. The steps beginning at this location further delay the actual learning until another eight R waves are detected. This is to ensure that the + THRESH and -THRESH threshold values settle down to valid threshold levels to be used by the MCP subroutine for the learning process.

The LCOUNTER word for the current patient is first incremented and then tested to see if it is equal to 8. If it is not, a RETURN is made to the EXECUTIVE program. But after 8 R waves have been detected, as indicated in FIG. 17, the LCOUNTER word associated with the patient is reset to zero, the LRN POINTER of the patient is set equal to LMORPH, and the LTYPE word for the patient is set equal to zero. The LTYPE word of each patient has eight bits, each of which is set equal to 1 during the learning routine if a respective one of the eight possible waveform types is detected for the patient. Since at the start of the subroutine no waveforms have been analyzed, all eight bits in the LTYPE word for the patient are set equal to zero. A RETURN is then made to the EXECUTIVE program.

At the next strobe time for the same patient, the EXECUTIVE program again calls the LRN subroutine. The LRN POINTER of the patient is again examined in the first step, but since it is now equal to LMORPH a branch is made to the instruction in this location.

A test is performed to see if PRE for the patient is 1. If it is, it is an indication that the beat just detected was premature. The morphology of such a beat is not assumed to be "normal" and consequently the beat is to be ignored. A RETURN is made to the EXECUTIVE program.

But for any beat which is not premature, the LRN subroutine causes the MORPH word for the patient to be examined. It will be recalled that the MORPH word for the patient represents the type number which characterizes the beat. The respective bit in the LTYPE word for the patient is set equal to 1 to indicate that at least one beat having the respective morphology type number was "learned" for the patient. The LCOUNTER word for the patient is then incremented and it is then examined to see if it is equal to 8. If it is not, RETURN is made to the EXECUTIVE program. After eight R waves have been detected and one or more bits in the LTYPE word for the patient have been set accordingly, LCOUNTER is equal to 8. The learning function has been finished and at this time the LRN POINTER for the patient is set equal to 0. As described above, when the LRN POINTER for any patient is equal to 0, the LRN subroutine is not called when the EXECUTIVE program performs housekeeping functions for that patient. After the LRN POINTER for the patient is set equal to 0, the M1 indication for the patient is set equal to 0. (This indication consists of a single bit which can be one bit of a single 8-bit word shared by all eight patients.) The setting of the M1 bit to 0 is required by the MFP subroutine shown in FIG. 22. Basically, the setting of the M1 bit to 0 allows the MFP subroutine to be initialized as will be described below. Following the setting of the LRN POINTER and the M1 bit, a RETURN is made to the EXECUTIVE program.

FIG. 18 -- MRP SUBROUTINE

Two indications (bits) are associated with each patient for indicating whether the morphology type numbers of the present and the previous R waves detected for the patient were of those represented in the LTYPE word of the patient, that is, whether these types of R waves were "learned" or "unlearned." At the start of the MRP subroutine, the PUNLRND indication, which represents whether the previous R wave was learned or unlearned, is set equal to UNLRND. The UNLRND indication represents whether the last analyzed R wave was learned or unlearned. Since the UNLRND indication was set during the last execution of the MRP subroutine for the patient, that is, in response to the detection of the last R wave, the status of the UNLRND indication is transferred to the PUNLRND indication.

It is then necessary to appropriately set the UNLRND indication to represent whether or not the morphology type of the R wave just analyzed was learned during the learning interval. Referring to the MCP subroutine, it will be recalled that the MTYPE word of the current patient has a 1 in the bit position corresponding to the type number which is to be characterized. At the strobe time, the RWD subroutine (FIG. 7) set the MORPH word of the patient to equal the MTYPE word of the patient. Accordingly, the MORPH word contains a 1 in a position which represents the morphology type of the R wave. The basic test which is executed by the MRP subroutine is to see if the LTYPE word of the patient -- which has a 1 in every bit position corresponding to a learned morphology type -- has a 1 in the same bit position in which MORPH has a 1. If it does, it is an indication that the present morphology type is one of those which was previously learned and the UNLRND indication for the patient is set equal to 0; the present morphology type of the R wave was not unlearned. On the other hand, if the LTYPE word of the patient does not have a 1 in the same bit position in which MORPH has a 1, UNLRND is set equal to 1. A RETURN is then made to the EXECUTIVE program.

FIG. 19 -- MPV SUBROUTINE

The function of the MPV subroutine is to detect the occurrence of two successive premature beats, each of which was either enlarged or was characterized by a morphology type which was not learned during the learning routine. At the start of the MPV subroutine, the MULTIPLE indication for the patient (which may be a single bit in an 8-bit word which is shared by all patients) is set equal to 0. A test is then performed on the SECPRE indication of the patient. If SECPRE is 0, it is an indication that two successive beats (as determined by the RRP subroutine of FIGS. 8A and 8B) were not premature. A RETURN is immediately made to the EXECUTIVE program.

But if SECPRE, is 1, it is an indication that the R wave which is now to be characterized, as well as the previous R wave, were both premature. It is then necessary to see if each of these R waves was either enlarged or not learned during the learning interval.

First, the previous R wave is examined to see if it was enlarged. If PENLRGD is 0, a test is made to see if the previous R wave was not learned. If PUNLRND for the current patient is 0 then, while both of the last two R waves were premature, the first R wave was not atypical and MULTIPLE for the patient is not changed. On the other hand, if either PENLRGD is 1, or PUNLRND is 1, then the first R wave of the two was atypical, and the subroutine then proceeds to see if the last R wave was atypical. It is the ENLRGD and UNLRND indications for the patient which are next examined. If either of them is equal to 1, it is an indication that the second R wave was atypical -- along with the first. The MULTIPLE indication for the patient is set equal to 1 and a RETURN is then made to the EXECUTIVE program. The setting of MULTIPLE for the patient to a 1 is an indication of the occurrence of two successive atypical premature beats. Upon the occurrence of the next strobe time for the same patient, the MPV subroutine will be executed again and in the first step MULTIPLE will be set equal to 0; the MULTIPLE indication is initialized at the start of each execution of the subroutine.

FIG. 20 -- VRP SUBROUTINE

The function of this subroutine, which is called by the EXECUTIVE program at each strobe time, is to determine if the next-to-last waveform of the current patient was a VPB. It will be recalled that for a waveform to be considered a VPB, it must be premature, it must be followed by a compensatory pause (the next beat must be late), and it must have an atypical morphology (it must have been one of the types not learned during the learning interval for the patient, or it must have had an enlarged area). It is only after the present beat has been analyzed that it is possible to determine whether the previous beat was a VPB. If the present beat is late, and the previous beat was premature, then the RRP subroutine (FIGS. 8A and 8B) set the CP indication of the patient to 1. At the start of the VRP subroutine, CP is examined and if it is 0, it is an indication that the next-to-last beat was not a VPB. Accordingly, VPB is set equal to 0 and a RETURN is made to the EXECUTIVE program. On the other hand, if CP is 1, it must be determined whether the next-to-last R wave was atypical. First, a test is performed to see if it was enlarged. If it was, PENLGD is 1 and a branch is made to that step in which VPB is set equal to 1. Thereafter, a RETURN is made to the EXECUTIVE program.

But even if the program did not determine that the next-to-last R wave was enlarged, it really might have been enlarged but it might have extended past the strobe time following the detection of the R wave. In such a case, the area which was determined prior to the occurrence of strobe time may not have been 25 percent greater than the average, but the enlarged area after strobe time will cause the next R wave to have an enlarged area. Accordingly, if ENLRGD, which represents an enlargement of the area of the present R wave, is 1, it is assumed that this condition resulted from the next-to-last R wave having been enlarged. In such a case, VPB is set equal to 1.

Finally, if the last R wave and the next-to-last R wave are not enlarged, but the next-to-last R wave was of a type which was not learned (PUNLRND is 1), VPB is similarly set equal to 1. It is only when the next-to-last R wave was not enlarged and was one of those learned during the learning interval that VPB is set equal to 0 despite the fact that the next-to-last R wave was premature and was followed by a compensatory pause.

FIG. 21 -- FVP SUBROUTINE

The FVP subroutine is used to determine if too many VPB's occur in a 1-minute interval. If five VPB's are detected in a 1-minute interval, the FREQUENT indication for the patient is set equal to 1.

At the start of the subroutine, the frequent indication (bit) for the patient is set equal to 0. The VPB indication of the patient is then examined to see if it is 1. If it is not, the previous beat was not a VPB and a RETURN is made directly to the EXECUTIVE program. But if the previous beat was a VPB, then the VPB COUNTER of the current patient is incremented. Each patient is provided with a separate VPB COUNTER word which is incremented whenever a VPB in his ECG signal is detected. A test is then performed to see if the VPB COUNTER word of the current patient is greater than or equal to 5. If it is not, it is an indication that not enough VPB's have occurred within a 1-minute interval to cause the setting of the FREQUENT indication to 1. But if the VPB COUNTER word is greater than or equal to 5, FREQUENT is set equal to a 1, following which a RETURN is made to the EXECUTIVE program.

The VPB COUNTER words of all patients are reset to zero by the EXECUTIVE program at 1-minute intervals. Accordingly, the FREQUENT indication for each patient can be set to 1 only if five or more VPB's are detected within a 1-minute interval. It should be noted that after the fifth VPB is determined to have occurred within a 1-minute interval, the next R wave is analyzed and the FVP subroutine is executed once again. At the start of the subroutine the FREQUENT indication is set equal to 0. Since the VPB COUNTER word of the patient has not been reset to zero (unless the EXECUTIVE program has determined that one minute has elapsed since the last resetting of all VPB COUNTER words), if the previous R wave of the current patient was a VPB, the VPB COUNTER word of the current patient will be incremented to six and the FREQUENT indication will be set equal to 1. In fact, this will occur each time a VPB is detected after the fifth one is detected, within the same 1-minute interval. A succession of 1's for the FREQUENT indication (if they are printed out) thus indicates the exact number of VPB's which occurred during a 1-minute interval; the number of VBB's is equal to the number of successive 1's plus 4.

FIG. 22 -- MFP SUBROUTINE

It is often desirable to determine whether the VPB's of any patient have different morphologies. The MFP subroutine operates on a VMORPH word for each patient. Each bit of the VMORPH word for each patient corresponds to one of the eight morphology types. Each time a VPB is detected, its morphology type number is used to set a respective bit in the VMORPH word of the patient. Thereafter, the morphology type number of each succeeding VPB is compared to the type numbers represented in the VMORPH word of the patient; if the morphology type number is not represented, it is an indication that a new morphology type number characterizes the most recent VPB. At such a time, the MULTIFORM indication of the current patient is up-dated, to reflect the fact that if another VPB is detected having the same (most recent) morphology type number, the MULTIFORM indication of the patient should not be set equal to 1 because an earlier VPB was characterized in the same way.

At the start of the MFP subroutine, the MULTIFORM indication of the patient is set equal to 0. The VPB indication of the patient is then examined and if it is a 0 a RETURN is made to the EXECUTIVE program because the R wave was not a VPB in the first place. Before the RETURN is made, however, LAST is set equal to MORPH for reasons to be described below.

But if the R wave was a VPB, the subroutine then examines the M1 bit of the patient to see if it is 1. It will be recalled that at the end of the LRN subroutine (FIG. 17) the M1 bit of the current patient was set equal to 0. The MFP subroutine includes some "learning" aspects since the VMORPH word for the patient is up-dated to represent the morphology type numbers which characterize all detected VPB's. The learning process for the MFP subroutine should begin only after the patient has been connected to the overall monitoring system. Following the setting of the M1 bit to 0 at the end of the LRN subroutine, the first time that the VPB indication of the patient is 1 when the MFP subroutine is executed, the test for whether the M1 bit is a 1 will be failed. Consequently, a branch will be made to the step which sets the VMORPH word for the current patient to zero. The M1 bit is then changed to 1 so that during succeeding executions of the MFP subroutine a branch will not be made to that step which resets the VMORPH word.

After the M1 bit for the current patient is set equal to 1, the VMORPH word which has just been reset has one of its bits changed to 1. The bit which is set is the bit which is a 1 in the LAST word associated with the current patient. It must be recalled that when VPB is 1 it is an indication that it is not the present R wave being processed which is a VPB, but rather the previous R wave. The LAST word of each patient is always the same as the MORPH word characterizing the previous R wave. Accoringly, it is the LAST word which is used to set a bit in the MORPH word because it is the LAST word which represents the morphology type number of the previous beat whereas the MORPH word represents the morphology type number of the present beat. After the VMORPH word is up-dated, LAST is set equal to MORPH and a RETURN is made to the EXECUTIVE program.

After the first bit in VMORPH has been set to a 1, the next time that a VPB occurs M1 is 1 and consequently a test is performed to see if VMORPH for the current patient has a 1 in the bit position in which LAST has a 1. It must be recalled that LAST has a 1 in a position which corresponds to the morphology type number of the previous R wave, and it is the previous R wave which is the VPB under consideration. If VMORPH has a 1 in the same position in which LAST has a 1, it is an indication that the present VPB has a morphology type number which is the same as one had by a previous VPB. Accordingly, MULTIFORM is not set equal to 1. On the other hand, if VMORPH does not have a 1 in the same bit position in which LAST has a 1, then MULTIFORM is set equal to 1 to indicate that a new type of VPB has been detected.

In either case, in the next step a 1 is set in the bit position of VMORPH which corresponds to the 1 in LAST. If MULTIFORM has not been set equal to 1, it is because a similar VPB was detected earlier and a 1 is already in the bit position of VMORPH which corresponds to the 1 in LAST. However, setting the same bit to a 1 once again results in no change. It is when MULTIFORM is set equal to 1 that the setting of a bit in VMORPH (corresponding to the 1 in LAST) results in an up-dating of VMORPH. Thereafter, LAST is set equal to MORPH and a RETURN is made to the EXECUTIVE program.

It should be noted that even if the beat prior to the beat being processed was not a VPB, that is, the test to see whether VPB is 1 is failed, LAST is still set equal to MORPH. This is because it is not until the next beat will have been analyzed that it can be determined that the present beat is a VPB, and a record must be maintained of the morphology type number of the present beat so that it will be available at the end of the processing of the next beat. It would appear, however, that in the event the first waveform which is analyzed by the MFP subroutine (following a learning interval) has its VPB indication set equal to 1, then a branch would be taken to the test which examines the value of the M1 bit and LAST will not have been set in accordance with the value of MORPH for the previous waveform. However, this situation is impossible because the VPB indication for the first waveform which is operated upon following the learning interval cannot possibly be a 1. It must be recalled that the presence of a VPB can be determined only after the next R wave is operated upon because it is only after the next R wave is detected that the presence of a compensatory pause is verified. Thus, for the VPB to be 1 the PRE indication for the previous beat must have been 1. But the test at location LMORPH in the LRN subroutine insures that the last beat processed by the LRN subroutine must not have been premature. Accordingly, the VPB indication for the first waveform which is processed following the learning interval must have a VPB indication of 0 and LAST is set in accordance with the current MORPH value. If the second waveform has a VPB indication of 1, it means that the previous beat was a VPB and LAST represents its morphology type number as required.

FIG. 23 -- EXECUTIVE WAIT LOOP PROGRAM

There are two sources of interrupt signals -- from the monitoring equipment (which provides either a patient number of a data point) or from the keyboard. In the absence of an interrupt signal, the computer continues to function in accordance with the program depicted in FIG. 23. It is only when the computer is executing instructions in the EXECUTIVE WAIT LOOP program of FIG. 23 that either type of interrupt can result in service. The program of FIG. 23 performs the necessary housekeeping functions and further calls for the execution of various subroutines.

At the start of the program of FIG. 23, the STWORD is examined. This 8-bit word has a 1 in any bit position corresponding to a respective one of the eight patients whose strobe time has occurred, that is, for whom an R wave was detected 232 milliseconds earlier. In the event that strobe processing is required for two patients, it is performed for only one during any single loop of the EXECUTIVE program. The patient for whom strobe processing is performed is arbitrarily selected to be that one associated with the bit of least significance which is a 1. For example, if STWORD is 00100010, then strobe processing is performed for the second patient. The lowest 1 in STWORD is converted to a 0 so that the next time STWROD is examined strobe processing for the same patient will not take place again. Also, the lowest 1 in STWORD is converted to the respective patient number and is stored in register RO. It is the storage of the patient number in this register that controls all of the various subroutines to operate upon the variables associated with a particular patient. As a single example, the patient number contained in register RO enables the various subroutines which operate upon circular buffers to select the correct one of the eight buffers by the subroutine.

After the patient number is stored in register RO, the ARP2 subroutine is executed for the respective patient and then the LRN POINTER for the respective patient is examined to see if it is less than zero. The LRN POINTER of a patient is set to -1 when the operator requests a learning routine as will be described below. The EXECUTIVE program delays the learning process for 16 seconds by branching to the start of the WAIT LOOP each time the LRN POINTER is tested to see if it is negative. After 16 seconds have elapsed following the operator request, the LRN POINTER is set equal to COUNTDOWN (a positive number) and it is only at this time that the LRN subroutine can be called.

A test is performed to see if the LRN POINTER is zero. Since COUNTDOWN is not zero, the LRN subroutine is called for the purpose of either noting the occurrence of another one of the eight R waves prior to the start of the learning interval, or the occurrence of another one of the eight R waves which are used for learning purposes.

On the other hand, if the LRN POINTER for the current patient is equal to zero, it is an indication that the LRN subroutine should not be called in the first place. (At the end of any complete learning cycle, the LRN subroutine sets the LRN POINTER to zero.) Instead, a complete R wave has been detected (with its morphology characterized since it is now strobe time for the patient) and it is not necessary to execute those subroutines which must be executed at strobe time, except ARP2 which has already been executed. As shown in FIG. 23, the subroutines now executed are MRP, VRP, MPV and FVP-- the same subroutines which are shown in FIG. 3 as being executed at the strobe time for any patient. (The reason that the ARP2 subroutine is executed before the value of the current patients LRN POINTER is examined is that even if the MRP, VRP, etc. subroutines are not executed, the ARP2 subroutine is required for up-dating the patient's AAV value so that by the end of the learning process normal monitoring (which requires an AAV value) can begin immediately.)

Following the execution of the five subroutines, any one of the nine indications -- LATE, PRE, EPRE, CP, SECPRE, MULTIPLE, MULTIFORM, VPB, FREQUENCT -- which are of interest are examined to see if they are 1's. If none of them is 1, STWORD is examined once again. Otherwise, a condition of interest has been detected and the "on" signal is transmitted to the recorder associated with the patient whose number is in register RO. Thereafter, the 3SECTMR 3-second counter word for the current patient is cleared. As will be described below, this word is continuously incremented until it represents the lapse of 3 seconds, at which time an "off" signal is transmitted to the recorder. Also, the RECORD BIT for the current patient is set equal to 1 to indicate that recording for the patient is in progress. This bit, as will be described below, is required for other purposes. Another examination of STWORD is then made.

In the event that STWORD had a second 1 in it, indicating that strobe time had occurred for another patient prior to the first examination of STWORD, then STWORD is still not zero. The lowest 1 in the word is cleared and the respective patient number is stored in register RO. The same operations described above now takes place for the new patient.

When no strobe processing is required, STWORD will be zero and when the word is tested a branch will be made to the step in which RWORD is tested. It will be recalled that any bit position in this word is set equal to 1 upon the detection of an R wave for the respective patient. If there is at least one 1 in RWORD, then R wave processing begins. The lowest 1 in RWORD is changed to 0 so that R wave processing for the patient will occur only once for each detected R wave. At the same time, the lowest 1 is converted to a patient number and the patient number is stored in register RO. The two subroutines which must be executed following the detection of an R wave are RRP and TCP2 (see FIG. 3) and these subroutines are executed. The process then begins all over again with the examination of STWORD. The next time that RWORD is examined, the next lowest 1, if there is one, is converted to 0, and the same two subroutines are executed for the respective patient.

It is only when no patients require strobe processing or R wave processing, that is, when both STWORD and RWORD are zero, that the EXECUTIVE program tests to see if FLG2SEC is zero. As will be described below, this 8-bit word is set equal to 11111111 at the end of each 2-second interval. The setting of the word in this manner is an indication that the DTP2 subroutine should be executed for each patient so that the DTHRESH threshold value for each patient will be up-dated, and that the LRN POINTER for each patient should be examined. If FLG2SEC is not zero, the lowest 1 in the word is converted to the respective patient number which is stored in register RO, and the 1 is changed to 0. The DTP2 subroutine is then executed for the patient whose number appears in register RO. The LRN POINTER for the same patient is then examined to see if it is negative. If it is not (i.e., it is zero, COUNTDOWN or LMORPH), STWORD is once again examined. On the other hand, if the LRN POINTER for the patient is negative, it must be -1 as set following a learning request by the operator, and the 16-second count is in progress to determine when the LRN subroutine should first be called. The LCOUNTER word of the patient is incremented and then tested to see if it is equal to 8. If it is not, no further action is taken. If the counter word is equal to 8, it is cleared and the LRN POINTER for the current patient is set to COUNTDOWN. The LRN subroutine will now be called when the respective bit for the patient in STWORD is 1. The test to see if FLG2SEC is equal to zero necessarily fails eight times in succession because, as will be described below, when the FLG2SEC word is set, it is set equal to 11111111. After the DTP2 subroutine has been called eight times (together with up to the same number of calls for the LRN subroutine, if any are required), FLG2SEC is equal to zero and the DTP2 subroutine is not called again until another two seconds have elapsed.

In a similar manner, the FLG2SEC word is set equal to 11111111, as will be described below, at 256-millisecond intervals. Referring to FIG. 3, it will be recalled that the HFP2 subroutine must be executed for each patient once every 256 milliseconds. If STWORD, RWORD and FLG2SEC are all zero, then a test is made to see if FLG2SEC is zero. If it is, STWORD is examined. On the other hand, if FLG2SEC is not zero, the lowest 1 in FLG2SEC is converted to a patient number which is stored in register RO, and the lowest 1 is changed to a 0. Thereafter, the HFP2 subroutine is executed for the patient whose number appears in the register. It is apparent that the HFP2 subroutine is executed eight times in succession (unless an interrupt occurs or one of STWORD, RWORD, or FLG2SEC is not zero between successive examinations of FLG256) following which the HFP2 subroutine is not executed again for 256 milliseconds.

FIG. 24 -- EXECUTIVE WAIT LOOP OPERATOR INTERRUPT PROGRAM

In order to control a learning routine, the operator is required to type the letter L, followed by the number of the patient for whom the learning routine is necessary. An interrupt can be serviced only when the EXECUTIVE WAIT LOOP program is being executed. (In the event of both external and operator interrupts occurring at the same time, the external interrupt has priority.) When an interrupt signal is transmitted to the computer from the keyboard and it is serviced, the character on the data line from the keyboard is read into register RO. But before this is done all register information is saved for the return from the interrupt-- a technique well known to those skilled in the art. The character should be an L or one of the numbers 170-177. If the character is an L, LFLG is set equal to 1. An "echo" signal is transmitted to the printer which simply controls it to print the letter L. This informs the operator that the character which he has typed has been recognized. The operator then keys in one of the numbers 170-177.

On the other hand, suppose that the character keyed in is not an L. This means either that the operator has made a mistake, or that an L was previously typed in and that the new character in register RO is one of the numbers 170-177. Following the testing of the character in the register, after it has been determined not to be an L, a test is made to see if LFLG is a 1. If it is not 1, it is an indication that the previous character was not an L, and that the present character should be ignored. Accordingly, no echo signal is returned to the printer and a RETURN is made from the interrupt. Before the RETURN is made, the previously "saved" register information is restored, and the interrupt facility of the computer is re-enabled so that another valid interrupt is allowed to take place. The lack of the return of an echo signal to the operator informs him that a mistake has been made.

On the other hand, if after it is determined that the character in the register is not an L, it is determined that LFLG is a 1, that is an indication that the preceding character was an L. Accordingly, a test is now made to see if the character in the register is one of the valid patient number codes 170-177. If it is not, the registers are restored, the interrupt facility is re-enabled, and a RETURN is made to the EXECUTIVE WAIT LOOP program; the lack of an echo signal to the operator informs him that a mistake has been made.

If a valid patient code number has been keyed in, then the OPERATOR INTERRUPT program sets the LRN POINTER of the patient whose number is now in the register to -1. It will be recalled that in order to initiate a learning routine it is necessary for the LRN POINTER of a patient to be set equal to -1. The actual calling of the LRN subroutine will occur at the end of the 16-second timing interval which is now initiated (see FIG. 23). The LCOUNTER word for the current patient is cleared so that a new count up to 8 can begin. In the next step, LFLG is reset to 0 in preparation for the keying in of another learning command. An echo signal is then sent to the operator; the number keyed in by the operator is printed to inform him that the computer has acknowledged his command. The interrupt facility is then reenabled and a RETURN is made to the EXECUTIVE WAIT LOOP program.

FIGS. 25A-25C -- EXECUTIVE WAIT LOOP EXTERNAL INTERRUPT PROGRAM

Following an interrupt signal on the external data line, the data on the external data line is placed in register RO after the present register information is saved. The DONE pulse is then transmitted to reset flip-flop 60 (FIG. 1) so a data value will be available when the processor looks for it. The EXTERNAL INTERRUPT program is designed to operate first upon a patient number and then upon a data point. Accordingly, register RO is examined to see if a valid one of patient number codes 170-177 has been received. If it has not, the registers are restored, the interrupt facility is re-enabled, and a RETURN is made to the EXECUTIVE WAIT LOOP program.

On the other hand, if a valid patient number code has been received, it is an indication that another 1-millisecond interval has elapsed since the receipt of the last patient number code. At this time, RRTMR is incremented, RRTMR representing the real time of day in milliseconds. The next step is to increment 1MINTMR. This is the word which is used to identify 1-minute intervals as required by the FVP subroutine. A test is then made to see if 1MINTMR is equal to 60,000 (representing 1 minute). If it does equal 60,000, as described in connection with the FVP subroutine, the VPB COUNTER of each patient is reset to zero. The counter word 1MINTMR is then reset to zero so that another 1-minute interval can be counted. If whenever a new patient number code is received and following the incrementing of 1MINTMR it does not equal 60,000, then a branch is taken directly to the step in which the 2-second timer word 2SECTMR is incremented.

The 2-second timer word is then tested to see if it is equal to 2,000. Since 2SECTMR is incremented at 1-millisecond intervals, the word will be equal to 2,000 after 2 seconds have elapsed. If two seconds have not yet elapsed, a branch is made directly to the step in which 256MSTMR is incremented. However, if 2SECTMR is equal to 2,000, it is an indication that the DTP2 subroutine must be executed for each patient. Referring to FIG. 23, it will be recalled that this is controlled by setting FLG2SEC to 11111111. Accordingly, this is done by the EXTERNAL INTERRUPT program. Also, 2SECTMR is reset to zero so that another 2-second interval may be measured.

Timer (counter) word 256MSTMR is then incremented. It will be recalled that the HFP2 subroutine must be executed for each patient once every 256 milliseconds. This is accomplished by first setting FLG256 equal to 11111111 (see FIG. 23) after each 256-millisecond interval has elapsed. Counter word 256MSTMR is equal to 256 after 256 milliseconds have elapsed. A test is performed to see if the counter word equals 256, and if it does FLG256 is set accordingly and the counter word is reset to zero so that a new 256-millisecond timing interval can begin.

In the event the RECORD BIT for any patient has been set to 1 (see FIG. 23), it is an indication that an "on" signal has been sent previously to the recorder of the current patient whose number appears in register RO. Each patient is provided with a 3SECTMR counter word for determining when the recording has progressed for 3 seconds. It will be recalled that the 3SECTMR counter word for a patient is reset to zero (see FIG. 23) when the "on" signal is first sent to the respective recorder. The EXTERNAL INTERRUPT program first tests the RECORD BIT for the current patient to see if it is equal to 1. If it is not, it is an indication that the respective recorder is not in operation and a branch is made directly to the next step in which another character is read, as will be described below. On the other hand, if the RECORD BIT for the current patient is 1, the respective 3SECTMR counter word for the patient is incremented to indicate that another millisecond has elapsed. A test is then made to see if 3SECTMR for the current patient is equal to 3,000 to indicate that recording has been in progress for 3 seconds. If the recording should not yet terminate, a branch is made to that step in which the next character is read. On the other hand, if there have already been 3 seconds of recording, then the RECORD BIT for the current patient is reset to 0 so that the steps under consideration will be skipped during subsequent executions of the EXTERNAL INTERRUPT program when the same patient's number code is placed in register RO. At this time it is also necessary to transmit an "off" signal to the recorder for the current patient and this is controlled prior to the reading of the next character.

The computer now reads the data point for the patient whose patient number code is in register RO. The data value appears on data line 46 (FIG. 1), the data value having been caused to appear by the generation of the DONE pulse. The data point is read into register R1.

FOllowing the reading of a data point into register R1, the computer sets NDP (new data point) for the current patient (whose patient number code is in register RO) to the value represented in register R1. Thereafter, the AVLEV value for the current patient is subtracted from NDP to derive the ADP value to be used by the LFP subroutine.

Thereafter, the eight subroutines which must be executed every time a new data point is received are executed, namely, the HFP1, DFP, DTP1, LFP, ARP1, TCP1, RWD and MCP subroutines.

After all of the subroutines have been executed as required for the new data point, the registers are restored, the interrupt facility is re-enabled and a RETURN is made to the EXECUTIVE WAIT LOOP program.

Although the invention has been described with reference to a particular embodiment, it is to be understood that this embodiment is merely illustrative of the application of the principles of the invention. For example, it should be noted that the MCP subroutine determines the morphology type number of each R wave of a patient by processing all data points which are received between successive strobe times. Although data points derived from P and T waves, and from noise, should have little effect on the system due to their small magnitudes, if the computer has a large memory capacity it is preferable to record all of the data points for each patient until the R wave is detected. In other words, the only subroutines which would be executed following the characterization of the previous R wave are those necessary to detect the next R wave. Immediately upon the detection of the R wave, the samples for the patient which occurred during the previous 100 milliseconds or so, together with the samples which occur during the next 232 milliseconds (until strobe time) could be the only ones used by the subroutines, such as MCP, which characterize the waveform. In this way, each overall ECG cycle of a patient could be bracketed in such a manner that samples of only the R wave could affect its characterization. Of course, additional memory capacity would be required in order to store all of the data points as they arrive, until the system is able to determine those which must be processed. As another variation, it should be noted that in the EXECUTIVE program of FIG. 23 the RRP and TCP2 subroutines could be executed together with the MRP, VRP, etc. subroutines under control of STWORD. In such a case there would be no need to even form or test RWORD. Thus it is to be understood that numerous modifications may be made in the illustrative embodiment of the invention and other arrangements may be devised without departing from the spirit and scope of the invention.

* * * * *

File A Patent Application

  • Protect your idea -- Don't let someone else file first. Learn more.

  • 3 Easy Steps -- Complete Form, application Review, and File. See our process.

  • Attorney Review -- Have your application reviewed by a Patent Attorney. See what's included.