Data reduction systems and methods for reducing data communicated with and / or stored in implantable medical devices

The data reduction system addresses memory and power constraints in IPGs by compressing repetitive pulse parameter data, enabling smaller devices and more complex therapy waveforms with reduced power consumption.

WO2026128255A1PCT designated stage Publication Date: 2026-06-18ADVANCED NEUROMODULATION SYSTEMS INC

Patent Information

Authority / Receiving Office
WO · WO
Patent Type
Applications
Current Assignee / Owner
ADVANCED NEUROMODULATION SYSTEMS INC
Filing Date
2025-12-02
Publication Date
2026-06-18

AI Technical Summary

Technical Problem

Implantable pulse generators (IPGs) face challenges with memory and power constraints due to the need to store and communicate complex stimulation programs and diagnostic data, which can lead to habituation issues and increased power consumption, particularly with complex waveform programming.

Method used

A data reduction system and method using a lossless pattern compression algorithm that identifies repetitive pulse parameter data sets in IPGs, replacing repeated patterns with a single instance and a recurrence count or a pointer to a stored reference pattern, reducing memory and power requirements.

🎯Benefits of technology

The system effectively reduces memory and power consumption in IPGs, allowing for smaller devices and more complex therapy waveforms while minimizing communication time and power usage.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure US2025057703_18062026_PF_FP_ABST
    Figure US2025057703_18062026_PF_FP_ABST
Patent Text Reader

Abstract

A method of conducting operations for an IPG adapted to provide electrical pulses to tissue of a patient for medical therapy is provided. The IPG provides the medical therapy according to pulse parameter data executed according to an execution path. The method can include identifying a root node repeated within the execution path of a first set of the pulse parameter data, identifying a stimulation pulse pattern repeated in the first set between occurrences of the root node, replacing the repeated pattern with (a) a single instance and a recurrence count or (b) a pointer to a reference pattern to generate a second set of the pulse parameter data, and communicating the second set between the external controller and the IPG and / or storing the second set within a memory of the IPG.
Need to check novelty before this filing date? Find Prior Art

Description

DATA REDUCTION SYSTEMS AND METHODS FOR REDUCING DATA COMMUNICATED WITH AND / OR STORED IN IMPLANTABLE MEDICAL DEVICESCROSS-REFERENCE TO RELATED APPLICATIONS

[0001] This application claims priority to U.S. Provisional Application No. 63 / 729,666 (filed 09-December-2024) and U.S. Provisional Application No. 63 / 729,684 (filed 09-December-2024), the entire disclosures of which are incorporated herein by reference.BACKGROUND

[0002] Implantable pulse generators (IPGs), such as active implantable medical devices (AIMDs), can be implanted into patients and actively interact with physiological functions of the patients for a variety of medical purposes, such as monitoring, diagnosing, and / or providing therapy for various medical conditions. Examples of such devices include pacemakers, defibrillators, deep brain stimulators (DBS), spinal cord stimulators (SCS), vagus nerve stimulators, peripheral nerve stimulators, and the like.

[0003] IPGs can be resource constrained due to the small sizes of the devices and low power usage. Low power usage can be important to keep the battery size small and the recharging intervals longer. Smaller sizes also can be important to reduce surgical and physical impacts to the patient. Additionally, memory size and processing cycles of the IPGs may need to be kept small to meet the size and longevity needs of the patients. Due to the devices being implanted in the patients, communication requires wireless links which may be slow and / or consume significant power. To meet the longevity and usability needs of the IPG, communication content may need to be reduced as much as possible.15900W001 1 PATENT

[0004] In IPGs that provide electric stimulation to the patients, the majority of memory usage and communication data can be dedicated to stimulation programs and logging (or diagnostic) data. Stimulation programs can include electric pulse and timing definitions that instruct the devices what output to provide to the patient. Each pulse and timing definition can require memory space for storing the parameters of each pulse and timing interval. Electric pulses delivered by the IPGs can be defined or controlled by several parameters, such as amplitude of the pulse, the width (or duration) of the pulse, pulse intervals (the time between sequential pulses), which electrodes of the IPGs are used to deliver the pulse (e.g., the electrode combination), and the like.

[0005] Stimulation therapies are moving toward using more complex pulse waveforms to improve therapy outcomes for patients. These complex waveforms can significantly increase the number of pulses and intervals required per program. Additionally, many patients can use multiple programs so that the IPGs can switch between programs for different activities or times of day. Each program can multiply the amount of memory storage needed within the IPG.

[0006] For example, IPGs can be neuromodulation systems used for treatment of a wide range of conditions. These IPGs can deliver stimulation by delivering pulses of a programmable amplitude and pulse width at a programmable repetition rate. While repetitive stimulation at a given set of parameters may be generally effective, there is concern that delivering a consistent short stimulation pulse pattern over time can lead to a patient becoming habituated to the therapy and reducing efficacy of the stimulation therapy over time. Delivering longer patterns with more variation over time could be a tool to help address habituation, but adapting some known techniques for programming and storing therapy patterns can cause this approach to demand prohibitively large on-device memory storage for complex pattern delivery.15900W001 2 PATENT

[0007] Logging and diagnostic data can be another important type of data for IPGs to maintain safe and reliable operation, as well as for post market analysis of failed devices to recognize and address trends leading to failure. This data, however, can share the same memory space in the IPGs as programs, and therefore require compromises in capability to stay within the allowable memory size.

[0008] Memory storage in IPGs can be costly both in space and power, which can make storing and processing multiple complex programs along with logging data difficult in the devices. Currently, some known IPGs limit the amount of complexity that a pulse waveform can have, limit the amount of logging data that can be stored, and / or increase the sizes of the devices to support larger battery sizes.

[0009] But even if a device has enough memory, complex waveform programming can take minutes of communication time, which is both inconvenient and costly in a clinical setting. This programming also can consume considerable power due to the high-power usage of the wireless link.15900W001 3 PATENTSUMMARY

[0010] In one example, a method of conducting operations for an IPG adapted to provide electrical pulses to tissue of a patient for a medical therapy is provided. The IPG is programmable to provide the medical therapy according to pulse parameter data that is executed according to an execution path. The method can include identifying a root node that is repeated within the execution path of a first set of the pulse parameter data, identifying a stimulation pulse pattern that is repeated in the first set of the pulse parameter data between repeated occurrences of the root node in the execution path, replacing the stimulation pulse pattern that is repeated in the first set of the pulse parameter data with (a) a single instance of the stimulation pulse pattern and a recurrence count or (b) a pointer to a stored reference pattern to generate a second set of the pulse parameter data, and one or more of communicating the second set of the pulse parameter data between the external controller and the IPG and / or storing the second set of the pulse parameter data with the stimulation pulse pattern within a memory of the IPG.

[0011] In another example, an IPG adapted to provide electrical pulses to tissue of a patient for a medical therapy according to pulse parameter data that is executed according to an execution path is provided. The IPG can include a microcontroller configured to identify a root node that is repeated within the execution path of a first set of pulse parameter data. The microcontroller can identify a stimulation pulse pattern that is repeated in the first set of pulse parameter data between repeated occurrences of the root node in the execution path. The microcontroller can replace the stimulation pulse pattern that is repeated in the first set of the pulse parameter data with (a) a single instance of the stimulation pulse pattern and a recurrence count or (b) a pointer to a stored reference pattern to generate a second set of the pulse parameter data. The IPG can include stimulation circuitry that can deliver the stimulation therapy to the patient according to the second set of the pulse parameter data.15900W001 4 PATENT

[0012] In another example, an external device for an IPG adapted to provide electrical pulses to tissue of a patient for a medical therapy is provided. The IPG is programmable to provide the medical therapy according to pulse parameter data that is executed according to an execution path. The external device can include a controller that can identify a root node that is repeated within the execution path of a first set of the pulse parameter data. The controller can identify a stimulation pulse pattern that is repeated in the first set of the pulse parameter data between repeated occurrences of the root node in the execution path. The controller can replace the stimulation pulse pattern that is repeated in the first set of the pulse parameter data with (a) a single instance of the stimulation pulse pattern and a recurrence count or (b) a pointer to a stored reference pattern to generate a second set of the pulse parameter data. The external device also can include communication circuitry that can (c) transmit the second set of the pulse parameter data to the IPG or (d) receive the second set of the pulse parameter data from the IPG for logging.

[0013] In another example, a method of controlling operation of an IPG that can apply stimulation pulses to a patient according to a set of stimulation parameters. The method can include identifying a set of one or more of the stimulation parameters to change for the stimulation pulses that are applied to the patient during stimulation therapy, and applying a modulo function to the one or more of the stimulation parameters to change values of the one or more of the stimulation parameters. The modulo function can indicate changes to the one or more of the stimulation parameters as a function of a number of the stimulation pulses. The modulo function also can include a pulse index identifying one or more others of the stimulation parameters to maintain during the stimulation pulses output by the IMD.

[0014] The method also can include identifying at least one additional set of one or more of the stimulation parameters to change during one or more15900W001 5 PATENTadditional upcoming stimulation pulses of the stimulation pulses, and changing the one or more of the stimulation parameters in the at least one additional set according to the at least one additional modulo function. Each of the at least one additional modulo function can indicate different changes to the one or more of the stimulation parameters in the one or more others of the stimulation pulses.

[0015] The modulo function can include a random or pseudo-random change to the one or more of the stimulation parameters in the set. The modulo function can be a repeating function. The repeating function can include one or more of a sawtooth waveform, a square waveform, a sinusoidal waveform. The modulo function can be a combination of two or more repeating functions. The modulo function can increase or decrease the one or more of the stimulation parameters from a baseline value.

[0016] The pulse index can identify the one or more others of the stimulation parameters to maintain a prior value from a prior stimulation pulse for the upcoming stimulation pulse. The stimulation parameters can include a pulse amplitude, a pulse width, a selection of one or more electrodes of the IMD to apply the upcoming stimulation pulse, or a pulse interval.BRIEF DESCRIPTION OF THE DRAWINGS

[0017] Figure 1 depicts a high-level functional block diagram of one example of a neurostimulation system.

[0018] Figure 2 illustrates one example of an execution path of a microcontroller of an IPG.

[0019] Figure 3 illustrates one example of a data compression algorithm used by a data reduction system.15900W001 6 PATENT

[0020] Figure 4 illustrates a flowchart of one example of a method for reducing data.

[0021] Figure 5 illustrates a flowchart of another example of a method for reducing data.

