The invention relates generally to communications networks. More specifically, the invention relates to discovery of services, service transmission, and encapsulation in a communication network.
Digital broadband broadcast networks enable end users to receive digital content including video, audio, data, and so forth. Using a mobile terminal, a user may receive digital content over a wireless digital broadcast network. Digital content can be transmitted in a cell within a network. A cell may represent a geographical area that may be covered by a transmitter in a communication network. A network may have multiple cells and cells may be adjacent to other cells.
A receiver device, such as a mobile terminal, may receive a program or service in a data or transport stream. The transport stream carries individual elements of the program or service such as the audio and video components of a program or service. Typically, the receiver device locates the different components of a particular program or service in a data stream through Program Specific Information (PSI) or Service Information (SD embedded in the data stream. However, PSI or SI signaling may be insufficient in some wireless communications systems, such as Digital Video Broadcasting—Handheld (DVB-H) systems. Use of PSI or SI signaling in such systems may result in a sub-optimal end user experience as the PSI and SI tables carrying in PSI and SI information may have long repetition periods. In addition, PSI or SI signaling requires a large amount of bandwidth which is costly and also decreases efficiency of the system.
PSI/SI in ETSI EN 300 468 [V1.7.1 (2006-05)] Digital Video Broadcasting (DVB); Specification for Service Information (SI) in DVB systems, and U.S. application Ser. No. 11/443,317, entitled, Service Discovery Section, filed May 31, 2006 by Jani Vare et al. disclose conventional techniques for signaling service-discovery information.
MPEG-2 TS defines an encapsulation mechanism for data carried over DVB. Generic Stream Encapsulation (GSE) defines an encapsulation protocol for data carried over digital video broadcast specifications, such as DVB-S2, a second generation specification for Digital Video Broadcast—Satellite. The Generic Stream Encapsulation (GSE) protocol, which is under definition within the Generic Data Broadcasting & Service Information Protocols (GBS) group of DVB, provides an efficient means for encapsulating IP and other network layer packets over the generic Stream profile of the DVB-S2 physical layer.
GSE (Generic Stream Encapsulation), defined initially for DVB over Satellite (DVB-S2) ETSI EN 302 307 V1.1.2 (2006-06), entitled, Digital Video Broadcasting (DVB); Second generation framing structure, channel coding and modulation systems for Broadcasting, Interactive Services, News Gathering and other broadband satellite applications (downloadable at http://webapp.etsi.org/exchangefolder/en—302307v010102p.pdf), is one of the possible candidates as an encapsulation protocol for digital broadband broadcast networks. However, currently there isn't any signaling supported within GSE in case Multi-protocol Encapsulation—Forward Error Correaction (MPE-FEC) type of Forward Error Correaction (FEC) mechanism (See ETSI EN 301 192 V1.4.1 (2004-11), entitled, Digital Video Broadcasting (DVB); DVB specification for data broadcasting) is used within next generation standards for Digital Video Broadcasting-Terrestrial/Handheld. Moreover, the transmission protocol beneath GSE will probably be different in next generation standards for Digital Video Broadcasting-Terrestrial/Handheld than the transmission protocol beneath GSE in DVB-S2.
As such, techniques for using forward error correaction in a digital broadcast network that supports generic stream encapsulation would advance the art.
The following presents a simplified summary in order to provide a basic understanding of some aspects of the invention. The summary is not an extensive overview of the invention. It is neither intended to identify key or critical elements of the invention nor to delineate the scope of the invention. The following summary merely presents some concepts of the invention in a simplified form as a prelude to the more detailed description below.
Aspects of the invention are directed to using forward error correaction in a digital broadcast network that supports generic stream encapsulation. According to an embodiment, error correaction data is calculated over application data, and the application data and error correaction data are encapsulated in generic stream encapsulation packets which are further encapsulated in data stream protocol packets. In another embodiment, error correaction data is calculated over generic stream encapsulation packets, and error correaction data is encapsulated in generic stream encapsulation packets which are further encapsulated in data stream protocol packets. In yet another embodiment, error correaction data is calculated over, and encapsulated within, generic stream encapsulation packets. In still another embodiment, error correaction data is calculated over application data packets, application data is encapsulated within generic stream encapsulation packets, and error correaction data is encapsulated within data stream protocol packets.
A more complete understanding of the present invention and the advantages thereof may be acquired by referring to the following description in consideration of the accompanying drawings, in which like reference numbers indicate like features, and wherein:
In the following description of the various embodiments, reference is made to the accompanying drawings, which form a part hereof, and in which is shown by way of illustration various embodiments in which the invention may be practiced. It is to be understood that other embodiments may be utilized and structural and functional modifications may be made without departing from the scope and spirit of the present invention.
Examples of other digital broadcast standards which digital broadband broadcast system 102 may utilize include Digital Video Broadcast—Terrestrial (DVB-T), Integrated Services Digital Broadcasting—Terrestrial (ISDB-T), Advanced Television Systems Committee (ATSC) Data Broadcast Standard, Digital Multimedia Broadcast-Terrestrial (DMB-T), Terrestrial Digital Multimedia Broadcasting (T-DMB), Satellite Digital Multimedia Broadcasting (S-DMB), Forward Link Only (FLO), Digital Audio Broadcasting (DAB), and Digital Radio Mondiale (DRM). Other digital broadcasting standards and techniques, now known or later developed, may also be used. Aspects of the invention may also be applicable to other multicarrier digital broadcast systems such as, for example, T-DAB, T/S-DMB, ISDB-T, and ATSC, proprietary systems such as Qualcomm MediaFLO/FLO, and non-traditional systems such 3GPP MBMS (Multimedia Broadcast/Multicast Services) and 3GPP2 BCMCS (Broadcast/Multicast Service).
Digital content may be created and/or provided by digital content sources 104 and may include video signals, audio signals, data, and so forth. Digital content sources 104 may provide content to digital broadcast transmitter 103 in the form of digital packets, e.g., Internet Protocol (IP) packets. A group of related IP packets sharing a certain unique IP address or other source identifier is sometimes described as an IP stream. Digital broadcast transmitter 103 may receive, process, and forward for transmission multiple IP streams from multiple digital content sources 104. The processed digital content may then be passed to digital broadcast tower 105 (or other physical transmission component) for wireless transmission. Ultimately, mobile terminals or devices 112 may selectively receive and consume digital content originating from digital content sources 104.
As shown in
Computer executable instructions and data used by processor 128 and other components within mobile device 112 may be stored in a computer readable memory 134. The memory may be implemented with any combination of read only memory modules or random access memory modules, optionally including both volatile and nonvolatile memory. Software 140 may be stored within memory 134 and/or storage to provide instructions to processor 128 for enabling mobile device 112 to perform various functions. Alternatively, some or all of mobile device 112 computer executable instructions may be embodied in hardware or firmware (not shown).
Mobile device 112 may be configured to receive, decode and process digital broadband broadcast transmissions that are based, for example, on the Digital Video Broadcast (DVB) standard, such as DVB-H or DVB-T, through a specific DVB receiver 141. The mobile device may also be provided with other types of receivers for digital broadband broadcast transmissions. Additionally, receiver device 112 may also be configured to receive, decode and process transmissions through FM/AM Radio receiver 142, WLAN transceiver 143, and telecommunications transceiver 144. In one aspect of the invention, mobile device 112 may receive radio data stream (RDS) messages.
In an example of the DVB standard, one DVB 10 Mbit/s transmission may have 200, 50 kbit/s audio program channels or 50, 200 kbit/s video (TV) program channels. The mobile device 112 may be configured to receive, decode, and process transmission based on the Digital Video Broadcast-Handheld (DVB-H) standard or other DVB standards, such as DVB-Satellite (DVB-S), or DVB-Terrestrial (DVB-T). Similarly, other digital transmission formats may alternatively be used to deliver content and information of availability of supplemental services, such as ATSC (Advanced Television Systems Committee), NTSC (National Television System Committee), ISDB-T (Integrated Services Digital Broadcasting—Terrestrial), DAB (Digital Audio Broadcasting), DMB (Digital Multimedia Broadcasting), FLO (Forward Link Only) or DIRECTV. Additionally, the digital transmission may be time sliced, such as in DVB-H technology. Time-slicing may reduce the average power consumption of a mobile terminal and may enable smooth and seamless handover. Time-slicing entails sending data in bursts using a higher instantaneous bit rate as compared to the bit rate required if the data were transmitted using a traditional streaming mechanism. In this case, the mobile device 112 may have one or more buffer memories for storing the decoded time sliced transmission before presentation.
In addition, an electronic service guide may be used to provide program or service related information. Generally, an Electronic Service Guide (ESG) enables a terminal to communicate what services are available to end users and how the services may be accessed. The ESG includes independently existing pieces of ESG fragments. Traditionally, ESG fragments include XML and/or binary documents, but more recently they have encompassed a vast array of items, such as for example, a SDP (Session Description Protocol) description, textual file, or an image. The ESG fragments describe one or several aspects of currently available (or future) service or broadcast program. Such aspects may include for example: free text description, schedule, geographical availability, price, purchase method, genre, and supplementary information such as preview images or clips. Audio, video and other types of data including the ESG fragments may be transmitted through a variety of types of networks according to many different protocols. For example, data can be transmitted through a collection of networks usually referred to as the “Internet” using protocols of the Internet protocol suite, such as Internet Protocol (IP) and User Datagram Protocol (UDP). Data is often transmitted through the Internet addressed to a single user. It can, however, be addressed to a group of users, commonly known as multicasting. In the case in which the data is addressed to all users it is called broadcasting.
One way of broadcasting data is to use an IP datacasting (IPDC) network. IPDC is a combination of digital broadcast and Internet Protocol. Through such an IP-based broadcasting network, one or more service providers can supply different types of IP services including on-line newspapers, radio, and television. These IP services are organized into one or more media streams in the form of audio, video and/or other types of data. To determine when and where these streams occur, users refer to an electronic service guide (ESG). One type of DVB is Digital Video Broadcasting-Handheld (DVB-H). The DVB-H is designed to deliver 10 Mbps of data to a battery-powered terminal device.
DVB transport streams deliver compressed audio and video and data to a user via third party delivery networks. Moving Picture Expert Group (MPEG) is a technology by which encoded video, audio, and data within a single program is multiplexed, with other programs, into a transport stream (TS). The TS is a packetized data stream, with fixed length packets, including a header. The individual elements of a program, audio and video, are each carried within packets having a unique packet identification (PID). To enable a receiver device to locate the different elements of a particular program within the TS, Program Specific Information (PSI), which is embedded into the TS, is supplied. In addition, additional Service Information (SI), a set of tables adhering to the MPEG private section syntax, is incorporated into the TS. This enables a receiver device to correctly process the data contained within the TS.
As stated above, the ESG fragments may be transported by IPDC over a network, such as for example, DVB-H to destination devices. The DVB-H may include, for example, separate audio, video and data streams. The destination device must then again determine the ordering of the ESG fragments and assemble them into useful information.
In a typical communication system, a cell may define a geographical area that may be covered by a transmitter. The cell may be of any size and may have neighboring cells.
Communication between network components may be accomplished via the Open Systems Interconnection (OSI) standard. The OSI framework of the process for communication between different network components may be structured as seven layers or categories as described by the OSI reference model.
Referring to
A version number (e.g., version_number) may be used for indicating a version of the service discovery descriptor. The version number field may be used by a terminal to detect whether there are any changes within the service discovery descriptor since the terminal previously examined the service discovery descriptor.
An ESG provider identifier (e.g., ESGproviderID) may be used for identifying an ESG provider of the services announced within the service discovery descriptor. In accordance with one or more aspects of the invention, services listed within a particular service discovery descriptor may be unique within an associated ESG provider identifier.
A service loop length, (e.g., service_loop_length) may be used for indicating a length of the loop that is located in the example service discovery descriptor between service_loop_length and CRC—32.
A service identifier (e.g., serviceID) may be used for uniquely identifying a service within the scope of an ESG provider (e.g., that of defined in Digital Video Broadcasting Convergence of Broadcast and Mobile Services (DVB-CBMS) or Open Mobile Alliance Mobile Broadcast Services (OMA BCAST)). A service identifier may be associated with one or more Internet Protocol (IP) streams (each of which may be identified by a respective IP address).
A logical channel identifier (e.g., logical channel_id) may be used for providing a one-to-one mapping with the service identifier (i.e. serviceID) and ESG provider identifier (i.e. ESGProviderID) pair. The logical channel identifier may identify the logical channel of the associated service identifier. The logical channel identifier may be used by the receiver for discovering a packet's portion of a specific logical channel in case there are packets from more than one logical channel available within a particular physical channel.
A physical channel identifier (e.g., physical_channel_id) may be used to identify a physical channel where an associated logical channel is carried.
An FEC (Forward Error Correaction) indicator (e.g., fec_indicator) may be used for indicating whether or not FEC is used for an associated service. In one example, if the FEC indicator has been set to 0x01, then FEC is used for the associated service.
A frame size (e.g., frame_size) may be used to indicate a FEC frame size in case FEC is supported with the associated service.
A slot loop length (e.g., slot_loop_length) may be used for indicating a length of the loop that is located in the example service discovery descriptor between slot_loop_length and frame_loop_length. In accordance with at least one aspect of the invention, each slot loop iteration corresponds with a particular iteration within a frame loop.
A slot identifier (e.g., slot_id) may be used for identifying a slot in which an associated service is carried. A particular service may be carried within multiple slots, which are located within one or more frames.
A frame loop length (e.g., frame_loop_length) may be used for indicating a length of the loop that is located in the example service discovery descriptor between frame_loop_length and CRC—32. In accordance with at least one aspect of the invention, each frame loop iteration corresponds with a particular iteration within a particular slot loop.
A frame identifier (e.g., frame_id) may be use for identifying a particular frame. In accordance with at least one aspect of the invention, each frame may be associated with one or more slots.
The service discovery descriptor may further comprise a cyclic redundancy check code, in this example a 32 bit field CRC—32 as presented in ETSI EN 300 468. The service discovery descriptor may further comprise one or more fields of different lengths for future use (e.g., reserved_future_use).
A neighbouring service discovery descriptor in accordance with at least one aspect of the invention may provide mapping for the services available within neighbouring cells.
In accordance with the example neighbouring service discovery descriptor of
Referring to
A version number (e.g., version_number) may be used for indicating a version of the service discovery descriptor. The version number field may be used by a terminal to detect whether there are any changes within the neighboring service discovery descriptor since the terminal previously examined the neighboring service discovery descriptor.
A network identifier (e.g., network_id) may be used for indicating a network of the elements described within the neighboring service discovery descriptor.
An ESG provider identifier (e.g., ESGproviderID) may be used for identifying an ESG provider of the services announced within the neighboring service discovery descriptor. In accordance with one or more aspects of the invention, services listed within a particular neighboring service discovery descriptor may be unique within an associated ESG provider identifier. Hence, two serviceIDs with the same value may be mutually distinguished based on ESGproviderID.
A cell loop length (e.g., cell_loop length) may be used to indicate a length of the cell loop, which appears in the example neighboring service discovery descriptor between cell_loop_length and CRC—32.
A cell identifier (e.g., cell_id) may be used for identifying a cell. In accordance with at least one aspect of the invention, each cell may be unique within one network.
A frequency field (e.g., frequency) may be used for indicating a frequency of the signal covering an area of the associated cell. The indicated frequency may be the channel center frequency.
A service loop length, (e.g., service_loop_length) may be used for indicating a length of the loop that is located in the example neighboring service discovery descriptor between service_loop_length and CRC—32.
A service identifier (e.g., serviceID) may be used for uniquely identifying a service within the scope of an ESG provider (e.g., that of defined in DVB-CBMS or OMA BCAST). A service identifier may be associated with one or more Internet Protocol (IP) streams (each of which may be identified by a respective IP address).
A logical channel identifier (e.g., logical channel_id) may be used for providing a one-to-one mapping with the service identifier. The logical channel identifier may identify the logical channel of the associated service identifier. The logical channel identifier may be used by the receiver for discovering a packet's portion of a specific logical channel in case there are packets from more than one logical channel available within a particular physical channel.
A physical channel identifier (e.g., physical_channel_id) may be used to identify a physical channel where an associated logical channel is carried.
An FEC (Forward Error Correaction) indicator (e.g., fec_indicator) may be used for indicating whether or not FEC is used for an associated service. In one example, if the FEC indicator has been set to 0x01, then FEC is used for the associated service.
A frame size (e.g., frame_size) may be used to indicate a FEC frame size in case FEC is supported with the associated service.
A slot loop length (e.g., slot_loop_length) may be used for indicating a length of the loop that is located in the example neighboring service discovery descriptor between slot_loop_length and frame_loop_length. In accordance with at least one aspect of the invention, each slot loop iteration corresponds with a particular iteration within a frame loop.
A slot identifier (e.g., slot_id) may be used for identifying a slot in which an associated service is carried. A particular service may be carried within multiple slots, which are located within one or more frames.
A frame loop length (e.g., frame_loop_length) may be used for indicating a length of the loop that is located in the example neighboring service discovery descriptor between frame_loop_length and CRC—32. In accordance with at least one aspect of the invention, each frame loop iteration corresponds with a particular iteration within a particular slot loop.
A frame identifier (e.g., frame_id) may be use for identifying a particular frame. In accordance with at least one aspect of the invention, each frame may be associated with one or more slots.
The service discovery descriptor may further comprise a cyclic redundancy check code, in this example a 32 bit field CRC—32 as presented in ETSI EN 300 468. The service discovery descriptor may further comprise one or more fields of different lengths for future use (e.g., reserved_future_use).
A physical channel (e.g., PHY_channel) may be determined as follows: slot_no={s1, s2, s3 . . . , sR}, where 1≦R≦L; and frame_no={f1, f2, f3 . . . , fP}, where 1≦P≦M. Thus, in the example of
One service may include one or more IP streams. Each service may have a unique service identifier. This service identifier and the corresponding IP addresses may be listed in ESG data. In data link layer (L2), the services are mapped into the logical channels. This is one-to-one mapping, and the service identifier uniquely determines the logical channel identifier. L2 signaling may have a dedicated signaling channel in the physical layer.
Logical channels are mapped into the physical channels as shown in
Physical channels are L1 layer time division multiplexing (TDM) channels each having a dedicated time slot in the OFDM signal. One physical channel reserves the OFDM transmission capacity during the slot. There may be a fixed integer number of OFDM symbols in each slot. The idea of the physical channel can be extended in such a way that instead of reserving one slot it can reserve multiple slots.
Physical channels can have dedicated Quality of Service (QoS) parameters including, but not limited to, code rate, modulation, average bit rate (depends on the slot interval and size), access delay (depends on the slot interval), power saving (depends on the slot duration and interval), and the like.
L2 packets are not sent to the modulator with a fixed clock rate specified by the modulator bit rate as is done in the DVB-T transport stream. Therefore, buffers are needed as an interface between the variable and the fixed bit rate parts of the modulator.
An alternative is to move buffers and some other functionality of the modulator to the IPE. In this case, the IPE forms the TDM slots and sends them to the modulator with a fixed clock rate.
Synchronization field 1002 enables detection of the beginning of each DSP packet within a receiver and a network. In accordance with at least one aspect of the invention, synchronization field contains 8 bits. As is the case with other fields and parameters disclosed herein having a particular number of bits, the synchronization field may contain any other suitable number of bits. In various embodiments of the invention the DSP packet may have additional fields and one or more of the exemplary fields may be omitted or combined with each other.
Payload type identifier 1004 (e.g., payload_type_id) may be used for identifying the payload type encapsulated within the payload. For example, payload type identifier may specify a payload type including, but not limited service discovery descriptor, (SDD), neighboring service discovery descriptor (NSDD), Internet Protocol (IP), Reed-Solomon (RS) and the like.
Logical channel identifier 1006 (e.g., logical channel_id) may be used for identifying a logical channel of an associated packet. This identifier may be used by a receiver for discovering the packets part of specific logical channel when there are packets from more than one logical channel available within a particular slot.
Physical channel identifier 1008 (e.g., physical_channel_id) may be used for identifying a physical channel in which an associated DS packet is carried. A physical channel identifier enables a network element to allocate DSP packets into correct physical channels.
Forward Error Correaction address 1010 (e.g., FEC_address) may be used for mapping DS packets carrying application data with corresponding DS packets carrying RS data when FEC is used. If FEC is not used, this field can be ignored.
Fragmentation index 1012 (e.g., Fragmentation_index) is a counter for the payload fragments encapsulated within DSP packets. Fragmentation index 1012 enables a receiver to decapsulate the payload in the correct order, e.g., in case some of the packets are lost.
Last fragment indicator 1014 (e.g., last_fragment_indicator) may be used for indicating a last fragment of an encapsulated payload.
Payload start indicator 1016 (e.g., Payload_start_indicator) may be used for indicating whether a current DSP packet carries the first fragment of an encapsulated payload. Payload 1516 is the payload of a DSP packet.
Stuffing 1020 are bits that may be added if a packet is not full. And Cyclic Redundancy Check (CRC) 1022 is a well known way for checking that a received block of data is free from errors.
In accordance with at least one aspect of the invention, DSP packets have a fixed size. The size of the packet may be determined based on an error correaction code, the length of the interleaver, and the length of a symbol.
In accordance with an aspect of the invention, a Multi-Protocol Encapsulation Forward Error Correaction (MPE-FEC) type of FEC mechanism may be used with Generic Stream Encapsulation (GSE).
An exemplary Generic Stream Encapsulation header format is shown in
In accordance with an aspect of the invention, label fields may be redefined. If GSE is used, then the 3 byte label field may be used as follows. LT field is set to value “01” indicating that the 3 byte label field is used, if the associated logical channel supports MPE-FEC, which may be signalled, e.g., in Service Discovery Descriptor (SDD) and/or Neighbouring Service Discovery Descriptor (NSDD), as discussed above.
In an embodiment, which is shown in
The logical channel identifier may be used for identifying a logical channel of the associated packet. The receiver may use this identifier for discovering which services are carried on which GSE packets, in case there are services from multiple logical channels within a particular physical channel. In such a case, the logical channel identifier is not signaled within a lower layer encapsulation protocol.
If FEC is used, then the FEC address may be used for mapping: DS packets carrying application data with corresponding DS packets carrying RS data. Application data may be composed of application data carrying datagrams, e.g. in the form of IP datagrams or other data, such as signaling metadata. If FEC is not used, the FEC address may be ignored.
RS data for a transmitted payload (e.g., IP) may be calculated in multiple ways. A first example for calculating RS data for a transmitted payload, in accordance with one or more aspects of the invention, is shown in
A second example for calculating RS data for a transmitted payload, in accordance with one or more aspects of the invention, is shown in
A third example for calculating RS data for a transmitted payload, in accordance with one or more aspects of the invention, is shown in
A fourth example for calculating RS data for a transmitted payload, in accordance with one or more aspects of the invention, is shown in
In accordance with a different embodiment, GSE encapsulator 2504 encapsulates IP data and RS data into separate GSE packets. If FEC encoding has not already been performed for the GSE packets, then FEC encoder 2506 calculates RS parity data and provides FEC encoded packets to DSP encapsulator 2508 and provides RS data to GSE encapsulation 2504. DSP encapsulator 2508 encapsulates FEC encoded GSE packets into DSP packets, and modulator 2510 schedules the DSP packets into transmission frame slots.
In a different embodiment, FEC encoder 2604 calculates RS parity data and provides IP datagrams and RS data to GSE encapsulator 2606, which encapsulates IP data into GSE packets. DSP encapsulator 2608 encapsulates GSE packets and RS data into DSP packets, and modulator 2610 schedules the DSP packets into transmission frame slots.
In a different embodiment, RF part 2704 and demultiplexer 2706 provide received DSP packets to DSP decapsulator 2708, which decapsulates the DSP packets. FEC decoder 2710 determines whether the decapsulated DSP packets contain any errors or are missing any data. If there are any errors, and/or there is any missing data, FEC decoder 2710 uses RS data to fix the errors and/or missing data. GSE decapsulator 2712 then forwards IP datagrams to a terminal.
The error correaction code described within the examples discussed above is Reed Solomon (RS), but, as will be apparent, any other suitable code could also be used, such as Low-Density Parity-Check (LDPC) code.
One or more aspects of the invention may be embodied in computer-executable instructions, such as in one or more program modules, executed by one or more computers or other devices. Generally, program modules include routines, programs, objects, components, data structures, etc. that perform particular tasks or implement particular abstract data types when executed by a processor in a computer or other device. The computer executable instructions may be stored on a computer readable medium such as a hard disk, optical disk, removable storage media, solid state memory, RAM, etc. As will be appreciated by one of skill in the art, the functionality of the program modules may be combined or distributed as desired in various embodiments. In addition, the functionality may be embodied in whole or in part in firmware or hardware equivalents such as integrated circuits, field programmable gate arrays (FPGA), application specific integrated circuits (ASIC) and the like.
Embodiments of the invention include any novel feature or combination of features disclosed herein either explicitly or any generalization thereof. While embodiments of the invention have been described with respect to specific examples including presently preferred modes of carrying out the invention, those skilled in the art will appreciate that there are numerous variations and permutations of the above described systems and techniques. Thus, the spirit and scope of the invention should be construed broadly as set forth in the appended claims.