Abstract:
Computer tool characterised in that it includes:
       a working memory to receive input data,   an auxiliary memory to store several approximation dictionaries,   a reducer arranged for the iterative calculation of the approximation data of the input data, where the successive iterations are of the “matching pursuit” type,   a selector arranged to choose an approximation dictionary in the auxiliary memory based on a selection rule based on at least some of the preceding iterations, in which the reducer calls the selector in each iteration, and uses the dictionary thus selected in the adaptive matching.

Description:
[0001]    The invention concerns the field of sparse representation of a signal by means of a computer. 
       BACKGROUND 
       [0002]    Representations are based on a set of known data, referred to as a dictionary. Sparse representation is achieved by selecting the items from the dictionary that are closest to the content to be compressed, and only transmitting information related to these items. 
         [0003]    Generally, an algorithm of the “matching pursuit” family, (“MP algorithm”) is implemented in order to determine the sparse representation based on the content to be compressed and the dictionary. 
         [0004]    Computer tools implementing this type of scheme are very powerful, as the degree of compaction of the approximation obtained is high, and the matching pursuit algorithms are highly effective. However, it is difficult to obtain a dictionary that performs on data of these varied types, as this necessitates a large dictionary, which entails increased storage and calculation costs. 
         [0005]    Various methods have been developed in order to compensate this disadvantage. One of these methods is the “K-SVD” method. According to this method, a dictionary is optimised based on the number of iterations intended. 
         [0006]    Although this is satisfactory to a certain extent, this method generally remains insufficient. In fact, it provides a dictionary that is optimised on average, but not necessarily for each of the iterations of the MP algorithm. Furthermore, this dictionary is fixed for all iterations, and thus unsuitable if one decides to change the number of iterations. 
       SUMMARY OF THE INVENTION 
       [0007]    It is an object of the present invention to improve this situation. 
         [0008]    The present invention provides a computer tool comprising: 
         [0009]    working memory to receive the input data, 
         [0010]    auxiliary memory to store multiple approximation dictionaries, 
         [0011]    a reducer arranged to calculate iteratively the approximation data of input data, in which the successive iterations are of the MP type, 
         [0012]    a selector arranged to select an approximation dictionary in the auxiliary memory based on a selection rule as a function of at least some of the preceding iterations, 
         [0013]    in which the reducer calls the selector at each iteration, and uses the dictionary thus selected in the matching pursuit. 
         [0014]    The invention further proposes a method for driving approximation dictionaries comprising the steps of: 
         [0015]    selecting a set of training data, 
         [0016]    partitioning the training data set into a selected number of training groups using an algorithm of the K-Means family, 
         [0017]    defining an approximation dictionary comprising an item for each training group according to a selection rule, 
         [0018]    projecting the training data set on the approximation dictionary in order to extract a number of new training data sets, with each new training data set comprising the data corresponding to the difference between the data of the training set and the projection of these data on the approximation dictionary, 
         [0019]    repeating steps b)-e) with each of the new training data sets until a stop condition related to the number of repetitions is met. 
         [0020]    Advantageously, step b comprises the use of an algorithm of the K-Means family using a distance measurement based on the projection, and in which the centroids are chosen based on a breakdown into singular values of each group, and in which step c comprises the selection of the centroids obtained from step b as items. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0021]    Other characteristics and advantages of the invention are better understood from a reading of the following description, based on non-limiting examples from the drawings, in which: 
           [0022]      FIG. 1  shows a method for obtaining a sparse representation according to the invention, 
           [0023]      FIG. 2  shows a computer tool implementing the method of  FIG. 1 , 
           [0024]      FIG. 3  shows a schematic of a dictionary tree for the method of  FIG. 1 , 
           [0025]      FIG. 4  shows an example of a dictionary selection function for the method of  FIG. 1 , adapted to the dictionary tree of  FIG. 3 , 
           [0026]      FIG. 5  shows a generation function for the dictionaries of  FIG. 3 , 
           [0027]      FIG. 6  shows a flowchart for an operation of  FIG. 5 , 
           [0028]      FIG. 7  shows a flowchart for another operation of  FIG. 5 , 
           [0029]      FIGS. 8 and 9  show variants of  FIGS. 5 and 7 , and 
           [0030]      FIGS. 10 and 11  show other variants of  FIGS. 5 and 7 . 
       
    
    
     DETAILED DESCRIPTION 
       [0031]    The drawings and description below essentially contain elements that are determinate in nature. Thus, they not only aid in a better understanding of this invention, but also serve to define it, if necessary. 
         [0032]    By its nature, this description may include elements subject to copyright protection. The holder of the rights has no objection to identical reproduction by any person of this patent or its specification as it appears in the official files. In all other respects, the owner reserves all rights. 
         [0033]      FIG. 1  shows a calculation procedure for a sparse representation according to the invention. 
         [0034]    This method begins with an operation  100  receiving a common element x to be approximated by means of an empty vector, known as a “parsimonious vector”. The element x may be any type of computer data to be encoded. For example, this element may be a picture box within an image or a flow of images to be encoded, or a soundtrack in a musical recording, etc. 
         [0035]    In an operation  102 , an iteration counter i is initialised; in an operation  104 , a residual variable r(i) receives the element x. At each iteration, the residual variable r(i) receives the remainder of the current approximation, and constitutes the approximated element in the subsequent iteration, the classic case of an MP algorithm. 
         [0036]    The sparse representation of x is calculated by means of a loop comprising an increasing operation  106  of the iteration counter, followed by a dictionary selection operation  108  for the current iteration, an approximation vector calculation operation  110 , and an operation  112  testing the condition for ending the loop. 
         [0037]    When the loop has ended, the operation reducing element x ends, and the method terminates in an operation  114  by transmitting the calculated data and the initiation of the reduction of the following element x. 
         [0038]    The operation  108  comprises the calling of a function Cho( ), which receives the iteration counter i as an argument, and responds by sending a dictionary optimised for this iteration, which is stored in a variable DICT(i). 
         [0039]    In the operation  110 , a function MP( ) is called with the remainder of the preceding iteration r(i−1), as well as the dictionary of the current iteration DICT(i). Thus, from iteration to iteration, the element x is approximated according to the classic formula of MP algorithms. 
         [0040]    It will be noted that the function MP( ) can implement any type of algorithm of the MP family. 
         [0041]    The result of the operation  110  is an approximation y(i) and a remainder r(i). The approximation y(i) comprises an identifier of the item of the dictionary DICT(i), which best approximates the remainder of the preceding iteration r(i−1), and its multiplication coefficient. 
         [0042]    The loop termination condition of the operation  112  can be tested by a function Thresh( ). The function Thresh( ) can take into account one or more conditions selected from amongst: 
         [0043]    a maximum number of iterations, i.e., a maximum number for i, 
         [0044]    a measurement of the residual energy in r(i), i.e., the calculation of a standard for the remainder r(i) and comparison with an intended precision threshold. 
         [0045]    The method for seeking the parsimonious vector is of particular interest here because the function Cho( ) allows for adaption of the choice of dictionary to the current iteration. 
         [0046]    This means that it will be possible to be more precise in a comparable number of iterations in relation to the prior art approaches. Furthermore, this also makes the method independent of the number of iterations provided for the search for the parsimonious vector: because a dictionary is specifically selected in each iteration, the total number of iterations is of little importance. 
         [0047]      FIG. 2  shows a simplified schematic of a computer tool implementing the method of  FIG. 1 . 
         [0048]    The computer tool disclosed by the invention comprises a dictionary selector  200  and a vector reducer  202 , as well as a memory  204  to store the dictionaries DICT(i). 
         [0049]    The tool receives elements x in the form of data  206 , and sends sparse representation data  208 . 
         [0050]    The computer tool described here represents an element suitable for incorporation in a computer device that uses sparse representations, e.g., an encoding/decoding, denoising, prediction, or source separation device. As such, it is suited to be a “brick” in the treatment of a broader device. 
         [0051]    Persons skilled in the art will thus recognise that the data  206  and  208  can be stored in a temporary memory of the tool, or in the memory  204 , and that these memories can be those of a device into which the computer tool is integrated. 
         [0052]    On the other hand, persons skilled in the art will also recognise that the selector  200  and the reducer  202  can be implemented separately or together, as software, i.e., in the form of code executed by a general processor of a device into which the computer tool is integrated, or “physically”, i.e., by one or more dedicated processors. 
         [0053]    As will be seen in the following, the dictionaries inside the memory  204  are not stored randomly or generated automatically by the function Cho( ). These dictionaries are intrinsically associated with the iterations of the reducer, as will be seen below. 
         [0054]      FIG. 3  represents an example of architecture for dictionaries implementing the method of  FIG. 1 . 
         [0055]    In this architecture, the dictionaries are organised according to a tree structure. In this tree structure, each level will contain all dictionaries available to the iteration, with the number corresponding to the level within the tree. 
         [0056]    Thus, the first level of the tree comprises a single dictionary that will be used in the first iteration; the second level of the tree comprises a set of dictionaries that will be used for the second iteration, etc. 
         [0057]    Furthermore, in the example described here, each dictionary chosen for an iteration conditions the choice of dictionary in the following iteration. In fact, as well be seen in the description of  FIGS. 5-7 , it is possible to drive dictionaries based on “dictionary paths” taken by the preceding iterations. 
         [0058]      FIG. 4  shows an example of the implementation of the function Cho( ), supported on the tree architecture of  FIG. 3 . 
         [0059]    In an operation  400 , the function Cho( ) recovers the index of the item chosen to approximate the remainder in the preceding iteration. To this end, a function Rnk( ) receives as arguments the approximation y(i−1) determined in the preceding iteration, as well as the dictionary DICT(i−1), which was used for its calculation. 
         [0060]    Once the rank j of the vector y(i−1) in DICT(i−1) has been determined, a single dictionary is designated at the following level. The dictionary chosen DICT(i) is then defined in an operation  402  as the j-th child of the node corresponding to the dictionary DICT(i−1) in the tree. 
         [0061]    Thus, it can now be seen how the architecture of  FIG. 3  structures the choice of dictionary: each time a dictionary is chosen in a given iteration, only its children in the tree can be chosen in the following iteration. 
         [0062]    This allows for implementation of the simple selection function Cho( ). The balance to be struck is that this requires the provision of a tree in which the dictionary paths are optimised. As will be seen below, this condition is not very restrictive, taking into account the methods developed by the applicants. 
         [0063]    As was seen in  FIG. 3 , the first embodiment is based on a dictionary tree optimised based on the path taken in the preceding iterations. 
         [0064]    This optimised dictionary tree can be created by means of a recursive function ITD( ). 
         [0065]    The function ITD( ) is based on a principle of propagation of a set of training vectors used to optimise the dictionaries progressively. At each level, each training set generates various sets of remainders that serve to drive the lower-level dictionaries. 
         [0066]    The function ITD( ) must first be initialised by an operation  500 , in which the first dictionary and the first set of remainders are calculated. 
         [0067]    The operation  500  is carried out by a function Creat( ), which receives as arguments a set of P training vectors y. In the example described here, the training set comprises a multitude of training vectors y, in which the number P of vectors y is much greater than the size provided for each of the dictionaries of the tree. These training vectors are chosen so as to be as varied as possible, in order to offer optimal dictionary construction. 
         [0068]    The training vectors can be taken from a training vector database, or they can also be synthetic, i.e., created to recover an intended vector space as regularly as possible. 
         [0069]    An example of the implementation of the function Creat( ) is shown in  FIG. 6 . As can be seen in that figure, the function Creat( ) starts with an operation  600 , in which the training vectors are stored within a set of remainders RS( 0 ). In an operation  602 , the tool implements a function KM( ) to partition the set of remainders RS( 0 ) into a number N of sets of training remainders R(s). The function KM( ) is a function that implements an algorithm of the K-Means family, starting from the set of residues RS( 0 ) and the number N as arguments. 
         [0070]    For clarity, it will be noted that, in a K-Means algorithm, a set of vectors is partitioned iteratively in the following way:
   a) the vectors are partitioned based on their distance from centroids, with the distance depending on a measurement rule,   b) once the vectors are partitioned, the centroids are recalculated within each partition, according to a centroid selection/calculation rule,   c) the following iteration resumes at a) based on new centroids, until a termination condition related to the number of iterations and/or the development of the centroids has been met.   
 
         [0074]    Thus, it can be seen that, in an algorithm of the K-Means family, the measurement used to calculate the distance between the vectors and the centroids to carry out the partitioning for each iteration and the calculation rule for the centroids prior to each iteration are parameters that define the specific algorithm. 
         [0075]    In the algorithm implemented in the example described here, the measurement used is the projection, and the centroid selection/calculation rule is based on a breakdown of each partition into individual values. 
         [0076]    More precisely, the vectors of one given partition are first assembled side by side in a matrix. This matrix is then broken down into individual values in the form UΣVT, in which the individual values are ordered by descending value in the diagonal of Σ. Then, the matrix U is reduced to its first column U 1  as a centroid for this partition. 
         [0077]    The combination of the projection as a measurement and the breakdown into individual values for the centroids presents numerous advantages described below, in particular, in terms of orthogonality. 
         [0078]    Then, in an operation  604 , the dictionary DICT( 1 ) is calculated by means of a function LSV( ). The function LSV( ) takes as its argument the N sets of training remainders R(s) calculated with operation  602 , reducing them to a dictionary. 
         [0079]    To this end, the function LSV( ) implements a selection rule based on a breakdown of each set of training residues R(s) into individual values. 
         [0080]    This selection rule is very close to the centroid calculation rule of the function KM( ). More precisely, the vectors of a given set of training remainders R(s) are first assembled side by side in a matrix. This matrix is then broken down into individual values in the form UΣV T , in which the individual values are ordered by descending value in the diagonal of Σ. 
         [0081]    The matrix U is then reduced to its first column U 1 , and the set of training remainders R(s) is reduced to this vector U 1 . Lastly, the dictionary DICT( 1 ) is defined as the concatenation of all vectors obtained by reducing the sets of training remainders R(s). 
         [0082]    Once the first dictionary DICT( 1 ) has been calculated, the first set of training remainders RS( 1 ) is calculated in an operation  606 . In order to facilitate the creation of the dictionary tree, a tree is created for the sets of training residues that is included in the dictionary tree, as shown in  FIG. 3 . In one variant, the sets of residues can be stored in a separate tree. 
         [0083]    This is carried out by storing the result of a function Proj( ) in each child RS( 1 ).s of the first node, with the function Proj( ) receiving as arguments the set of training remainders RS( 0 ) and the dictionary DICT( 1 ). 
         [0084]    The function Proj( ) caries out the following operations for each vector of the set of training remainders RS( 0 ): 
         [0085]    it determines the item of the dictionary DICT( 1 ) closest to the vector, and 
         [0086]    it stores the remaining vector corresponding to the difference between the vector upon entry and its projection on that item in the set RS( 1 ).t, where t is the index of the item in the dictionary DICT( 1 ). 
         [0087]    As a result, the nought-level node produces N child training residue sets S( 1 ), taken from the initial training set RS( 0 ). 
         [0088]    Once the first dictionary DICT( 1 ) and the first set of remainders RS( 1 ) have been calculated, the function ITD( ) is called with these elements as arguments in an operation  502 . 
         [0089]      FIG. 7  shows an example of the implementation of this function. The function ITD( ) starts by testing a termination condition in an operation  700 . This termination condition is tested in the example described here by a restricted version of the function Tresh( ) described in  FIG. 1 . 
         [0090]    Here, the only termination condition of the function Thresh( ) is the number of iterations. The purpose of this termination is that, from a mathematical standpoint, each iteration corresponds to one projection of the remainder on a base formed by the items of the dictionary of this iteration. 
         [0091]    If the dictionaries are orthogonal with one another and/or the function of the family MP chosen is orthogonal, the vector is thus projected in relation to a new vector independent of this base. Thus, there can be no more iterations than dimensions in the vector one is seeking to approximate. 
         [0092]    Thus, if d is the dimension of the initial vector, the maximum number of iterations is d. This also has the advantage of ensuring the convergence of the function ITD( ). If the dictionaries are not orthogonal with one another and/or the function of the family MP chosen is not orthogonal, the approximation is considered satisfactory after a desired number of iterations. 
         [0093]    In both cases, it is wise to limit the number of iterations to a fraction of the value d, in order to avoid having too many dictionaries to store. As the dictionaries are optimised, this will not have an excessive effect on the quality of the approximations. 
         [0094]    One the maximum number of iterations has been reached, the function IDT( ) terminates in an operation  702 . In this function, the threshold condition for the remainders is not implemented. Advantageously, the null remainders or those that are less than a threshold are removed from the training remainder sets to which they belong over the course of the operation. 
         [0095]    After the operation  700 , the iteration counter i is increased in an operation  704 . At this point, it is worth describing the context of the execution of the function ITD( ). Following the first iteration, the dictionary tree comprises a dictionary DICT( 1 ), and the remainder tree comprises N set of training remainders taken from the dictionary DICT( 1 ). The tree is thus easily imagined. 
         [0096]    At any level of the dictionary tree, the matter is rather more complex. In the context of the example described here, each dictionary of a level i gives rise to N dictionaries of the level i+1, i.e., a child dictionary per item of the parent dictionary, driven on the sets of remainders of level i corresponding to this item. 
         [0097]    In the general case (taking into account that the counter i has just been increased in  704 ), the function ITD( ) thus first receives a set of training remainders RS(i−1).j, corresponding to the j-th item of a dictionary DICT(i−1).m. 
         [0098]    In an operation  706 , the set of training remainders of the iteration i−1 is partitioned, as was done in operation  602 . Once this has been done, N sets of training residues R(s) are obtained. 
         [0099]    Then, in an operation  708 , the dictionary DICT(i).j, which will result from these N sets of training remainders is initialised as a child of the dictionary DICT(i−1).m. This dictionary is initialised at the j-th rank, as it arises from the item j of the dictionary DICT(i−1).m. The N sets of training remainders RS(i).t are then initialised in an operation  710  as a child of the set of remainders RS(i−1).j. 
         [0100]    The dictionary DICT(i).j is then filled in an operation  712  with the function LSV( ) called with the N sets of training remainders R(s) arising from the operation  706 , similarly to what was done in the operation  604 . 
         [0101]    Once the dictionary DICT(i).j has been filled, the set of remainders RS(i−1).j is exploded into the N sets of remainders RS(i).t with t varying between 1 and N, by means of the function Proj( ) in an operation  714 . 
         [0102]    Lastly, the function ITD( ) is relaunched N times in an operation  716 , having as a pair of arguments the dictionary DICT(i).j on the one hand, and each of the N sets RS(i).t on the other. 
         [0103]    It appears important to note that, in the foregoing, the indices given are not absolute, but relative. Thus, as mentioned above, the initial dictionary is the dictionary DICT(i−1).m, any dictionary from amongst all dictionaries of level i−1. 
         [0104]    The notation DICT(i−1).m indicates the point of entry into the dictionary tree; it is a pointer, and its content in itself does not matter. Corresponding to this dictionary DICT(i−1).m is a set of training remainders arising from a previous iteration RS(i−2).j. This dictionary DICT(i−1).m produces N sets of remainders RS(i−1).t, with t=1 to N. The example described here concerns only one of these sets (the set RS(i−1).j), but, as shown by the operation  716 , the function ITD( ) is called N times with each set of training remainders RS(i).t produced over the course of the current execution of the function ITD( ). 
         [0105]    The result of all these iterations is that the dictionary tree is created recursively, with each dictionary of one level creating N dictionaries in the next. Furthermore, these dictionaries are interconnected within the dictionary tree by design, with their convergence being ensured by the termination condition connected to the iterations. 
         [0106]      FIGS. 8 and 9  show variants of  FIGS. 5 and 7 , with the initialisation function Creat( ) remaining the same. 
         [0107]    These figures are based on the finding that the method of generating dictionaries allows for a reduction of their size. In fact, as noted above, each set of training remainders is the result of a projection on an item of a dictionary. Accordingly, the dictionaries created at the next level in the tree on the basis of these sets of training remainders are orthogonal with the item on which the projection was based. The components (the line) corresponding to this item can thus be removed from the training remainders as their contribution is nil. 
         [0108]    Thus, the operation  800  is identical to the operation  500 , and the operation  802  differs from the operation  502  in that it is a new function RITD( ) that is called. 
         [0109]    Generally, operations similar to those of  FIG. 7  are renumbered, replacing the number of “7” in the hundreds with the number “9”. With regard to the differences between the functions ITD( ) of  FIG. 7  and RITD( ) of  FIG. 9 : 
         [0110]    a new operation  905   a,  establishing a matrix Phi(i−1).j to remove the components corresponding to the item j of the previous iteration, by means of a function GS( ), 
         [0111]    a new operation  905   b,  using the matrix Phi(i−1).j to reduce the set of training remainders RS (i−1).j, 
         [0112]    a prefix “R” is added to the reduced elements to indicate reduction, with the exception of the final remainder that continues to be known as RS(i).t. 
         [0113]    The function GS( ) is an orthogonalisation function that takes as its initial vector the item chosen in the previous iteration, taking from it an orthogonal vector base and complementing the item. This can be done, e.g., by means of a Gram-Schmidt algorithm. These vectors form the columns of the matrix Phi(i−1).j. 
         [0114]    This method allows for saving space, as each dictionary is reduced in size by one line in each iteration. This also allows for saving calculation power, as the size of the matrices and the dictionaries decreases at each iteration. 
         [0115]    The dictionary driving methods described above are conditioned on two principal elements. 
         [0116]    First, these methods create the dictionaries in “cascade” fashion, i.e., each dictionary of one given iteration generates N dictionaries in the following iteration. 
         [0117]    This is obtained by executing the initial partitioning into N sets of training remainders in each execution. In one variant, the number of sets of remainders could vary in each iteration, as suggested by  FIG. 3  (NA 1  for the first iteration, NA 2  for the second, etc.), depending on the parameter N passed to operations  706  and  906 . 
         [0118]    Furthermore, the method for selecting/calculating centroids in the partitioning method is, in the example described, based in each iteration on the selection of the strongest item in the breakdown into individual values in each partition. This rule can be replaced by a barycentric selection/calculation, for example. 
         [0119]    Additionally, the calculation method for the items to form the dictionaries is also crucial, and is based on operations  712  and  912  on the selection of the strongest item in the breakdown into individual values of each partitioning set of sets of training remainders. Another rule could be used, e.g., a barycentric rule. 
         [0120]    It is this same selection rule that is used in the function Cho( ) to choose the dictionary for the current iteration in the function of  FIG. 4 . In fact, in the example described here, it is the item arising from the function MPE( ) of the preceding iteration that is used to designate the dictionary of the current iteration, which results in choosing the item with the greatest correlation in the breakdown into individual values. 
         [0121]    In one variant, another selection rule could be used to choose the dictionary of an iteration. For example, such a rule could select the dictionary designated by the item of the dictionary DICT(i−1) of the preceding iteration best approximating the remaining vector sought to be approximated, taking into account vectors corresponding to the strongest K individual values, and not only the first. 
         [0122]      FIGS. 10 and 11  show other variants of  FIGS. 5 and 7 , in which the function Creat( ) remains identical. 
         [0123]    These variants are based on the same principle as the variant of  FIGS. 8 and 9 , but intend a lighter implementation with only one dictionary stored per iteration level. it is reduction matrices Phi(i−1).t that ensure the adaptation to each item selected, yielding N dictionaries based on the dictionary stored at each level. 
         [0124]    Based on the fact that each dictionary generates only one dictionary in the following iteration, this embodiment appears simpler, and the tree structure is reduced, reducing the index notations and eliminating certain operations. However, contrary to the case of  FIGS. 8 and 9 , the functions Phi(i−1).t can no longer be implicit, and must be stored here with the dictionary RDICT(i). 
         [0125]    For  FIG. 10 , the only difference to  FIG. 8  is that it is the function ITAD( ) that is called, and no longer the function RITD( ). 
         [0126]    Generally, the operations similar to those in  FIG. 9  are renumbered, replacing the hundreds figure “9” with the number “11”. With regard o the differences between the functions ITAD( ) of  FIG. 11  and RITD( ) of  FIG. 9 , it is noted that: 
         [0127]    the operation  1105   a  is different to the operation  905   a  in that the matrices Phi(i).t are constructed by a function Align( ) described in detail below, 
         [0128]    the partitioning operation  906  to generate N sets of training remainders and N resultant dictionaries is eliminated, 
         [0129]    the operations related to the management of trees  908  and  910  are eliminated, 
         [0130]    the dictionary generation operation  912  is carried out by a function KM2( ), which is described in detail below, and no longer by the function LSV( ), 
         [0131]    the operation  1116  only calls a single recursion of the function ITAD( ), but with a set of remainders comprising the N sets of remainders just created (taken into account by the operation  1105   a ). 
         [0132]    The function Align( ) carries out a breakdown into individual values of each set RS(i−1).t in the form UΣV T , in which the individual values are ordered in descending value in the diagonal of Σ. 
         [0133]    Then, the matrix U is reduced to its columns corresponding to the individual non-null values of Σ. Thu, the matrix Phi(i−1).t forms an orthogonal base of RS(i−1).t. 
         [0134]    The function KM2( ) is very close to the function KM( ) to the extent that it executes the same calculations. However, it differs due to its input and its output. Here, all reduced sets RRS(i−1).t are regrouped to form the input, and the output is the dictionary RDICT(i). 
         [0135]    The function KM2( ) uses as a centroid selection/calculation rule the selection of the vector corresponding to the strongest individual value. It is these centroids that are used to fill the dictionary RDICT(i) in an operation  1112 . 
         [0136]    Furthermore, as this design is orthogonal, the operations  1105   a  and  1105   b  “align” the remainders, in the sense that all sets of reduced remainders RRS(i−1).j will have the same matrix U in their breakdown into individual values. This allows for the use of a single dictionary RDICT(i), with the matrices Phi(i−1).t allowing for the adaptation of this dictionary RDICT(i) to each set RRS(i−1).j. 
         [0137]    Lastly, in the operation  1116 , reference is made to RS(i), in the sense that it is the combination of the N sets RS(i).t calculated in operation  1114 . 
         [0138]    It is this alignment that allows for only preserving one dictionary per iteration i, whilst benefiting from the advantages of the variant of  FIGS. 8 and 9 . This comes at the price of storing the matrices Phi(i).t, which allow for this alignment. 
         [0139]    In the foregoing, provision was made for varying the dictionary in each iteration. However, the function Cho( ) could choose one dictionary per group of a selected number of iterations, or it could only be called every K iterations. 
         [0140]    Furthermore, a schematic was shown in which the function MP( ) is the same for all iterations. However, this function has a relatively low cost, and the execution of several distinct functions MP( ) implementing a different version of the matching pursuit family, only saving the best each time, could be envisaged. 
         [0141]    Furthermore, the fact of choosing and driving the dictionaries by breakdown into individual values generates orthogonal elements, which reduces the attraction of using functions of the types OMP or OOMP. However, if the selection rule for the dictionaries were different, the techniques would lose all of their interest.