[0022] Figure 6 illustrates one example of modulated pulse parameters.

[0023] Figure 7 illustrates another example of modulated pulse parameters.

[0024] Figure 8 illustrates one example of a pulse train.

[0025] Figure 9 illustrates another example of a pulse train created by modifying one or more pulse parameters.

[0026] Figure 10 illustrates another example of a pulse train created by modifying one or more pulse parameters.

[0027] Figure 11 illustrates another example of a pulse train created by modifying one or more pulse parameters.

[0028] Figure 12 illustrates another example of a pulse train created by modifying one or more pulse parameters.

[0029] Figure 13 illustrates another example of a pulse train created by modifying one or more pulse parameters.

[0030] Figure 1 illustrates a flowchart of an example of a method for modulating pulse parameters.15900W001 7 PATENTDETAILED DESCRIPTION

[0031] It will be readily understood that the components of the embodiments as generally described and illustrated in the Figures herein, may be arranged and designed in a wide variety of different configurations in addition to the described example embodiments. Thus, the following more detailed description of the example embodiments, as represented in the Figures, is not intended to limit the scope of the embodiments, as claimed, but is merely representative of example embodiments.

[0032] Reference throughout this specification to “one embodiment” or “an embodiment” (or the like) means that a particular feature, structure, or characteristic described in connection with the embodiment is included in at least one embodiment. Thus, appearances of the phrases “in one embodiment” or “in an embodiment” or the like in various places throughout this specification are not necessarily all referring to the same embodiment.

[0033] Furthermore, the described features, structures, or characteristics may be combined in any suitable manner in one or more embodiments. In the following description, numerous specific details are provided to give a thorough understanding of embodiments. One skilled in the relevant art will recognize, however, that the various embodiments can be practiced without one or more of the specific details, or with other methods, components, materials, etc. In other instances, well-known structures, materials, or operations are not shown or described in detail to avoid obfuscation. The following description is intended only by way of example, and simply illustrates certain example embodiments.

[0034] The methods described herein may employ structures or aspects of various embodiments (e.g., systems and / or methods) discussed herein. In various embodiments, certain operations may be omitted or added, certain operations may be combined, certain operations may be performed simultaneously, certain operations may be performed concurrently, certain15900W001 8 PATENToperations may be split into multiple operations, certain operations may be performed in a different order, or certain operations or series of operations may be re-performed in an iterative fashion. It should be noted that other methods may be used, in accordance with an embodiment herein. Further, wherein indicated, the methods may be fully or partially implemented by one or more processors of one or more devices or systems. While the operations of some methods may be described as performed by the processor(s) of one device, additionally, some or all of such operations may be performed by the processor(s) of another device described herein.

[0035] Each and every patent, published patent application, specification and publication referenced herein is expressly incorporated by reference in its entirety.

[0036] In one example of the inventive subject matter described herein, a data reduction system and method provides or utilizes a lossless pattern compression algorithm for recognizing and reducing the data size of repetitive pulse parameter data sets used in IPGs. Examples of data sets with repetitive data include stimulation programs, pulse waveforms, diagnostic logs, analog-to- digital converter (ADC) readings, machine learning (ML) input data, execution path traces, and the like. The system and method reduces data size by recognizing consecutive stimulation pulse patterns and, instead of repeating the repetitive patterns in the pulse parameter data sets, the system and method can replace the repetitive patterns with a single instance of the pattern and a recurrence count. This can reduce the size of the data set that is communicated to the IPGs, as well as reduce the requirements of the internal memory of the IPGs. The systems and methods can operate for maximum pattern compression, or can balance pattern compression versus on-board resources. The examples described herein are not limited to being used in IPGs, however. The subject matter described herein can be used on external devices that communicate15900W001 9 PATENTand / or program the IPGs to reduce communication time, power, and storage space for the IPG.

[0037] The data reduction systems and methods can use a root node to simplify steps needed to compress the data sets and therefore the resources needed to run stimulation therapies on the IPGs. A root node can include a point or step that is regularly returned to in a data set. For example, an execution path trace data for a microcontroller of the IPGs can repeatedly return to a sleep state to minimize power usage. This can be used as a root node, with the execution paths between sleep states being the individual stimulation pulse patterns by which stimulation therapy is provided to a patient. Optionally, watchdog petting intervals, logging intervals, repeated pulse parameters, or the like.

[0038] Each data set may have a different root node, and some data sets may have multiple root nodes that can be used depending on the application and type of compression optimization that is desired. For instance, in the case of a complex stimulation program, the program may have repeated amplitudes, pulse widths, pulse intervals, and pulse definitions. For this data set, any of these parameters or a combination of the parameters can be used as the root node (in addition to or in place of the sleep state).

[0039] The data reduction systems and methods can employ the pattern compression algorithm in different ways. For example, the pattern compression may be used to reduce the amount of computation cycles needed, which in turn can reduce the power and memory used by the IPGs. This can be useful for running the pattern compression algorithm directly on an IPG to reduce the memory and power overhead, while still reducing the memory used for data sets. Furthermore, the data reduction systems and methods can operate onboard the IPGs or the external devices in real-time on data bytes (e.g., as the data bytes are received). This can eliminate or reduce the need for storing the raw data prior to processing. This may only involve twice a larger or largest pattern size of extra15900W001 10 PATENTmemory to compute. The repetitive data can have pattern sizes that are much smaller than the data set. Therefore, the pattern memory usage can be insignificant compared to the size of the data saved.

[0040] Additionally, the data reduction systems and methods can reduce data set size further by using pattern references and pointers. Each pattern can be stored in memory only once, and a reference to that pattern is stored with a sequential recurrence count that the pattern is to be repeated in the data set memory.

[0041] In addition to running on an IPG, the data reduction systems and methods can run the pattern compression algorithm on the external device to reduce data set sizes prior to the data sets being sent to an IPG. This can reduce the communication time and power of the programming session where the external device programs the IPGs with the pulse patterns, as well as reducing or eliminating the need for on-board computation of the patterns.

[0042] The data reduction systems and methods can losslessly reduce the memory size of repetitive data sets used on IPGs. This can reduce the memory, power, and space needed for the IPG, which can allow for smaller devices, or the ability to include more complex features in the pulse patterns. Implementation of the pattern compression algorithm using the root node can require reduced or very little amounts of power and memory overhead in the resource constrained IPG. The data reduction systems and methods can operate in real-time on data as the data is received to reduce or eliminate needs for an input buffer and create a rolling output that can be sampled at any time.

[0043] The data reduction systems and methods can reduce memory usage via pattern references with higher processing power or higher compression needs. The data reduction systems and methods can reduce communication time between IPGs and external devices for large data sets (by15900W001 11 PATENTcommunicating the data sets made smaller by the pattern compression algorithms described herein). The data reduction systems and methods can increase the number of complex waveforms that can be stored in an IPG to support new therapy waveforms that get improved therapeutic results. The systems and methods can be used with machine learning input data sets to improve algorithm latency and complexity in a resource constrained device such as an IPG.

[0044] Figure 1 depicts a high-level functional block diagram of one example of a neurostimulation system 100. Neurostimulation system 100 represents one or more devices that generate electrical pulses and deliver the pulses to neural tissue of a patient to treat a variety of disorders. For example, neurostimulation system 100 may be used to provide DBS therapy for patients with movement disorders, SCS therapy in which electrical pulses are delivered to neural tissue of the spinal cord for the purpose of chronic pain control, and so on.

