(19)
(11)EP 3 516 479 B1

(12)EUROPEAN PATENT SPECIFICATION

(45)Mention of the grant of the patent:
11.08.2021 Bulletin 2021/32

(21)Application number: 16778225.9

(22)Date of filing:  19.09.2016
(51)International Patent Classification (IPC): 
G06F 3/01(2006.01)
(86)International application number:
PCT/EP2016/072137
(87)International publication number:
WO 2018/050249 (22.03.2018 Gazette  2018/12)

(54)

ENCODING AND DECODING MULTICHANNEL HAPTIC DATA BY DETERMINING AN ORDER OF A PLURALITY OF CHANNELS

CODIERUNG UND DECODIERUNG VON HAPTISCHEN MEHRKANAL-DATEN DURCH BESTIMMUNG EINER REIHENFOLGE VON EINER VIELZAHL VON KANÄLEN

CODAGE ET DÉCODAGE DE DONNÉES HAPTIQUES MULTICANAUX EN DÉTERMINANT L'ORDRE D'UNE PLURALITÉ DE CANAUX


(84)Designated Contracting States:
AL AT BE BG CH CY CZ DE DK EE ES FI FR GB GR HR HU IE IS IT LI LT LU LV MC MK MT NL NO PL PT RO RS SE SI SK SM TR

(43)Date of publication of application:
31.07.2019 Bulletin 2019/31

(73)Proprietor: Telefonaktiebolaget LM Ericsson (PUBL)
164 83 Stockholm (SE)

(72)Inventors:
  • GRANCHAROV, Volodya
    164 80 Stockholm (SE)
  • ANDERSSON, Lars
    164 80 Stockholm (SE)
  • ARAÚJO, José
    164 80 Stockholm (SE)

(74)Representative: Zacco Sweden AB 
Valhallavägen 117 Box 5581
114 85 Stockholm
114 85 Stockholm (SE)


