METHOD FOR DYNAMICALLY ALLOCATING COMMUNICATION CHANNEL BANDWIDTH BETWEEN COMPETING APPLICATIONS

Abstract: A statistical multiplexer (300) selectively passes packets of encoded data from a plurality of encoders (302) to a communication channel (330) so as to maximize the quality of the encoded data. A table is stored in a memory (313) of the statistical multiplexer (300) that has an entry for each unit of encoded data that can be transmitted over the communication channel (330) in a predetermined time interval. The statistical multiplexer (300) accesses each entry in the table to obtain a pointer, e.g., an address, to an encoder (302) that can transmit the next unit of encoded data to the communication channel (330). The statistical multiplexer (300) dynamically adjusts the data compression rate for each variable rate application so that the quality of all the encoded data streams are optimized over a window, and builds a new table that reflects the adjusted rates. In one application, the table is broken into a static table and a dynamic table.

Description: Method for Dynamically Allocating Communication Channel Bandwidth Between Competing Applications Field of the Invention This invention relates generally to selecting data for transmission over a communication channel and more particularly to a multiplexer that allocates the 10 bandwidth of a coiiununication channel to a plurality of data streams so as to maintain the quality of the transmitted data within a selected range, or alternatively to maximize the quality across the data streams. 15 Background of the Invention Video data typically includes luminance and chrominance data for each pixel in a frame. Raw digital video data contains too much information for 20 transmission over normal communication media and requires considerable storage capacity. Consequently, to utilize either the limited bandwidth of the communication media, or storage capacity efficiently, coding techniques are commonly used to compress the 25 information contained in the raw video data. For example, in Figure 1, video camera 101 generates an analog video signal that drives input processor 102. Input processor 102 digitizes and typically filters the analog video signal to produce a 30 raw digital video signal. The raw digital video signal is encoded, i.e., compressed, by encoder 103. The compressed digital video signal is * * transmitted over a communication channel, for example, £r a satellite link, to a decoding system 120 that 35 includes a decoder 121, a post-processor 122, and a display driver 123. Decoder 121 decompresses the encoded video data and supplies the resulting signal to post-processor 122, which in turn smooths and enhances the video signal. The video signal from post¬ processor 122 supplies display driver 123 that drives display unit 130. The encoding, i.e., compression, of video signals for storage or transmission and the subsequent decoding is well-known. Typically, multiple applications are sharing access to a communication channel rather than just a single application, i.e., video camera 101 as illustrated in Fig. 1. For example, in Fig. 2, "L" applications 201-1 to 201-L are compressed using encoders 202-1 to 202-L, respectively. Applications 201-1 to 201-L can be from a variety of signal sources, e.g., video, audio, etc. Each application 201-1 to 201-L drives an encoder 202-1 to 202-L, respectively. Typically, for a video input signal a compression loop 204-1 within encoder 201-1, for example, performs prediction and quantization as the main operations. As each picture of a video signal is compressed by compression loop 204-1, bits of compressed data are written to buffer 205-1. A controller (not shown) manages rate control of the compression to prevent buffer 205-1 from overflowing and underflowing. The video encoder rate control ensures that encoder 201-1 produces bits of encoded data at an approximately constant rate over some interval of time from buffer 205-1 while maximizing the picture quality of the video sequence. Applications 201-1 to 201-L are either fixed rate or variable rate applications. A fixed rate application 201-i releases bits to channel 230 at a constant rate. A variable rate application 202-i releases bits to channel 230 over a non-constant rate, i.e., the rate may change with time. The output data from encoders 202-1 to 202-L are each an input data stream to multiplexer 210. The data stream passed through multiplexer 210 is determined by a multiplexer controller circuit 211 that receives input signals from a system controller 250. System controller 250 is typically a computer that is programmed to pass signals to multiplexer control circuit 211 so that encoded data are passed through multiplexer 210 in manner that is independent of the content of the transmitted signal or the quality of the resulting image. Transfer of information from encoders 202-1 to 202-L to the multiplexer 210 and subsequently to the communication channel usually is done in packets of information. Multiplexer 210 passes therethrough to communication channel 220 a packet of data at a time from one of applications 201-1 to 201-L. The number of packets transferred from an application 201-i to communication channel 220 averaged over some interval of time, say a second, equals the rate allocated to that particular application. Note that it is not necessary that the transfer of information be packet based. Summary of the Invention According to the principles of this invention, a statistical multiplexer dynamically distributes the total capacity of a communication channel among a plurality of data streams that share for access to the communication channel. At the same time, the statistical multiplexer assures that the communication channel capacity is not exceeded. In other words, the statistical multiplexer of this invention determines what fraction of the communication channel capacity should be allocated for any interval of time to a particular data stream, i.e., an application, so as to maximize the quality of the signals of all applications transmitted over the communication channel. Further, the statistical multiplexer changes the fraction of the communication channel capacity allocated to the various data streams in real time so as to maximize the quality of the signals for all the data streams that are transmitted over the communication channel. The statistical multiplexer operates as an outer shell over the rate control mechanism of the hardware that provides each of the data streams to the statistical multiplexer. The statistical multiplexer generates and provides, at least once during each statistical multiplexer period, new rates to those control mechanisms so as to maintain a selected parameter for each application within a predetermined range. In one embodiment, the statistical multiplexer implements a statistical multiplexing process for a plurality of data streams competing for access to a communication channel that creates and populates a static table in a memory of the statistical multiplexer. The static table has an entry for each unit of data that can be sent over the communication channel in a predetermined time period. In the population of the static table, that is sometimes called a primary table, the statistical multiplexer allocates each entry in the static table to one of the plurality of data streams. If an entry is allocated to a data stream that has a variable rate, the statistical multiplexer stores a predetermined code, such as a null code, in the entry. Conversely, if the entry is allocated to a data stream that has a fixed rate, the statistical multiplexer stores a pointer to the fixed rate data stream in the entry. The pointer identifies the fixed rate data stream and is, in one embodiment, an address for the hardware that generates the fixed rate data stream. Each entry in the static table is either a pointer to a fixed rate data stream or the predetermined code. The statistical multiplexer uses the static table to allocate the communication channel capacity among the plurality of data streams competing for access to the communication channel. Specifically, the statistical multiplexer accesses an entry in the static table to determine the data stream in the plurality of data streams that sends the next unit of data to the communication channel during the predetermined time period. In addition to the static table, the statistical multiplexer also generates and populates a dynamic table, that is sometimes called a secondary table. In populating the dynamic table, the statistical multiplexer allocates each entry in the dynamic table, in this embodiment, to one of a variable rate data stream and an idle unit of data. Of course, the idle units of data could be considered as just another variable rate data stream, that transmits idle data over the communication channel. If an entry is allocated to a variable rate data stream, the statistical multiplexer stores a pointer to the variable rate data stream in the entry. The pointer identifies the variable rate data stream and is, in one embodiment, an address for the hardware that generates the variable rate data stream. Each entry in the dynamic table is a pointer to either a variable rate data stream or an idle unit of data. In determining the application that can access the communication channel to transmit the next unit of data, the statistical multiplexer accesses an entry in the dynamic table upon detecting an entry in the static table containing the predetermined code. The accessed entry determines the variable rate data stream in the plurality of data streams that sends the next unit of data to the communication channel. While the statistical multiplexer is using the static and dynamic tables to allocate the communication channel bandwidth to the various data steams competing for access to the communication channel, the statistical multiplexer is also adjusting a number of units of data, e.g., a number of packets, allocated for transmission over the communication channel for each of the variable rate data streams that has a quality measurement parameter outside a predetermined range. Specifically, the statistical multiplexer is generating new rates for selected variable rate data streams. The statistical multiplexer generates a second dynamic table using the adjusted number of units of data allocated for transmission over the communication channel. The process used to generate the second dynamic table is the same as that used for the first dynamic table, except the new rates are used where necessary. Specifically, the statistical multiplexer allocates each entry in the second dynamic table, in this embodiment, to one of a variable rate data stream and an idle unit of data. If an entry is allocated to a variable rate data stream, the statistical multiplexer stores a pointer to the variable rate data stream in the entry. Each entry in the second dynamic table is a pointer to either a variable rate data stream or an idle unit of data. After a selected timed interval, e.g., in this embodiment, at about the end of a statistical multiplexer cycle, the statistical multiplexer switches from the first dynamic table to the second dynamic table. To determine how to adjust the rates used in populating the dynamic table, the statistical multiplexer collects data for each variable rate data stream that characterizes a quality of the variable rate data stream. The statistical multiplexer uses the collected data- to generate a parameter that characterizes the quality of the variable rate data stream. In one embodiment, the parameter is a measure of distortion and the predefined range has a lower limit that is a product of a first hysteresis coefficient and a distortion threshold. An upper limit of the predetermined range is a product of a second hysteresis coefficient and a distortion threshold. The statistical multiplexing process of this invention is applicable to a wide variety of data streams. In this embodiment, the plurality of data streams includes an encoded video data stream. In another embodiment of this invention a statistical multiplexing process for a plurality of encoded data streams competing for access to a communication channel includes the steps of: assigning a rate to each encoder that generates one of the plurality of encoded data streams wherein the encoders include fixed and variable rate encoders; populating a primary table having a predetermined number of entries using the assigned rates wherein each entry in the primary table is allocated to one of (i) one of the plurality of encoded data streams and (ii) an idle packet; and using each table entry in the primary table to select an encoded data stream in the plurality of encoded data streams that sends the next packet to the communication channel. In yet another embodiment of this invention, a statistical multiplexing process for a plurality of encoded data streams competing for access to a communication channel includes the steps of: collecting data for each variable rate encoded data stream from a variable rate encoder in said plurality of encoded data streams to generate a distortion parameter that characterizes said variable rate encoded data stream; generating for each variable rate encoded data stream said distortion parameter that characterizes a quality of said variable rate encoded data stream; adjusting a number of packets allocated to each of said variable rate encoded data streams in a selected time period if said distortion parameter is outside a predetermined range; populating a table using said adjusted number of allocated packets wherein said table populating step further comprises: i) allocating an entry in said table to one of A) a variable rate encoded data stream in a plurality of variable rate encoded data streams that are included in said plurality of encoded data streams and B) an idle packet; ii) storing in said entry a pointer to said variable rate encoded data stream upon said entry being allocated to said variable rate encoded data stream; and iii) repeating steps i) to ii) for each entry in said table; switching to said table so that said table is used by a statistical multiplexer to determine the variable rate encoded data stream that sends the next packet to a communication channel. Brief Description of the Drawings Figure 1 is a block diagram of a prior art encoding and decoding system. Figure 2 is a block diagram of a prior art system using a multiplexer for access to a communication channel. Figure 3 is a block diagram of the statistical multiplexer of this invention. Figure 4 is a process flow diagram for rate update operations of the statistical multiplexer of this invention within each statistical multiplexer period. Figure 5 is a process flow diagram for classifying applications within step 402 of Figure 4 according to the principles of this invention. Figure 6 is a more detailed flow process diagram of step modify rates 403 of Figure 4 according to the principles of this invention. Figure 7 is a more detailed process flow diagram for increase rates steps 623 within step 403 of this invention. Figure 8 is a more detailed process flow diagram for decrease rate step 622 within step 403 of this invention. Figure 9 is a more detailed process flow diagram for build packet table step 404 of this invention. Figure 10 is a time line for one embodiment of the process of Figure 4. Figure 11 is a time line for another embodiment of the process of Figure 4. Figure 12 is a detailed block diagram of the hardware in the statistical multiplexer of this invention. Figure 13 is a timing diagram showing the two time intervals on the application bus within a packet time interval as well as the various message cycles within the first time interval. Figure 14 is a timing diagram for operation of the statistical multiplexer that shows the timing relationship for data transfer over the application bus during the second portion of the packet time interval. Figure 15 is a timing diagram that shows the various relationships of the signals on the application bus when data is driven onto the application bus. Figure 16 is a timing diagram that shows the relationship between the various signals on the application bus when a byte is written during a message cycle. Figure 17 is a timing diagram that shows the relationship between the various signals on the application bus when a byte is read during a message cycle. Figure 18 is a process flow diagram that shows how the statistical multiplexer allocates each packet within a window to either a fixed rate application or a variable rate application. Detailed Description of the Invention According to the principles of this invention, a statistical multiplexer 300 selectively passes packets of encoded data from encoders 302-1 to 302-L to communication channel 330 so as to maximize the quality of the encoded data representing each of applications 301-1 to 301-L. The encoded data in the form of packets, in this embodiment, is transmitted over communication channel 330 to a decoding system (not shown) which in turn decodes the data. Further, while below video data is used as an example of the principles of this invention, those skilled in the art will recognize that the principles of the invention can also be applied to other signal sources that are transmitted over a communication channel. Herein, an application 301-i is encoded by encoder 302-i, where "i" ranges from 1 to L. A reference to application 301-i should be interpreted as including a reference to encoder 302-i that receives as an input signal application 301-i. Also, when the phrase, variable rate, is used to modify an application, an encoder, or an encoded data stream, it means that the encoder, that receives the application as input and generates an encoded data stream, can change the rate of data compression over time. Conversely, when the phrase, fixed rate, is used to modify an application, an encoder, or an encoded data stream, it means that the encoder, that receives the application as input and generates an encoded data stream, does not change the rate of data compression except at configuration time. Statistical multiplexer 300 of this invention distributes the total capacity of communication channel 330 over some interval of time among the plurality of encoded data streams for all applications 301-1 to 301-L so that the quality of applications 301-1 to 301-L is maximized. At the same time, statistical multiplexer 300 assures that the communication channel capacity is not exceeded. In other words, statistical multiplexer 300 of this invention determines what fraction of the communication channel capacity should be allocated to an application 301-i so as to maximize the quality of the decoded signals of all applications. Specifically, a table is stored in memory 313 of controller 310. The table has an entry for each unit of encoded data that can be transmitted over communication channel 330 in a predetermined time interval, e.g., one second. Each entry in the table is allocated, as explained more completely below, to one of encoders 302-1 to 302-L, i.e, to an encoded data stream from encoder 302-i. More entries are allocated for an encoder 302-i that has a high encoding rate than for an encoder 302-j that has a slower encoding rate. Thus, the entries in the table define the number of units of data that are transmitted over communication channel 330 in the predetermined time interval for each of encoders 302-1 to 302-L. In each predetermined time interval, controller 310 accesses each entry in the table to obtain a pointer, e.g., an address, to an encoder 302-i that can transmit the next unit of encoded data to first-in-first-out memory (FIFO) 350 over application control bus 360. As one unit of encoded data is loaded into FIFO 350, another unit of encoded data is passed from FIFO 350 to communication channel 330. Controller 310, in this embodiment, moves sequentially through the entries in the table stored in memory 313 and so allocates the bandwidth of communication channel 330 to encoders 302-1 to 302-L in a predetermined sequence over the predetermined time interval. According to the principles of this invention, statistical multiplexer 300 dynamically adjusts the data compression rate for each variable rate application 301-i over a selected interval of time that is referred to as a window, so that the quality of the encoded data streams is maximized over the selected time interval. Each fixed rate application 301-i receives an allocated quota of packets, i.e., a fraction of the communication channel bandwidth over the selected time interval. Typically, the number of variable rate applications is less than the total number of applications L. Statistical multiplexer 300 adjusts the data compression rate, sometimes referred to simply aε "rate" to maintain a measure of distortion, as defined more completely below, for each variable rate application 301-i below a predetermined limit. Thus, statistical multiplexer 300 operates as an outer shell over the video encoder rate control mechanism by providing rates to that control mechanism so as to maintain a selected parameter for each variable rate application 301-i within a predetermined range. While controller 310 is stepping through the table stored in memory 313 to select packets, e.g., units of encoded data, from encoder 302-1 to 302-L for transmission over communication channel 330, controller 310 is also collecting and storing data in memory 313 from each variable rate encoder 302-i. Controller 310 analyzes the collected data and adjusts the compression rate for each variable rate encoder 302-i to maximize the quality for all encoders. The new compression rates are used to build a new table that is used over the next window. A window is defined more completely below. Hence, controller 310 is selecting packets from encoders 302-1 to 302-L for transmission to communication channel 330 and at the same time is generating a new table of compression rates. When the new table is complete, the new compression rates are transmitted to encoders 302-i that are processing variable rate applications. At about the end of the window, encoders 302-i that are processing variable rate applications shift to the new compression rates and then statistical multiplexer 300 shifts to the new table. Specifically, statistical multiplexer 300 switches to the new table. In an embodiment that is described below, the table utilized by statistical multiplexer 300 to allocate each unit of data that can be transmitted over communication channel 330 over the window is in fact two tables, a static table and a dynamic table. The static table has an entry for each unit of encoded data that can be transmitted over communication channel 330 in the predetermined time interval. At configuration time, the static table iε populated. Specifically, the entries in the static table are allocated to the fixed rate and variable rate applicationε, i.e, each entry iε allocated to one of a plurality of data streams. For each entry that is allocated to a fixed rate data stream from a fixed rate encoder, a pointer is stored in the entry to the fixed rate data stream. For each entry that is allocated to a variable rate data stream, a predetermined code, e.g., a null code is stored in the entry. The dynamic table is populated with pointers to variable rate applications. Specifically, each entry in the dynamic table is allocated to one of the variable rate applications, i.e., to a variable rate encoded data stream from a variable rate application, or to an idle packet. In each entry that is allocated to a variable rate application, a pointer is stored to that variable rate application. When statistical multiplexer 300 accesεeε the predetermined code in the static table, the next entry in the dynamic table is used to determine the variable rate encoder that sends the next unit of data to communication channel 330. Figure 4 is a procesε flow diagram for εtatistical multiplexer 300. Upon start-up, i.e., at initial configuration and at reconfiguration, statistical multiplexer 300 enters initialization step 401. In initialization step 401, system supervisor 340 (Fig. 3) provides configuration information for use in subsequent operation of statistical multiplexer 300. The configuration information is stored in memory 313. Aε explained more completely below, in this embodiment, the stored configuration information includeε a minimum data rate Rmin_i, a maximum data rate Rmax_i and a guaranteed data rate Rgtd_i, a maximum buffer εize Bmax_i, a maximum distortion coefficient Dmax_i, a priority number P_i, and distortion hystereεiε coefficients Kl_i and K2_i for each encoder 302-i. The rates provided by syεtem εupervisor 340 are converted, if necessary, to units that are compatible with statistical multiplexer 300. In step 401, all encoders 302-1 to 302-L are asεigned their nominal rates. In the case of fixed rate applications, the nominal rate is the actual rate. In the case of statistically multiplexed applications, i.e., variable rate applications 301-i, the nominal rate is either the guaranteed rate, or some other pre-defined value, such as the minimum rate. In this embodiment, each variable rate encoder 302-i is assigned guaranteed data rate Rgtd_i as initial rate R_i for application 301-i. Similarly, a distortion D_i for each variable rate encoder 302-i is set to maximum distortion coefficient Dmax_i. Upon completion of initialization step 401, proceεsing transfers to collection and classification step 402. Collection and clasεification εtep 402 iε also entered at the end of each statistical multiplexer period, sometimes called a statistical multiplexer cycle. Data required to determine an updated distortion D_i for each variable rate application 301-i is collected in step 402. As explained more completely below, distortion D_i involves a number of parameters that characterize the video sequence that iε being proceεεed by variable rate encoder 302-i. Distortion D_i itself may be provided to statistical multiplexer 300 by variable rate encoder 302-i or variable rate encoder 302-i can provide parameters to statistical multiplexer 300 so that statistical multiplexer 300 can determine distortion D_i for variable rate encoder 302-i. In one embodiment, as described more completely below, εtatistical multiplexer 300 polls each variable rate encoder 302-i in a round robin fashion in a pre-defined sequence and reads one byte of information at a time from each variable rate encoder 302-i. Distortion D_i is determined once for each picture in the sequence by statistical multiplexer 300. Thus, the frequency of transferring the distortion parameters from variable rate encoder 302-i to statistical multiplexer 300 is once per picture. Consequently, the collection portion of step 402 iε performed by εtatiεtical multiplexer 300 on an ongoing baεis. Statistical multiplexer 300 tracks the variation in buffer fullneεε of each variable rate encoder 302-i to enεure that there is no overflow or underflow whenever a rate is altered in step 402. The buffer fullness information is available in each variable rate encoder 302-i and iε paεεed, once per picture, to εtatiεtical multiplexer 300. Distortion D_i is determined by statistical multiplexer 300 for each variable rate application 301-i in step 402 based on distortion parameters that were obtained from variable rate encoder 302-i prior to initiation of step 402. Specifically, any new distortion information received in collection and claεεification step 402 while step 402 is active, iε not effective until the next time εtep 402 becomes active. Thus, statiεtical multiplexer 300 uεeε data collected during the previous statistical multiplexing cycle in step 402. The claεεification step in step 402 asεignε each variable rate application 301-i to one of a plurality of claεεeε. In one embodiment, the plurality of claεses includes six claεεes. As explained more completely below, the classes are defined based on (i) whether rate R_i is leεε than, or greater than or equal to guaranteed rate Rgtd_i for variable rate encoder 302-i; and (ii) the relationεhip of diεtortion D_i to maximum distortion coefficient Dmax_i. In modify rates step 403, a new rate for at least each non-fixed rate application is generated, as explained more completely below, for each encoder 302-i where a change in rate preferably either improves distortion D_i or does not increase distortion D_i to greater than a maximum distortion. For encoderε with variable rate applications that are being compresεed so as to achieve an acceptable distortion D_i, the new rate is simply set equal to the old rate. After a new rate is determined for each variable rate encoder 302-i, the new rateε are checked to determine whether the total rate exceedε the capacity of communication channel 330. The new rates are adjusted so as to utilize as much of the capacity of communication channel 330 as posεible without exceeding itε capacity. Upon completion of modify rates step 403, build table 404 builds a new table, aε explained more completely below. In one embodiment, a unit of encoded data εent over communication channel 330 iε referred to as a packet and so build table 404 builds a new packet εchedule table. In εtatiεtical multiplexer 300, the rate requirementε of different applications 301-i change rapidly with time, and consequently the quota of packets allocated to an application changes with time. Statiεtical multiplexer 300 ensures that each application 301-i gets itε allocated quota of packets over a specified window of time in build table step 404. The packet schedule table, that is built in step 404, is defined for the next statistical multiplexer cycle, i.e., a window, and containε information about which application iε allocated each packet in that time interval. The allocation of packets is such that the packets belonging to any one application are approximately uniformly spread over the time interval. This minimizes any additional buffering in a demultiplexer in the decoding system. (The demultiplexer selects the packets in the stream of incoming data stream that are of interest to the decoding syεtem.) The packet schedule table, based on the new rates allocated to each variable rate encoder 302-i in εtep 403, comeε into effect at the start of the next window. The smaller the window size, the more processing overhead per packet since the packet schedule table haε to be built more frequently. On the other hand, a large window εize reduces the reaction of εtatistical multiplexer 300 to changes in distortion, e.g. , a scene change might cauεe a video sequence to become more complex. In such a case if rate R_i is low, the scene change results in distortion D_i becoming large and statistical multiplexer 300 should allocate more bits to encoder 302-i. However, if the window size iε large, statistical multiplexer 300 fails to react promptly to the scene change unless the scene change fortuitously occurs near the end of the window. As used herein, a picture referε to a characteriεtic unit of the encoder. For most cases, a picture is a frame, but since thiε invention is not limited to acting only on frames, the more general term "picture" is uεed. In the case of non-video data, some other appropriate unit may be used, e.g., an audio frame. When the new packet schedule table iε built in εtep 404, statistical multiplexer 300 communicates each new rate to the respective variable rate encoder 302-i in pass rates step 405. Again, a pre-defined order can be used for thiε purpoεe. Finally, at some instant in switch rateε εtep 406, variable rate encoderε 302-i εwitch their internal rate control to the new rateε. At the εame time, εtatiεtical multiplexer 300 εwitches to the new packet εchedule table built in step 404. Thus, synchronization between εtatiεtical multiplexer 300 and applications 301-1 to 301-L is maintained to ensure that the sum of all the encoder rateε, the total rate, always equals the communication channel capacity. This maximizes the efficiency of communication channel utilization and also eliminates the posεibility of allocating more capacity to the encoderε than communication channel 330 can εupport. After εwitch rate step 406 is completed procesεing transfers to period complete step 407. When the period is complete, εtepε 402-407 are repeated. Thus, the operations in steps 402-407 occur once every period. INITIALIZATION STEP 401 In one embodiment of initialization step 401, system supervisor 340 specifieε the total number of fixed rate applicationε and the total number of variable rate applications procesεed by statistical multiplexer 300. System superviεor 340 alεo specifies parameters needed to characterize a primary packet schedule table, sometimes called a primary table, used by statistical multiplexer 300. The primary packet schedule table parameters include a number N of packets that are supplied by εtatiεtical multiplexer 300 to communication channel 330 in approximately one εecond, i.e, a εize of the primary packet schedule table, and a number V of entries in the primary schedule table that must be allocated to variable rate applications. In initialization step 401, syεtem supervisor 340 sets a parameter, called distortion threshold Dmax_i, which iε εometimeε referred to aε the target distortion, for each variable rate application 301-i. In this embodiment, diεtortion threεhold Dmax_i is a distortion such that distortion above distortion threshold Dmax_i is deemed noticeable to the human eye. Distortion threshold Dmax_i is non-negative and in one embodiment, is a non-negative real number with two byte precision. System supervisor 340 also sets rate bounds, typically in bits/εecond, for each of applicationε 301-1 to 301-L in initialization step 401. For variable rate applications, the rate bounds are defined by a minimum data rate Rmin_i, a maximum data rate Rmax_i, and a guaranteed data rate Rgtd_i. For fixed rate applications, the three rate bounds are set to the same value by system supervisor 340. Minimum rate Rmin_i is a lower bound on the rate allocated to a variable rate application 301-i by statistical multiplexer 300. In other words, this rate is asεured irreεpective of the reconεtruction quality of that application. Minimum rate Rmin_i can not be negative. Maximum rate Rmax_i iε an upper bound on the rate allocated to a variable rate application 301-i by statistical multiplexer 300. This rate cannot be exceeded irrespective of the reconstruction quality of that application. Herein, the reconstruction quality is measured by a diεtortion factor D_i, as explained more completely below. Maximum rate Rmax_i is equal to or greater than minimum rate Rmin_i. Guaranteed rate Rgtd_i is a rate that is guaranteed by εtatistical multiplexer 300 to a variable rate application 301-i to enable that application to achieve itε target diεtortion. This parameter may or may not be used by a particular application as determined by system superviεor 340. If guaranteed rate Rgtd_i iε to be ignored, distortion threshold Dmax_i is set equal to zero at configuration time. Otherwise, guaranteed rate Rgtd_i must be within the range [Rmin_i, Rmax_i] . Independent of whether guaranteed rate Rgtd_i iε uεed, at εtart-up, each variable rate application initially iε aεεigned its guaranteed rate Rgtd_i. Further, the sum of all guaranteed rates Rgtd_i for variable rate applications. and the actual rateε of all fixed rate applicationε, which are repreεented herein by Rmin_i, εhould equal the channel capacity, i.e.. ∑ Rgtd__i + 5^ Rmin_j = channel capacity ieA jeB where "A" iε the εet of all applications 301-i that have a specified guaranteed rate Rgtd_i and "B" is the set of all other applications. Not all the applicationε connected to multiplexer 300 need be statistically multiplexed, i.e., some or all of the applications can have fixed rates for the entire duration of operation. In this embodiment, it is the responεibility of εyεtem εuperviεor 340 to enεure that the above relationεhip iε εatiεfied. The rateε εpecified by εyεtem supervisor 340 are usually specified in terms of bits/second. In reality, most systems transfer bitε from the encoder buffer in the form of "packets", where a packet contains εeveral bitε. In other words, quantization of rate is not at the bit-level, but at the level of several bits. In such a syεtem, the communication channel capacity iε translated to a specific number of packets/second. These packets must be allocated to encoders 302-1 to 302-L such that each encoder's rate requirement is satisfied. Consequently, the rateε in bitε/εecond are converted in initialization step 401 to the appropriate packets per time interval. Specifically, each rate is converted to a rate in packets per εecond. Since N iε the number of entrieε in the primary table, each rate iε converted to the number of packets in primary packet schedule table (packetε per P.T.) that correεpondε to the rate in bitε per second. In one embodiment, as explained more completely below, statiεtical multiplexer 300 also uses a secondary table that has a fixed number of entrieε S. For each variable rate application, the rate iε alεo converted to the number of packetε in the secondary packet schedule table (packetε per S.T.) . If S is 192, the rate in packets/S.T. is R(packets/S.T.) = int ( R(packets/P.T. ) x (192/V) ) where "int" is the integer function. Since the sum of the aεεigned rateε, which in thiε embodiment are the guaranteed rateε, εhould equal the total communication channel capacity allocated to variable rate encoders 302-i, the sum of the asεigned rateε in packetε/S.T. equals 192. The truncation introduced by the integer function may cause the sum of the aεεigned rateε to be less than the total communication channel capacity allocated to variable rate encoderε 302-i. In this case, any unaεεigned packets are arbitrarily asεigned to variable rate encoderε by εtatistical multiplexer 300. After the translation of the rates to packetε/S.T., statistical multiplexer 300 recalculates the rates in terms of bits/second and the resulting guaranteed rate Rgtd_i is pasεed to encoder 302-i. This recalculation is neceεεitated by the truncation introduced by the integer function. To facilitate the recalculation, εyεtem supervisor 340 provides statiεtical multiplexer 300 a rate calibration conεtant Y, which iε defined aε: Cx(l-TOL M )x(P-OV)xV ~ Nxl92x(l+TOL v )x400xP where: OV iε the number of overhead bits in each packet, which in this embodiment is 24 bits; C is the nominal total statiεtical multiplexer output rate (in bitε/εecond) ; TOL M is the tolerance of the statiεtical multiplexer clock (expreεεed aε a fraction) , P iε the channel packet εize in bitε (1040 bits in one embodiment) ; V is the total number of entries in the primary table aεεigned to variable rate applicationε; N is the total number of entries in the primary table; and T0L v is the tolerance of the data rate at the input to the encoder. Rate calibration constant Y iε provided to each encoder 302-1 to 302-L at configuration time. A rate R in bits/second corresponding to Q packets/S.T. iε given by: R = 400 x int (Q x Y) where "int" is the integer function; Q is the number of packets/S.T. assigned to an application; and the constant "400" is required by the MPEG compression standard which counts rateε in multipleε of 400 bitε/εecond. In other applications, where a finer resolution on the rateε iε allowed, the above relationεhip is easily modified by those skilled in the art. System supervisor 340 in initialization step 401 aεεignε a priority number P_i for each variable rate encoder 302-i to indicate itε importance. The greater the importance of a variable rate encoder 302-i, the higher is priority number P_i for that encoder. Priority number P_i is used to weight the distortion of each variable rate encoder 302-i, aε explained more completely below. Consequently, a large priority number P_i artificially scaleε up the diεtortion, reεulting in variable rate encoder 302-i demanding more bits of communication channel 330. Priority number P_i is a non-negative and, in one embodiment, is an integer within the range of [1, 16]. In one embodiment, statiεtical multiplexer 300 normalizeε priority number P_i of each variable rate encoder 302-i by dividing priority number P_i by the average of all of priority numbers. The resulting normalized priority number, which is also indicated by P_i, is stored by εtatiεtical multiplexer 300 in memory 313 and is used in the operations described below. Aεεociated with each variable rate application 301-i are two hysteresis coefficients Kl_i and K2_i, which are used to introduce hysteresis in the process of determining rates for each fixed time interval. In this embodiment, the default values for hyεtereεis coefficients Kl_i and K2_i are 0.9 and 1.1, respectively. For each variable rate encoder 302-i, system supervisor 340 also defines maximum buffer size Bmax_i for encoder 302-i. Statistical multiplexer 300 useε maximum buffer εize Bmax_i and maximum rate Rmax_i for each variable rate encoder 302-i to determine the end-to-end εyεtem delay time <S_i, i.e., the time in εeconds from when a frame iε input to an encoding εyεtem to when it is ultimately displayed by the decoding syεtem. Aε will be appreciated by thoεe skilled in the art, the end-to-end syεtem delay time is actually syεtem delay time ό " _i pluε other time delayε introduced by frame buffering etc. However, for εtatiεtical multiplexer 330, the relevant information for a variable rate encoder 302-i iε captured by defining end-to-end εyεtem delay time δ_i aε: <S_i = Bmax_i / Rmax_i System delay time <S_i, in this embodiment, cannot be changed without loss of encoder-decoder picture synchronization until the next re-configuration time. Statistical multiplexer 300 ensures that syεtem delay time δ_i for each application 301-i iε not altered and at the εame time there iε no buffer over-flow or under-flow in the encoding and decoding εyεtemε. In another embodiment, system delay time δ_i is allowed to change and frame dropping and/or repeating is allowed in the display. In initialization εtep 401, system supervisor 340 sets the starting diεtortion D_i for each variable rate application 301-i to its distortion threshold Dmax_i. Table I is a summary of the parameters provided by εyεtem supervisor 340 to statistical multiplexer 300 for each variable rate encoder 302-i. In another embodiment, the information in Table I could be supplied for both variable and fixed rate encoders. TABLE I Parameters Required by Statistical Multiplexer Parameter Range Type Rmin 0 to 192 16-bit integer Rmax 0 to 192 16-bit integer Rgtd 0 to 192 16-bit integer P 1 to 16 16-bit integer (High 12-bitε reεerved: bit 15(MSB) iε "1" for fixed rate and "0" for variable rate) Dmax 16-bit integer Bmax number of 400- 16-bit integer bit units. The particular ranges and types of the parameterε given in Table I are only illuεtrative of one embodiment of this invention and are not intended to limit the invention to the particular information given. COLLECTION AND CLASSIFICATION STEP 402 As explained briefly above, the collection portion of step 402 collectε data required to determine distortion D_i for each variable rate encoder 302-i and the variation in buffer fullness of each variable rate encoder 302-i on an ongoing basiε. In one embodiment, communication between encoderε 302-1 to 302-L and statistical multiplexer 300 is implemented through a "message cycle". Statiεtical multiplexer 300 can read or write one byte of information to any of encoders 302-1 to 302-L during a mesεage cycle in each packet time. A packet time, sometimes called a packet interval, is typically the time interval required to transmit 130 bytes of data over communication channel 330, but the time and/or the packet εize can vary. In addition, statiεtical multiplexer 300 can broadcast a byte of information to all encoders 302-1 to 302-L during the mesεage cycle. If encoder 302-i merely pasεeε the parameterε necessary to determine distortion D_i to statistical multiplexer 300, distortion D_i εpans several packet times for that encoder. The particular process used to paεs data between statiεtical multiplexer 300 and encoders 302-1 to 302-L is not critical to this invention. The important aspect is the data required by statistical multiplexer 300 and how statiεtical multiplexer 300 processes the data. In view of the description of the operation of εtatistical multiplexer 300, the required data can be paεsed in a wide variety of ways. Nevertheless, in one embodiment, all direct communication between statiεtical multiplexerε 300 and encoderε 302-1 to 302-L iε performed by reading entrieε from and writing entries to a general communications table in memory 313 of εtatiεtical multiplexer 300. Specifically, when an entry is written to the general communications table by processor 312, state machine 311 controls hardware that (a) writes one byte to a first register onboard an encoder 302-i or to a first first-in-first-out memory (FIFO) onboard an encoder 302-i, or (b) reads one byte from a second register onboard encoder 302-i or from a second first- in-first-out memory (FIFO) onboard encoder 302-i over application control bus 360. The first register onboard each encoder 302-i contains a write owner FIFO flag and a read owner FIFO flag either of which can be set to "mux" or "encoder." The second register onboard each encoder 302-i contains a write data valid flag. Herein, first and second FIFOs and regiεterε are uεed, but thiε iε illuεtrative only and those skilled in the art will recognize that the communications between encoders 302-i and statiεtical multiplexer 300 can be accompliεhed in a wide variety of wayε without affecting the operation of statistical multiplexer 300. The important aspect, as indicated above, is that each encoder collectε diεtortion and buffer fullneεε data and the data are communicated to εtatiεtical multiplexer 300 at appropriate intervalε for operation of statistical multiplexer 300. Also, statistical multiplexer 300 must communicate new rate information to variable rate encoderε 302-i once per εtatistical multiplexer cycle. Two processes are used to communicate data from encoder 302-i to statistical multiplexer 300. In a first proceεε, εtatiεtical multiplexer 300, in the following order, (1) sets the write FIFO owner flag of encoder 302-i to "mux"; (2) reads the write data valid flag and six bytes from the first FIFO; and (3) sets the write FIFO owner flag to "encoder". When this process is completed for encoder 302-i, statiεtical multiplexer 300 examineε the write data valid flag and if the flag iε not valid, diεcards the six byteε of data. Thiε proceεε iε repeated for each encoder at least once every twenty milliseconds. In the second proceεε used to communicate data from encoder 302-i to statiεtical multiplexer 300, encoder 302-i checks the write FIFO owner flag and the state of the first FIFO when encoder 302-i has collected the distortion and buffer fullness data, which iε once per picture. If the write FIFO owner flag is set to "encoder," and the firεt FIFO iε empty, encoder 302-i writes the collected data to the first FIFO and upon completion setε the write data valid flag. If either of the conditions is not true, encoder 302-i waits until both conditions are true before writing to the first FIFO. If new data becomeε available before the collected data can be written to the firεt FIFO, the collected data iε discarded and replaced with the new data. Data communication from statistical multiplexer 300 to encoder 302-i, i.e., transfer of a new rate, is done in a three step process. Statistical multiplexer 300, in the following order, (1) εets the read FIFO owner flag of encoder 302-i to "mux"; (2) writes the new rate to the second FIFO; and (3) setε the read FIFO owner flag to "encoder". The writes to the read FIFO owner flag generates interrupts to the encoder proceεεor. In reεponεe to the interrupt, the encoder proceεsor readε data from the εecond FIFO until the FIFO iε empty. Aε each set of parameters for a picture is received by statistical multiplexer 300 from encoder 302-i using the proceεε juεt deεcribed, the εet of parameters are used along with the aεεigned priority P_i to generate an instantaneous distortion d_i. Instantaneous distortion d_i is used to update distortion D_i for variable rate encoder 302-i. In one embodiment, distortion D_i for each application is determined recursively, e.g., distortion D_i is the average of the previous three distortion values. Using a running average for distortion D_i, aε oppoεed to the moεt recently determined value, protects against sudden spikeε in distortion D_i. In another embodiment, a recursive filter is used to update distortion D i. Specifically, D i = ( β * (D i) ) + (( 1 - β ) * (d i)). The recursive filter introduces damping which also protects against sudden spikeε in distortion D_i. The value of constant β is determined empirically and a value of 0.8 is used in one embodiment. When a data collection cycle is closed, distortion D-i, i = 1, ..., NV, for all variable rate encoders and the current rates R_i, i = 1, ..., NV, are always known becauεe the rates and diεtortions either are set at configuration time in step 401, aε deεcribed above, or are the rates and distortionε from the previouε statistical multiplexer cycle. The classification portion of step 402 asεignε each variable rate application 301-i to one of a plurality of clasεeε using the current rates and distortions. In one embodiment, six classes are defined according to Table II. TABLE II Clasε Definition for New Rate Generation D < Kl*Dmax Kl*Dmax < D< K2*Dmax D > K2*Dmax R<Rgtd Claεs 1 Class 2 Clasε 3 R Rgtd Class 4 Class 5 Claεε 6 The purpose of the classification portion of step 402 iε to identify for each variable rate application 301-i whether current rate R_i for that application is providing an acceptable distortion D_i and clasεify application 301-i for the appropriate action in modify rateε εtep 403. Process 500 is one posεible implementation of the claεεification portion of εtep 402. Step 501 checkε to determine whether each of the variable rate applicationε 301-i, i=l, ..., NV, haε been proceεεed. If variable rate applications remain to be procesεed, diεtortion D_i for the next variable rate application 301-i iε checked in diεtortion too high check εtep 502. Specifically, diεtortion D_i iε compared with a maximum diεtortion (K2_i) *(Dmax_i) , where the maximum diεtortion is the product of second hystereεis coefficient K2_i and diεtortion threεhold Dmax i for that application, i.e., D_i > (K2_i) * (Dmax_i) . If diεtortion D_i iε too high, proceεεing tranεferε from εtep 502 to rate check step 503, and conversely to diεtortion too low εtep 506. In rate check εtep 503, if rate R_i iε leεε than guaranteed rate Rgtd_i for application 301-i, processing transferε to step 504 and otherwise to step 505. In step 504, application 301-i is assigned to Clasε 3 and in εtep 505, application 301-i is assigned to Clasε 6. Steps 504 and 505 transfer to additional application step 501. Each application 301-i in Claεε 3 is currently allocated less than guaranteed rate Rgtd_i and is being compreεsed at a quality level less than the maximum distortion. Consequently, the rates of the applications in Clasε 3 should be increased. Each application 301-i in Class 6 is currently allocated at leaεt guaranteed rate Rgtd_i and iε being compreεsed at a quality level less than the maximum distortion. Applications 301-i in Class 6 compete among themselves for rate increaseε, as described more completely below. In distortion too low εtep 506, diεtortion D_i for application 301-i is compared with a minimum distortion (Kl_i) * (Dmax_i) , where the minimum distortion is the product of first hysteresis coefficient Kl_i and distortion threεhold Dmax_i for application 301-i, i.e. , D_i < (Kl_i) * (Dmax_i) . If distortion D_i is too low, processing transfers from step 506 to rate check step 507, and conversely to rate check step 510. In rate check 507, if rate R_i iε less than guaranteed rate Rgtd_i for variable rate application 301-i, procesεing tranεferε to εtep 508 and otherwise to step 509. In step 508, application 301-i is asεigned to Claεε 1 and in step 509, application 301-i is assigned to Clasε 4. Stepε 508 and 509 tranεfer to additional application εtep 501. Applicationε in Claεεeε 1 and 4 have a distortion D i that is leεs than the lower limit of the acceptable range and so are being compreεsed at a quality level that is better than their target quality as defined by the minimum distortion. In other words, current rate R_i for each variable rate application 301-i in this group is in exceεε of the rate required to operate at the target distortion level, i.e., within a range of acceptable distortion. Consequently, the rate for each application in this group can be decreaεed. If an application reaches εtep 510, diεtortion D_i iε within an acceptable range. Specifically, diεtortion D_i of application 301-i iε greater than minimum diεtortion (Kl_i) * (Dmax_i) and less than maximum distortion (K2_i) * (Dmax_i) , i.e., (Kl_i) * (Dmax_i) <= D_i <= (K2_i) * (Dmax_i) Thus, the application is being compresεed at the right quality level. Hence, no change is required in current rate R_i for variable rate application 301-i. Applications in this group are aεsigned to Class 2 in step 511 if current rate R_i is less than guaranteed rate Rgtd_i and otherwise to Class 5 in step 512. Steps 511 and 512 transfer to additional application εtep 501. Thuε, process 500 aεεigns each of the variable rate applications to one of the six claεεes defined in Table II. The rates for applicationε in Claεs 2 are not changed. However, as discusεed below, modify rateε εtep 403 can change the rates for applications in Classes 1 and 3 to 6. Prior to entering step 403, delta rate increaεes ΔD, ΔI, and ΔC, as defined below, are zeroed. MODIFY RATES STEPS 403 In modify rates step 403, the rates for variable rate applications in Clasεeε 1 and 4 are proceεεed aε a group. The rateε for variable rate applicationε in Claεε 3 and the rateε for variable rate applications in Clasε 6 are proceεεed εeparately. If after the rate adjustments, the capacity of communication channel 330 is not fully utilized, the rates of applications in Clasεeε 3 and 6 are revised. Conversely, if after the rate adjustments, the capacity of communication channel 330 is exceeded, the rates of applicationε in Claεεeε 4 to 6 are reviεed. In one embodiment, all rateε are meaεured in unitε of packetε/εecondary table. The unit uεed to meaεure the rate affects the choice of coefficients that are determined empirically. Hence, a different unit of measure for the rates will require a different value for the empirically determined coefficients. Lower rate process 600 illustrates the rate modification procesε within step 403 for applications in Clasεeε 1 and 4, i.e., applicationε with too low a distortion D_i. Lower rate process 600 iε iteratively performed for each application 301-i in Classes 1 and 4. In this embodiment, lower rate process 600 uses a proportional feedback loop to decrease current rate R_i for each application 301-i with too low diεtortion D_i. Uεe of a proportional feedback loop aεεumes implicitly that rate R_i and distortion D_i of every application 301-i are inverεely proportional to each other. In general, εuch an assumption is not true. However, according to the principles of thiε invention, rate R_i is allowed to change only in small increments, as described below, and so there is not too much deviation from the actual rate-distortion curve. This assumption is utilized in all rate adjuεtment proceεεeε in thiε embodiment. Of courεe in other embodimentε, different functional relationεhipε between a rate and distortion could be used. Also, different functional relationshipε between a rate and distortion could be used in the various processeε that make-up εtep 403. A new rate Rnew_i for application 301-i with too low distortion D_i is determined in adjust rate step 601. In adjust rate εtep 601, old rate Rold_i iε εet equal to the current rate R_i for variable rate application 301-i, e.g, a table of current rateε is copied to a table of old rates. Herein, reference numeral Rnew_i is used to distinguiεh between the old rate and the new rate. In fact, each new rate Rnew_i iε εtored at the appropriate location in the table of current rateε so that at the end of modify rateε εtep 403, the table of current rates contains the new rates for the next statistical multiplexer cycle. In thiε way only two εtructureε, e.g., the two tables, are utilized in modify rates step 403. Therefore, referenceε herein to a new rate iε the rate in the current rate table. The normalized difference between distortion threshold Dmax_i and distortion D_i is scaled by a constant c and added to old rate Rold_i to generate new rate Rnew_i. In one embodiment, constant c was empirically determined and εet to a value of 16. Specifically, Rnew_i = Rold_i + ( c * (( D_i - Dmax_i )/Dmax_i)) Herein, conεtant c has the same values for all applicationε in all claεεes. However, constant c could also be defined on an application by application basis or alternatively on a clasε by claεε baεiε. Next, adjust rate step 601 checkε new rate Rnew_i to enεure that new rate Rnew_i iε within a predetermined range, i.e., the change in the rate iε a εmall decrement. In one embodiment, new rate Rnew_i muεt be in the range of a lower rate bound and an upper rate bound, e.g., : ε * (Rold_i) < Rnew_i < Rold_i In this embodiment, the value of conεtant ε waε empirically choεen as 0.9. If new rate Rnew_i is less than lower rate bound s*Rold_i, new rate Rnew_i is εet equal to lower rate bound ε*Rold_i. After new rate Rnew_i iε tested to determine whether the change in the rate is constrained to a .small decrement, new rate Rnew_i is teεted to determine whether new rate Rnew_i iε less than minimum rate Rmin_i for application 301-i. If new rate Rnew_i is less than minimum rate Rmin_i for application 301-i, new rate Rnew_i is set equal to minimum rate Rmin_i. Upon completion of adjust rate step 601, procesεing transfers to adjust buffer size step 602. To maintain a constant delay time through the system, a decrease in rate R_i of application 301-i is accompanied by a proportional decrease in the effective buffer size of encoder 302-i. Thus, adjust buffer size step 602 determines a new effective buffer size. In this embodiment, new effective buffer size "buf_sz_i" is equal to the product of new rate Rnew_i and system delay time interval δ_i . Specifically, (buf_sz_i) = (<5_i) * (Rnew_i) However, the buffer εize cannot be decreaεed arbitrarily. Obviously, care must be taken to ensure that new buffer size buf_sz_i iε not less than the current buffer fullnesε. Actually, there is an even more strict requirement. New buffer size buf_sz_i should not be less than the inεtantaneouε fullness of the encoder buffer as measured over a period of time equal to εyεtem delay time interval δ_i that juεt preceded the current time. Hence, as described above, statistical multiplexer 300 obtains the buffer fullnesε value at the end of each picture for application 301-i and εtoreε the largest buffer fullnesε value, over the period of time δ_i that juεt preceded the current time, in memory 313 aε maximum buffer fullneεε threεhold max_buffer_i. It iε poεεible to decreaεe a rate R_i without regard to buffer fullness if the decoder buffer is at least as large as the encoder buffer multiplied by the ratio of maximum rate Rmax_i to minimum rate Rmin_i. However, this typically requires a large size for the decoder buffer. If the encoder and decoder are to have the same size bufferε, the buffer fullneεε muεt be conεidered before decreasing a rate. Whenever, a rate is decreased, it is important to ensure that all the bits that have already been inεerted into the encoder buffer up to a time δ_i before the rate change are delivered to the decoder in time δ_i . Thiε is an isεue becauεe the new rate, at which bits will be delivered, is lower than the old rate at which they were generated. Thus, the rate can be decreaεed if and only if the buffer fullness over the time interval equal to time <S_i before the rate change is inεtituted doeε not exceed the new buffer size. Hence, threshold max_buffer_i is compared with new buffer size buf_sz_i. If new buffer εize buf_εz_i iε leεε than maximum buffer fullness threshold max_buffer-i, new rate Rnew_i is εet equal to old rate Rold_i. Otherwiεe, new rate Rnew_i iε retained and the operationε in adjust buffer size step 602 are complete and processing transfers to accumulate rate change step 603. In accumulate rate change step 603, the change in rate for application 301-i, i.e., the difference between new rate Rnew_i and old rate Rold_i is determined and added to delta rate decrease ΔD. Specifically, delta rate decrease ΔD is the accumulation between new rate Rnew_i and old rate Rold_i for applications 301-i with too low distortions. Recall that above delta rate decrease ΔD waε initialized to zero and is reset to zero at the start of each statistical multiplexer cycle. ΔD = L (Rnew_i - Rold_i) Delta rate decrease ΔD is negative. Upon completion of accumulate rate change step 603, procesεing transfers to step 604 which in turn checks whether there are additional applications in Classes 1 and 4 for processing. If all applications in Classes 1 and 4 have been processed, step 604 transfers to processes complete step 630 and otherwise to step 601. Applications in Classes 3 and 6 have a diεtortion D_i that is too high. Applications in Class 3 have a current rate R_i that is less than guaranteed rate Rgtd_i. Each of these applications is proceεsed in increaεe rate proceεε 605 within modify rateε step 403. Applications processed in increase rate proceεs 605 are currently allocated lesε than their guaranteed rateε, but the applications are being compressed at a quality level that is less than the target quality as defined by maximum distortion (K2_i)*(Dmax_i) . Consequently, rate R-i for each of these applications is increased until application 301-i has distortion D_i in the acceptable distortion range, or until the application has been allocated guaranteed rate Rgtd_i, which ever comes firεt. In this embodiment, increaεe rate proceεε 605 uses a proportional feedback loop to increase current rate R_i for each application 301-i in Class 3. Use of a proportional feedback loop assumes implicitly that rate R_i and distortion D_i of every application 301_i in Clasε 3 are inversely proportional to each other. In general, such an asεumption iε not true. However, according to the principleε of thiε invention, rate R_i is allowed to change only in small increments, as described below, and εo there iε not too much deviation from the actual rate-distortion curve. New rate Rnew_i for application 301-i in Clasε 3 is determined in adjust rate step 606. In adjust rate εtep 606, old rate Rold_i iε εet equal to the current rate R_i for application 301-i. The normalized difference between diεtortion threεhold Dmax_i and diεtortion D_i is scaled by a constant c and added to old rate Rold_i to generate new rate Rnew_i. Specifically, Rnew_i = Rold_i + ( c * ( D_i - Dmax_i ) /Dmax_i ) In one embodiment, conεtant c was empirically determined and set to a value of 16. Next, adjust rate step 606, checks new rate Rnew_i to ensure that the change in rate iε a εmall increment. In one embodiment, new rate Rnew_i muεt be in a range defined by a lower rate bound and an upper rate bound, e.g., : Rold i < Rnew i < t * Rold i, In thiε embodiment, conεtant t waε empirically selected as 1.1. If new rate Rnew_i is greater than upper rate bound t*Rold_i, new rate Rnew_i is set equal to upper rate bound t*Rold_i. After new rate Rnew_i is tested to determine that the change in the rate is constrained to a εmall increment, new rate Rnew i is tested to determine whether new rate Rnew_i is greater than guaranteed rate Rgtd_i for application 301-i. If new rate Rnew_i is greater than guaranteed rate Rgtd_i for application 301-i, new rate Rnew_i is set equal to guaranteed rate Rgtd__i. Upon completion of adjust rate εtep 606, a buffer fullness check, as deεcribed above, iε not necessary since an increase in rate is accompanied by an increase in effective buffer size. Therefore, processing transfers from adjust rate step 606 to accumulate rate change εtep 607. In accumulate rate change εtep 607, the change in rate for application 301-i, i.e., the difference between new rate Rnew_i and old rate Rold_i, is determined and added to delta rate increase ΔI, which in turn is stored in memory 313. Recall that above delta rate increase ΔI was initialized to zero and is reset to zero at the start of each statistical multiplexer cycle. Specifically, ΔI = L (Rnew i - Rold i) Delta rate increase ΔI iε poεitive. Upon completion of accumulate rate change εtep 607, proceεsing tranεferε to εtep 608 which in turn checkε whether there are additional applications in Clasε 3 for proceεεing. If all applicationε in Claεε 3 have been proceεεed, step 607 transferε to processes complete step 630 and otherwise to step 606. Thus, process 605 is sequentially performed for each variable rate application 301-i in Clasε 3. The applicationε in Claεs 6 have a distortion D_i that iε greater than maximum distortion (K2_i) * (Dmax_i) and a rate R_i that is greater than or equal to guaranteed rate Rgtd_i. The applicationε in Claεε 6 are being compreεsed at distortion values in excess of the target quality deεpite the fact that the applications have been allocated at least their guaranteed rate. These applications compete amongst themselveε in competitive increase rate process 610 to equalize their distortions. Specifically, in average distortion step 611, average distortion Davg of all the applications in Claεε 6 is determined. Specifically, Da vg = - H 53 D - i where H is the total number of applications in Clasε 6. Upon completion of average diεtortion εtep 611, εteps 612 to 616 are performed for each variable rate application 301-i in Claεε 6. Processing transferε from average diεtortion εtep 611 to adjuεt rate εtep 612. In adjuεt rate 612 εtep, old rate Rold_i iε εet equal to current rate R_i for application 301-i. The normalized difference between average diεtortion Davg and distortion D_i is scaled by a constant c and added to old rate Rold_i to generate new rate Rnew_i. In one embodiment, conεtant c was empirically determined and set to a value of 16. Specifically, new rate Rnew_i iε: Rnew_i = Rold_i + ( c * ( D_i - Davg) / Davg ) Next adjuεt rate εtep 612 checks new rate Rnew_i to be sure that the change in rate is small. If new rate Rnew_i increaεed, new rate Rnew_i must be in the range defined by a lower rate bound and an upper rate bound, e.g., : Rold_i < Rnew_i < t * (Rold_i) In one embodiment, conεtant t was empirically selected as 1.1. If new rate Rnew_i is greater than upper rate bound t*Rold_i, new rate Rnew_i is set equal to upper rate bound t*Rold_i. Conversely, if new rate Rnew_i decreaεed, new rate Rnew_i muεt be in the range of lower rate bound and an upper rate bound, e.g., : ε*(Rold i) < Rnew i < Rold i In one embodiment, the value of conεtant ε waε empirically choεen aε 0.9. If new rate Rnew_i is less than lower rate bound s*Rold_i, new rate Rnew_i is set equal to lower bound rate s*Rold_i. After new rate Rnew_i is teεted to determine that the change in the rate iε small, new rate Rnew_i is tested to determine whether new rate Rnew_i is in the range of guaranteed rate Rgtd_i to maximum rate Rmax_i. If new rate Rnew_i is leεε than guaranteed rate Rgtd_i for application 301-i, new rate Rnew_i iε εet equal to guaranteed rate Rgtd_i. If new rate Rnew_i iε greater than maximum rate Rmax_i for application 302-i, new rate Rnew_i is set equal to maximum rate Rmax_i. Upon completion of adjust rate step 612, processing transfers to rate decrease check step 613. If adjustment of the rate resulted in a rate decrease, procesεing tranεfers from rate decrease check step 613 to adjuεt buffer step 614, and otherwise to accumulate rate change step 615. Adjust buffer 614 step iε identical to adjuεt buffer step 602 described above and that description is incorporated herein by reference. Upon completion of adjuεt buffer step 614, processing transfers to accumulate rate change step 615. Like the other accumulate rate change steps 603 and 607, described above, accumulate rate change step 615 accumulates the difference between the new and old rates for all variable rate applications in Class 6. Specifically, ΔC = 52 (Rnew_i - Rold_i) Here, ΔC can be either positive or negative and is zeroed at the start of each statistical multiplexer cycle. Upon completion of accumulate rate change step 615, procesεing tranεfers to step 616 which in turn checks whether there are additional applications in Class 6 for processing. If all applications in Clasε 6 have been processed, step 616 transfers to procesεes complete step 630 and otherwise to step 612. Thus, steps 612 to 616 of process 610 are iteratively performed for each application in Class 6. Within step 403, processes 600, 605, and 610 can run sequentially or in parallel. When all of the applicationε in Classes 1, 3, 4, and 6 are procesεed, processes complete check 630 pasεeε proceεεing to accumulate rate changeε εtep 620. Accumulate rate changes step 620 determineε the total difference between the new rates and the old rates so that capacity of communication channel 330 can be fully utilized but not overloaded. In step 620, net rate change Δ iε determined by εumming ΔD, ΔI, and ΔC. Specifically, Δ = ΔD + ΔI + ΔC If net rate change Δ iε leεε than zero, the operationε performed so far in modify rates εtep 403 have resulted in a net decrease in the allocated rates. Converεely, if net rate change Δ iε greater than zero, the operations performed so far in modify rateε step 403 have resulted in a net increase in the allocated rateε. If net rate change Δ iε zero, the operationε performed εo far in modify rates step 403 have resulted in no net change in the allocated rates. Channel capacity check 621 determines which of these options occurred. If there is a net decrease in the allocated rates, check 621 pasεeε processing to increase rateε εtep 623 which in turn distributes the available bits, as deεcribed below, amongεt the applicationε in Claεεes 3 and 6 so as to maximize the channel bandwidth usage. If there is a net increase in the allocated rates, check 621 passeε processing to decrease rates step 622, which in turn reduces the rates of some of the applications so as to operate within the capacity of communication channel 330. If there is no net change in the allocated rates, check 621 transfers processing directly to build packet table step 404. Similarly, upon completion, step 623 transfer processing to step 404. Step 622 tranεferε proceεεing to εtep 404, if the rates are succesεfully decreased and otherwise to step 407. The procesε of increaεe rates step 623 is shown in more detail in Figure 7. Applications with distortion D_i greater than maximum distortion (K2_i)*(Dmax_i) , i.e, applications in Clasεeε 3 and 6, are conεidered as candidates for increased rates. Within step 623, applications in Class 3 are initially procesεed separately from applications in Claεε 6. In a first parameterize excesε εtep 701 for Claεε 3 applications, parameter excess_i is generated by subtracting new rate Rnew_i from guaranteed rate Rgtd_i. Parameter exceεε_i iε εtored for εubεequent uεe. In a εecond parameter excess step 704 for Claεε 6 applications, parameter excesε_i iε generated by subtracting new rate Rnew_i from maximum rate Rmax_i. Parameter excess_i generated in step 704 alεo iε εtored for εubεequent uεe. Parameterize exceεε step 701 transfers procesεing to additional applications step 703, which returns proceεεing to step 701 if additional Clasε 3 applicationε remain to be proceεεed and otherwiεe to step 705. Similarly, parameterize excesε εtep 704 tranεferε processing to additional applications step 706, which returns procesεing to step 704 if .additional Clasε 6 applications remain to be procesεed and otherwiεe to εtep 705. When all applicationε in Claεεeε 3 and 6 have been processed in steps 701 to 703 and 704 to 706, respectively, accumulate excesε step 705 begins procesεing. Initially, in accumulate exceεs step 705 a parameter sum_excesε iε stored as zero. Accumulate excesε εtep 705 retrieves parameter sum_excesε from memory 313 and addε each parameter excess_i in succeεεion to the current value of parameter sum_excess. The final value of parameter sum_exceεε iε then stored in memory 313. In adjust rate step 707, revised new rate Rrnew_i is generated by increasing rate Rnew_i by the fraction of the available channel capacity attributable to thiε application. Recall, that aε deεcribed above, two εtructureε are used. At this point, the first structure haε the original rates for applications 301-i in Classes 2 and 5 and the new rates for applications 301-i in Classes 1, 3, 4, and 6. The second structure has the original rates for applications 301-i in Clasεes 1, 3, 4, and 6. In adjust rate step 707 only the firεt εtructure is used. Here, new rate Rnew_i refers to the rate in the firεt structure at the start of step 707. New rate Rnew_i iε processed to generate a revised new rate Rrnew_i, which is then stored in the firεt εtructure. Specifically, • excess_ι Rrnew_ι = Rnew_ι x Δ sum_excess Next adjuεt rate εtep 707 checks revised new rate Rrnew_i to be sure that the change in rate is a small increment. Revised new rate Rrnew_i must be in the range defined by a lower rate bound and an upper rate bound, e.g., : Rold_i < Rrnew_i < t * (Rold_i) In one embodiment, constant t was empirically selected as 1.1. If revised new rate Rrnew_i is greater than upper rate bound t*Rold_i, revised new rate Rrnew_i iε set equal to upper rate bound t*Rold_i. Upon completion of step 707, εtep 708 checks whether there are any remaining applications in Classeε 3 and 6 that have not been proceεεed in εtep 707. If there are remaining applicationε, processing returns to step 707. After each of the applications in Classeε 3 and 6 have been proceεsed in εtep 707, any channel packets that remain unassigned are transmitted aε idle packetε. One embodiment of decreaεe rateε step 622 is shown in more detail in Figure 8. Applications 301_i with rates greater than or equal to guaranteed rate Rgtd_i are considered as candidateε for decreaεing the rates in step 622, i.e., applications 301_i in Clasεes 4 to 6. However, if previous procesεing reduced rate Rnew_i below guaranteed rate Rgtd_i for any application 301-i in Claεs 4, these applicationε are not proceεsed in decreaεe rateε εtep 622. In parameterize exceεε step 801, parameter excesε_i is generated by subtracting guaranteed rate Rgtd_i from new rate Rnew_i. Parameter excess_i is stored in memory. Parameterize excess step 801 transferε proceεεing to additional applicationε εtep 802, which returnε proceεεing to εtep 801 if additional applications with new rate Rnew_i greater than or equal to guaranteed rate Rgtd_i remain to be processed and otherwise to step 803. Thuε, upon completion of εtep 801, parameter exceεε_i is stored in memory for each application with new rate Rnew_i greater than or equal to guaranteed rate Rgtd_i. Initially, in accumulate excess step 803, parameter sum_excess is εtored aε zero. Accumulate excess step 803 retrieves parameter sum_excesε from memory 313 and then sequentially retrieves each of the stored parameters exceεε_i and adds the retrieved parameter excess_i to the current value of parameter sum_excesε. The reεulting value of parameter sum_excesε iε then εtored in memory 313. Upon completion, accumulate excess step 803 transfers processing to adjust rate step 804. Recall, that as described above, two structureε are uεed. At this point, the first structure haε the old rateε for applications 301-i in Clasεeε 2 and 5 and the new rateε for applications 301-i in Claεεeε 1, 3, 4, and 6. The εecond εtructure has the old rates for applications 301-i in Clasεeε 1, 3, 4, and 6. In adjuεt rate εtep 804 only the first structure is used. Here, new rate Rnew_i referε to the rate in the firεt εtructure at the εtart of εtep 804. New rate Rnew_i iε proceεεed to generate a revised new rate Rrnew_i which is then εtored in the firεt structure. Revised new rate Rrnew_i for application 301-i is generated by decreaεing new rate Rnew_i by the fraction of the available channel capacity attributable to application 301_i. Specifically, „ . . excess_ι Rrnew_ι = Rnew_ι xΔ su excess After adjuεting the rate, adjuεt rate εtep 804 tranεferε to rate in range εtep 805. Step 805 checks revised new rate Rrnew_i to ensure that reviεed new rate Rrnew_i iε within a predetermined range, i.e., the change in the rate iε a small decrement. In this embodiment, revised new rate Rrnew_i must be in the range of a lower rate bound and an upper rate bound, e.g., : s * (Rold i) < Rrnew i < Rold i Again, the value of constant s waε empirically choεen aε 0.9. If revised new rate Rrnew_i is not within the defined range, step 805 transferε proceεεing to step 407, and conversely to adjust buffer size 806. Aε explained above, to maintain a conεtant delay time through the εyεtem, a decreaεe in the rate of an application 301-i iε accompanied by a proportional decrease in the effective buffer size of encoder 302-i. Thuε, adjust buffer size εtep 806 determineε a new effective buffer εize. New effective buffer size "buf_sz_i" is equal to the product of revised new rate Rrnew_i and system delay time interval δ_i . Specifically, buf sz i = δ i * Rrnew i However, again the buffer size cannot be decreased arbitrarily. Hence, threshold max_buffer_i is compared with new buffer size buf_sz_i and procesεing transfers from step 806 to εtep 807. In buffer in range step 807, if new buffer size buf_sz_i is less than maximum buffer fullness threεhold max_buffer_i, procesεing tranεferε to step 407 and conversely to εtep 809. In teεt step 809, procesεing returnε to εtep 804 if additional applications with new rate Rnew_i greater than or equal to guaranteed rate Rgtd_i remain to be procesεed and otherwiεe to build packet table εtep 404. In the above embodiment of step 622, all applications with a rate R_i greater than or equal to guaranteed rate Rgtd_i were procesεed. Thiε embodiment is illustrative only and is not intended to limit the invention to the particular εet of applications. In another embodiment, an iterative process is used. Initially, only applications in Clasε 4 are proceεεed aε described above for step 622 and the decreaεe in channel capacity iε compared with the excess capacity detected in step 621. If the decrease in capacity is more than the excesε capacity, εtep 622 iε complete. Converεely, if the decreaεe in capacity iε leεε than the excess capacity, applications in Classes 4 and 5 are procesεed, and the decrease in capacity iε determined. If the decreaεe in capacity for applicationε in Claεεeε 4 and 5 iε more than the exceεε capacity, εtep 622 is complete. Conversely, step 622 is performed exactly as described above with respect to Figure 8. Thiε method requires more time, but it may also improve the overall performance, if it iε unnecessary to reduce the rate for applicationε in Class 6. In one embodiment, modify rate step 403, aε deεcribed above, is modified to reduce the complexity of the process at the cost of some performance efficiency. Specifically, the adjuεt buffer εize εtepε are eliminated. The adjustment of the buffer size is not done until after all the rate determinations are completed. Then, when new rates are available for all applications, statistical multiplexer 300 performs a buffer size check, i.e., the buffer fullness check, for all those applicationε with a new rate that iε leεε than the old rate. If an application failε to satisfy the buffer fullnesε requirement, the new rates for all the application are dropped and all the applications are assigned the old rates for the next period. The embodiment of modify rates rate step 403 presented above aεεures every application 301-i, that has guaranteed rate Rgtd_i defined, receives a guaranteed number of bits per second to achieve a target distortion εo that the application preferably iε within Classes 2 and 5. Furthermore, if an application achieves its target distortion with a rate less than or equal to the guaranteed rate, this rate is not altered regardlesε of the performance of other applications. This meanε that if the target diεtortion level and guaranteed rate are chosen appropriately, statistical multiplexer 300 can assure performance at the requested distortion level. This permits control of performance on an individual application baεiε, which might be necessary in the case of premium and pay-per-view applications. If performance control on an individual application basis iε not neceεsary, modify rates step 403 can be simplified so as to force the applications to compete on a global basiε. This can be done by setting the target distortion of all the applications equal to zero. In this way only a part of the process is performed, i.e., only process 610, in effect driving the system to a state where the (weighted) distortion values of all applicationε are approximately equal. Independent of the proceεε used, at the end of step 403, a table is generated that contains the rates for each variable rate application for the next εtatiεtical multiplexer cycle. Alternatively, the table can contain the both the fixed and variable rates for the next εtatiεtical multiplexer cycle. BUILD PACKET TABLE STEP 404 In build packet table step 404, in this embodiment, a particular process is used to organize the packet schedule table. Herein, the process is first considered generally and then specific applicationε of the process are considered. This process is only illuεtrative of one way to organize the packet εchedule table and iε not intended to limit the invention to this particular procesε. In the proceεs used in build table step 404, a εelected interval of time, i.e., a window, containing an integer number E of packets is considered, i.e., E iε the total number of packetε that can be tranεmitted over communication channel 330 in the selected time interval. Statiεtical multiplexer 300 is handling L applications 301-1 to 301-L and for any application 301-i, the number of packetε allocated over this window is m_i. At the start of εtep 404, the number of packetε m_i required for each application over the εelected time interval iε known. An obviouε constraint is that the total number of packets demanded by applicationε 301-1 to 301-L εhould not exceed the total available packetε, i.e., m_ι= E ι=ι The process of thiε invention asεignε each packet to the application that iε the moεt deεerving at the time. The determination of which application iε the moεt deεerving iε baεed on the number of packets already assigned to that application up to that point (actual allocation) in the window and the number of packets that the application should have been allocated up to that point (target allocation) in the window. Since packets should be uniformly distributed over the entire window, the target allocation for application 301-i up to packet time n is pt_i(n) = ( m_i / E ) * n. In other wordε, thiε iε the number of packetε that the application 301-i εhould have received by the nth packet. Clearly, pt_i(0) = 0 and pt_i(E) = m_i. Let the actual number of packetε allocated to application 301-i up to, but not including the nth packet, be denoted by r_i(n). A figure of merit f_i(n) is used to determine which application is most deserving of the next packet. In this embodiment, figure of merit f_i(n) is defined by: f_i(n) = pt_i(n) - r_i(n) = ( m_i / E ) * n - r_i(n) In other words, figure of merit f_i(n) iε determined for each of the L applicationε, and the nth packet is allocated to the application having the largest positive figure of merit f_i(n). Any remaining packets are inεerted aε idle packets. By repeating this operation for each packet, packets are diεtributed to all L applicationε in a reaεonably uniform manner, i.e, the packet schedule table is generated. In one embodiment, figure of merit _i(n) is not used because it requires a divide and a multiply which is εlow when implemented in hardware. Rather, an equivalent figure of merit is used that does not require the divide and so the packet εchedule table can be generated very quickly in hardware. Specifically, new figure of merit η_i(n) iε obtained by multiplying figure of merit f_i(n) by the number E of packets in the window, i.e., η_i(n) = E * { • _--(- ■ .) = (m_i * n) - ( E * r_i(n)). The packet schedule table iε built by executing the procesε illuεtrated in Figure 9. In initialization step 901, figure of merit η_i(n) is εet to zero for each application: Alternatively, figure of merit τj_i(n) iε εet to m_i for each application. Alεo, index n for the current packet number iε εet to zero aε iε index i for the current application. Upon completion of initialization step 901, procesεing tranεfers to additional packet check step 902. Additional packet check εtep 902 incrementε current packet index n and then checkε index n to determine whether index n iε greater than total number of packetε E. If index n iε leεε than or equal to total number of packetε E, processing transferε to additional application check εtep 903 and otherwise step 404 ends. Additional application check step 904 increments current application index i and then checkε index i to determine whether index i iε greater than total number of applications L. If index i iε leεε than or equal to total number of applicationε L, proceεεing tranεferε to update figure of merit εtep 905 and otherwiεe to aεεign packet εtep 906. In update figure of merit εtep 905, figure of merit τj_i(n) is first generated. Next, number of packets m_i allocated over thiε window to application 301-i iε added to figure of merit rj_i(n) and processing returns to additional application step 904. Notice that this repetitive addition effectively forms the product n * (m_i) in figure of merit ry_i(n) . When figure of merit η_i(n) has been updated for all L applications, processing transfers from additional application step 904 to asεign packet εtep 906. In aεεign packet εtep 906, the application with the largest positive figure of merit ιj_i(n), is assigned packet n, i.e., a pointer to the encoder for the application asεigned packet n iε put in the packet schedule table at location n. The pointer is an addreεε that identifieε the encoder. If there is a tie, i.e., two or more applications have the largest positive figure of merit η_i(n), the application with the largest number of packets m_i allocated over this window is asεigned packet n. In another embodiment, the application with the εmalleεt number of packets m_i allocated over this time interval iε aεεigned packet n. Of courεe, other tie-breaking ruleε could alεo be used. If no figure of merit τ?_i(n) is greater than zero, the packet is tagged as an idle packet. After packet n iε aεsigned, total number of packets E iε εubtracted from figure of merit τj_i(n) for the application aεεigned packet n. If the εu of allocated packetε iε equal to the number E of packetε tranεmitted in a window, there are no idle packets. However, if idle packets are desirable or if there are more entries in the packet schedule table than the sum of the allocated packets, an idle source can be defined with itε own allocation of packetε m_j and εo in each window m_j packets are transmitted as idle packets. Upon completion of asεign packet εtep 906, processing returns to additional packet check step 902 and the procesε iε repeated aε deεcribed above until each of total number of packetε E haε been assigned either to an application or as an idle packet. When all E packetε have been aεεigned build packet table εtep 404 iε complete. The above deεcription of build packet table εtep 404 generateε a completely new packet εchedule table for each window. Statiεtical multiplexer 300 has to schedule packets for applications operating with both variable and fixed rateε. Although variable rate applicationε demand a new packet εchedule table every window, εtatiεtical multiplexer 300 muεt ensure that the fixed rate applications also get their required share of packetε. For any variable rate application 301-i, the number of packets allocated over the window is m_i, where the number of packets allocated for a particular variable rate application 301-i is defined by multiplying the rate in packetε per second for application 301-i from the table generated in step 403 by the size of the window in εecondε and truncating the product to the largest integer value that is less than thiε product. Similarly, for each fixed rate appli¬ cation 301-j, the number of packets allocated over the window is m_j , where the number of packets allocated for a particular fixed rate application 301-i is defined by multiplying the rate in packets per second for application 301-j provided by εyεtem supervisor 340 in step 401 by the size of the window in εecondε and truncating the product to the largeεt integer value that iε leεε than thiε product. Alternatively, to eliminate the truncation error, the number of packetε m_i allocated over the window for variable rate application 301-i iε determined directly in εtep 403 and the number of packetε m_j allocated over the window for fixed rate application 301-j iε provided directly by system supervisor 340. The number of packets required for each fixed rate application in a window iε combined with number of packets required for the variable rate applications and used in building the packet schedule table for the next window, in one embodiment. Thiε can be done during each window. In other wordε, the packet schedule table is built for all the applicationε afreεh in each window. Thiε approach is preferred if only a few fixed rate applications, e.g., lesε than five, are being handled by εtatiεtical multiplexer 300. However, the number defined as "a few fixed rate applications" dependε on the processor utilized in statistical multiplexer 300. The greater the power of the processor, the larger the number of fixed rate applications that can be considered as a few fixed rate applicationε. However, typically the number of applications connected to a single εtatistical multiplexer 300 is quite large — typically of the order of several tens. Moεt of these applications are fixed rate applications. In thiε εituation, it iε groεsly inefficient to update the packet scheduleε, i.e., packet εchedule tableε, frequently. In addition to the fact that the majority of the applicationε are fixed rate, some of the fixed rate applications may operate at very low rates so that these applications do not need packets in every window. For example, if there are εix εtatistical multiplexing windows in a εecond and a fixed rate application requires only two packets per second, statiεtical multiplexer must keep track of which of the six windows to send a packet for this application. This addε to the overall complexity. Hence, in one embodiment, two packet εchedule tables, i.e., a static packet table, that is εometimes called a static table, a primary packet table, and a primary table, and a dynamic packet table, that iε εometimeε called a dynamic table, a εecondary packet table and a secondary table, are utilized. The static packet table is built once, during configuration time in step 401, and covers a relatively large interval of time, e.g., about one εecond. Hence, in thiε embodiment, process 404, as illustrated in Figure 9 and deεcribed above, iε used to build the static table within initialization step 401. The specified rates for the fixed-rate applications and the initial rateε for the variable rate applicationε are uεed in the proceεε to generate the number of packetε m_i to be allocated over the interval for each application 301-i. If a packet n iε allocated to a fixed rate application in the proceεε, that application'ε pointer is inserted against packet number n in the static packet table. However, if packet n is allocated to a variable rate application in the procesε, a predetermined code, called a "null" code, is inserted against packet number n in the static packet table. Once built in initialization εtep 401, the static packet table iε not altered until the following re-configuration time. The particular way that packetε are allocated within the εtatic table iε not a critical part of the invention. Any number of ways can be uεed. For example, all the variable rate applications can be considered as one pseudo-application. The total allocation for the pεeudo-application iε the sum of the allocations for all the variable rate applications. The packet scheduling is done for F+l applications, where F iε the number of fixed rate applications and the one is the pseudo-application. In this embodiment, the positions in the static table assigned to the pεeudo-application have a null code inserted while the other positionε have the pointer for the fixed rate application inεerted. The dynamic packet table iε built every window in build packet table εtep 404 uεing the new rates for the variable rate applications. However, the number of packets in the dynamic packet table is not the total packet number N but rather the total number of packets allocated to all the variable rate applicationε in a εtatiεtical multiplexer period. Proceεs 404, as illustrated in Figure 9, is utilized to generate the dynamic packet table using the redefined number of total packetε available in the window inεtead of total number of packetε N. Again, the particular packet εcheduling method uεed to allocate packetε within the εtatic and dynamic tableε iε not a critical part of the invention. One important aspect is that the static table is configured once at configuration time with null codes inserted for the variable rate applications and the dynamic table is updated, i.e., populated, for the variable rate applicationε once per window. The uεe of the dynamic and εtatic tableε iε given below in the description of Figure 18. The size of a statistical multiplexing period, i.e., a window, is not fixed and can change with time. Consequently, the number of entries in the dynamic table in step 404 for the next window is not fixed and can change from window to window. In this embodiment, a conεtraint on the window εize iε that the window must be large enough so that a predetermined number of distortion valueε, e.g., three, are collected by εtatiεtical multiplexer 300 from each variable rate encoder during the window. In addition, the predetermined number of diεtortion values collected can vary from window to window. As explained above, in this embodiment, the dynamic table is limited to no more than 192 entries. Typically, the total number of packetε allocated to all variable rate applicationε in a window iε much greater than 192. Thuε, when all the entrieε in the dynamic table have been acceεεed, εtatiεtical multiplexer 300 loopε from the laεt entry to the firεt entry and begins sequentially accesεing the entrieε again. Thuε, the 192 entry dynamic table is repetitively used until the end of the window. The switch, that is deεcribed more completely below, from one dynamic table to another iε made during the time period when statistical multiplexer 300 has accessed the last entry in the table and iε looping back to the firεt entry, i.e, after the switch, statiεtical multiplexer 300 acceεεeε the firεt entry of the other dynamic table. PASS RATES STEP 405 In pass rates step 405, statistical multiplexer 300 passes the new rates uεed to generate the new dynamic table in εtep 404 to each of encoders 302-i that are processing a variable rate application 301-i. The new variable rate for each encoder 302-i is written to the general communications table and communicated to the encoder using the procesε deεcribed above. All of the rate decreases are sent firεt and a timer iε εtarted. In thiε embodiment, the timer iε a thirty-four milliεecond timer. The timer iε uεed to determine the completion of one picture period after completion of the sending of the rate decreaseε. This interval is selected to insure that the rate decreases are implemented by the encoders prior to the rate increases. When the timer times out, the rate increases are sent to the appropriate encoders 302-i. Upon completion of the tranεfer of the new rates used to generate the new dynamic table, processing transfer from εtep 405 to switch rate step 406. SWITCH RATE STEP 406 Switch rate step 406 is constrained by hardware in encoder 302-i. Typically, it is not poεεible to alter the internal rate control of encoder 302-i once encoder 302-i haε begun encoding a picture. Therefore, the following diεcussion of switch rate εtep 406 assumes that a rate switch in encoder 302-i occurs at the first picture boundary following receipt of the new rate by encoder 302-i. If an encoder 302-i requires more time than the firεt picture boundary, the time periods in the following discuεsion must be lengthened appropriately. Similarly, if an encoder 302-i has the capability to implement a new rate within a picture, the time periods in the following diεcuεεion could be εhortened. In view of thiε diεcloεure, the required modificationε baεed on performance of encoder 302-i will be apparent to those skilled in the art. Of course, if the encoders can change rateε at any time and not juεt at frame boundarieε, for example, the εwitching interval, as defined below, can be reduced to zero. Hence, in thiε embodiment, rate alterationε are permitted only between pictureε, i.e., at the εtart of a picture. Furthermore, picture boundarieε of εtatistically multiplexed applicationε 302-i are not guaranteed to occur at the εame time inεtant. These two constraintε operate in tandem. Since the rate of an application 301-i within a picture can not be changed, the new rate for application 301-i can not be implemented until the next picture boundary. However, when application 301-i reacheε a picture boundary, some other application 301-j may not be at its picture boundary. Hence, new rate R_j for application 301-j can not be implemented at the picture boundary for application 301-i. In other words, it is not posεible to alter the rateε of all the applicationε and alter the multiplexer packet εchedule at the εame inεtant. The solution to thiε problem iε not to perform the εwitch to the new rateε of all applicationε 301-i and to the new packet εchedule at the εame time inεtant, but to perform the εwitch over a non-zero interval of time, referred to aε εwitching interval 1020 (Fig. 10) . Switching interval 1020 iε choεen εuch that all applications 301-i are guaranteed to have at least one picture boundary within switching interval 1020. In Fig. 10, tick markε 1001 to 1010 repreεent frame boundries which in the case of NTSC input have a frequency of 30 Hz, actually 29.97 Hz. Window 1050 startε at arrow 1051 and endε at arrow 1052. Modify rates step 403 is completed over time interval 1060. Build packet table step 404 is completed over time interval 1070 and pasε rateε step 405 over time interval 1080. The length of switching interval 1020, in thiε case, is 2/29.97 εecondε. Applicationε εwitch rateε at the firεt picture boundary encountered within εwitching interval 1020. Specifically, all applicationε whoεe new rate iε lower than the old rate perform the rate εwitch firεt over firεt half interval 1020-1. Then, at the center of the switching interval, statiεtical multiplexer 300 εwitcheε to the new packet εchedule. Finally, all applications, whose new rate is higher than the old rate, perform the switch in second half interval 1020-2. Thiε proceεε enεures that at no instant is the εum of all the applications' rates greater than the capacity of communication channel 330. However, there iε a εlight drop in channel utilization during firεt half interval 1020-1, becauεe εome applicationε may operate at a rate that iε lower than the rate at which they would be serviced by statiεtical multiplexer 300. Specifically, in first half interval 1020-1, the rate for some applications may be decreaεed, i.e., the encoderε for theεe applicationε εtart compreεεing at a lower rate than the old rate. However, until εtatiεtical multiplexer 300 implementε the new packet εchedule table, εtatiεtical multiplexer 300 continueε to service the applications with lower rates at their old higher rates. This effect results in some underutilization of communication channel 330. In Figure 10, the ticks marked are used by statiεtical multiplexer 300 for reference purpoεes and are not locked to any of the applications per se. Further, it is assumed that every application completes coding each frame in the interval bounded by two adjacent tickε, i.e., in 1/29.97 εecondε. If the frame rate of any application iε leεε than 29.97 Hz (e.g., if it iε a film sequence at 23.97 Hz), even then it is asεumed that the encoder compresseε each frame in 1/29.97 εecondε and idleε at certain other times to synchronize with the input data rate. Statistical multiplexer 300 operates in a cyclic manner with the events within period 1050 being continually repeated. The length of period, aε shown in Figure 10, is not indicative of any real time performance. Indeed, the only conclusion that should be drawn from this figure (and the next) regarding timing is that the bulk of the time during a statistical multiplexer period is εpent in building the packet schedule table and that the other aspectε of thiε invention are executed in a relatively εhort time. The actual time required to execute each proceεε of this invention is dependent on the computational power available in εtatiεtical multiplexer 300. However, note that there iε a minimum value beyond which the period cannot be decreaεed because, at the least, the period εhould include switching interval 1020, which is 2/29.97 seconds long. Fig. 11 illustrateε an alternative implementation with a εhorter period 1150. In thiε embodiment, the encoder and decoder buffer εizeε are "large enough", that the εwitching interval containε exactly one picture boundary of each application. The applicationε perform the switch to a higher or lower rate when they reach their picture boundary and statistical multiplexer 300 switcheε to the new packet schedule at the center of switching interval 1160. In thiε caεe, some applications may switch to a higher rate before the new packet εchedule getε εwitched cauεing their buffer fullneεε to increaεe εlightly. However, if the buffer εizeε are large enough thiε εhould not be a problem, although extreme care needs to be taken to ensure proper tracking of the buffer εtatuε. Aε explained above, the diεtribution of rateε amongεt all variable rate applicationε 301-i iε baεed on their reεpective diεtortion D_i. In the above diεcuεεion, diεtortion D_i was asεumed known. In fact, diεtortion D_i must firεt be defined and then data generated to determine distortion D-i as defined for each application. Ideally, distortion D_i εhould be εuch that it incorporateε the characteriεticε of the Human Viεual Syεtem (HVS) . Broadly εpeaking, the HVS is more sensitive to distortion artifacts in areas of low spatial and temporal activity. Low εpatial activity meanε relatively flat areaε in a frame. Low temporal activity meanε relatively leεε frame-to-frame movement. In other words, the εame "amount" of diεtortion artifact is more easily viεible to the human eye if the diεtortion occurred either in relatively flat regionε of an image, or during a relatively still portion of a video sequence than if the εame amount of diεtortion occurred in areaε of high εpatial detailε of the image or during high motion of a video εequence. The word "amount" referε to some absolute error measurement between the reconεtructed and original video frames, e.g., a mean-squared-error (mεe) measurement. Thus, diεtortion D_i preferably takeε into account the .spatial and temporal characteristicε of a video sequence. In general, a HVS based distortion metric is complicated to compute in real time hardware. So a simplified definition of distortion D, which is still quite functional and is implemented in the hardware of this invention, is defined as : where mεe = Mean-εquared error, IF = Interlace Factor, SA = Frame Spatial Activity, TA = Temporal Activity, and P = Priority Number. Priority number P was defined above, and that definition is incorporated herein by reference. The particular methodε uεed to determine the interlace factor, frame εpatial activity, and temporal activity aε well as the expresεion for diεtortion are not critical to the invention. The important aεpect iε that a uniform methodology be used for determining distortion D_i or some other parameter that is indicative of the quality of the encoded data. The principles of this invention can be applied to any compresεion technology and the particular parameter uεed to meaεure quality can be different from technology to technology and even within a given technology. Therefore, the following exampleε of the mean-squared error, interlace factor, frame spatial activity and temporal activity are illustrative only and are not intended to limit the invention to the particular examples. Mean-squared error mεe is generated by summing the square of the pixel-to-pixel difference between the original frame and the frame reconstructed after encoding it and normalizing by the total number of pixels in the frame, i.e.. where x_i and y_i are the pixels of the original and reconstructed frames, respectively, and here, n iε the total number of pixels in the frame. Note that mean-squared error mse iε completely independent of the characteristics of the input sequence. In this embodiment, each encoder 302-i generates mean-squared error mse once per frame and that value is passed to statiεtical multiplexer 300. In another embodiment, the mean-squared error is not used, but rather an eεtimate of the mean-εquared error that iε generated by the encoder that iε provided by C-Cube Microεyεtems of Milpitas, CA is uεed. Interlace factor IF in diεtortion D iε uεed to normalize the effectε of interlacing in video sequenceε. Typical video encoderε compress a sequence of pictureε without regard to the field/frame structure of the sequence. However, the characteriεtic of frameε originating from a video camera (typically at 50 or 60 fields/second) is different from that originating from a film source and converted to digital format (asεuming that any 3:2 pulldown operations have been reversed). The former has what iε commonly called "interlace artifacts" while the latter does not. Interlace artifacts are nothing more than motion between the two fields of a frame which iε introduced becauεe the two fieldε were captured at different time instants. Such inter-field motion does not exist between the fields of a frame originating from a film sequence becauεe the two fieldε in thiε caεe are captured at the εame time instant. It is for this reason that a typical video frame iε harder to compreεε than a typical movie frame. As explained above, statistical multiplexer 300 uses the relative distortion values of different applications to re-distribute rates. For such a process to work efficiently, the method used to determine distortion D muεt be unbiased. However, since a video encoder typically operates on a frame grid, the εpatial activity calculated for an application becomeε εomewhat inflated if the application is an interlaced video sequence. Thiε reεultε in a lower than normal value for the diεtortion. Thiε biaε can be offset by re-scaling the spatial activity measure by interlace factor IF. If it is known in advance that a particular frame iε encoded in field mode, the interlace factor IF for that picture can be sent to one. In this embodiment, interlace factor IF iε generated using two statisticε, i.e., a "Difference activity" DA and an "Intra activity" IA. Difference activity DA iε defined aε the average abεolute pixel-to-pixel difference between the two fields belonging to a frame, i.e., DA -^nf Σ l -i- v-J 1=1 where nf is the number of pixels in a field, and (u_i) and (v_i) are corresponding pixels of the odd and even fields of the frame, respectively. In one embodiment, a difference accumulator generateε difference activity DA between two εucceεεive fieldε of different parity. Specifically, differential accumulator εu s the absolute differences between a pixel of the current field, e.g., field al, and the εame pixel of the next field of a different parity, e.g., field a2. When all the data for a frame has been procesεed, encoder 302-i provides difference activity DA to statiεtical multiplexer 300 once per frame. Intra activity IA iε the average abεolute pixel-to-pixel difference between each even-odd pair of lineε belonging to one field, averaged over both fields of the frame, i.e., x-Λ _ ι1 \ n ~ £ ^ r 1- ^ odd „ oddI . ι_ even „ even11 IA-—- 2^ L |Pi - qi |+|Pi - qi |J nr i=ι where p'j and q J ; are the corresponding pixels from adjacent even-odd lineε of field j, j = odd, even. In one embodiment, a difference accumulator generateε a difference meaεure between every adjacent odd-even line pair belonging to the εame field. Specifically, difference meaεure "intra activity IA" iε obtained by εumming the abεolute differenceε between pixel pairε belonging to the even and odd lines from the same field. Pixel differences are obtained between the following line pairs (0,1), (2,3), (4,5), ... The pixel values for even numbered lines are passed to a delay line and then to the differential accumulator, while the pixel values for odd number lines are pasεed directly to the differential accumulator. When all the data for a frame haε been proceεεed, and the intra activity IA iε provided by encoder 303 to εtatistical multiplexer 300 once per frame. Once difference activity DA and intra activity IA are available, interlace factor IF is defined as: IF = max ( 1, min ( ( DA / IA ) , 2 ) ) . Both difference activity DA and intra activity IA are generated in hardware. Notice that since the ratio of the two εtatiεtics is uεed, the hardware doeε not need to use number of pixels nf. Hence, both εtatistics are implemented using a differential accumulator, as deεcribed above. Frame spatial activity SA in distortion D is a meaεure of the spatial activity in a frame. An example of such a measure is the average absolute difference between adjacent vertical and horizontal pixels. One embodiment of a hardware implementation of a frame spatial activity SA suitable for use in this invention iε available from C-cube Microεyεtemε of Milpitas, CA. The important aspect in selecting hardware to generate frame spatial activity SA is that aε long aε the spatial activity is meaεured on a frame grid (i.e., pixel differenceε between adjacent lineε of a frame are being taken into account) , frame εpatial activity SA haε to be adjusted by interlace factor IF. Temporal activity TA in distortion D iε an indicator of frame-to-frame differenceε in the video εequence. Firεt the average abεolute difference between correεponding pixelε of two adjacent frameε is determined, i.e., where, aε before, n is the total number of pixels in a frame, and x ; and y ; are, respectively, the corresponding pixels of two adjacent frames. V is used to recursively update a parameter, v, as follows. v = αv + (l-o.)V In one embodiment, conεtant a iε 0.9 and parameter v iε initially set to 40. Finally, in this embodiment, temporal activity TA iε obtained from v aε 1, v≤lO 1+— -,10< v≤ 100 100 • V ,100< v 100 Any other function may alεo be uεed aε long aε the function iε baεed on a frame to frame pixel difference. In the current implementation, both v and V are computed in the encoder and tranεferred to εtatiεtical multiplexer 300 once per frame. A more detailed block diagram of one embodiment of statistical multiplexer 300 is presented in Fig. 12. Statistical multiplexer 300 communicateε with encoderε 302-1 to 302-L and collectε compressed application data for transfer to communication channel 330 using application control buε 360. In thiε embodiment, memory 313 (Fig. 3) includeε a plurality of memorieε 1201 to 1203 and memorieε 1205 to 1207, each of which are deεcribed more completely below. In one embodiment, statistical multiplexer 300 supportε four diεtinct application control buεeε through application control buε interface circuit 1210. Multiple application control buεeε allowε redundant applicationε 301-i to connect to statistical multiplexer 300 over redundant application control buses 360. If one of the redundant applications fails in a mode that corrupts its application control bus, another of the redundant applicationε can εtill εend data to statiεtical multiplexer 300 over one of the other three application control buεeε. All four application control buεeε are driven in parallel with each application control buε having it's own set of drivers. Signalε received from all four application control buεeε are logically "ORed" together in interface circuit 1210. Any application control buε can be disabled if a problem occurs with that application control bus. Application control bus εtate machine 311 iε poεitioned between application control buε interface circuit 1210 and microproceεεor 312. In one embodiment, the functionε deεcribed below of application control buε εtate machine 311 are implemented in a programmable gate array. Application control buε εtate machine 311, hereinafter ACB state machine 311, controls application control buε 360 through interface circuit 1210 and εo minimizeε the effect of buε operations on microprocesεor 312, which in one embodiment is a Motorola 68302 microprocessor. ACB εtate machine 311 iε controlled by tableε εtored in memorieε 1201 to 1203 and 1207 and registers in state machine 311, both of which are configured by microprocesεor 312. Tables used to control ACB state machine 311 include, in one embodiment, a static rate table stored in εcratch DRAM 1207, a dynamic rate table εtored in dual port memory 1202, and a general communication table stored in dual port memory 1204, each of which are deεcribed more completely below. ACB εtate machine 311 addresseε memorieε 1202 to 1203 uεing addreεε generator circuitε 1222 to 1223 reεpectively. Of courεe, thoεe skilled in the art will appreciate that address generator circuits 1222 to 1223 could be included within state machine 311. The ACB εtate machine regiεterε, that are written to by microproceεεor 312 are regiεterε ACBSMCtr, ACBSMMaεk, and ACBSMClr. Theεe are eight bit regiεters and the bit definitions for registers ACBSMCtr and ACBSMMask are given in Tableε III and IV. Writing to regiεter ACBMSMCLr clearε pending interrupts even if an interrupt is masked. TABLE III Name Bit Reset 0 StComm 1 StFIFO 2 Reserved 4,3 NeedSel 5 SecSel 6 ComSel 7 When bit Reset is low, ACB state machine 311 is reset. ACB state machine 311 can not operate when bit Reset is low. Microprocesεor 312 must set bit Reset to zero and then to one to affect a reεet of ACB εtate machine 311. Bit StComm iε set by microprocesεor 312 when microproceεεor 312 haε programmed one of the general communications table and is ready for ACB state machine 311 to make a transfer. Bit StComm iε cleared when ACB εtate machine 311 reacheε an entry in the general communications table that is off. Bit StFIFO is set by microprocessor 312 when the new primary table has been generated, and begun the DMA transfer of this table into FIFO 1201. When bit StFIFO iε low, ACB state machine 311 can not perform the primary status message cycles described below, but ABC state machine 311 can perform the other application bus message cycles, described below. Bits reserved must always be set low. Bit NeedSel defineε which of the two εecondary tableε in memory 1202 to uεe, aε deεcribed below. When bit NeedSel iε εet low, ACB state machine 311 bit uses secondary table one. Bit SecSel is not used. Bit ComSel defines which general communication table in memory 1204 to use. When ComSel is set low ACB state machine 311 uses general bit communication table one. TABLE IV Name Bit CommMask 0 VarMask 1 EmtyFIFOMask 2 ACBTimeMask 3 AppBuε 7-4 Clearing bit CommMaεk diεableε the interrupt normally generated when ACB state machine 311 reaches the end of data in the general communication table. Clearing bit VarMaεk disables the interrupt normally generated when ACB state machine 311 reacheε the end of the εecondary table. Clearing bit EmtyFIFOMaεk diεableε the interrupt normally generated when FIFO 1201 becomeε empty. Clearing bit ACBTimeMaεk diεables the interrupt generated when ACB time counter 1242 times out. In this embodiment, this interrupt is not used and so this bit is set low. Bit AppBus enables application buseε four to one reεpectively. When a particular bit iε εet, the correεponding bus is enabled. Application control bus 360 includes an eight-bit parallel addreεε/data buε ADDR/DATA, an address strobe line AS, a data strobe line DS, a clock line CLOCK, a data clock or return clock line DTACLK, and an enable signal line ENABLE. The signals on these lines are differential TTL εignal levelε in this embodiment. Moreover, for convenience, the same reference numeral is used for a line and for a εignal on that line. The application control buε 360 alεo includeε reference clock and reference count lineε that carry differential ECL level εignalε in thiε embodiment. Application control buε 360 iε the only communication path between statistical multiplexer 300 and encoders 302-1 to 302-L. Transfer of information on application control bus 360 is divided into packet time intervals, where a packet time interval is defined aε the time required to transmit one packet of data over communication channel 330. The time interval between the rising edges of two consecutive pulεeε 1301 and 1302, i.e., packet εtrobeε, on packet εtrobe line PS (Fig. 13) defineε the packet time interval. In thiε embodiment, communication channel 330 provideε an external clock signal EXCLK. External clock signal EXCLK is divided down by statistical multiplexer 300 to generate the packet strobes on line PS. Hence, a packet strobe iε generated by dividing clock ticks on external clock line EXCLK by the number of bits in a packet. Packet strobes are very accurate, very regular pulses. In this embodiment, statistical multiplexer 300 has two sections that run synchronously to one another. Application control bus 360 runs at 10 MHz. The statiεtical multiplexer output to communication channel 330 runε εynchronously to external clock signal EXCLK received from communication channel 330, e.g., from a modem that drives the channel. These frequencies allow each portion of statistical multiplexer 300 to run optimally. Thiε eliminateε problems that would occur by requiring application control bus 360 to run at varying frequencieε as the frequency of external clock signal EXCLK is changed. In one embodiment, every packet time interval is divided further into a mesεage cycle interval ACB (Fig. 13) and a data tranεfer interval ADB on application bus 360. Data transfer cycle interval ADB is used by statistical multiplexer 300 when collecting compresεed application data for transfer to communication channel. Mesεage cycle interval ACB iε used by statistical multiplexer 300 for collecting information from encoders 302-1 to 302-L, and for distributing new rates to each of encoders 302-i that procesε variable rate applications. Control and data tranεfer cycleε within intervals ACB and ADB are time-multiplexed on data bus DATA/ADR within application control bus 360. In one embodiment, a plurality of mesεageε cycles occur within interval ACB followed by one data packet transfer cycle within interval ADB. As illustrated in Fig. 13, meεεage cycle time interval ACB iε εub-divided into three message cycles, i.e., primary status, allocate bus, and general communication cycles. Any of these three mesεage cycles may be deleted from meεεage cycle time interval ACB. However, any or all of the three cycleε alwayε occur in this order. There may be some unused portion of message cycle time interval ACB, especially if one or more mesεage cycleε are deleted. The three meεsage cycleε and their functions are further defined below. At least one mesεage cycle must precede each data transfer cycle to enable the data tranεfer. The number of message cycleε that may occur between tranεfer cycleε is limited by the required data transfer rate. With four meεεage cycles between data tranεferε, and uεing a clock rate of approximately 12.5 MHz, the maximum transfer rate of application packet data on application control bus iε 60 Mbitε/εec. Meεεage cycle time interval ACB is determined by an ACB time counter 1242 (Fig. 12) . ACB time counter 1242 iε started in responεe to a packet εtrobe on line PS. ACB time counter 1242 then countε a predetermined number of application control buε clock tickε, e.g., 40 buε clock ticks, and generateε an output εignal. In response to the output signal of ACB time counter 1242, ACB state machine 311 driveε data εtrobe εignal low and sets signal ENABLE active after at least time tDSE (Fig. 14 and Table V) . (Note in Figure 13 signal ENABLE is expanded and lines are used to relate the riεing and falling edge of εignal ENABLE to time interval ADB on the application buε.) Hence, the data transfer protocol is controlled by the appropriate mesεage cycles and signal ENABLE. A data transfer cycle requires that the selected application was already tasked, through a message cycle, to be the next application to provide packet data. During a mesεage cycle, εtatistical multiplexer 300 enableε an application 301-i to drive data buε DATA/ADR the next time εignal ENABLE iε aεεerted. Application buε clock CLOCK (Fig. 14) runε continuouεly. ACB state machine 311 asserts and deasserts signal ENABLE (Figs. 13 and 14) synchronous with application bus clock CLOCK. Signal ENABLE stays active for the number of application control bus clock ticks equal to the number of bytes in a data packet. In this embodiment, ADB time counter 1241 startε to count the number of application control buε clock ticks upon signal ENABLE going active. When ADB time counter 1241 haε counted the requiεite number of clock tickε, a signal is generated to ACB state machine 311, which in turn drives εignal ENABLE inactive. The enabled application driveε data on bus DATA/ADR for the number of clock cycles that εignal ENABLE iε aεεerted. In thiε way εtatiεtical multiplexer 300 controlε the number of byteε application 301-i εends on application control bus 360 in any one data transfer. Application 301-i driveε data onto buε DATA/ADR and a clock signal on line DTACLK synchronouεly. (Fig. 14.) The εignal on line DTACLK iε not required to be in phase with signal CLOCK, but the signal on line DTACLK muεt have the εame frequency aε εignal CLOCK. Some latency iε allowed from the time application 301-i received εignal ENABLE until application 301-i driveε the data clock signal DTACLK. See Table V. In this embodiment, application 301-i, once enabled, must assert DATA and DTACLK on bus 360 within two clock cycles of the first poεitive edge of the clock on which signal ENABLE goes active. Application 301-i muεt drive the number of byteε on bus DATA/ADR as determined by the time interval signal ENABLE iε active. Thiε meanε the enable latency and disable latency must be the εame for any application, but the latency time may vary from one application to the next. When ADB time counter 1241 timeε out following a data tranεfer, ACB state machine 311 drives the signal on line ENABLE inactive and εtatiεtical multiplexer 300 enableε the next data transfer by appropriate mesεage cycleε. Specifically, εtatiεtical multiplexer 300 waitε at leaεt time tEAS (Fig. 14 and Table V) before aεεerting addreεε εtrobe signal AS. One embodiment of the timing relationships between the signalε on lines CLOCK, ENABLE, DTACLK and bus DATA/ADR is preεented in Figure 15. Table V explains the interpretation of the set up time tSU, hold time tH and time off tOFF. Time tDSE (Fig. 14) is the minimum time εtatiεtical multiplexer 300 waitε after data εtrobe εignal DS iε driven inactive. TABLE V Parameter Min/Max tAL Min 1 clock cycle Application latency Max 2 clock cycleε tsu Min 15 nεec Setup time for enable or data tH Min 10 nεec Hold time for data tOff Min 2.0 nsec Off time tDSE Min 320 nsec Off time tEAS Min 480 nsec Off time Statistical multiplexer 300 countε the number of byteε sent over application control bus 360 with ADB byte counter 1240. In this embodiment, ADB byte counter 1240 is a down counter that generates a signal to ACB state machine 311 if and when the correct number of bytes have been received. When an application 301-i is not driving line DTACLK, the driver for thiε line iε set to a high impedance state by encoder 302-i. To avoid glitches on line DTACLK, encoder 302-i takes the driver to a logic zero state at least for time tOFF before disabling or enabling the driver. To diεable the driver, encoder 302-i firεt putε a logic zero on line DTACLK and then diεableε the driver, i.e., the driver iε set to the high impedance state. Buε terminationε hold buε 360 in the logic zero εtate. When the next application 301-j enables its driver, there is not a transition on buε 360 because the drivers are enabled in the logic zero εtate. Aε indicated above, ACB state machine 311 controls application control bus 360 using information εtored in tableε in memory 311. ACB εtate machine 311 causes the appropriate addresε generator 1222 to 1223 to address an entry in the appropriate table that contains information to control operation of application control bus 360 or to enable tranεfer of information from primary FIFO 1201 to bus 360. Entries in each of the stored tables controlε one of the meεεage cycleε εhown in Figure 13. Each of the tableε have the same format for an entry. The firεt byte iε a control byte that is used by ACB εtate machine 311. Table VI defineε one embodiment of the control byte. TABLE VI Name Bit Off 0 CF 1 Type 3-2 TF 4 BC 5 Reεerved 7-6 Bit Off iε εet if the table entry iε not used. Bit CF is not relevant to this invention. The poεεible values for field Type are: 00 - Null packet inserted; 01 - Not used; 10 - Write to application control buε; and 11 - Read from application control bus When bit TF iε set, a packet iε read from a teεt FIFO. To uεe thiε feature bit Type muεt be εet to "01". Thiε feature iε not required for operation of statiεtical multiplexer 300. Bit BC iε εet to broadcaεt to all encoderε on one of the application buεeε when doing general communicationε. The two leaεt significant bits of the data byte in the general communication table designate which application buε, 0, 1, 2, or 3, to broadcaεt the data byte. The two leaεt εignificant bitε on data bus DATA/ADR are driven aε logic zeroε. The reεerved bitε are always εet to a logic zero. Each encoder 302-i is addressed by an application addreεε, that iε εometimes referred to as a service channel identification SCID. Addreεεes on application control bus 360 are given by the second and third byteε in each table entry, with the moεt significant byte first. Within the sixteen bit addreεε, the twelve moεt significant bits (bitε 15-4) are the address for encoder 302-i. Other embodiments may use a different number of bits to addreεε encoder 302-i. The next three bitε (bitε 3-1) are the addreεε for εpecific registers within encoder 302-i. The last bit, i.e, the least significant bit, indicates read or write. The fourth byte in each table iε a data byte. If a byte iε written to an application 301-i during a meεεage cycle, the information contained in the fourth byte of the entry table is provided to application 301-i. If a byte is read from an encoder 302-i, the byte is passed to microprocesεor 312 by encoder 302-i writing to thiε location. The address byteε in a table are εent over bus DATA/ADR of application control bus 360 with consecutive pulses on address strobe line AS of application control bus. (Figε. 14, 16 and 17.) Encoderε 302-1 to 302-L latch the address bytes on the trailing edge of the pulse on addresε εtrobe line AS. Reads and writes over bus DATA/ADR during a mesεage cycle to the fourth byte in a table are enabled by a pulεe on data εtrobe line DS of application control bus 360. (Figs. 16 and 17.) During write transfers, data is latched by addresεed encoder 302-i on the trailing edge of the pulse on data strobe line DS. During read tranεferε, ACB εtate machine latches data on the trailing edge of the pulse on data strobe line DS. When reading, there is no handεhake for indicating that the read data iε valid. Thiε meanε data muεt be placed on application control bus 360 within a specified time of the signal on data strobe line DS being asserted. The various timing characteristics between the signalε on lineε AS, DS and bus DATA/ADDR, as shown in Figs. 16 and 17, are defined in Table VII. TABLE VII Parameter Min/Max Comment tASL Min 80 nsec Applies only Addresε εtrobe low between the two pulse width εtrobeε for the two address bytes. tASH Min 80 nsec Address strobe high pulεe width tDSW Min 160 Data Strobe signal Write data εtrobe nsec DS is wider than pulse width addresε εtrobe εignal AS to allow addreεε decoding. tDSR Min 320 A long data εtrobe Read data strobe nsec εignal DS on read pulse width allows the application time to find the data and put it on bus DATA/ADR within bus 360. tDSL Min 80 nεec Thiε timing Data εtrobe low characteriεtic pulεe width applieε between repeated writeε or reads at the same addresε. tAD Min 80 nsec Thiε time interval Addreεε strobe to allowε the addreεε data strobe εetup to be latched before signal DS becomes valid, and so avoids false addresε decodes while the latched address is settling. tsu Min 40 nsec Addresε or data is Addreεε or data latched on falling εetup edge. tADH Min 40 nεec On read, data may Addreεε or data Max 120 not be put on the hold time nεec bus before signal DS is asserted. tDE Min 0 nsec On read, data must Data enable Max 120 be driven on the latency nsec bus until after signal DS is deaεserted. tRDH Min 0 nsec After read, bus Read data hold Max 120 master allowε time time nsec for buε to go inactive before aεεerting address for next cycle. tDAS Min 320 Data εtrobe to nsec addreεε delay As explained above, the primary table, which is defined at configuration time and is εtored in memory 1207, divideε a predetermined time interval into packet timeε. Each packet time in the predetermined time interval iε allocated an entry into the primary table. Each entry in the primary table iε an address that specifieε which application 301-i iε allocated this packet time. Since the primary table allocates bandwidth at a resolution down to one packet per second, the primary table, in one embodiment, has (39 Mbits/sec) , the statistical multiplexer output rate, times (1/1024 packet/bits) or 29,297 entries. As explained above, εtatiεtical multiplexer 300 shares responεibility with εyεtem εuperviεor 340 for building the primary table. After εet-up, a pointer iε εet to the firεt entry in the primary table. Statistical multiplexer 300 uses one primary table entry every packet time and so the pointer to the primary table iε indexed once for every packet period. Thuε, packet time intervalε over communication channel 330 are offered to applications 301-1 to 301-L according to the information in the primary table. Statiεtical multiplexer 300 actually provideε for two primary tableε. Thiε allowε εtatiεtical multiplexer 300 to build a "next" primary table and then switch to the next primary table, as described above. As mentioned above the primary table is kept in DRAM 1207. At the appropriate time, a DMA transfer is used to move the addresεed entry in the primary table from memory 1207 to primary FIFO 1201. After the laεt entry of the primary table iε tranεferred to primary FIFO 1201, the DMA controller iε redirected to the firεt entry of the primary table. Thiε cycle iε continued until a new primary table is built in another section of DRAM. The DMA controller iε directed to this new primary table when desired. During the primary status message cycle of a packet time, ACB state machine 311 reads the control word, i.e., the first byte, of the primary table entry pointed by the primary table pointer. If bit Off iε set, the rest of the control word is ignored and the rest of this primary table entry is read and trashed and an entry in the secondary table is examined, as deεcribed below. Field "Type" iε uεed in primary table entries to define if this packet iε a normal data packet or a εyεtem clock packet. If field Type field εpecifies that this packet iε a system clock packet, the primary status mesεage cycle is deleted and ACB state machine 311 moves onto the allocate bus meεεage cycle and tellε application 301-i, that received the previouε packet interval that it getε thiε packet's bandwidth also. If bit Off is not active and field Type is defined as a normal data packet, ACB εtate machine 311 performs a primary statuε meεεage cycle. ACB εtate machine 311 performε a read at the encoder'ε addreεε εpecified in the next two byteε of the entry. The data read at thiε addreεε is a statuε that tellε εtatistical multiplexer 300 if the addresεed encoder wantε thiε packet's bandwidth. If the addressed encoder declines this packet's bandwidth, the primary table entry's data byte iε read and traεhed. If the addressed encoder returns a status that it wantε thiε packet's bandwidth, the allocate bus mesεage cycle provideε directions to the addressed encoder to enable the encoder to use thiε packet'ε bandwidth. The secondary table is used to allocate packets that are not allocated by the primary table. As indicated above, in one embodiment, only fixed rate applications are allocated in the primary table, and variable rate applicationε are allocated in the εecondary table. Thus, when bit Off in the control word of the primary table iε εet, the secondary table is acceεεed. In thiε caεe, ACB εtate machine 311 readε the control byte in the addreεεed entry of the εecondary table. At initialization, a pointer is positioned at the first entry in the secondary table and after an entry iε used, the pointer is incremented by ACB state machine 311. Specifically, ACB state machine 311 accesεes the entries in the secondary table cyclically. ACB state machine 311 useε a counter to generate a pointer that cycleε through the entrieε. If bit Off iε εet in the addreεεed entry of the secondary table, packet asεembly εtate machine inεertε an idle packet in thiε packet'ε bandwidth, and the allocate bus mesεage cycle iε deleted. If bit Off bit iε not εet, ACB εtate machine 311 allocateε thiε packet'ε bandwidth to the application liεted in the next two bytes of this entry in the secondary table. Hence, the allocation of packets uεing the primary and εecondary tableε now becomeε a two-tier approach. The flow for this process is illuεtrated in Figure 18. ACB εtate machine 311 in εtep 1802 firεt examineε the entry in primary FIFO 1201. If the current packet iε allocated to a fixed rate application, the packet is offered to that application and the pointer for the primary table iε advanced by one (modulo the total number of entrieε) . However, if the packet is allocated to a variable rate application, as indicated by the null code in the primary table, null code check 1803 passes control to step 1805 and ACB state machine 311 checks the secondary table to see which variable rate application iε allocated the current packet. After offering the packet to the variable rate application, the pointerε for both the primary and secondary tables are advanced by one (modulo their respective total number of entries) . There are two secondary tables resident in shared memory 1202. This allows ACB state machine 311 to use one table while microprocessor 312 builds a second. Aε described above, a bit in the ACB state machine control register, which is controlled by microprocesεor 312, controlε which εecondary table ACB εtate machine 311 accesses. The last message cycle in mesεage cycle interval ACB of a packet time iε for general communicationε between statistical multiplexer 300 and applications 302-1 to 320-L. Thiε table is built by microprocessor 312 and kept in shared memory 1203. ACB state machine 311 accesses the entries in the general communications table cyclically by using a counter to generate a pointer that cycles through the entrieε. ACB state machine 311 deletes the general communicationε meεεage cycle whenever an entry haε bit Off set. The general communications table entry pointer remains at this entry until microprocesεor 312 writeε to the ACB εtate machine control regiεter to send more general communication byteε. The ACB εtate machine generateε an interrupt when it reaches a general communications table entry with bit Off set. In the general communicationε meεεage cycle, ACB εtate machine 311 either readε a byte from the addresεed application and puts the byte into the data byte field of the general communication table entry, or reads the general communication table entry data byte field and writes this byte to the application. The data direction iε controlled by field Type of the entry. There are two general communicationε tableε reεident in shared memory 1204. This allows ACB state machine 311 to uεe one table while microproceεεor 312 buildε a εecond. A bit in the ACB εtate machine control regiεter, which iε controlled by microproceεεor 312, controlε which table ACB εtate machine 311 acceεεeε. During a data tranεfer in the general communicationε meεεage cycle, data εtrobe εignal DS may be aεεerted multiple timeε. Thiε allowε reading and writing from regiεters with more than one 8-bit byte. Multiple-byte registers use subsequent data εtrobes for succeεεive byteε of the register, beginning with the least εignificant byte. Thuε, to write to a 16-bit register, the bus master aεεertε data εtrobe εignal DS twice, the firεt time with the least significant byte of data, and the second with the most εignificant byte of data. Reading the regiεter iε done in the εame way. Registers are organized so that the bus master may optionally read or write only the leaεt εignificant byte(ε) . There iε technically no limit to the number of byteε a regiεter may have. Thuε, a memory could be treated as a register, doing multiple byte reads or writes. Microproceεεor 312 in εtatistical multiplexer 300 communicates with system superviεor 340 over a εyεtem εuperviεor buε. Aε explained above for εtep 401, statistical multiplexer 300 is configured and controlled by system supervisor 340. The information is passed between statistical multiplexer 300 and syεtem supervisor 340 over using High Level Data Link Communication protocols. The particular bus εtructure uεed to form a communication path between εtatiεtical multiplexer 300 and εyεtem εuperviεor 340 iε not a part of the current invention. The important aspect is the information provided by syεtem εupervisor 340 to statistical multiplexer 300. The particular mode used to transport the information to statistical multiplexer 300 is defined by configuration of the syεtem εuperviεor 340 and εo will be known when the statistical multiplexer is configured with a particular system supervisor. As indicated in step 401, statiεtical multiplexer 300 εyεtem εuperviεor tells εtatiεtical multiplexer 300 which applicationε 301-i to 301-L are in the εystem and how applications 301-2 to 301-L are configured. System superviεor 340 alεo provideε a method of updating statistical multiplexer software. In this embodiment, statistical multiplexer 300 software reviεionε are downloaded over εyεtem supervisor bus to εtatiεtical multiplexer 300 and εtored in non-volatile flaεh memory 1206. The above hardware deεcription iε illustrative only of one embodiment of the invention. In view of thiε disclosure, the tables and data used by statiεtical multiplexer as well aε communicationε with the encoderε, communication channel, and εyεtem supervisor can be implemented in a wide variety of ways. In addition, as noted earlier, the uεe of the statistical multiplexer for compressed video data is illustrative only. The εtatiεtical multiplexing principleε of thiε invention, in view of thiε diεcloεure, can be uεed by thoεe skilled in the art for a wide variety of data streams.