[0045] Neurostimulation system 100 can include a generator portion (e.g., IPG 110) for providing an energy source for electrical stimulation via stimulus pulses. Neurostimulation system 100 also can include a stimulation portion (e.g., lead 130 of IPG 110. Lead 130 has one or more electrodes 132, 133, 134, 135 which may be at different locations along elongated insulative body 131. The stimulation portion is used for application of the stimulus pulses via one or more electrodes 132, 133, 134, 135.

[0046] Neurostimulation system 100 optionally can include an external controller device (e.g., external programmer or controller 140) to program and / or control IPG 110 via a wireless communications link. IPG 110 may be implanted within a living body for providing electrical stimulation from IPG 110 to a selected area of the body, such as a region of the brain or spinal cord, via electrode(s) 132, 133, 134, 135 of lead 130. In some embodiments, IPG 110 provides electrical stimulation under control of external programmer / controller 140.15900W001 12 PATENT

[0047] Lead 130 is illustrated to provide a stimulation portion and can provide stimulation remotely with respect to the power supply of IPG 110, but lead 130 as described herein is intended to encompass a variety of stimulation portion configurations. Furthermore, a lead configuration may include more (e.g., 8, 16, 32, etc.) or fewer (e.g., 1 , 2, etc.) electrodes 132, 133, 134, 135 than those illustrated.

[0048] IPG 110 can include power supply 111 , voltage regulator 113, communication circuitry 114 (e.g., radio frequency, or RF, circuitry), one or more microcontrollers (or microprocessors) 115, stimulation circuitry 116, and clock 117. Power supply 111 provides a source of electric power, such as from battery 112, to other components of the IPG 110, as may be regulated by voltage regulator 113. Battery 112 may comprise a non-rechargeable (e.g., single use) battery, a rechargeable battery, a capacitor, and / or similar power sources.Charge control 118 provides management for battery 112 and power supply 111 in some examples. In other embodiments, when battery 112 is depleted, it may be recharged after being implanted, for example, inductive coupling and external charging circuits. Circuitry for recharging a rechargeable battery of an implantable pulse generator using inductive coupling and external charging circuits are described in U.S. Pat. No. 7,212,110, entitled "IMPLANTABLE DEVICE AND SYSTEM FOR WIRELESS COMMUNICATION," which is incorporated herein by reference.

[0049] RF circuitry 114 provides wireless data communication between one or more microcontrollers or microprocessors 115 and controller 142 in external program mer / controller 140 via RF circuitry 141. Controller 142 can represent one or more microprocessors, integrated circuits, application specific integrated circuits, field programmable gate arrays, or the like. RF circuitry 114 and / or 141 may be a receiver, a transmitter, and / or transceiver depending upon the communication links desired using far-field and / or near field communication15900W001 13 PATENTcommunications. The communication links may be established using suitable communication methods such as inductive wireless communication, low energy BLUETOOTH® communication, and medical band wireless communication as examples. An example of BLUETOOTH® communication between an implantable medical device and a programmer device is found, for example, in U.S. Pat. No. 9,894,691 , entitled SYSTEMS AND METHODS FOR ESTABLISHING A COMMUNICATION LINK BETWEEN AN IMPLANTABLE MEDICAL DEVICE AND AN EXTERNAL INSTRUMENT, the disclosure of which is incorporated herein by reference.

[0050] Microcontroller 115 represents one or more processors (e.g., microprocessors, field programmable gate arrays, integrated circuits, application specific integrated circuits, or the like) that provide control over operation of IPG 110, such as in accordance with programs provided thereto by external programmer / controller 140. Software code can be stored in tangible and non- transitory computer readable memory 120 of IPG 110 for execution by the microcontroller 115 to control the various components of the device. The software code stored in memory 120 of IPG 110 may support operations of embodiments disclosed herein. Memory 120 can represent static random-access memory or another type of memory.

[0051] Stimulation circuitry 116 can generate and deliver electric pulses to selected ones of electrodes 132-135 on lead body 131 under control of microcontroller 115. Stimulation circuitry 116 can include numerous components 151 , 152, 153, or the like for performing the operations of the IPG 110. For example, voltage multiplier 151 and voltage / current control 152 may deliver a constant current pulse of a desired magnitude using selected ones of electrodes 132-135. Clock 117 can provide system timing information, such as may be used by microcontroller 115 in controlling device operation and / or voltage multiplier 151 in generating a desired voltage, etc.15900W001 14 PATENT

[0052] Lead 130 of the illustrated embodiment includes lead body 131 , which can incorporate internal conductors coupled to lead connectors that interface with lead connectors 153 of IPG 110. Lead 130 includes electrodes 132-135, which can be coupled to internal conductors 153. Internal conductors 153 provide electrical connection from individual lead connectors 153 to each of a corresponding one of electrodes 132-235. Lead 130 can transmit one or more electrical signals from IPG 110 for application at, or proximate to, a spinal nerve or peripheral nerve, brain matter, muscle, heart, or other tissue via electrodes 132-135. IPG 110 can control the electrical signals by varying signal parameters, such as pulse amplitude, pulse width, pulse frequency or interval, burst frequency, electrode combination, and / or the like to deliver a desired therapy or otherwise provide operation as described herein.

[0053] Although the embodiment illustrated in Figure 1 includes four electrodes, it should be appreciated that any number of electrodes, and corresponding conductors, may be utilized according to some embodiments. Moreover, various types, configurations, and shapes of electrodes (and lead connectors) may be used according to some embodiments. An optional lumen (not shown) may extend through lead 130, such as for use in delivery of chemicals or drugs or to accept a stylet during placement of the lead within the body. Additionally, or alternatively, lead 130 (stimulation portion) and IPG 110 (generator portion) of stimulation system 100 may comprise a unitary construction, such as that of a microstimulator configuration.

[0054] Neurostimulation system 100 can supply suitable therapy pulses to a patient by enabling a pattern of electrical pulses to be varied across the electrodes 132-135 of lead or leads 130. Such systems enable electrodes of a connected stimulation lead 130 to be set as an anode(+), as a cathode(-), or to a high-impedance state (OFF). Negatively charged ions can be conducted away from a cathode toward an anode. Consequently, a range of very simple to very15900W001 15 PATENTcomplex electrical fields can be created by defining different electrodes 132-135 in various combinations of (+), (-), and OFF. Of course, in any instance, a functional combination must include at least one anode and at least one cathode. In an embodiment, the case or "can" of the neurostimulation system 100 or IPG 110 may function as an anode. When determining the appropriate electrode configurations, the selection of electrodes 132-135 to function as anodes can often facilitate isolation of the applied electrical field to desired fibers and other neural structures. Specifically, the selection of an electrode 132-135 to function as an anode at a position adjacent to another electrode functioning as a cathode causes the resulting electron / ion flow to be limited to tissues immediately surrounding the two electrodes. By alternating through the possible anode / cathode combinations, it is possible to gain greater resolution in the stimulation of desired tissue or neural structures.

[0055] As mentioned above, programmer / controller 140 provides data communication with IPG 110, such as to provide control (e.g., adjust stimulation settings), provide programming (e.g., alter the electrodes to which stimulation pulses are delivered), etc. Accordingly, programmer / controller 140 of the illustrated embodiment includes RF circuitry 141 for establishing a wireless link with IPG 110, and controller 142 to provide control with respect to IPG 110. Programmer / controller 140 may receive data from IPG 110 that can be displayed to medical personnel or a clinician on a screen on programmer / controller 140. Additionally, or alternatively, programmer / controller 140 may provide power to IPG 110, such as via RF transmission by RF circuitry 141 . Optionally, however, a separate power controller may be provided for charging the power source 111 within IPG 110.

[0056] Additional detail with respect to pulse generation systems and the delivery of stimulation pulses may be found in U.S. Pat. No. 6,609,031 , entitled "MULTIPROGRAMMABLE TISSUE STIMULATOR AND METHOD," the15900W001 16 PATENTdisclosure of which is hereby incorporated herein by reference. Similarly, additional detail with respect to pulse generation systems and the delivery of stimulation pulses may be found in U.S. Pat. No. 7,937,158, entitled "MULTIPROGRAMMABLE TRIAL STIMULATOR," the disclosure of which is hereby incorporated herein by reference. Also, additional detail with respect to pulse generation system and delivery of stimulation pulses may be found in U.S. Pat. Pub. No. 2021 / 0402192, entitled "IMPLANTABLE PULSE GENERATOR FOR PROVIDING A NEUROSTIMULATION THERAPY USING COMPLEX IMPEDANCE MEASUREMENTS AND METHODS OF OPERATION," the disclosure of which is hereby incorporated herein by reference.

[0057] Microcontroller 115 can operate according to an execution path of a stimulation therapy. This execution path may be represented by data indicative of a series of operations performed by microcontroller 115. This data can be sent from external controller 140 to IPG 110 (where microcontroller 115 compresses repeated data as described herein), can be sent from IPG 110 to external controller 140 (where controller 142 compresses repeated data as described herein), and / or can be compressed by controller 142 before sending to IPG 110 as described herein.

[0058] The operations directed by the data can include, for example, delivering electric pulse(s) to the patient via one or more electrodes 132-135 and according to a stimulation program, initiating communication with external controller 140, interrupting or ending communication with external controller 140, testing a timer (e.g., clock 117), processing a data packet, code tracing data (e.g., logging data for diagnostic or other purposes), and the like. The data can include stimulation parameters or pulse parameter data that control the stimulation therapy applied by stimulation circuitry 116, such as amplitudes of electric pulses delivered to a patient via electrodes 132, 133, 134, and / or 135, pulse widths or durations of the electric pulses delivered to the patient, pulse15900W001 17 PATENTintervals or temporal gaps between the electric pulses delivered to the patient, electrode combinations of which electrodes 132, 133, 134, and / or 135 are to deliver the electric pulse(s) to the patient, and so on. These parameters can be communicated in data packets from external controller 140. Optionally, the data can include diagnostics or logs of measurements or therapy parameters delivered by IPG 110 that is sent to external controller 140 (with this data being compressed as described herein prior to sending from IPG 110 or after being received by external controller 140).

[0059] Microcontroller 115 can repeat one or more of operations or steps within the execution path (including delivery electric pulses according to the parameters), with microcontroller 115 returning to a common state or operation between repeated operations or steps. In one example, microcontroller 115 can return to a sleep state, or a deactivated or off state, between loops of repeated operations or steps.

[0060] Figure 2 illustrates one example of execution path 200 of microcontroller 115 of IPG 110. Execution path 200 can be treated as a timeline extending downward in Figure 2, with different operations or steps 202 of execution path 200 in different locations along this timeline. For example, execution path 200 may include a communication interrupt operation (“I2C Interrupt TX” in Figure 2) where the microcontroller 115 is activated or “wakes up” from a sleep state, testing clock 117 (“Test Timer I2C Tx Stop” in Figure 2), logging data (“Trace” in Figure 2), delivering electric therapy via electrodes 132- 135 according to one or more patterns (“Process Packet” in Figure 2), and so on.

[0061] As shown, different operations or steps 202 along execution path 200 are shown as loops 206 as microcontroller 115 returns to sleep state 204 upon completion of each operation or step 202. Additionally, some operations or steps 202 are repeated multiple times in a loop 206 along execution path 200 with microcontroller 115 returning to sleep state 204 following completion of each15900W001 18 PATENToperation or step 202 within that loop 206 and before operation or step 202 is repeated within the same loop 206. For example, a first loop 206A can include activation or waking up step 202 that is repeated sixteen times in first loop 206A (and in which the microcontroller 115 is activated or “wakes up” from a sleep state), with microcontroller 115 returning to sleep state 204 each time following communication with external controller 140 ends. A subsequent, second loop 206B can include the activation step, followed by starting a testing timer step, followed by ending testing timer step. Second loop 206B is performed only once in the illustrated example of execution path 200. Some loops 206 can be repeated several times before moving to a next loop 206 (as shown), while other loops 206 are formed only a single time before moving to the next loop 206. Recurrence counts 208 are shown along execution path 200 to indicate the number of times that a corresponding loop 206 is repeated before progressing to a subsequent loop 206. Execution path 200 shown in Figure 2 is but one example of many different execution paths 200 usable by microcontroller 115 in controlling IPG 110.

[0062] A root node may be identified or selected from execution path 200. The root node may be identified or selected based on repetition of one or more steps or operations 202, including returning to sleep state 204. In one example, microcontroller 115 can identify or select each time microcontroller 115 returns to sleep state 204 as a root node. Optionally, microcontroller 115 can identify or select each time a set of stimulation parameters is repeated during the execution path. For example, delivery of therapy to the patient can involve delivering electric pulses according to different sets of stimulation parameters, with one or more of these sets being repeated in execution path 200 to delivery therapy multiple times before progressing to the next step 202 in execution path 200. In the case of complex stimulation programs, the programs can have repeated pulse amplitudes, repeated pulse widths, repeated pulse intervals, or the like. Microcontroller 115 and / or controller 142 can select a set of stimulation15900W001 19 PATENTparameters that is repeated two or more times in execution path 200 as a root node.

[0063] As described herein, IPG 110, external controller 140, or both IPG 110 and external controller 140 may compress data for local storage and / or communication. While description of this compression may focus on microcontroller 115 of IPG 110, the same compression may be performed by controller 142 of external controller 140. Microcontroller 115 and / or external controller 140 identifies one or more patterns in the data within execution path 200 that are repeated between occurrences of the root node. Microcontroller 115 and / or external controller 140 compresses at least some of this data by replacing the repeated pattern with (a) a single instance of the pattern and a recurrence count or (b) a pointer to a stored reference pattern.

[0064] Figure 3 illustrates one example of a data compression algorithm used by a data reduction system that includes one or more of microcontroller 115 and memory 120 of IPG 110 or controller 142 and memory 143 of external controller 140. Original data 300 can represent data that is not yet compressed, and can include the information representing execution path 200 that IPG 110 is to follow during delivery of stimulation therapy, such as stimulation parameters, directions to log diagnostic data, directions to communicate with external controller 140, or the like. This data 300 can be compressed by controller 142 of external controller 140 prior to sending to IPG 110, can be received by microcontroller 115 of IPG 110 and then compressed, and / or can be compressed by microcontroller 115 of IPG 110 and then sent to controller 142 of external controller 140.

[0065] Original data 300 includes stimulation pulse data patterns 302 (e.g., patterns 302A, 302B, 302C, 302D) that can represent portions of original data 300. Original data 300 is shown in three rows of patterns 302, with patterns segments 302 to the left in each row being prior to patterns 302 to the right in15900W001 20 PATENTeach row, and with the top row preceding the middle row and the middle row preceding the bottom row.

[0066] Patterns 302 can represent loops 206 within execution path 200, and can include information such as stimulation parameters (e.g., pulse amplitudes, pulse intervals, pulse widths, electrode combinations, etc.), logged data (e.g., diagnostic data), or the like. Microcontroller 115 of IPG 110 and / or controller 142 of external controller 140 can examine the sequence or order of patterns 302 to identify repeated instances of patterns 302 within original data 300. In the illustrated example, pattern 302A is repeated three times in the top row of original data 300 in Figure 3, then is repeated twice in the top row, and then is repeated six times in the top row with other patterns 302B 302C between the repeated instances of pattern 302A. Pattern 302A is repeated four times in the middle row of original data 300, followed by pattern 302B repeated three times in the middle row, followed by pattern 302A repeated eight times through the end of the middle row and beginning of the bottom row. Pattern 302C separates the three repeated instances of pattern 302B and the beginning of the eight repeated instances of pattern 302A in the middle row. Pattern 302B is repeated four times in the bottom row of original data 300 with pattern 302A repeated six times in the bottom row.

[0067] Microcontroller 115 and / or controller 142 can reduce the size of original data 300 to compressed data 304 by replacing the repeated instances of patterns 302 with a single copy or instance of pattern 302 that is repeated and a recurrence count 306. As shown in compressed data 304, the three consecutive patterns 302A in the top row of original data 300 is reduced in size to a single instance of pattern 302A and recurrence count 306 of three in compressed data 304. The two consecutive patterns 302A in the top row of original data 300 is reduced in size to a single pattern 302A and recurrence count 306 of two. This reduction in data size can be performed for several or all repeated patterns 30215900W001 21 PATENTas shown in compressed data 304 without losing any information or details from original data 300 (e.g., the compression is lossless). In the illustrated example, the ninety-six bytes of data in original data 300 is reduced to forty-eight bytes of data in compressed data 304.

[0068] Microcontroller 115 and / or controller 142 can compress original data 300 to reduce the size of overall data 300 that is communicated to IPG 110, stored in memory 120 of IPG 110, communicated to external controller 140, and / or stored in memory 143 of external controller 140 (which may also be a tangible and non-transitory computer readable storage medium, such as a computer hard drive, solid state drive, or the like).

[0069] The foregoing description of data compression can be performed in real-time. For example, as data is received by IPG 110 or external controller 140, the microcontroller 115 or the controller 142 can compare incoming data patterns 302 with preceding data patterns 302 to identify repeated instances of patterns 302 and compress the data as described above. Optionally, IPG 110 or external controller 140 can collect incoming data patterns 302 and then compress the data once collected as described above.

[0070] Figure 4 illustrates a flowchart of one example of a method 400 for reducing data. The operations described in connection with method 400 can be performed by microcontroller 115 of IPG 110 and / or controller 142 of external controller 140. At 402, a byte count is set to a value of one. This count can be used to identify the first root node in original data 300 in an output buffer (OB) of memory 120 of IPG 110 or memory 143 of external controller 140. The output buffer can be used to store compressed data 304.

[0071] At 404, a decision is made as to whether the byte of original data 300 indicated by the byte count value is or directs IPG 110 to return to the root node (e.g., the sleep mode or a repeated set of stimulation parameters). For15900W001 22 PATENTexample, if the byte count value is one, then the first byte of data in original data 300 is examined at 404 to decide if that byte is the root node (or instructs IPG 110 to return to the root node). If this byte is or directs return to the root node, then flow of method 400 can proceed toward 408. But if this next byte is not or does not direct return to the root node, then flow of method 400 can proceed to 406. At 406, the byte count value is incremented (e.g., by one) and flow of method 400 returns to 404. At 404, the next byte of original data 300 (indicated by the byte count value) is examined and a decision is made as to whether this byte is the root node or directs IPG 110 to return to the root node. Method 400 can proceed in a loop between 404 and 406 until the byte of data 300 in the output buffer of memory 120 or memory 143 is the root node or directs the IPG 110 to return to the root node.

[0072] At 408, a value of a byte index is set to zero or null, and a value of a match index is set to true or one. The byte index can be used to increment through the bytes in data 300 to find repeated patterns 302. The match index can be used to identify sequential repeated patterns 302. Values of the byte count, byte index, and match index may be stored in memory 120 and / or memory 143. At 410, the next byte of data 300 is input into an input buffer (IB) of memory 120 or memory 143. The input buffer can be a portion of memory 120 or memory 143 in which an uncompressed stream of original data 300 is received. The input buffer can collect all original data 300 and then perform pattern matching as described herein, or can receive original data 300 in a real-time stream (and compare the bytes of this real-time stream as the bytes are being received).

[0073] At 412, the byte of data 300 at the byte index value is compared with a byte of data stored in a pattern buffer (PB) of memory 120 or memory 143. The pattern buffer can be a section of memory 120 or memory 143 that temporarily stores individual patterns 302 used in pattern matching (e.g., looking for sequential matching patterns 302 in original data 300). For example, if the15900W001 23 PATENTbyte index value is two, then the second byte of original data 300 in the input buffer is compared with the second byte of pattern 302 stored in the pattern buffer. If these bytes match, then flow of the method 400 can proceed toward 414. If the bytes do not match, then flow of the method 400 can proceed toward 416. At 414, the value of the byte index is increased or incremented by one. At 416, the value of the match index is set to false or zero. This can indicate that pattern 302 in original data 300 being currently examined does not match pattern 302 in the pattern buffer. As a result, the currently examined pattern 302 does not match the prior pattern 302.

[0074] At 418, a decision is made as to whether the next byte in original data 300 is the root node or directs the IPG 110 to return to the root node. If this next byte is the root node or directs the IPG 110 to return to the root node, then flow of the method 400 can proceed toward 422. If the next byte is not the root node or does not direct the IPG 110 to return to the root node, then flow of the method 400 can proceed toward 426.

[0075] At 422, a recurrence count 208 is incremented by one. This can indicate that a pattern in original data 300 matches a pattern 302 stored in the pattern buffer. Flow of method 400 can then proceed toward 424, where the contents of the input buffer are reset (e.g., deleted or otherwise removed from the input buffer). This input buffer can store bytes of original data 300 that have not yet been examined for pattern matching and / or can store these bytes of original data 300 as the bytes are received. Flow of method 400 can then return toward 408. Method 400 can proceed in a loop that extends from 424 to 408 so that each byte of original data 300 or of an incoming data stream of original data 300 can be compared with each byte of pattern 302 to determine whether original data 300 matches pattern 302 for two or more instances (as indicated by recurrence count 208).15900W001 24 PATENT

[0076] Returning to the decision at 420, if the next byte does not match the root node or does not direct IPG 110 to return to the root node, then the bytes in the original data 300 no longer match the pattern 302 stored in the output buffer. This can indicate that whatever pattern 302 may have been repeated two or more times in a row is no longer repeated in the next bytes of data from original data 200. Flow of method 400 can then proceed toward 426. At 426, another decision is made as to whether the recurrence count 208 is greater than one. If the recurrence count 208 is greater than one, then this indicates that the pattern 302 was found to be repeated two or more times in original data 300. Flow of method 400 can then proceed toward 428. If the recurrence count is not greater than one, then this indicates that the pattern 302 that matches the data in original data 300 has not been repeated in the original data 300. Flow of method 400 can proceed toward 432.

[0077] At 428, the recurrence count 208 is appended to the output buffer. That is, the recurrence count 208 that was found to be at least two at 426 is added to the output buffer. This causes the recurrence count 208 (for a pattern 302 found to be repeated at least twice in the original data 300) to be added after that pattern 302 in compressed data 304. For example, if the pattern 302B was found to repeat four times in original data 300, then recurrence count 208 is found to have a value of four at 426 and this value of four is added as recurrence count 208 after the pattern 302B in the output buffer of memory 120 or memory 143. Examples of this are shown in compressed data 304 in Figure 3.

[0078] At 430, the value of recurrence count 208 is changed to one. This can re-set recurrence value 208 after the number of repeated patterns 302 is identified and it is determined that the next bytes are not another repetition of this same pattern 302 (e.g., as determined or decided at 420).

[0079] Flow of method 400 can proceed toward 432 after the value of recurrence count 208 is set to one or after it is decided (at 426) that the match15900W001 25 PATENTbetween original data 300 and the pattern 302 has not occurred more than once in the sequence of data bytes in original data 300. At 432, the data in the input buffer is appended to the data in the output buffer. For example, the input buffer may store a pattern 302 (e.g., pattern 302C) and a recurrence count 208 indicating that pattern 302C has been found to repeat three times in a row (e.g., the recurrence count 208) in original data 300. This pattern 302C and recurrence count 208 of three can be added to the output buffer from the input buffer. This can build out compressed data 304, as shown in Figure 3.

[0080] At 434, the pattern buffer is replaced with data in the input buffer. For example, if the pattern buffer was storing pattern 302C and recurrence count 208 of three, then this data can be removed from the pattern buffer or overwritten by upcoming bytes in original data 300, such as the bytes that have not yet been examined for pattern matching. Flow of method 400 may proceed from 434 to 424, where the input buffer is reset, as described above. Method 400 may return to a prior operation, such as 408, to continue identifying patterns 302 and recurrence counts 208 of the patterns 302, or method 400 may terminate.

[0081] As referenced above, microcontroller 115 and / or external controller 140 can compress original data 300 by replacing repeated patterns 302 with a single instance of pattern 302 that is repeated and recurrence count 208 of that pattern 302. Additionally or alternatively, microcontroller 115 and / or external controller 140 can compress original data 300 by storing one or more reference patterns 302 in memory 120 and / or memory 143, and storing or communicating pointers to the one or more reference patterns 302. As a result, for any repetition of the reference pattern(s) 302 in original data 300, microcontroller 115 and / or external controller 140 can compress original data 300 by removing reference patterns 302 from original data 300 and replacing the removed reference patterns 302 with file pointers that point to these removed reference patterns 302.15900W001 26 PATENT

[0082] With reference to original data 300 shown in Figure 3, pattern 302A may be used as a reference pattern 302. Instead of storing or sending this reference pattern 302A multiple times as shown in original data 300, the data can be compressed by including a file pointer in compressed data 304 in place of reference pattern 302A each time reference pattern 302A occurs. As another example, a reference pattern 302 may be several patterns 302, such as a sequence of pattern 302A, then pattern 302B, then pattern 302C. When original data 300 includes this sequence of patterns 302A, 302B, 3020, microcontroller 115 and / or external controller 140 can compress original data 300 by replacing each sequence of patterns 302A, 302B, 302C with a file pointer to this sequence of patterns 302A, 302B, 3020. Replacing patterns 302 or sequences of patterns 302 with file pointers can significantly compress the size of original data 300 to compressed data 304, but can require storage of reference patterns 302 in memory 120 and / or memory 143.

[0083] Figure 5 illustrates a flowchart of one example of a method 500 for reducing data stored in memory 120 of IPG 110, stored in memory 143 of external controller 140, and / or communicated between IPG 110 and external controller 140. Method 500 can represent operations performed by microcontroller 115 and / or controller 142. At 502, reference patterns 302 are stored in memory 120 and / or memory 143. At 504, original data 300 is examined to identify occurrences of reference patterns 302. For example, if pattern 302D is a reference pattern 302 or if a sequence of patterns 302B, 302C, 302D is a reference pattern 302, then original data 300 can be examined to identify where the reference pattern 302 or reference pattern sequence 302 appears in original data 300. At 506, patterns 302 or sequences of patterns 302 in original data 300 that match one or more of reference patterns 302 or reference pattern sequences 302 are replaced with pointers. These pointers may be data that identifies the reference pattern 302 or sequence. This can form compressed data 304 by replacing (a) patterns 302 or sequences of patterns 302 that match (b) reference15900W001 27 PATENTpattern 302 or sequences of reference patterns 302 with pointers to the reference pattern 302 or sequences of reference patterns 302. The size of compressed data 304 is thereby reduced relative to original data 300 as the pointers are smaller in terms of data or memory storage than patterns 302 referred to by the pointers. At 508, compressed data 304 is stored in memory 120 and / or memory 143, or is communicated between IPG 110 and external controller 140.

[0084] As described above, stimulation therapy can involve delivering electric pulses to a patient using IPG 110, where the pulses are defined by parameters such as amplitude, pulse width, pulse interval, and / or electrode selection. A large amount of data (relative to the storage size of memory 120 and / or communication between IPG 110 and external controller 140) may be required to communicate these parameters. For example, for sending parameters for a single pulse, seven to sixteen bits of data may be needed for indicating the current amplitude of the pulse, six to eight bits of data may be needed for indicating the pulse width, and thirty-two bits of data may be needed for indicating the electrode selection (for a sixteen channel IPG 110). As a result, it can take as many as fifty-six bits of data to represent a single pulse and another sixteen or more bits to set the timing interval for that pulse.

[0085] Keeping these parameters the same for all or most pulses can help keep the amount of data stored in the IPG 110 or external controller 140 and / or communicated between IPG 110 and external controller 140 manageable, but at the risk of decreasing efficacy of the stimulation therapy. But changing these parameters between pulses can require a significant amount of data. Delivering a long pattern of pulses where stimulation parameters vary from pulse to pulse can help increase efficacy of the stimulation therapy, and can be achieved via a brute force method of having unique data for each parameter stored and / or communicated for each pulse. But this approach can easily add up to several kilobytes of memory 120 and / or memory 154 dedicated for delivery of a single15900W001 28 PATENTstimulation program of several pulses. This can be prohibitive on a memory-, power- and / or communication bandwidth-constrained IPG 110, especially when there is a desire to continue scaling the sizes of IPG 110 down and storing multiple therapy programs and logs.

[0086] In one example of data reduction systems 100 and methods described herein, a modulo concept or technique is used to vary one or more stimulation parameters from pulse-to-pulse without redefinition of the entire pulse parameter set. Instead of repeating the data for parameters such as amplitude, pulse width, electrode selection, and pulse interval for every pulse, a single modulo code can be used to modulate specified parameters around a defined or baseline setting. This modulo code can be relatively small, such as smaller than the data used to define the pulse parameters (e.g., amplitude, width, electrode selection, and pulse interval). For example, the modulo code may require only eight to sixteen bits of memory to store or communicate, while the pulse parameters may require fifty-six to seventy-two bits to store or communicate.

[0087] This modulo technique allows modulation of a parameter or group of parameters to produce longer, non-repetitive stimulation patterns without consuming excessive memory or adding excessive complexity in programming the implantable medical device. Longer and more complex stimulation patterns can be delivered without needing to repeat codes for the stimulation parameters that are not being modulated or changed. Figure 6 illustrates one example of modulated pulse parameters 600 created by applying a random modulo to a defined pulse parameter 602. Modulated pulse parameter 600 and defined pulse parameter 602 can represent amplitudes of stimulation pulses, but optionally can represent pulse widths, pulse intervals, and / or electrode selections.

[0088] Pulse parameters 600, 602 are shown alongside a horizontal axis 604 representative of pulse counts (e.g., the number of pulses applied during a stimulation therapy) and a vertical axis 606 representative of magnitudes of pulse15900W001 29 PATENTparameters 600, 602. In the illustrated example, vertical axis 606 represents increasing amplitudes of pulses, expressed in milliamps (mA). Optionally, vertical axis 606 can represent different pulse widths (in units of time), different pulse intervals (in units of time), or electrode combinations (with different locations along vertical axis 606 representing different combinations of electrodes 132- 135).

[0089] Defined pulse parameter 602 can represent a baseline, default, or other defined value for the pulses. Defined pulse parameter 602 may not vary or change across, between, or among the different pulses. As a result, defined pulse parameter 602 remains at a constant location along vertical axis 606 (e.g., 20.0 mA) for each of the one hundred pulses to be delivered to the patient via electrodes 132, 133, 134, and / or 135. Microcontroller 115 and / or controller 142 can select or receive the value of defined pulse parameter 620 from a defined value stored in memory 120 and / or memory 143, from a user, or the like. For each pulse (each increment along horizontal axis 604), microcontroller 115 or controller 142 can select and apply a modulo to defined pulse parameter 602, with the modulo for each pulse being randomly or pseudo-randomly selected or determined.

[0090] For example, the modulo may be randomly selected by microcontroller 115 or controller 142 as a value between 0.1 and 1 , between 0.01 and 1.0, between 0.001 and 1.000, and so on. Microcontroller 115 or controller 142 can apply the modulo to defined pulse parameter 602 by multiplying these two values to define or create modulated pulse parameters 600. For example, a first modulated pulse parameter 600A may be created by multiplying a modulo of 0.45 by defined pulse parameter 602, a second modulated pulse parameter 600B can be created by multiplying a different modulo of 0.9 by defined pulse parameter 602, and so on.15900W001 30 PATENT

[0091] Figure 7 illustrates one example of modulated pulse parameters 600 created by applying a modulo function to a defined pulse parameter. Microcontroller 115 or controller 142 can superimpose or apply one or more functions or operations to defined pulse parameter 602 using the modulo technique or concept. For example, various functions such as ramp functions, sinusoidal functions, square functions, sawtooth functions, etc.) can be applied over the defined pulse parameter 602. The modulo function may be a function of the pulse number, and may be one or more ramp functions that linearly increase from a baseline value (e.g., 1.0) to an upper limit (e g., 1.25) in defined increments (e.g., 0.05) for each subsequent pulse, then linearly decreases from the upper limit to a lower limit (e.g., 0.75) in the defined increments for each subsequent pulse, then repeatedly linearly increases up to the upper limit followed by linearly decreasing to the lower limit.