(56)References cited: : 
WO-A1-95/20788
US-A1- 2009 122 006
US-A1- 2003 058 216
  
      
    Note: Within nine months from the publication of the mention of the grant of the European patent, any person may give notice to the European Patent Office of opposition to the European patent granted. Notice of opposition shall be filed in a written reasoned statement. It shall not be deemed to have been filed until the opposition fee has been paid. (Art. 99(1) European Patent Convention).


    Description

    TECHNICAL FIELD



    [0001] The invention relates to methods, encoders, decoders, computer programs, and computer program products relating to encoding and decoding haptic data for a plurality of channels.

    BACKGROUND



    [0002] Haptic internet is seen as the next step on mobile networking. Users are currently able to efficiently communicate over voice and video, but in the future networked society, it is envisioned that people will be able to communicate the sense of touch via haptic devices. There has been a large amount of research on devices, which allow such communication to take place. Several haptic interfaces are now appearing in the market, which deliver haptic feedback using different actuation technologies such as ultrasound, vibrotactile, electrostatic and piezoelectric.

    [0003] Haptic perception consists of both kinesthetic and tactile sense and relates to the sensation of the size, shape, mass, texture and stiffness of physical objects, surfaces, etc. Kinesthetic information refers to the information perceived when moving joints, muscles and tendons, while tactile information refers to information retrieved via the skin. In a haptic system, the amount of data representing all the sensors quickly becomes large.
    Hence, data compression is needed to keep the data transfer requirements at a reasonable level. However, the data compression and decompression can introduce delays. Since any delay can seriously reduce the experience of the user, any compression and decompression which is used should be designed such that the amount of delay which is introduced is as small as possible.

    [0004] R. Chaudhariu, C. Schuwerk, M. Danaei, and E. Steinbach, "Perceptual and Bitrate-scalable Coding of Haptic Surface Texture Signals," IEEE J. Selected Topics in Signal Processing, vol. 9, no. 3, pp. 462-473, 2015, discloses a bitrate scalable haptic texture codec, which incorporates a masking model based on weaker signals close in frequency to a powerful signal being masked.

    [0005] Document US 2003/0058216 A1 discloses computer program products, methods, and systems that allow low-bandwidth communication links to proceed at a level similar to a high-bandwidth communication by filtering data that the filter deems contains substantially identical haptic feedback parameters as a previously transmitted data. Document WO 95/20788 A1 discloses an intelligent multimode sense and display system utilizing haptic information compression. Document US 2009/0122006 A1 discloses a protocol and architecture for a low bandwidth force feedback controller.

    SUMMARY



    [0006] It is an object to further reduce bitrate requirements for haptic data. Different aspects of the invention and preferred embodiments thereof are set out in the appended claims.

    [0007] Generally, all terms used in the claims are to be interpreted according to their ordinary meaning in the technical field, unless explicitly defined otherwise herein. All references to "a/an/the element, apparatus, component, means, step, etc." are to be interpreted openly as referring to at least one instance of the element, apparatus, component, means, step, etc., unless explicitly stated otherwise. The steps of any method disclosed herein do not have to be performed in the exact order disclosed, unless explicitly stated.

    BRIEF DESCRIPTION OF THE DRAWINGS



    [0008] The invention is now described, by way of example, with reference to the accompanying drawings, in which:

    Fig 1 is a schematic diagram illustrating an environment in which embodiments presented herein can be applied;

    Fig 2 is a schematic diagram illustrating details of the encoder and decoder of Fig 1 according to one embodiment;

    Figs 3A-B are flow charts illustrating embodiments of methods for encoding haptic data for a plurality of channels performed in an encoder;

    Figs 4A-B are flow charts illustrating embodiments of methods for decoding haptic data for a plurality of channels performed in a decoder;

    Fig 5 is a schematic diagram illustrating components of the encoder and decoder of Fig 1, according to one embodiment;

    Fig 6 is a schematic diagram showing functional modules of the encoder of Fig 1 according to one embodiment;

    Fig 7 is a schematic diagram showing functional modules of the decoder of Fig 1 according to one embodiment; and

    Fig 8 shows one example of a computer program product comprising computer readable means.


    DETAILED DESCRIPTION



    [0009] The invention will now be described more fully hereinafter with reference to the accompanying drawings, in which certain embodiments of the invention are shown. This invention may, however, be embodied in many different forms and should not be construed as limited to the embodiments set forth herein; rather, these embodiments are provided by way of example so that this disclosure will be thorough and complete, and will fully convey the scope of the invention to those skilled in the art. Like numbers refer to like elements throughout the description.

    [0010] Fig 1 is a schematic diagram illustrating an environment in which embodiments presented herein can be applied. A user 9 is here connected to interact with a remote device 6. The remote device 6 comprises a number of sensors 5. Although not shown, the remote device 6 also comprises one or more actuators which can be controlled by the user 9. The sensors 5 generate data which is input to an encoder 1. Since there are multiple sensors 5, the data input to the encoder 1 is multichannel data, where each channel is associated with a separate set of one or more sensors.

    [0011] The encoder 1 compresses the multichannel data to encoded data 4 and outputs the data for transmission to a decoder 2. The transmission can occur using any communication technology known in the art per se, e.g. over a Local Area Network (LAN), such as Ethernet and/or using a Wide Area Network (WAN), e.g. using Internet Protocol (IP). In any case, the encoded data 4 is received by the decoder 2, which decompresses the encoded data 4 to signals which are suitable for provision to actuators 10 of a user device 8. It is to be noted that the term 'remote' in this context does not need to be far away. 'Remote' only implies that there is communication between the user device 8 and the remote device 6.

    [0012] Hence, the actuators 10 of the user device 8 provide haptic sensations reflecting what is detected by the sensors 5. This allows a user 9 of the user device 8 to haptically experience a physical environment which can be located remotely, which can be in another room or in another country from the user 9.

    [0013] Optionally, the equivalent communication occurs in the other direction from the master (the user device 8) to the slave (the remote device 6). In other words, there is may also be an encoder 1 by the user device 8 and a decoder 2 by the remote device 6, to thereby communicate haptic data from sensors (not shown) in the user device 8 to control actuators (not shown) in the remote device 6.

    [0014] While the user device 8 is here shown as a glove where the user can insert a hand in the user device 8, the user device 8 can be provided in any suitable way that allows haptic perception for the user 9. For instance, the user device 8 could be an exoskeleton, etc. In any case, the remote device 6 provides sensors in a way that makes sense in terms of the physical appearance of the user device 8.

    [0015] To illustrate the requirements for such a multichannel system, one can consider a teleoperation scenario where an operator uses an exoskeleton (master device), which is capable of providing both tactile and kinesthetic feedback to his/her hands and his/her forearm and upper arms, to control a slave device (e.g. a robot).

    [0016] In order to perform the teleoperation, the measured values (e.g. position, acceleration, and/force force) at the master are communicated to the control unit at the slave side, while the measured values at the slave side are communicated to the control unit at the master side. With such a setup, the operator is able to perform the precise control of the robotic arms, while he/she is also provided with tactile feedback.

    [0017] This setup possesses three data channels (position, acceleration and force) per sensor measurement per location. As a possible implementation, one may consider that there exists one acquisition point for each finger, one for the wrist, and one for the forearm and one for the upper arm, resulting in a total of 13 acquisition points.

    [0018] This would result in a total number of sensors of 39 (133 data channels (position, acceleration and force)), where each sensor has three dimensions, resulting in 117 (1333) data channels. If each data channel requires 32 Kbps (kilobits per second), the total bandwidth needed can be calculated as 32 Kbps 117 = 3.744 Mbps. Hence, it is evident that an efficient compression system is of great benefit to enable this type of haptic application with a reasonable data rate requirement.

    [0019] Teleoperation systems with haptic feedback may become unstable if the closed-loop system experiences latency larger than tens of milliseconds. Additionally, research has shown than for latency above 10 ms, the teleoperation transparency is greatly reduced, affecting both the perception quality as well as the task performance. Hence, the compression system should not introduce further algorithmic delay. This implies that block processing is not allowed, preventing conventional multichannel compression schemes from being applied.

    [0020] Fig 2 is a schematic diagram illustrating details of the encoder and decoder of Fig 1 according to one embodiment. There are here k channels, resulting in k samples x1-xk representing haptic data. The samples x1-xk are received in parallel from the different sensors connected to the encoder. The samples x1-xk are here in digital form, whereby the sensor data has previously been quantized, which can occur prior to the encoder 1 or as part of the encoder 1 (not shown). The encoder 1 comprises a source encoder 13 and a sparse encoder 14. The source encoder 13 encodes, using lossy encoding, the samples x1-xk into an equivalent number of codewords c1-ck. The sparse encoder 14 then converts the codewords c1-ck in a lossless way to an encoded data stream 4 which is communicated to the decoder as explained above with reference to Fig 1.

    [0021] The decoder 2, on its side, comprises a sparse decoder 15 and a source decoder 16. The sparse decoder converts the data stream 4 to the codewords c1-ck, which are the same as the codewords c1-ck in the encoder 1 since the sparse encoder 14 employs a lossless algorithm. It is to be noted that transmission errors between the encoder 1 and decoder 2 are not considered here and are dealt with as known in the art per se. The source decoder 16 then converts the codewords c1-ck to reconstructed sample values y1-yk which can be provided to actuators of the user device 8 to achieve a haptic sensation for the user.

    [0022] The details of how the encoding and decoding is performed will be explained below with reference to Figs 3A-B (for the encoder) and Figs 4A-B (for the decoder).

    [0023] Figs 3A-B are flow charts illustrating embodiments of methods for encoding haptic data for a plurality of channels. Prior to this method, the current codewords have been generated, e.g. by means of a lossy encoding which can occur in the source encoder (13 of Fig 2).

    [0024] In a determine order step 40, an order of the plurality of channels in a first list is determined based on a respective previous codeword data item for each of the plurality of channels. Each previous codeword data item is either a no-change data item indicating no change of channel data, or a change data item indicating a change of channel data. The order in the first list is such that all no-change previous codeword data items are arranged at one end of the first list. The encoder maintains an association between each previous codeword data item and its channel. The no-change codeword data items can be arranged at either end of the first list.

    [0025] The no-change codeword can consist of one or more zeros. However, it is equally possible that the no-change codewords can be represented by any suitable predetermined set of one or more bits which are known to both the encoder and the decoder. In one embodiment, each previous codeword data item is the most recent previous codeword for the channel in question. In one embodiment, each previous codeword data item is derived based on a plurality of previous codewords for the channel in question. For instance, each codeword data item can be based on a sliding window of the last x number of previous codewords for the channel in question. In such an embodiment, the weights of the previous codewords forming part of the sliding window can be identical or weights gradually decrease for older previous codewords.

    [0026] In an arrange current codewords step 46, current codewords are arranged in a second list in accordance with the channel order of the first list. In other words, the current codewords are arranged such that their respective associated channels are in the same order as the channels of the first list.

    [0027] In a group step 47, the current codewords are grouped in consecutive groups based on the order of the current codewords in the second list. Each group contains a plurality of current codewords.

    [0028] In a generate group index step 48, a group index is generated. The group index indicates whether each group contains only no-change codewords or at least one change codeword. In one embodiment, the group index comprises an indicator for each group, each indicator indicating whether the respective group contains only no-change codewords or at least one change codeword indicating a change. In one embodiment, the group index consists of identifiers of those groups which contain at least one change codeword indicating a change. All other groups are then groups containing only no-change codewords. The complement is also possible; the group index then consists of identifiers of those groups which only contain no-change codewords.

    [0029] In an output step 49, the group index is output along with current codewords, wherein current codewords are only output for groups containing at least one change codeword. In other words, no codewords for groups containing only no-change codewords are output. The data that is output is then transmitted to the decoder.

    [0030] Looking now to Fig 3B, only new or modified steps will be described.

    [0031] The determine order step 40 here comprises a number of optional substeps 41-45.

    [0032] In an optional obtain codeword data items step 41, a respective previous codeword data item is obtained for each of the plurality of channels. The previous codeword data item is ordered by channels in a first list. Each previous codeword data item is based on at least one previous codeword for the respective channel.

    [0033] In an optional set first pointer step 42, a first pointer is set on the first previous codeword data item, in the first list, which is a no-change data item.

    [0034] In an optional set second pointer step 43, a second pointer is set on the last previous codeword data item, in the first list, which is a change data item.

    [0035] In an optional conditional first pointer before second pointer step 45, it is determined whether the first pointer is before the second pointer, in the first list. If this is the case, the method proceeds to an optional swap step 44. Otherwise, the method proceeds to the arrange current codewords step 46. In the optional swap step 44, the previous codeword data item pointed to by the first pointer and the previous codeword data item pointed to by the second pointer are swapped. In the swapping, the encoder maintains an association between each previous codeword data item and a channel.

    [0036] Figs 4A-B are flow charts illustrating embodiments of methods for decoding haptic data for a plurality of channels performed in a decoder.

    [0037] In a determine order step 50, an order of the plurality of channels in a first list is determined based on a respective previous codeword data item for each of the plurality of channels. Each previous codeword data item is either a no-change data item indicating no change of channel data, or a change data item indicating a change of channel data. The order of the first list is such that all no-change previous codeword data items are arranged at one end of the first list. In one embodiment, which is outside the scope of the claimed invention, a no-change codeword indicates a difference between samples which is lower than a perceptual threshold. For instance, the no-change codeword can consist of one or more zeros. In one embodiment, each previous codeword data item is the most recent previous codeword for the channel in question. In one embodiment, each previous codeword data item is derived based on a plurality of previous codewords for the channel in question.

    [0038] In a receive data step 56, a group index and current codewords for groups of channels of the plurality of channels are received. In one embodiment, the group index comprises an indicator for each group, each indicator indicating whether the respective group contains only no-change codewords or at least one change codeword indicating a change. In one embodiment, the group index consists of identifiers of those groups which contain at least one change codeword indicating a change. All other groups are then groups containing only no-change codewords. The complement is also possible; the group index then consists of identifiers of those groups which only contain no-change codewords.

    [0039] In a generate no change data items step 57, no-change codewords are generated for channels in any group of channels indicated by the group index to contain only no-change codewords.

    [0040] In a combine step 58, the generated codewords are combined with the received codewords, yielding current codewords.

    [0041] In an arrange current codewords step 59, the current codewords are arranged in a second list in accordance with the channel order of the first list.

    [0042] In a reorder step 60, the second list is reordered by channels.

    [0043] In an output step 61, the reordered second list is output.

    [0044] Looking now to Fig 4B, only new or modified steps will be described.

    [0045] The determine order step 50 here comprises a number of optional substeps 51-55, corresponding to steps 41-45 of Fig 3B.

    [0046] In an optional obtain codeword data items step 51, a respective previous codeword data item is obtained for each of the plurality of channels. The previous codeword data item is ordered by channels in a first list. Each previous codeword data item is based on at least one previous codeword for the respective channel.

    [0047] In an optional set first pointer step 52, a first pointer is set on the first previous codeword data item, in the first list, which is a no-change data item. In an optional set second pointer step 53, a second pointer is set on the last previous codeword data item, in the first list, which is a change data item. In an optional conditional first pointer before second pointer step 55, it is determined whether the first pointer is before the second pointer in the first list. If this is the case, the method proceeds to an optional swap step 54. Otherwise, the method proceeds to the receive data step 56.

    [0048] In the optional swap step 54, the previous codeword data item pointed to by the first pointer and the previous codeword data item pointed to by the second pointer are swapped. In the swapping, the decoder maintains an association between each previous codeword data item and a channel.

    [0049] Using the methods of Figs 3A-B and Figs 4A-B, the encoding and decoding can occur without introducing any significant delay, which would be the case e.g. if block processing is utilised.

    [0050] The presented embodiment reduces the size of the bitstream by more efficient bit packetization. The embodiments can operate directly on input haptic data, or on the output of a source coding (lossy compression) scheme, which would then operate as a pre-processor to the presented scheme.

    [0051] The re-ordering of channels in these embodiments is built on the observation from statistics that haptic data (sampled at 1kHz) do not vary rapidly, and therefore optimal re-shuffling derived from the last encoded sample vector could be applied to the current input.

    [0052] The compression system is mostly efficient when a significant number of sensors are inactive or the amplitude change from sample to sample is below the perceptual threshold. This is a typical situation in haptic devices.

    [0053] An embodiment of encoding and decoding, employed by the methods of Figs 3A-B and Figs 4A-B, will now be described using a few examples.

    [0054] In these examples, the codewords discussed below only assumes the values 1 or o. In reality, the codewords could be the output of n-bit quantizer, where in such case, we assume that 1 is assigned to all codewords that contain at least one non-zero bit, while 0 is assigned to codewords that contain all-zero bits. As an example in 2-bit quantization, {00}->0, while {01, 10, 11}->1. Now a first example will be described where the reordering does not occur. This will later be compared with a second example where reordering does occur, thereby illustrating the benefits of the reordering.

    [0055] In the first example, at a time instance t, the sparse encoder (14 of Fig 2) of the encoder receives a set of k codewords, c1,...,ck, which correspond to quantization levels of k channels, and groups them into k/N groups with N codewords in each group. For each group, an indicator is calculated, which indicates whether the group has any change codewords. These indicators together form the group index which is sent to the decoder, together with the codewords for groups that have at least one change codeword.

    [0056] In this example, the current codewords provided to the encoder comprises k=12 codewords and each group contains N=3 channels, shown in (1)

    where commas define group boundaries. According to the description above the sparse encoder will generate a bitstream shown in (2)

    where the first four bits, in bold, is the group index (one indicator per group). The third group in the input bitstream (1) contains only zeros, indicating no change, and is therefore omitted from the output of the encoder. This will be detected by the decoder and the decoder can reconstruct the original bitstream by generating no-change codewords where the group index indicates a complete no-change group, in this case for the third group only.

    [0057] However, as illustrated here, the input bitstream (1) consists of twelve bits, while the output bitstream (2) consists of thirteen bits. In other words, instead of compression, the encoder actually increases the number of bits required by encoding the data.

    [0058] This leads to the second example, in accordance with embodiments herein, where reordering is performed to overcome this problem. In this way, a more efficient grouping of codewords is achieved, which leads to more efficient compression, since more groups contain only no-change codewords.

    [0059] In the second example, we assume that the codewords in (1) is the most recent previous set of codewords. Here, for each channel, the previous codeword data item is the most recent previous codeword. As shown below, the most recent previous set of codewords is used in step 40 to determine the order of channels. In this example, the algorithm of Fig 3B is employed.

    [0060] In step 41, the previous codeword data items are obtained, in this case the codewords in (1).

    [0061] In step 42, the first pointer P1 is set on the first previous codeword, in the first list, which is a no-change data item. In this example, P1 is set on channel 1.

    [0062] In step 43, a second pointer P2 is set on the last previous codeword data item, in the first list, which is a change data item. In this example, P2 is set on channel 12.

    [0063] At this point, the state in the encoder is reflected in Table 1.
    Table 1: Original encoder state
    ChPrv cwP:s
    1 0 <-P1
    2 1  
    3 0  
    4 0  
    5 1  
    6 0  
    7 0  
    8 0  
    9 0  
    10 0  
    11 0  
    12 1 <-P2
    Ch denoted the channel number, Prv cw denotes the previous codeword and
    P:s show the pointers.


    [0064] Since P1 is before P2 (step 45), a swap (step 44) is performed. Hence, channel 1 and channel 12 are swapped (including the Prv cw). Setting the pointers again (steps 42 and 43) results in an encoder state according to Table 2.
    Table 2: Encoder state after one iteration
    ChPrv cwP:s
    12 1  
    2 1  
    3 0 <-P1
    4 0  
    5 1 <-P2
    6 0  
    7 0  
    8 0  
    9 0  
    10 0  
    11 0  
    1 0  


    [0065] Since P1 is still before P2 (step 45), a swap (step 44) is performed again. Hence, channel 3 and channel 5 are swapped (including the Prv cw). Setting the pointers again (steps 42 and 43) results in an encoder state according to Table 3.
    Table 3: Encoder state after two iterations
    ChPrv cwP:s
    12 1  
    2 1  
    5 1 <-P2
    4 0 <-P1
    3 0  
    6 0  
    7 0  
    8 0  
    9 0  
    10 0  
    11 0  
    1 0  


    [0066] Since P1 is now after P2 (step 45), the current codewords can be added. In this example, the current codewords are represented by the following set of codewords:



    [0067] The current codewords are almost the same as the previous codeword; only channel 9 has changed from a '0' to a '1'. The current codewords are thus added (step 46) at the correct lines (based on channel number). Moreover, the grouping (step 47) is done, which then results in an encoder state as shown in Table 4:
    Table 4: Encoder state with current codewords and grouping
    ChCurr. CwPrv cwGroup
    12 1 1 I
    2 1 1 I
    5 1 1 I
    4 0 0 II
    3 0 0 II
    6 0 0 II
    7 0 0 III
    8 0 0 III
    9 1 0 III
    10 0 0 IV
    11 0 0 IV
    1 0 0 IV
    where Curr. cw denotes the current codeword. Hence, resulting set of data in the groups is represented by (4), i.e. the current codewords in the order of Table 4:



    [0068] Note that the current codeword differs from the previous codeword for channel 9.

    [0069] In step 48, the group index is generated, which becomes {1010}. The resulting encoded data which is output (step 49) is then shown in (5):



    [0070] Hence, there is a data reduction from twelve bits in (3) to ten bits in (5). Note that if there had been no data change in channel 9, the encoding would have been even more efficient since then the codewords of group III could also have been omitted..

    [0071] In the decoder, steps 51-55 correspond to steps 41-45. Since the decoder also works on the same previous data items as the encoder, the decoder also works out Table 3.

    [0072] Once the reordering is determined, the data (5) is received from the encoder (step 56). The no-change codewords are then generated in step 57, and combined in step 58 with the received data, resulting in the data of (4). Note that the steps 56, 57 and 58 could also be performed prior to, or in parallel with, the reordering of steps 51-55.

    [0073] The combined codewords are arranged in step 59 in accordance with the reordered channels (based on Table 3). Hence, the decoder is then in a state according to Table 5:
    Table 5: Decoder state based on reordering
    ChCurr. cw
    12 1
    2 1
    5 1
    4 0
    3 0
    6 0
    7 0
    8 0
    9 1
    10 0
    11 0
    1 0


    [0074] This table is then sorted according to channel number in the reorder step 60. This results in the decoder state according to Table 6.
    Table 6: End state at the decoder
    ChCurr. cw
    1 0
    2 1
    3 0
    4 0
    5 1
    6 0
    7 0
    8 0
    9 1
    10 0
    11 0
    12 1


    [0075] The current codewords of Table 6 can be expressed in a more condensed form as (6), which is identical to (3), whereby the decoding is completed.



    [0076] Since the reordering is the same in both the encoder and the decoder, and is based on the same (previous codeword data), the reordering does not need to be explicitly provided from the encoder to the decoder. This allows the encoder to compress signals efficiently while still allowing the decoder to restore the data without any loss.

    [0077] Fig 5 is a schematic diagram illustrating components of the encoder 1 and decoder 2 of Fig 1, according to one embodiment. Each of the encoder 1 and the decoder 2 comprises the components described here. A processor 160 is provided using any combination of one or more of a suitable central processing unit (CPU), multiprocessor, microcontroller, digital signal processor (DSP), application specific integrated circuit etc., capable of executing software instructions 167 stored in a memory 164, which can thus be a computer program product. The processor 160 can be configured to execute the method described with reference to Fig 3 and 4 above for the encoder 1 and the decoder 2, respectively.

    [0078] The memory 164 can be any combination of read and write memory (RAM) and read only memory (ROM). The memory 164 also comprises persistent storage, which, for example, can be any single one or combination of magnetic memory, optical memory, solid state memory or even remotely mounted memory.

    [0079] A data memory 166 is also provided for reading and/or storing data during execution of software instructions in the processor 160, e.g. the current codewords and previous codeword data. The data memory 166 can be any combination of read and write memory (RAM) and read only memory (ROM).

    [0080] The encoder 1/decoder 2 further comprises an I/O interface 162 for communicating with other external entities. Optionally, the I/O interface 162 also includes a user interface.

    [0081] Fig 6 is a schematic diagram showing functional modules of the encoder 1 of Fig 1 according to one embodiment. The modules are implemented using software instructions such as a computer program executing in the encoder 1. Alternatively or additionally, the modules are implemented using hardware, such as any one or more of an ASIC (Application Specific Integrated Circuit), an FPGA (Field Programmable Gate Array), or discrete logical circuits. The modules correspond to the steps in the methods illustrated in Figs 3A-B.

    [0082] An obtainer 70 corresponds to step 41. A pointer setter 71 corresponds to steps 42 and 43. A swapper 72 corresponds to step 44. A pointer determiner 73 corresponds to step 45. A codeword arranger 74 corresponds to step 46. A grouper 75 corresponds to step 47. An index generator 76 corresponds to step 48. An outputter 77 corresponds to step 49. An order determiner 78 corresponds to step 40.

    [0083] Fig 7 is a schematic diagram showing functional modules of the decoder 2 of Fig 1 according to one embodiment. The modules are implemented using software instructions such as a computer program executing in the decoder 2. Alternatively or additionally, the modules are implemented using hardware, such as any one or more of an ASIC (Application Specific Integrated Circuit), an FPGA (Field Programmable Gate Array), or discrete logical circuits. The modules correspond to the steps in the methods illustrated in Figs 4A-B.

    [0084] An obtainer 80 corresponds to step 51. A pointer setter 81 corresponds to steps 52 and 53. A swapper 82 corresponds to step 54. A pointer determiner 83 corresponds to step 55. A receiver 84 corresponds to step 56. A generator 85 corresponds to step 57. A combiner 86 corresponds to step 58. A codeword arranger 87 corresponds to step 59. A reorderer 88 corresponds to step 60. An outputter 89 corresponds to step 61. An order determiner 95 corresponds to step 50.

    [0085] Fig 8 shows one example of a computer program product 90 comprising computer readable means. On this computer readable means a computer program 91 can be stored, which computer program can cause a processor to execute a method according to embodiments described herein. In this example, the computer program product is an optical disc, such as a CD (compact disc) or a DVD (digital versatile disc) or a Blu-Ray disc. As explained above, the computer program product could also be embodied in a memory of a device, such as the computer program product 164 of Fig 5. While the computer program 91 is here schematically shown as a track on the depicted optical disk, the computer program can be stored in any way which is suitable for the computer program product, such as a removable solid state memory, e.g. a Universal Serial Bus (USB) drive.

    [0086] The invention has mainly been described above with reference to a few embodiments. However, as is readily appreciated by a person skilled in the art, other embodiments than the ones disclosed above are equally possible within the scope of the invention, as defined by the appended patent claims.


    Claims

    1. A method for encoding haptic data for a plurality of channels, the method being performed by an encoder (1) and being characterised by comprising the steps of:

    determining (40) an order of the plurality of channels in a first list based on a respective previous codeword data item for each of the plurality of channels, each previous codeword data item being either a no-change data item indicating no change of channel data, or a change data item indicating a change of channel data, wherein the order is such that all no-change previous codeword data items are arranged at one end of the first list;

    arranging (46) current codewords in a second list in accordance with the channel order of the first list;

    grouping (47) the current codewords in consecutive groups based on the order of the current codewords in the second list; wherein each group contains a plurality of current codewords;

    generating (48) a group index indicating whether each group contains only no-change codewords or at least one change codeword; and

    outputting (49) the group index along with current codewords, wherein current codewords are only output for groups containing at least one change codeword.


     
    2. An encoder (1) characterised by comprising:

    means (78) for determining an order of a plurality of channels providing haptic data in a first list based on a respective previous codeword data item for each of the plurality of channels, each previous codeword data item being either a no-change data item indicating no change of channel data, or a change data item indicating a change of channel data, wherein the order is such that all no-change previous codeword data items are arranged at one end of the first list;

    means (74) for arranging current codewords in a second list in accordance with the channel order of the first list;

    means (75) for grouping the current codewords in consecutive groups based on the order of the current codewords in the second list; wherein each group contains a plurality of current codewords;

    means (76) for generating a group index indicating whether each group contains only no-change codewords or at least one change codeword; and

    means (77) for outputting the group index along with current codewords, wherein current codewords are only output for groups containing at least one change codeword.


     
    3. The encoder (1) according to claim 2, wherein the means for determining an order comprises:

    means (70) for obtaining a respective previous codeword data item for each of the plurality of channels, the previous codeword data item being ordered by channels in a first list, each previous codeword data item being based on at least one previous codeword for the respective channel;

    means (71) for setting a first pointer on the first previous codeword data item, in the first list, which is a no-change data item, and for setting a second pointer on the last previous codeword data item, in the first list, which is a change data item;

    means (72) for swapping the previous codeword data item pointed to by the first pointer and the previous codeword data item pointed to by the second pointer, when the first pointer is before the second pointer in the first list, wherein each previous codeword data item keeps a channel reference during the swapping; and

    means (73) for repeating instructions to set a first pointer, set a second pointer and swap until the first pointer is after the second pointer in the first list.


     
    4. The encoder (1) according to claim 2 or 3, wherein the no-change codeword consists of one or more zeros.
     
    5. The encoder (1) according to any one of claims 2-4, wherein the group index comprises an indicator for each group, each indicator indicating whether the respective group contains only no-change data items or at least one change data item.
     
    6. The encoder (1) according to any one of claims 2-5, wherein each previous codeword data item is the most recent previous codeword for the channel in question.
     
    7. The encoder (1) according to any one of claims 2-6, wherein each previous codeword data item is derived based on a plurality of previous codewords for the channel in question.
     
    8. A computer program (167, 91) for encoding haptic data for a plurality of channels, the computer program being characterised by comprising computer program code which, when run on an encoder (1) causes the encoder (1) to perform the method of claim 1.
     
    9. A computer program product (164, 90) comprising a computer program according to claim 8 and a computer readable means on which the computer program is stored.
     
    10. A method for decoding haptic data for a plurality of channels, the method being performed by a decoder (2) and being characterised by comprising the steps of:

    determining (50) an order of the plurality of channels in a first list based on a respective previous codeword data item for each of the plurality of channels, each previous codeword data item being either a no-change data item indicating no change of channel data, or a change data item indicating a change of channel data, wherein the order is such that all no-change previous codeword data items are arranged at one end of the first list;

    receiving (56) a group index and current codewords for groups of channels of the plurality of channels;

    generating (57) no-change codewords for channels in any group of channels indicated by the group index to contain only no-change codewords;

    combining (58) the generated codewords with the received codewords, yielding current codewords;

    arranging (59) the current codewords in a second list in accordance with the channel order of the first list;

    reordering (60) the second list by channels; and

    outputting (61) the reordered second list.


     
    11. Adecoder (2) characterised by comprising:

    means (95) for determining an order of a plurality of channels, for providing haptic data, in a first list based on a respective previous codeword data item for each of the plurality of channels, each previous codeword data item being either a no-change data item indicating no change of channel data, or a change data item indicating a change of channel data, wherein the order is such that all no-change previous codeword data items are arranged at one end of the first list;

    means (84) for receiving a group index and current codewords for groups of channels of the plurality of channels;

    means (85) for generating no-change codewords for channels in any group of channels indicated by the group index to contain only no-change codewords;

    means (86) for combining the generated codewords with the received codewords, yielding current codewords;

    means (87) for arranging the current codewords in a second list in accordance with the channel order of the first list;

    means (88) for reordering the second list by channels; and

    means (89) for outputting the reordered second list.


     
    12. The decoder (2) according to claim 11, wherein the means for determining an order comprises:

    means (80) for obtaining a respective previous codeword data item for each of the plurality of channels, the previous codeword data items being ordered by channels in a first list, each previous codeword data item being based on at least one previous codeword for the respective channel;

    means (81) for setting a first pointer on the first previous codeword data item, in the first list, which is a no-change data item, and for setting a second pointer on the last previous codeword data item, in the first list, which is a change data item;

    means (82) for swapping the previous codeword data item pointed to by the first pointer and the previous codeword data item pointed to by the second pointer, when the first pointer is before the second pointer in the first list, wherein each previous codeword data item keeps a channel reference during the swapping; and

    means (83) for repeating instructions to set a first pointer, set a second pointer and swap until the first pointer is after the second pointer in the first list.


     
    13. The decoder (2) according to claim 11 or 12, wherein the no-change codeword consists of one or more zeros.
     
    14. The decoder (2) according to any one of claims 11 to 13, wherein the group index comprises an indicator for each group, each indicator indicating whether the respective group contains only no-change data items or at least one change data item.
     
    15. The decoder (2) according to any one of claims 11 to 14, wherein each previous codeword data item is the most recent previous codeword for the channel in question.
     
    16. The decoder (2) according to any one of claims 11 to 15, wherein each previous codeword data item is derived based on a plurality of previous codewords for the channel in question.
     
    17. A computer program (167, 91) for decoding haptic data for a plurality of channels, the computer program being characterised by comprising computer program code which, when run on a decoder (2) causes the decoder (2) to:

    determine an order of the plurality of channels in a first list based on a respective previous codeword data item for each of the plurality of channels, each previous codeword data item being either a no-change data item indicating no change of channel data, or a change data item indicating a change of channel data, wherein the order is such that all no-change previous codeword data items are arranged at one end of the first list;

    receive a group index and current codewords for groups of channels of the plurality of channels;

    generate no-change codewords for channels in any group of channels indicated by the group index to contain only no-change codewords;

    combine the generated codewords with the received codewords, yielding current codewords;

    arrange the current codewords in a second list in accordance with the channel order of the first list;

    reorder the second list by channels; and

    output the reordered second list.


     
    18. A computer program product (164, 90) comprising a computer program according to claim 17 and a computer readable means on which the computer program is stored.
     


    Ansprüche

    1. Verfahren zum Codieren haptischer Daten für eine Vielzahl von Kanälen, wobei das Verfahren von einem Codierer (1) durchgeführt wird und dadurch gekennzeichnet ist, dass es folgende Schritte umfasst:

    Bestimmen (40) einer Reihenfolge der Vielzahl von Kanälen in einer ersten Liste basierend auf einem jeweiligen vorherigen Codewort-Datenelement für jeden der Vielzahl von Kanälen, wobei jedes vorherige Codewort-Datenelement entweder ein Nicht-Änderungsdatenelement ist, das keine Änderung von Kanaldaten anzeigt, oder ein Änderungsdatenelement ist, das eine Änderung von Kanaldaten anzeigt, wobei die Reihenfolge so beschaffen ist, dass alle vorherigen Nicht-Änderungs-Codewort-Datenelemente an einem Ende der ersten Liste angeordnet sind;

    Anordnen (46) aktueller Codewörter in einer zweiten Liste gemäß der Kanalreihenfolge der ersten Liste;

    Gruppieren (47) der aktuellen Codewörter in aufeinanderfolgende Gruppen basierend auf der Reihenfolge der aktuellen Codewörter in der zweiten Liste; wobei jede Gruppe eine Vielzahl aktueller Codewörter enthält;

    Erzeugen (48) eines Gruppenindex, der anzeigt, ob jede Gruppe nur Nicht-Änderungs-Codewörter oder mindestens ein Änderungs-Codewort enthält; und

    Ausgeben (49) des Gruppenindex zusammen mit aktuellen Codewörtern, wobei aktuelle Codewörter nur für Gruppen ausgegeben werden, die mindestens ein Änderungs-Codewort enthalten.


     
    2. Codierer (1), der dadurch gekennzeichnet ist, dass er Folgendes umfasst:

    ein Mittel (78) zum Bestimmen einer Reihenfolge einer Vielzahl von Kanälen, die haptische Daten in einer ersten Liste bereitstellen, basierend auf einem jeweiligen vorherigen Codewort-Datenelement für jeden der Vielzahl von Kanälen, wobei jedes vorherige Codewort-Datenelement entweder ein Nicht-Änderungsdatenelement ist, das keine Änderung von Kanaldaten anzeigt, oder ein Änderungsdatenelement ist, das eine Änderung von Kanaldaten anzeigt, wobei die Reihenfolge so beschaffen ist, dass alle vorherigen Nicht-Änderungs-Codewort-Datenelemente an einem Ende der ersten Liste angeordnet sind;

    ein Mittel (74) zum Anordnen der aktuellen Codewörter in einer zweiten Liste gemäß der Kanalreihenfolge der ersten Liste;

    ein Mittel (75) zum Gruppieren der aktuellen Codewörter in aufeinanderfolgende Gruppen basierend auf der Reihenfolge der aktuellen Codewörter in der zweiten Liste; wobei jede Gruppe eine Vielzahl aktueller Codewörter enthält;

    ein Mittel (76) zum Erzeugen eines Gruppenindex, der anzeigt, ob jede Gruppe nur Nicht-Änderungs-Codewörter oder mindestens ein Änderungs-Codewort enthält; und

    ein Mittel (77) zum Ausgeben des Gruppenindex zusammen mit aktuellen Codewörtern, wobei aktuelle Codewörter nur für Gruppen ausgegeben werden, die mindestens ein Änderungs-Codewort enthalten.


     
    3. Codierer (1) nach Anspruch 2, wobei das Mittel zum Bestimmen einer Reihenfolge Folgendes umfasst:

    ein Mittel (70) zum Erhalten eines jeweiligen vorherigen Codewort-Datenelements für jeden der Vielzahl von Kanälen, wobei die vorherigen Codewort-Datenelemente nach Kanälen in einer ersten Liste geordnet sind, wobei jedes vorherige Codewort-Datenelement auf mindestens einem vorherigen Codewort für den jeweiligen Kanal basiert;

    ein Mittel (71) zum Setzen eines ersten Zeigers auf das erste vorherige Codewort-Datenelement in der ersten Liste, das ein Nicht-Änderungsdatenelement ist, und zum Setzen eines zweiten Zeigers auf das letzte vorherige Codewort-Datenelement in der ersten Liste, das ein Änderungsdatenelement ist;

    ein Mittel (72) zum Vertauschen des vorherigen Codewort-Datenelements, auf das der erste Zeiger zeigt, und des vorherigen Codewort-Datenelements, auf das der zweite Zeiger zeigt, wenn der erste Zeiger vor dem zweiten Zeiger in der ersten Liste angeordnet ist, wobei jedes vorherige Codewort-Datenelement eine Kanalreferenz während des Austauschens behält; und

    ein Mittel (73) zum Wiederholen der Befehle, um einen ersten Zeiger zu setzen, zum Setzen eines zweiten Zeigers und zum Wechseln, bis der erste Zeiger hinter dem zweiten Zeiger in der ersten Liste angeordnet ist.


     
    4. Codierer (1) nach Anspruch 2 oder 3, wobei das Nicht-Änderungs-Codewort aus einer oder mehreren Nullen besteht.
     
    5. Codierer (1) nach einem der Ansprüche 2 bis 4, wobei der Gruppenindex für jede Gruppe einen Indikator umfasst, wobei jeder Indikator angibt, ob die jeweilige Gruppe nur Nicht-Änderungsdatenelemente oder mindestens ein Änderungsdatenelement enthält.
     
    6. Codierer (1) nach einem der Ansprüche 2 bis 5, wobei jedes vorherige Codewort-Datenelement das jüngste vorherige Codewort für den fraglichen Kanal ist.
     
    7. Codierer (1) nach einem der Ansprüche 2 bis 6, wobei jedes vorherige Codewort-Datenelement basierend auf einer Vielzahl von vorherigen Codewörtern für den fraglichen Kanal abgeleitet wird.
     
    8. Computerprogramm (167, 91) zum Codieren von haptischen Daten für eine Vielzahl von Kanälen, wobei das Computerprogramm dadurch gekennzeichnet ist, dass es Computerprogrammcode umfasst, der, wenn er auf einem Codierer (1) ausgeführt wird, den Codierer (1) veranlasst, das Verfahren nach Anspruch 1 durchzuführen.
     
    9. Computerprogrammprodukt (164, 90), das ein Computerprogramm nach Anspruch 8 und ein computerlesbares Mittel, auf dem das Computerprogramm gespeichert ist, umfasst.
     
    10. Verfahren zum Decodieren haptischer Daten für eine Vielzahl von Kanälen, wobei das Verfahren von einem Decodierer (2) durchgeführt wird und dadurch gekennzeichnet ist, dass es folgende Schritte umfasst:

    Bestimmen (50) einer Reihenfolge der Vielzahl von Kanälen in einer ersten Liste basierend auf einem jeweiligen vorherigen Codewort-Datenelement für jeden der Vielzahl von Kanälen, wobei jedes vorherige Codewort-Datenelement entweder ein Nicht-Änderungsdatenelement ist, das keine Änderung von Kanaldaten anzeigt, oder ein Änderungsdatenelement ist, das eine Änderung von Kanaldaten anzeigt, wobei die Reihenfolge so beschaffen ist, dass alle vorherigen Nicht-Änderungs-Codewort-Datenelemente an einem Ende der ersten Liste angeordnet sind;

    Empfangen (56) eines Gruppenindex und aktueller Codewörter für Gruppen von Kanälen der Vielzahl von Kanälen;

    Erzeugen (57) von Nicht-Änderungs-Codewörtern für Kanäle in einer beliebigen Gruppe von Kanälen, die durch den Gruppenindex angezeigt werden, um nur Nicht-Änderungs-Codewörter zu enthalten;

    Kombinieren (58) der erzeugten Codewörter mit den empfangenen Codewörtern, wodurch sich aktuelle Codewörter ergeben;

    Anordnen (59) der aktuellen Codewörter in einer zweiten Liste gemäß der Kanalreihenfolge der ersten Liste;

    Umordnen (60) der zweiten Liste nach Kanälen; und

    Ausgeben (61) der umgeordneten zweiten Liste.


     
    11. Decodierer (2), dadurch gekennzeichnet, dass er Folgendes umfasst:

    ein Mittel (95) zum Bestimmen einer Reihenfolge einer Vielzahl von Kanälen zum Bereitstellen von haptischen Daten in einer ersten Liste basierend auf einem jeweiligen vorherigen Codewort-Datenelement für jeden der Vielzahl von Kanälen, wobei jedes vorherige Codewort-Datenelement entweder ein Nicht-Änderungsdatenelement ist, das keine Änderung von Kanaldaten anzeigt, oder ein Änderungsdatenelement ist, das eine Änderung von Kanaldaten anzeigt, wobei die Reihenfolge so beschaffen ist, dass alle vorherigen Nicht-Änderungs-Codewort-Datenelemente an einem Ende der ersten Liste angeordnet sind;

    ein Mittel (84) zum Empfangen eines Gruppenindex und aktueller Codewörter für Gruppen von Kanälen der Vielzahl von Kanälen;

    ein Mittel (85) zum Erzeugen von Nicht-Änderungs-Codewörtern für Kanäle in einer beliebigen Gruppe von Kanälen, die durch den Gruppenindex angezeigt werden, um nur Nicht-Änderungs-Codewörter zu enthalten;

    ein Mittel (86) zum Kombinieren der erzeugten Codewörter mit den empfangenen Codewörtern, wodurch sich aktuelle Codewörter ergeben;

    ein Mittel (87) zum Anordnen der aktuellen Codewörter in einer zweiten Liste gemäß der Kanalreihenfolge der ersten Liste;

    ein Mittel (88) zum Umordnen der zweiten Liste nach Kanälen; und

    ein Mittel (89) zum Ausgeben der umgeordneten zweiten Liste.


     
    12. Decodierer (2) nach Anspruch 11, wobei das Mittel zum Bestimmen einer Reihenfolge Folgendes umfasst:

    ein Mittel (80) zum Erhalten eines jeweiligen vorherigen Codewort-Datenelements für jeden der Vielzahl von Kanälen, wobei die vorherigen Codewort-Datenelemente nach Kanälen in einer ersten Liste geordnet sind, wobei jedes vorherige Codewort-Datenelement auf mindestens einem vorherigen Codewort für den jeweiligen Kanal basiert;

    ein Mittel (81) zum Setzen eines ersten Zeigers auf das erste vorherige Codewort-Datenelement in der ersten Liste, das ein Nicht-Änderungsdatenelement ist, und zum Setzen eines zweiten Zeigers auf das letzte vorherige Codewort-Datenelement in der ersten Liste, das ein Änderungsdatenelement ist;

    ein Mittel (82) zum Vertauschen des vorherigen Codewort-Datenelements, auf das der erste Zeiger zeigt, und des vorherigen Codewort-Datenelements, auf das der zweite Zeiger zeigt, wenn der erste Zeiger vor dem zweiten Zeiger in der ersten Liste angeordnet ist, wobei jedes vorherige Codewort-Datenelement eine Kanalreferenz während des Austauschens behält; und

    ein Mittel (83) zum Wiederholen der Befehle, um einen ersten Zeiger zu setzen, zum Setzen eines zweiten Zeigers und zum Wechseln, bis der erste Zeiger hinter dem zweiten Zeiger in der ersten Liste angeordnet ist.


     
    13. Decodierer (2) nach Anspruch 11 oder 12, wobei das Nicht-Änderungs-Codewort aus einer oder mehreren Nullen besteht.
     
    14. Decodierer (2) nach einem der Ansprüche 11 bis 13, wobei der Gruppenindex für jede Gruppe einen Indikator umfasst, wobei jeder Indikator angibt, ob die jeweilige Gruppe nur Nicht-Änderungsdatenelemente oder mindestens ein Änderungsdatenelement enthält.
     
    15. Decodierer (2) nach einem der Ansprüche 11 bis 14, wobei jedes vorherige Codewort-Datenelement das jüngste vorherige Codewort für den fraglichen Kanal ist.
     
    16. Decodierer (2) nach einem der Ansprüche 11 bis 15, wobei jedes vorherige Codewort-Datenelement basierend auf einer Vielzahl von vorherigen Codewörtern für den fraglichen Kanal abgeleitet wird.
     
    17. Computerprogramm (167, 91) zum Decodieren haptischer Daten für eine Vielzahl von Kanälen, wobei das Computerprogramm dadurch gekennzeichnet ist, dass es Computerprogrammcode umfasst, der, wenn er auf einem Decodierer (2) ausgeführt wird, den Decodierer (2) zu Folgendem veranlasst:

    Bestimmen einer Reihenfolge der Vielzahl von Kanälen in einer ersten Liste basierend auf einem jeweiligen vorherigen Codewort-Datenelement für jeden der Vielzahl von Kanälen, wobei jedes vorherige Codewort-Datenelement entweder ein Nicht-Änderungsdatenelement ist, das keine Änderung von Kanaldaten anzeigt, oder ein Änderungsdatenelement ist, das eine Änderung von Kanaldaten anzeigt, wobei die Reihenfolge so beschaffen ist, dass alle vorherigen Nicht-Änderungs-Codewort-Datenelemente an einem Ende der ersten Liste angeordnet sind;

    Empfangen eines Gruppenindex und aktueller Codewörter für Gruppen von Kanälen der Vielzahl von Kanälen;

    Erzeugen von Nicht-Anderungs-Codewörtern für Kanäle in einer beliebigen Gruppe von Kanälen, die durch den Gruppenindex angezeigt werden, um nur Nicht-Änderungs-Codewörter zu enthalten;

    Kombinieren der erzeugten Codewörter mit den empfangenen Codewörtern, wodurch sich aktuelle Codewörter ergeben;

    Anordnen der aktuellen Codewörter in einer zweiten Liste gemäß der Kanalreihenfolge der ersten Liste;

    Umordnen der zweiten Liste nach Kanälen; und

    Ausgeben der umgeordneten zweiten Liste.


     
    18. Computerprogrammprodukt (164, 90), das ein Computerprogramm nach Anspruch 17 und ein computerlesbares Mittel, auf dem das Computerprogramm gespeichert ist, umfasst.
     


    Revendications

    1. Procédé d'encodage de données haptiques pour une pluralité de canaux, le procédé étant réalisé par un encodeur (1) et étant caractérisé en ce qu'il comprend les étapes consistant à :

    déterminer (40) un ordre de la pluralité de canaux dans une première liste sur la base d'un élément de données de mot de code précédent respectif pour chacun de la pluralité de canaux,

    chaque élément de données de mot de code précédent étant soit un élément de données d'absence de changement indiquant une absence de changement de données de canal, soit un élément de données de changement indiquant un changement de données de canal, dans lequel l'ordre est tel que tous les éléments de données de mot de code d'absence de changement sont agencés à une extrémité de la première liste ;

    agencer (46) des mots de code actuels dans une deuxième liste en conformité avec l'ordre de canaux de la première liste ;

    regrouper (47) les mots de code actuels en groupes consécutifs sur la base de l'ordre des mots de code actuels dans la deuxième liste ; dans lequel chaque groupe contient une pluralité de mots de code actuels ;

    générer (48) un index de groupe indiquant si chaque groupe contient uniquement des mots de code d'absence de changement ou au moins un mot de code de changement ; et

    fournir en sortie (49) l'index de groupe avec des mots de code actuels, dans lequel des mots de code actuels sont uniquement fournis en sortie pour des groupes contenant au moins un mot de code de changement.


     
    2. Encodeur (1) caractérisé en que qu'il comprend :

    des moyens (78) pour déterminer un ordre d'une pluralité de canaux fournissant des données haptiques dans une première liste sur la base d'un élément de données de mot de code précédent respectif pour chacun de la pluralité de canaux, chaque élément de données de mot de code précédent étant soit un élément de données d'absence de changement indiquant une absence de changement de données de canal, soit un élément de données de changement indiquant un changement de données de canal, dans lequel l'ordre est tel que tous les éléments de données de mot de code d'absence de changement sont agencés à une extrémité de la première liste ;

    un moyen (74) pour agencer des mots de code actuels dans une deuxième liste en conformité avec l'ordre de canaux de la première liste ;

    un moyen (75) pour regrouper les mots de code actuels en groupes consécutifs sur la base de l'ordre des mots de code actuels dans la deuxième liste ; dans lequel chaque groupe contient une pluralité de mots de code actuels ;

    un moyen (76) pour générer un index de groupe indiquant si chaque groupe contient uniquement des mots de code d'absence de changement ou au moins un mot de code de changement ; et

    un moyen (77) pour fournir en sortie l'index de groupe avec des mots de code actuels, dans lequel des mots de code actuels sont uniquement fournis en sortie pour des groupes contenant au moins un mot de code de changement.


     
    3. Encodeur (1) selon la revendication 2, dans lequel le moyen pour déterminer un ordre comprend :

    un moyen (70) pour obtenir un élément de données de mot de code précédent respectif pour chacun de la pluralité de canaux, les éléments de données de mot de code précédents étant ordonnés par des canaux dans une première liste, l'élément de données de mot de code précédent étant basé sur au moins un mot de code précédent pour le canal respectif ;

    un moyen (71) pour régler un premier pointeur sur le premier élément de données de mot de code précédent, dans la première liste, qui est un élément de données d'absence de changement, et pour régler un deuxième pointeur sur le dernier élément de données de mot de code précédent, dans la première liste, qui est un élément de données de changement ;

    un moyen (72) pour échanger l'élément de données de mot de code précédent pointé par le premier pointeur et l'élément de données de mot de code précédent pointé par le deuxième pointeur, lorsque le premier pointeur est avant le deuxième pointeur dans la première liste, dans lequel chaque élément de données de mot de code précédent conserve une référence de canal pendant l'échange ; et

    un moyen (73) pour répéter des instructions afin de régler un premier pointeur, régler un deuxième pointeur et échanger jusqu'à ce que le premier pointeur soit après le deuxième pointeur dans la première liste.


     
    4. Encodeur (1) selon la revendication 2 ou 3, dans lequel le mot de code d'absence de changement est constitué d'au moins un zéro.
     
    5. Encodeur (1) selon l'une quelconque des revendications 2 à 4, dans lequel l'index de groupe comprend un indicateur pour chaque groupe, chaque indicateur indiquant si le groupe respectif contient uniquement des éléments de données d'absence de changement ou au moins un élément de données de changement.
     
    6. Encodeur (1) selon l'une quelconque des revendications 2 à 5, dans lequel chaque élément de données de mot de code précédent est le mot de code précédent le plus récent pour le canal en question.
     
    7. Encodeur (1) selon l'une quelconque des revendications 2 à 6, dans lequel chaque élément de données de mot de code précédent est dérivé sur la base d'une pluralité de mots de code précédents pour le canal en question.
     
    8. Programme informatique (167, 91) pour encoder des données haptiques pour une pluralité de canaux, le programme informatique étant caractérisé en ce qu'il comprend un code de programme informatique qui, lorsqu'il est exécuté sur un encodeur (1) amène l'encodeur (1) à réaliser le procédé de la revendication 1.
     
    9. Produit de programme informatique (164, 90) comprenant un programme informatique selon la revendication 8 et un moyen lisible par ordinateur sur lequel le programme informatique est stocké.
     
    10. Procédé de décodage de données haptiques pour une pluralité de canaux, le procédé étant réalisé par un décodeur (2) et étant caractérisé en ce qu'il comprend les étapes consistant à :

    déterminer (50) un ordre de la pluralité de canaux dans une première liste sur la base d'un élément de données de mot de code précédent respectif pour chacun de la pluralité de canaux, chaque élément de données de mot de code précédent étant soit un élément de données d'absence de changement indiquant une absence de changement de données de canal, soit un élément de données de changement indiquant un changement de données de canal, dans lequel l'ordre est tel que tous les éléments de données de mot de code d'absence de changement sont agencés à une extrémité de la première liste ;

    recevoir (56) un index de groupe et des mots de code actuels pour des groupes de canaux de la pluralité de canaux ;

    générer (57) des mots de code d'absence de changement pour des canaux dans un groupe quelconque de canaux indiqué par l'index de groupe pour contenir uniquement des mots de code d'absence de changement ;

    combiner (58) les mots de code générés avec les mots de code reçus, pour donner des mots de code actuels ;

    agencer (59) les mots de code actuels dans une deuxième liste en conformité avec l'ordre de canaux de la première liste ;

    réordonner (60) la deuxième liste par des canaux ; et

    fournir en sortie (61) la deuxième liste réordonnée.


     
    11. Décodeur (2) caractérisé en ce qu'il comprend :

    un moyen (95) pour déterminer un ordre d'une pluralité de canaux, afin de fournir des données haptiques, dans une première liste sur la base d'un élément de données de mot de code précédent respectif pour chacun de la pluralité de canaux, chaque élément de données de mot de code précédent étant soit un élément de données d'absence de changement indiquant une absence de changement de données de canal, soit un élément de données de changement indiquant un changement de données de canal, dans lequel l'ordre est tel que tous les éléments de données de mot de code d'absence de changement sont agencés à une extrémité de la première liste ;

    un moyen (84) pour recevoir un index de groupe et des mots de code actuels pour des groupes de canaux de la pluralité de canaux ;

    un moyen (85) pour générer des mots de code d'absence de changement pour des canaux dans un groupe quelconque de canaux indiqué par l'index de groupe pour contenir uniquement des mots de code d'absence de changement ;

    un moyen (86) pour combiner les mots de code générés avec les mots de code reçus, pour donner des mots de code actuels ;

    un moyen (87) pour agencer les mots de code actuels dans une deuxième liste en conformité avec l'ordre de canaux de la première liste ;

    un moyen (88) pour réordonner la deuxième liste par des canaux ; et

    un moyen (89) pour fournir en sortie la deuxième liste réordonnée.


     
    12. Décodeur (2) selon la revendication 11, dans lequel le moyen pour déterminer un ordre comprend :

    un moyen (80) pour obtenir un élément de données de mot de code précédent respectif pour chacun de la pluralité de canaux, les éléments de données de mot de code précédents étant ordonnés par des canaux dans une première liste, chaque élément de données de mot de code précédent étant basé sur au moins un mot de code précédent pour le canal respectif ;

    un moyen (81) pour régler un premier pointeur sur le premier élément de données de mot de code précédent, dans la première liste, qui est un élément de données d'absence de changement,

    et pour régler un deuxième pointeur sur le dernier élément de données de mot de code précédent, dans la première liste, qui est un élément de données de changement ;

    un moyen (82) pour échanger l'élément de données de mot de code précédent pointé par le premier pointeur et l'élément de données de mot de code précédent pointé par le deuxième pointeur, lorsque le premier pointeur est avant le deuxième pointeur dans la première liste, dans lequel chaque élément de données de mot de code précédent conserve une référence de canal pendant l'échange ; et

    un moyen (83) pour répéter des instructions afin de régler un premier pointeur, régler un deuxième pointeur et échanger jusqu'à ce que le premier pointeur soit après le deuxième pointeur dans la première liste.


     
    13. Décodeur (2) selon la revendication 11 ou 12, dans lequel le mot de code d'absence de changement est constitué d'au moins un zéro.
     
    14. Décodeur (2) selon l'une quelconque des revendications 11 à 13, dans lequel l'index de groupe comprend un indicateur pour chaque groupe, chaque indicateur indiquant si le groupe respectif contient uniquement des éléments de données d'absence de changement ou au moins un élément de données de changement.
     
    15. Décodeur (2) selon l'une quelconque des revendications 11 à 14, dans lequel chaque élément de données de mot de code précédent est le mot de code précédent le plus récent pour le canal en question.
     
    16. Décodeur (2) selon l'une quelconque des revendications 11 à 15, dans lequel chaque élément de données de mot de code précédent est dérivé sur la base d'une pluralité de mots de code précédents pour le canal en question.
     
    17. Programme informatique (167, 91) pour décoder des données haptiques pour une pluralité de canaux, le programme informatique étant caractérisé en ce qu'il comprend un code de programme informatique qui, lorsqu'il est exécuté sur un décodeur (2) amène le décodeur (2) à :

    déterminer un ordre de la pluralité de canaux dans une première liste sur la base d'un élément de données de mot de code précédent respectif pour chacun de la pluralité de canaux, chaque élément de données de mot de code précédent étant soit un élément de données d'absence de changement indiquant une absence de changement de données de canal, soit un élément de données de changement indiquant un changement de données de canal, dans lequel l'ordre est tel que tous les éléments de données de mot de code d'absence de changement sont agencés à une extrémité de la première liste ;

    recevoir un index de groupe et des mots de code actuels pour des groupes de canaux de la pluralité de canaux ;

    générer des mots de code d'absence de changement pour des canaux dans un groupe quelconque de canaux indiqué par l'index de groupe pour contenir uniquement des mots de code d'absence de changement ;

    combiner les mots de code générés avec les mots de code reçus, pour donner des mots de code actuels ;

    agencer les mots de code actuels dans une deuxième liste en conformité avec l'ordre de canaux de la première liste ;

    réordonner la deuxième liste par des canaux ; et

    fournir en sortie la deuxième liste réordonnée.


     
    18. Produit de programme informatique (164, 90) comprenant un programme informatique selon la revendication 17 et un moyen lisible par ordinateur sur lequel le programme informatique est stocké.
     




    Drawing




















    Cited references

    REFERENCES CITED IN THE DESCRIPTION



    This list of references cited by the applicant is for the reader's convenience only. It does not form part of the European patent document. Even though great care has been taken in compiling the references, errors or omissions cannot be excluded and the EPO disclaims all liability in this regard.

    Patent documents cited in the description




    Non-patent literature cited in the description