Claims: CLAIMS I claim: 1. A εtatiεtical multiplexing proceεε for a plurality of data εtreams competing for accesε to a communication channel co priεing the εtepε of: a) populating a εtatic table in a memory of a εtatiεtical multiplexer wherein εaid εtatic table haε an entry for each unit of data that can be εent over εaid communication channel in a predetermined time period wherein εaid εtatic table populating εtep further compriεeε; i) allocating an entry in said static table to one of said plurality of data εtreamε; ii) εtoring a predetermined code in said entry if said entry iε allocated to a data εtream that haε a variable rate; iii) εtoring a pointer in εaid entry if εaid entry iε allocated to a data εtream that haε a fixed rate wherein εaid pointer identifieε the fixed rate data stream; and iv) repeating stepε i) to iii) for each entry in εaid εtatic table; and b) uεing each table entry in said static table in selecting the data εtream in εaid plurality of data streams that sendε the next unit of data to the communication channel. 2. The εtatiεtical multiplexing proceεε of Claim 1 further compriεing the εtep of: populating a dynamic table wherein εaid dynamic table populating εtep further compriεeε: i) allocating an entry in εaid dynamic table to one of A) one of a plurality of variable rate data stream in εaid plurality of data streams and B) an idle unit of data; ii) storing in εaid entry a pointer to said variable rate data stream upon allocation of said entry to said variable rate data εtream; and iii) repeating εtepε i) to ii) for each entry in εaid dynamic table. 3. The εtatiεtical multiplexing proceεε of Claim 2 wherein εaid εtep of uεing each entry in εaid εtatic table further comprises: accessing an entry in said dynamic table, upon detecting an entry in said static table containing said predetermined code, to εelect the variable rate data εtream in εaid plurality of data streams that sendε the next unit of data to the communication channel. 4. The εtatiεtical multiplexing proceεε of Claim 3 further compriεing the εtep of: adjusting a number of units of data allocated for tranεmiεεion over εaid communication channel for each of εaid variable rate data streamε that haε a quality meaεurement parameter outεide a predetermined range. 5. The εtatiεtical multiplexing proceεε of Claim 4 further compriεing the εtep of: populating a εecond dynamic table uεing εaid adjuεted number of unitε of data allocated for transmisεion over εaid communication channel wherein said second dynamic table populating εtep further compriεeε: i) allocating an entry in εaid εecond dynamic table to one of A) one of εaid plurality of variable rate data εtream in said plurality of data streams and B) an idle unit of data; ii) storing in said entry a pointer to said variable rate data stream upon εaid entry being allocated to εaid variable rate data εtream; and iii) repeating εtepε i) to ii) for each entry in εaid second dynamic table. 6. The statistical multiplexing process of Claim 5 further comprising the step of: switching from said dynamic table to said second dynamic table. 7. The εtatiεtical multiplexing process of Claim 2 wherein said step of populating a dynamic table is done once in a window. 8. The statiεtical multiplexing process of Claim 3 further comprising the step of: collecting data for each variable rate data εtream to generate a parameter that characterizeε εaid variable rate data stream. 9. The statiεtical multiplexing process of Claim 8 further comprising the step of: generating for each variable rate data εtream εaid parameter that characterizes said variable rate data εtream. 10. The εtatiεtical multiplexing proceεs of Claim 8 wherein said parameter compriεeε a measure of distortion. 11. The statistical multiplexing process of Claim 9 further comprising the step of: adjuεting a number of unitε of data allocated for tranεmission over εaid communication channel for each of said variable rate data streams with said parameter outεide a predetermined range. 12. The εtatiεtical multiplexing proceεε of Claim 11 wherein a lower limit of εaid predetermined range is a product of a first hyεtereεis coefficient and a distortion parameter. 13. The εtatiεtical multiplexing proceεε of Claim 11 wherein an upper limit of said predetermined range is a product of a second hysteresis coefficient and a distortion parameter. 14. The εtatistical multiplexing procesε of Claim 11 further compriεing the εtep of: populating a second dynamic table using εaid adjuεted number of unitε of data allocated for transmisεion over said communication channel for each of said variable rate data streamε wherein said second dynamic table populating step further comprises: i) allocating an entry in said second dynamic table to one of A) one of said plurality of variable rate data stream in said plurality of data εtreams and B) an idle unit of data; ii) storing in εaid entry a pointer to εaid variable rate data εtream upon εaid entry being allocated to εaid variable rate data εtream; and iii) repeating εtepε i) to ii) for each entry in εaid εecond dynamic table. 15. The εtatiεtical multiplexing proceεε of Claim 14 further comprising, the εtep of: εwitching from εaid dynamic table to εaid second dynamic table. 16. The statiεtical multiplexing proceεε of Claim 3 wherein εaid plurality of data εtreamε includes an encoded video data stream. 17. A statiεtical multiplexing process for a plurality of encoded data streamε εharing acceεε to a communication channel compriεing the εteps of: asεigning a rate to each variable rate encoder that generates one of said plurality of encoded data εtreamε; populating a table having a predetermined number of entries uεing εaid assigned rates wherein each entry in said table iε allocated to one of (i) one of εaid plurality of encoded data εtreamε and (ii) an idle packet; and uεing each table entry in εaid table to select an encoded data εtream in εaid plurality of encoded data εtreamε that εends the next packet to the communication channel. 18. The statiεtical multiplexing proceεε of Claim 17 wherein εaid aεεigning a rate εtep iε performed in an initialization εtep and each fixed rate encoder iε aεεigned an actual rate and each variable rate encoder is aεεigned a guaranteed rate. 19. The εtatiεtical multiplexing proceεs of Claim 18 wherein in said initialization step, each variable rate encoder is asεigned a distortion threshold. 20. The statiεtical multiplexing proceεε of Claim 18 wherein said step of populating a table further comprises: i) storing a predetermined code in said entry if εaid entry iε allocated to an encoded data εtream that has a variable rate; ii) storing a pointer in said entry if said entry iε allocated to an encoded data εtream that has a fixed rate wherein said pointer identifies the fixed rate data stream; and iii) repeating steps i) to ii) for each entry in said table. 21. The εtatiεtical multiplexing process of Claim 20 further comprising the εtep of: populating a εecond table wherein εaid εecond table populating step further compriseε: i) allocating an entry in said second table to one of A) one of a plurality of variable rate encoded data streamε in εaid plurality of encoded data εtreamε and B) an idle packet; ii) storing in said entry a pointer to said variable rate encoded data stream upon said entry being allocated to εaid variable rate encoded data εtream; and iii) repeating steps i) and ii) for each entry in said second table. 22. The εtatiεtical multiplexing process of Claim 21 wherein said step of using each entry in said first-mentioned table further compriseε: accesεing an entry in εaid second table, upon detecting an entry in said firεt-mentioned table containing said predetermined code, to select the variable rate data stream in said plurality of data streams that sends the next unit of data to the communication channel. 23. The statiεtical multiplexing process of Claim 21 further comprising the step of: collecting data for each variable rate encoded data stream from a variable rate encoder to generate a distortion parameter that characterizes said encoded data stream. 24. The statistical multiplexing process of Claim 23 further comprising the step of: generating for each variable rate encoded data stream said distortion parameter that characterizes a quality of said variable rate encoded data stream. 25. The εtatiεtical multiplexing proceεε of Claim 24 further compriεing the step of: adjusting a number of packetε allocated to each of εaid variable rate encoded data εtreamε uεing εaid diεtortion parameter if εaid diεtortion parameter is outside a predetermined range. 26. The statiεtical multiplexing process of Claim 25 wherein a lower limit of said predetermined range iε a product of a firεt hysteresis coefficient and said diεtortion threεhold. 27. The εtatiεtical multiplexing proceεε of Claim 25 wherein an upper limit of said predetermined range is a product of a second hystereεiε coefficient and said distortion threshold. 28. The εtatiεtical multiplexing proceεε of Claim 25 further comprising the step of: populating a third table uεing εaid adjuεted number of packets allocated for transmiεsion over said communication channel wherein said third table populating step further comprises: i) allocating an entry in said third table to one of A) one of εaid plurality of variable rate encoded data streams in said plurality of encoded data streamε and B) an idle packet; ii) εtoring in εaid entry a pointer to said variable rate encoded data stream upon said entry being allocated to said variable rate data stream; and ϋi) repeating stepε i) to ii) for each entry in said third table. 29. The statiεtical multiplexing process of Claim 28 further comprising the step of: εwitching from εaid εecond table to εaid third table. 30. The εtatistical multiplexing process of Claim 21 wherein said plurality of data streams includes an encoded video data stream. 31. A εtatistical multiplexing proceεε for a plurality of encoded data εtreamε εharing a communication channel compriεing the εtepε of: collecting data for each variable rate encoded data εtream from a variable rate encoder in said plurality of encoded data streams to generate a diεtortion parameter that characterizeε εaid variable rate encoded data εtream; generating for each variable rate encoded data εtream εaid diεtortion parameter that characterizeε a quality of εaid variable rate encoded data εtream; adjuεting a number of packets allocated to each of said variable rate encoded data streams in a selected time period if said distortion parameter is outside a predetermined range; populating a table using said adjusted number of allocated packetε wherein said table populating step further compriseε: i) allocating an entry in εaid table to one of A) a variable rate encoded data εtream in a plurality of variable rate encoded data εtreams that are included in said plurality of encoded data streams and B) an idle packet; ii) storing in said entry a pointer to said variable rate encoded data εtream upon εaid entry being allocated to εaid variable rate encoded data εtream; and iii) repeating steps i) to ii) for each entry in said table; εwitching to εaid table εo that εaid table iε uεed by a εtatiεtical multiplexer to determine the variable rate encoded data stream that sendε the next packet to a communication channel.

Inventors: RAO R PADMANABHA, RAO, R., PADMANABHA
Applicants: COMPRESSION LABS INC, COMPRESSION LABS, INC.
Application year: 1995
Main classification: H04J3
IPC codes: H04J3, H04N7