[0092] Microcontroller 115 or controller 142 can apply the modulo to defined pulse parameter 602 by multiplying the value of the modulo for a pulse by defined pulse parameter 602 to obtain modulated pulse parameters 700. In the illustrated example, microcontroller 115 or controller 142 multiplied a modulo of 0.85 (defined by the ramp function for the thirty-third pulse) by defined pulse parameter 602 to obtain or calculate modulated pulse parameter 700A. Microcontroller 115 or controller 142 multiplied a modulo of 1.20 (defined by the ramp function for the sixty-fourth pulse) by defined pulse parameter 602 to obtain or calculate modulated pulse parameter 700B. As shown, in contrast to defined pulse parameter 602, modulated pulse parameters 700 vary between, among, or across the pulses.

[0093] If each of modulated pulse parameters 600, 700 were fully defined in data stored in or communicated to IPG 110, then approximately 6,100 bits (or more) of data would be needed to represent the patterns of modulated pulse parameters 600. Instead, by storing a fixed pulse definition of defined pulse15900W001 31 PATENTparameter 602 and an 8-bit random modulo, a modulo function, or the like (while having to define the remaining parameters of the pulses) can allow this information to be stored and / or communicated with no more than 2,500 bits. This represents a significant savings in terms of memory used to store modulated pulse parameters 600, 700, bandwidth to communicate modulated pulse parameters 600, 700, and / or energy to communicate modulated pulse parameters 600, 700.

[0094] While either microcontroller 115 of IPG 110 or controller 142 of external controller 140 can translate the desired function into modulated pulse parameter(s), in one example, controller 142 of external controller 140 can translate defined pulse parameters 602, 702 to modulated pulse parameters 600, 700 to keep memory and processing demands on IPG 110 reduced. Using these modulo techniques can reduce overhead time needed for communication operations as stimulation parameters are changed from pulse-to-pulse.

[0095] The modulo function that is applied to the pulse parameter(s) can be a combination of two or more different waveforms, such as a combination of a sine wave and a triangle wave, ramp function, or the like. A modulo waveform function can then be created as a list of modulation parameters (modulation type, modulation bounds or limits, and modulation rate or increments) without calculating every individual step for each. This can further reduce the data needed to create very complex waveforms. Moreover, this can be run without software intervention by including circuitry that translates the modulation parameter list into output steps directly, which would also greatly reduce the power needed for the device.

[0096] For example, the external controller 140 can build or translate waveforms using a combination of one or multiple pre-defined modulator functions (such as ramp functions, triangle functions, sine waves, square waves, random, pseudo-random, etc.) and modulation parameters. The modulation15900W001 32 PATENTparameters can include the modulation bounds or limits (e.g., the lower and upper limits described above) and modulation rate (the incremental or step size or number of steps per cycle by which the modulation changes for sequential pulses). Stimulation circuitry 116 can load the modulation parameters and translate the modulation parameters to individual output steps without requiring software-based intervention by microcontroller 115.

[0097] The modulo code itself can define which pulse parameters are changing. As a result, only the modulated parameter needs to be adjusted in sync with stimulation delivery and this relaxes constraints when serial communication is used between processor and stimulation chips. A modulo code of a given bit depth can be defined to modulate a single stimulation parameter, or even paired or grouped parameters (e.g., inverse relation between amplitude and pulse width, for example). For example, currently pulse parameters can be separately defined for each pulse. This can require communicating or storing eight bits of data for the pulse amplitude, six bits of data for the pulse width, thirty-two bits of data for the electrode combination, and sixteen bits of data for the pulse interval. In total, this requires sixty-two bits of data to be communicated or stored for each pulse. If one hundred twenty-eight pulses are to be delivered according to a stimulation program, then nearly 8,000 bits (i.e. , 7,936 bit) of data defining the parameters for all the pulses is to be communicated or stored for the stimulation program. Conversely, use of the modulo can involve communicating or storing sixteen bits for the pulse interval, eight bits for the modulo (that modifies the pulse interval), and three bits for the pulse index (which can direct IPG 110 to keep all other pulse parameters that are not modified by the modulo at the same value across pulses). As a result, only twenty-seven bits of data are communicated or stored for each pulse, and approximately 3,500 bits (i.e., 3,456 bits) of data are communicated or stored for the stimulation program.15900W001 33 PATENT

[0098] In another example, the modulo function and pulse index may only need to be stored once per program. The IPG device 110 can have the modulo definition or parameters (e.g., the type of modulo function, the increment or change in the pulse parameter(s), and / or the bounds within which the pulse parameter(s) can be changed stored once, and the last pulse parameters or settings also stored (e.g., as one set of pulse parameters). When the next pulse or interval is computed by the microcontroller 115, the microcontroller 115 can use these two pieces of data to calculate the next pulse or interval (either in hardware or firmware).

[0099] For example, only a base pulse definition data set and a modulo parameter data set can be stored and / or communicated. The base pulse definition data set can define baseline pulse parameters, such as the pulse amplitude, pulse width, which electrodes 132-135 are used to deliver the pulse, and / or the pulse interval. This baseline pulse definition data set can consume, for example, seventy-two bits, or nine bytes, of data (e.g., with the amplitude defined by sixteen bits, the pulse width defined by eight bits, the electrode selection defined by thirty-two bits, and the pulse interval defined by sixteen bits). The modulo parameter data set can define the pulse parameter that is modified from the baseline pulse parameters, the modulo function used to modify this pulse parameter, a lower bound below which the pulse parameter is not to be modified, an upper bound above which the pulse parameter is not to be modified, and / or a step size that indicates the amount or magnitude by which the pulse parameter is to be changed. This modulo parameter data set can consume, for example, sixty- four bits, or eight bytes, of data (e.g., with the identification of the pulse parameter to be modified represented by eight bits, the modulo function defined by eight bits, the lower bound defined by sixteen bits, the upper bound defined by sixteen bits, and the step size defined by sixteen bits). This can significantly reduce the memory 120, 143 needed for storage of the pulse therapy and / or the15900W001 34 PATENTdata needed to be communicated between the external device 140 and the IPG 110.

[0100] Figure 8 illustrates one example of a pulse train 800 prior to a modulo function being applied. The pulse train 800 is a waveform of individual pulses 802 shown alongside a horizontal axis 804 representative of time and a vertical axis 806 representative of amplitude (e.g., current) of each pulse. As shown, the waveform of the pulse train 800 applies a pulse 802 of approximately one milliamp to the patient approximately every eighteen milliseconds. The waveform of this pulse train 800 may be changed by applying one or multiple pre-defined modulator functions and / or modulation parameters.

[0101] Figure 9 illustrates one example of a pulse train 900 formed by applying one or more modulator functions to the pulse train 800 shown in Figure 8. For example, the modulator function(s) that are applied can change the frequency of the pulses 802 and apply a ramp waveform to the pulses 802. As shown, the pulses 802 increase in amplitude from a lower limit 902 to an upper limit 904 before returning to the lower limit 902 and increasing again. Changing the pulse train 800 to the pulse train 900 can be performed without fully defining all the data (e.g., the pulse parameters) stored in or communicated to IPG 110. A fixed pulse definition of the pulse parameters for the pulse train 800 may be stored in IPG 110 or communicated to IPG 110, and only pulse parameters applying the ramp waveform need to be stored in or communicated to IPG 110.

[0102] The pulse train 900 can be formed by communicating and / or storing the base pulse definition data set and the modulo parameter data set that changes the pulse amplitude. The base pulse definition data set can be formed from seventy-two bits of data for the base pulse definition data set and only sixty- four bits of data for modifying the pulse amplitudes in the modulo parameter data set. This requires only one hundred thirty-six bits of data to be stored and / or communicated.15900W001 35 PATENT

[0103] Figure 10 illustrates one example of a pulse train 1000 formed by applying one or more modulator functions to the pulse train 800 and / or 900 shown in Figures 8 and 9. The modulator function(s) that are applied can increase the lower limit 902 to a greater lower limit 1002 and can reduce the upper limit 904 to a reduced lower limit 1004. Changing the pulse train 800 and / or 900 to the pulse train 1000 can be performed without fully defining all the pulse parameters stored in or communicated to IPG 110. Only pulse parameters changing the lower and upper limits 902, 904 need to be stored in or communicated to IPG 110.

[0104] Figure 11 illustrates one example of a pulse train 1100 formed by applying one or more modulator functions to the pulse train 800, 900, and / or 1000 shown in Figures 8, 9, and 10. The modulator function(s) that are applied can change the lower limit 902, 1002 to another lower limit 1102, can change the upper limit 904, 1004 to another upper limit 1104, and / or can change the frequency at which the pulses 802 are applied. These changes can be implemented without fully defining all the pulse parameters stored in or communicated to IPG 110. Only pulse parameters changing the lower and upper limits and / or pulse interval need to be stored in or communicated to IPG 110.

[0105] The pulse train 1100 can be formed by communicating and / or storing the base pulse definition data set and two modulo parameter data sets (to modify two of the pulse parameters, such as the pulse amplitude and the pulse interval). The base pulse definition data set can be formed from seventy-two bits of data and each of the two modulo parameter data sets can be formed from sixty-four bits of data. This requires only two hundred bits of data to be stored and / or communicated.

[0106] Figure 12 illustrates one example of a pulse train 1200 formed by applying one or more modulator functions to one or more other pulse trains shown or described herein. The modulator function(s) that are applied can15900W001 36 PATENTchange lower and / or upper limits 1202, 1204 of the pulse amplitudes, can apply a sinusoidal waveform to the amplitudes of the pulses, and / or can change the pulse frequency (e.g., interval). These changes can be implemented without fully defining all the pulse parameters stored in or communicated to IPG 110. Only pulse parameters changing the lower and upper limits, the waveform, and / or pulse interval need to be stored in or communicated to IPG 110.

[0107] The pulse train 1200 can be formed by communicating and / or storing the base pulse definition data set and two modulo parameter data sets (to modify two of the pulse parameters, such as the pulse amplitude and the pulse interval). The base pulse definition data set can be formed from seventy-two bits of data and each of the two modulo parameter data sets can be formed from sixty-four bits of data. This requires only two hundred bits of data to be stored and / or communicated.

[0108] Figure 13 illustrates one example of a pulse train 1300 formed by applying one or more modulator functions to one or more other pulse trains shown or described herein. The modulator function(s) that are applied can apply a random waveform to the amplitudes of the pulses and / or can change the pulse frequency (e.g., interval). These changes can be implemented without fully defining all the pulse parameters stored in or communicated to IPG 110. Only pulse parameters changing the lower and upper limits, the waveform, and / or pulse interval need to be stored in or communicated to IPG 110.

[0109] Figure 14 illustrates a flowchart of one example of a method 1400 for reducing data by modulating pulse parameters. Method 1400 can represent operations performed by microcontroller 115 or controller 142 to reduce the data needed to control application of pulses to a patient using IPG 110. At 1402, a modulo function is selected. The modulo function may be a random or pseudorandom selection of numbers between an upper limit and a lower limit, a sinusoidal function, a ramp function, or the like. The modulo function itself may15900W001 37 PATENTbe randomly selected, selected using artificial intelligence or machine learning, may be selected by a user of external controller 140, or the like.

[0110] At 1404, one or more pulse parameters for a stimulation therapy are selected for modulation. For example, pulse amplitudes, pulse widths, pulse intervals, electrode selections, etc. can be selected for modulation. The parameters selected for modulation may be randomly selected, selected by a user, or selected using artificial intelligence of machine learning.

[0111] At 1406, the selected modulo function is applied to the selected pulse parameters. This application may be performed by multiplying the value of the modulo function for each pulse by the pulse parameter(s) for that pulse. Optionally, another mathematical function may be used, such as by subtracting the value of the modulo function for a pulse from the pulse parameter(s) for that pulse, adding the value of the modulo function to the pulse parameter(s), calculating a ratio of the modulo function value to the pulse parameter(s) value(s) (or a ratio of the pulse parameter(s) value(s) to the modulo function value), etc.

[0112] Each of the methods described herein may additionally involve generating the pulses and applying the pulses to a patient to apply a stimulation therapy to the patient.

[0113] The term “obtains” and “obtaining”, as used in connection with data, signals, information and the like, include at least one of i) accessing memory of an external device or remote server where the data, signals, information, etc. are stored, ii) receiving the data, signals, information, etc. over a wireless communications link between the IPG and a local external device, and / or iii) receiving the data, signals, information, etc. at a remote server over a network connection. The obtaining operation, when from the perspective of an IPG, may include sensing new signals in real time, and / or accessing memory to read stored data, signals, information, etc. from memory within the IPG. The obtaining15900W001 38 PATENToperation, when from the perspective of a local external device, includes receiving the data, signals, information, etc. at a transceiver of the local external device where the data, signals, information, etc. are transmitted from an IPG and / or a remote server. The obtaining operation may be from the perspective of a remote server, such as when receiving the data, signals, information, etc. at a network interface from a local external device and / or directly from an IPG. The remote server may also obtain the data, signals, information, etc. from local memory and / or from other memory, such as within a cloud storage environment and / or from the memory of a workstation or clinician external programmer.

[0114] The terms “processor,” “a processor”, “one or more processors” and “the processor” shall mean one or more processors. The one or more processors may be implemented by one, or by a combination of more than one implantable medical device, a wearable device, a local device, a remote device, a server computing device, a network of server computing devices and the like. The one or more processors may be implemented at a common location or at distributed locations. The one or more processors may implement the various operations described herein in a serial or parallel manner, in a shared-resource configuration and the like.

[0115] The term “real-time” refers to a time frame contemporaneous with normal or abnormal episode occurrences. For example, a real-time process or operation would occur during or immediately after receipt of data. For example, the term “real-time” may refer to a time period substantially contemporaneous with an event of interest.

[0116] The foregoing embodiments are described primarily in connection with implantable and wearable medical devices. For example, embodiments may be implemented in connection with one or more of the sensors, implantable devices, wearable patches, drug delivery pumps and external devices described in the following documents: U.S. Application Serial Number 16 / 930791 , filed15900W001 39 PATENT7 / 16 / 2020 and titled “METHODS, DEVICES AND SYSTEMS FOR HOLISTIC INTEGRATED HEALTHCARE PATIENT MANAGEMENT” (Attorney Docket 13- 0356US1 ) (Client Docket 13564USO1 ); U.S. Patent 9,216,285 “Leadless Implantable Medical Device Having Removable And Fixed Components” and U.S. Patent 8,831 ,747 “Leadless Neurostimulation Device And Method Including The Same”; U.S. Patent 10,765,860, titled “Subcutaneous Implantation Medical Device With Multiple Parasternal-Anterior Electrodes”; U.S. Patent 10,722,704, titled “Implantable Medical Systems And Methods Including Pulse Generators And Leads”; US Patent 11 ,045,643, titled “Single Site Implantation Methods For Medical Devices Having Multiple Leads”; U.S. Patent No. 9,265,428 entitled “Implantable Wireless Sensor”, U.S. Patent No. 8,278,941 entitled “Strain Monitoring System and Apparatus”, U.S. Patent No. 8,026,729 entitled “System and Apparatus for In-Vivo Assessment of Relative Position of an Implant”, U.S. Patent No. 8,870,787 entitled “Ventricular Shunt System and Method”, and U.S. Patent No. 9,653,926 entitled “Physical Property Sensor with Active Electronic Circuit and Wireless Power and Data Transmission”; U.S. Patent 10,729,346, titled "METHOD AND SYSTEM FOR SECOND PASS CONFIRMATION OF DETECTED CARDIAC ARRHYTHMIC PATTERNS"; U.S. Patent 11 ,020,036, titled "METHOD AND SYSTEM TO DETECT R-WAVES IN CARDIAC ARRHYTHMIC PATTERNS”; U.S. Patent 10,874,322, titled "METHOD AND SYSTEM TO DETECT POST VENTRICULAR CONTRACTIONS IN CARDIAC ARRHYTHMIC PATTERNS"; and U.S. Patent 10,777,880, titled "METHOD AND SYSTEM TO DETECT NOISE IN CARDIAC ARRHYTHMIC PATTERNS”; U.S. application serial number 17 / 192961 , filed 3 / 5 / 2021 , (attorney docket 13- 0397US1 ) (client docket 13967USO1 ), titled “SYSTEM FOR VERIFYING A PATHOLOGIC EPISODE USING AN ACCELEROMETER”; U.S. application serial number 16 / 869733, filed 5 / 8 / 2020, (attorney docket 13-0396US1 ) (client docket 13964USO1 ), titled “METHOD AND DEVICE FOR DETECTING RESPIRATION ANOMALY FROM LOW FREQUENCY COMPONENT OF15900W001 40 PATENTELECTRICAL CARDIAC ACTIVITY SIGNALS;” U.S. Application Serial Number 17 / 194354, filed 3 / 8 / 2021 , (Attorney docket 13-0395US1) (client docket 13949USO1 ), titled “METHOD AND SYSTEMS FOR HEART CONDITION DETECTION USING AN ACCELEROMETER”; US20240023024A1 , titled “SYSTEMS, DEVICES AND METHODS FOR POWER-EFFICIENT WIRELESS COMMUNICATIONS BETWEEN ELECTRONIC DEVICES”, files 2023-08-25; US20230404441A1 , titled “SYSTEMS, DEVICES, AND METHODS FOR MEAL- RELATED ANALYTE RESPONSE MONITORING”, filed 2023-04-25; US20220150308A1 , titled “TRANSMITTING ANALYTE DATA USING LOW- POWER INSTRUCTION SETS,” filed 2022-01 -21 ; US20220369926A1 , titled “SYSTEMS, DEVICES, AND METHODS FOR SENSOR COMMUNICATIONS,” filed 2022-04-26; US20220167885A1 , titled “SYSTEMS, DEVICES, AND METHODS FOR ESTABLISHING AND / OR MAINTAINING SYNCHRONIZATION BETWEEN ENTITIES IN AN ANALYTE MONITORING ENVIRONMENT,” filed 2021 -07-01 ; US20230337976A1 , titled “SYSTEMS, DEVICES, AND METHODS FOR WELLNESS AND NUTRITION MONITORING AND MANAGEMENT USING ANALYTE DATA,” filed 2023-06-22; US20240053324A1 , titled “SYSTEMS, DEVICES, AND METHODS FOR WIRELESS COMMUNICATIONS IN ANALYTE MONITORING SYSTEMS,” filed 2023-09-06, all of which are expressly incorporated by reference in their entireties.

[0117] While the foregoing embodiments have been described in connection with communication with a medical device, the present invention is not limited to medical systems and methods. Instead, the systems and methods described herein may be implemented in connection with communication between two or more non-medical devices. For example, embodiments may be implemented in connection with any devices that store and / or communicate data and for which reduction or lossless compression of the data would be beneficial.15900W001 41 PATENT

[0118] It should be clearly understood that the various arrangements and processes broadly described and illustrated with respect to the Figures, and / or one or more individual components or elements of such arrangements and / or one or more process operations associated of such processes, can be employed independently from or together with one or more other components, elements and / or process operations described and illustrated herein. Accordingly, while various arrangements and processes are broadly contemplated, described and illustrated herein, it should be understood that they are provided merely in illustrative and non-restrictive fashion, and furthermore can be regarded as but mere examples of possible working environments in which one or more arrangements or processes may function or operate.

[0119] Some or all the Figures herein illustrates various methods and processes implemented in accordance with embodiments herein. The operations herein may be implemented by hardware, firmware, circuitry and / or one or more processors housed partially and / or entirely within an IMD, a local external device, remote server or more generally within a healthcare system. Optionally, the operations herein may be partially implemented by an IMD and partially implemented by a local external device, remote server or more generally within a healthcare system. For example, the IMD includes IMD memory and one or more IMD processors, while each of the external devices / systems (ED) (e.g., local, remote or anywhere within the healthcare system) include ED memory and one or more ED processors.

[0120] As will be appreciated by one skilled in the art, various aspects may be embodied as a system, method or computer (device) program product. Accordingly, aspects may take the form of an entirely hardware embodiment or an embodiment including hardware and software that may all generally be referred to herein as a “circuit,” “module” or “system.” Furthermore, aspects may take the form of a computer (device) program product embodied in one or more15900W001 42 PATENTcomputer (device) readable storage medium(s) having computer (device) readable program code embodied thereon.

[0121] Any combination of one or more non-signal computer (device) readable medium(s) may be utilized. The non-signal medium may be a storage medium. A storage medium may be, for example, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, or device, or any suitable combination of the foregoing. More specific examples of a storage medium would include the following: a portable computer diskette, a hard disk, a random access memory (RAM), a dynamic random access memory (DRAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), a portable compact disc read-only memory (CD-ROM), an optical storage device, a magnetic storage device, or any suitable combination of the foregoing.

[0122] Program code for carrying out operations may be written in any combination of one or more programming languages. The program code may execute entirely on a single device, partly on a single device, as a stand-alone software package, partly on single device and partly on another device, or entirely on the other device. In some cases, the devices may be connected through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made through other devices (for example, through the Internet using an Internet Service Provider) or through a hard wire connection, such as over a USB connection. For example, a server having a first processor, a network interface, and a storage device for storing code may store the program code for carrying out the operations and provide this code through its network interface via a network to a second device having a second processor for execution of the code on the second device.

[0123] Aspects are described herein with reference to the Figures, which illustrate example methods, devices and program products according to various15900W001 43 PATENTexample embodiments. The program instructions may be provided to a processor of a general-purpose computer, special purpose computer, or other programmable data processing device or information handling device to produce a machine, such that the instructions, which execute via a processor of the device implement the functions / acts specified. The program instructions may also be stored in a device readable medium that can direct a device to function in a particular manner, such that the instructions stored in the device readable medium produce an article of manufacture including instructions which implement the function / act specified. The program instructions may also be loaded onto a device to cause a series of operational steps to be performed on the device to produce a device implemented process such that the instructions which execute on the device provide processes for implementing the functions / acts specified.

[0124] The units / modules / applications herein may include any processorbased or microprocessor-based system including systems using microcontrollers, reduced instruction set computers (RISC), application specific integrated circuits (ASICs), field-programmable gate arrays (FPGAs), logic circuits, and any other circuit or processor capable of executing the functions described herein. Additionally, or alternatively, the modules / controllers herein may represent circuit modules that may be implemented as hardware with associated instructions (for example, software stored on a tangible and non-transitory computer readable storage medium, such as a computer hard drive, ROM, RAM, or the like) that perform the operations described herein. The above examples are exemplary only, and are thus not intended to limit in any way the definition and / or meaning of the term “controller.” The units / modules / applications herein may execute a set of instructions that are stored in one or more storage elements, in order to process data. The storage elements may also store data or other information as desired or needed. The storage element may be in the form of an information source or a physical memory element within the modules / controllers herein. The15900W001 44 PATENTset of instructions may include various commands that instruct the modules / applications herein to perform specific operations such as the methods and processes of the various embodiments of the subject matter described herein. The set of instructions may be in the form of a software program. The software may be in various forms such as system software or application software. Further, the software may be in the form of a collection of separate programs or modules, a program module within a larger program or a portion of a program module. The software also may include modular programming in the form of object-oriented programming. The processing of input data by the processing machine may be in response to user commands, or in response to results of previous processing, or in response to a request made by another processing machine.

[0125] It is to be understood that the subject matter described herein is not limited in its application to the details of construction and the arrangement of components set forth in the description herein or illustrated in the drawings hereof. The subject matter described herein is capable of other embodiments and of being practiced or of being carried out in various ways. Also, it is to be understood that the phraseology and terminology used herein is for the purpose of description and should not be regarded as limiting. The use of “including,” “comprising,” or “having” and variations thereof herein is meant to encompass the items listed thereafter and equivalents thereof as well as additional items.

[0126] It should be recognized that, to the extent embodiments herein are described to apply certain mathematical combinations of select variables, the same variables may be combined in other mathematical combinations that are also indicative of the same result. For example, when a single data point is utilized for a particular variable, additionally or alternatively, a mean, average, sum, or other mathematical combination of multiple data points may be utilized for the same variable.15900W001 45 PATENT

[0127] It is to be understood that the above description is intended to be illustrative, and not restrictive. For example, the above-described embodiments (and / or aspects thereof) may be used in combination with each other. In addition, many modifications may be made to adapt a particular situation or material to the teachings herein without departing from its scope. While the dimensions, types of materials and coatings described herein are intended to define various parameters, they are by no means limiting and are illustrative in nature. Many other embodiments will be apparent to those of skill in the art upon reviewing the above description. The scope of the embodiments should, therefore, be determined with reference to the appended claims, along with the full scope of equivalents to which such claims are entitled. In the appended claims, the terms "including" and "in which" are used as the plain-Engl ish equivalents of the respective terms "comprising" and "wherein." Moreover, in the following claims, the terms "first," "second," and "third," etc. are used merely as labels, and are not intended to impose numerical requirements on their objects or order of execution on their acts.15900W001 46 PATENT

Claims

1. WHAT IS CLAIMED IS:1 . A method of conducting operations for an implantable pulse generator (IPG) adapted to provide electrical pulses to tissue of a patient for a medical therapy, wherein the IPG is programmable to provide the medical therapy according to pulse parameter data that is executed according to an execution path, the method comprising: identifying a root node that is repeated within the execution path of a first set of the pulse parameter data; identifying a stimulation pulse pattern that is repeated in the first set of the pulse parameter data between repeated occurrences of the root node in the execution path; replacing the stimulation pulse pattern that is repeated in the first set of the pulse parameter data with (a) a single instance of the stimulation pulse pattern and a recurrence count or (b) a pointer to a stored reference pattern to generate a second set of the pulse parameter data; and one or more of: communicating the second set of the pulse parameter data between an external controller and the IPG, or storing the second set of the pulse parameter data with the stimulation pulse pattern within a memory of the IPG.

2. The method of claim 1 , wherein replacing the stimulation pulse pattern in the first set of the pulse parameter data with (a) the single instance of the stimulation pulse pattern and the recurrence count or (b) the pointer losslessly compresses the pulse parameter data.15900W001 47 PATENT3. The method of claim 1 , wherein the stimulation pulse pattern is identified by comparing a prior instance of the stimulation pulse pattern with a following instance of the stimulation pulse pattern in the execution path for real time identification of repetition of the stimulation pulse pattern.

4. The method of claim 1 , wherein the root node is a microcontroller of the IPG returning to a sleep state during the execution path.

5. The method of claim 1 , wherein the execution path includes a stimulation program applied to the patient by the IPG, the pulse parameter data includes stimulation parameters that control the stimulation program applied by the IPG, and the stimulation pulse pattern that is repeated includes repeated instances of the stimulation parameters during the stimulation program between repetitions of the root node.

6. The method of claim 5, wherein the stimulation parameters include one or more of a stimulation pulse amplitude, a stimulation pulse width, a selection of one or more electrodes of the IPG that apply a stimulation pulse to the patient, or a stimulation pulse interval.

7. The method of claim 5, wherein the root node is one or more of the stimulation parameters being repeated during the execution path.

8. The method of claim 1 , wherein the root node is repeated during delivery of the medical therapy of the patient, programming of the IPG by the external controller, or logging diagnostic output from the IPG at the external controller.

9. The method of claim 8, wherein the stimulation pulse pattern is replaced in the pulse parameter data used for controlling the delivery of the medical therapy to the patient, the pulse parameter data used for programming15900W001 48 PATENTthe IPG to deliver the medical therapy to the patient, or the pulse parameter data that is logged as diagnostic output from the IPG.

10. An implantable pulse generator (IPG) adapted to provide electrical pulses to tissue of a patient for a medical therapy according to pulse parameter data that is executed according to an execution path, the IPG comprising: a microcontroller configured to identify a root node that is repeated within the execution path of a first set of pulse parameter data, the microcontroller configured to identify a stimulation pulse pattern that is repeated in the first set of pulse parameter data between repeated occurrences of the root node in the execution path, the microcontroller configured to replace the stimulation pulse pattern that is repeated in the first set of the pulse parameter data with (a) a single instance of the stimulation pulse pattern and a recurrence count or (b) a pointer to a stored reference pattern to generate a second set of the pulse parameter data; and stimulation circuitry configured to deliver the medical therapy to the patient according to the second set of the pulse parameter data.11 . The IPG of claim 10, wherein the microcontroller is configured to identify the stimulation pulse pattern that is repeated in real time by comparing a prior instance of the stimulation pulse pattern with a following instance of the stimulation pulse pattern in the execution path of the microcontroller.

12. The IPG of claim 10, wherein the root node is the microcontroller returning to a sleep state during the execution path.

13. The IPG of claim 10, wherein the pulse parameter data includes stimulation parameters that control the medical therapy applied by the stimulation circuitry.15900W001 49 PATENT14. The IPG of claim 13, wherein the microcontroller is configured to identify the root node as one or more of the stimulation parameters being repeated during the execution path.

15. An external device for an implantable pulse generator (IPG) adapted to provide electrical pulses to tissue of a patient for a medical therapy, wherein the IPG is programmable to provide the medical therapy according to pulse parameter data that is executed according to an execution path, the external device comprising: a controller configured to identify a root node that is repeated within the execution path of a first set of the pulse parameter data, the controller configured to identify a stimulation pulse pattern that is repeated in the first set of the pulse parameter data between repeated occurrences of the root node in the execution path, the controller configured to replace the stimulation pulse pattern that is repeated in the first set of the pulse parameter data with (a) a single instance of the stimulation pulse pattern and a recurrence count or (b) a pointer to a stored reference pattern to generate a second set of the pulse parameter data; and communication circuitry configured to (c) transmit the second set of the pulse parameter data to the IPG or (d) receive the second set of the pulse parameter data from the IPG for logging.

16. The external device of claim 15, wherein the controller is configured to identify the stimulation pulse pattern that is repeated in real time by comparing a prior instance of the stimulation pulse pattern with a following instance of the stimulation pulse pattern in the execution path.

17. The external device of claim 15, wherein the root node is the controller returning to a sleep state during the execution path.15900W001 50 PATENT18. The external device of claim 15, wherein the controller is configured to identify the root node as one or more stimulation parameters of the medical therapy being repeated during the execution path.

19. The external device of claim 18, wherein the one or more stimulation parameters include one or more of a stimulation pulse amplitude, a stimulation pulse width, a selection of one or more electrodes of the IPG that apply a stimulation pulse to the patient, or a stimulation pulse interval.

20. The external device of claim 15, wherein the controller is configured to compress the data after receiving the data from the IPG.21 . A method of conducting operations for an implantable pulse generator (IPG) adapted to provide electrical pulses to tissue of a patient for a medical therapy, wherein the IPG is programmable to provide the medical therapy according to pulse parameter data, the method comprising: identifying a set of one or more of the pulse parameter data to change for the electrical pulses that are applied to the patient during stimulation therapy; and applying a modulo function to the one or more of the pulse parameter data to change values of the one or more of the pulse parameter data, the modulo function indicating changes to the one or more of the pulse parameter data as a function of a number of the electrical pulses, the modulo function also including a pulse index identifying one or more others of the pulse parameter data to maintain during the electrical pulses output by the IPG.

22. The method of claim 21 , further comprising: identifying at least one additional set of one or more of the pulse parameter data to change during one or more additional upcoming electrical pulses of the electrical pulses; and15900W001 51 PATENTchanging the one or more of the pulse parameter data in the at least one additional set according to at least one additional modulo function.

23. The method of claim 22, wherein each of the at least one additional modulo function indicates different changes to the one or more of the pulse parameter data in the one or more others of the electrical pulses.

24. The method of claim 21 , wherein the modulo function includes a random or pseudo-random change to the one or more of the pulse parameter data in the set.

25. The method of claim 21 , wherein the modulo function is a repeating function.

26. The method of claim 25, wherein the repeating function includes one or more of a sawtooth waveform, a square waveform, or a sinusoidal waveform.

27. The method of claim 21 , wherein the modulo function is a combination of two or more repeating functions.

28. The method of claim 21 , wherein the modulo function increases or decreases the one or more of the pulse parameter data from a baseline value.

29. The method of claim 21 , wherein the pulse index identifies the one or more others of the pulse parameter data to maintain a prior value from a prior stimulation pulse for an upcoming stimulation pulse.

30. The method of claim 21 , wherein the pulse parameter data include a pulse amplitude, a pulse width, a selection of one or more electrodes of the IPG to apply an upcoming stimulation pulse, or a pulse interval.15900W001 52 PATENT