The present invention relates generally to signal processing.
Signal processing is a basic component of a wide variety of electronic equipment. Signal processing is used to condition signals received from a variety of detectors, sensors and transducers. Signal processing is used in a myriad of technical application including wireless voice and data communication, medical diagnostic, and engineering and scientific instruments.
Extracting information from signals that are highly degraded by noise and/or distortion is challenging. Also, extracting information from signals that are not well understood, e.g., particular signals that are tapped using a brain computer interface, is challenging. Traditional digital signal processing techniques may not suffice. Moreover, in such challenging applications it is not always apparent how to make a signal processing network that will successfully extract desired information from signals.
The accompanying figures, where like reference numerals refer to identical or functionally similar elements throughout the separate views and which together with the detailed description below are incorporated in and form part of the specification, serve to further illustrate various embodiments and to explain various principles and advantages all in accordance with the present invention.
Skilled artisans will appreciate that elements in the figures are illustrated for simplicity and clarity and have not necessarily been drawn to scale. For example, the dimensions of some of the elements in the figures may be exaggerated relative to other elements to help to improve understanding of embodiments of the present invention.
Before describing in detail embodiments that are in accordance with the present invention, it should be observed that the embodiments reside primarily in combinations of method steps and apparatus components related to systems for designing signal processing systems. Accordingly, the apparatus components and method steps have been represented where appropriate by conventional symbols in the drawings, showing only those specific details that are pertinent to understanding the embodiments of the present invention so as not to obscure the disclosure with details that will be readily apparent to those of ordinary skill in the art having the benefit of the description herein.
In this document, relational terms such as first and second, top and bottom, and the like may be used solely to distinguish one entity or action from another entity or action without necessarily requiring or implying any actual such relationship or order between such entities or actions. The terms “comprises,” “comprising,” or any other variation thereof, are intended to cover a non-exclusive inclusion, such that a process, method, article, or apparatus that comprises a list of elements does not include only those elements but may include other elements not expressly listed or inherent to such process, method, article, or apparatus. An element proceeded by “comprises . . . a” does not, without more constraints, preclude the existence of additional identical elements in the process, method, article, or apparatus that comprises the element.
It will be appreciated that embodiments of the invention described herein may be comprised of one or more conventional processors and unique stored program instructions that control the one or more processors to implement, in conjunction with certain non-processor circuits, some, most, or all of the functions of designing signal processing systems described herein. The non-processor circuits may include, but are not limited to, a radio receiver, a radio transmitter, signal drivers, clock circuits, power source circuits, and user input devices. As such, these functions may be interpreted as steps of a method to design signal processing systems. Alternatively, some or all functions could be implemented by a state machine that has no stored program instructions, or in one or more application specific integrated circuits (ASICs), in which each function or some combinations of certain of the functions are implemented as custom logic. Of course, a combination of the two approaches could be used. Thus, methods and means for these functions have been described herein. Further, it is expected that one of ordinary skill, notwithstanding possibly significant effort and many design choices motivated by, for example, available time, current technology, and economic considerations, when guided by the concepts and principles disclosed herein will be readily capable of generating such software instructions and programs and ICs with minimal experimentation.
Referring again to
In table I the first column identifies the type of signal processing element, or the input signal. QF stands for Q-filter or fast Q-filter, QA stands for Q-aggregator, V stands for the input signal, etc. The second column gives a unique name. The third column gives the number of inputs that each signal processing element has (arity). The fourth column gives a cost associated with each signal processing element. The cost is a measure of the added complexity associated with including the signal processing element in a signal processing network. Co-pending patent application Ser. No. 10/101,814 entitled “Gene Expression Programming Algorithm” by Weimin Xiao teaches a way to use the cost information in an overall fitness measure that also includes performance based fitness criteria in order to bias genetic programming software toward less complicated solutions. The technique can also be applied in the program 100 for designing signal processing networks.
The fifth column of Table I gives the window size that the signal processing element uses. Note that there are QF1 and QF2 which are distinguished by the window size. Also, different Q-filters can have the same window size. The sixth column of Table II gives an integer index used to identity each signal processing element or the signal source. Storing each population as a matrix of the integer indexes in which each row or column represent a population member or as a set of arrays or vectors of indexes, allows evolutionary operations such as one point crossover, two point crossover, and mutation to be performed at a reduced computational cost, thereby accelerating the program 100. Also, if such a representation is used, then the step of initially generating the first generation amounts to selecting indexes at random for inclusion in the matrix or array set representation of the population. Each array or vector or matrix row or column represents a single population member which is a signal processing network. Before continuing with a description of the operation the program 100 shown in
An alternative depth first encoding of the signal processing system represented in
Block 608 is the start of a program loop that is repeated until rGeneNo=0 (which happens when the end of an expression encoding portion of a chromosome or the end of a sub-tree has been reached) or until i=MAX (which happens when the end of the chromosome (e.g., population member array) has been reached. (If the end of the chromosome is reached without passing enough terminal genes to provide inputs for all signal processing element genes that have been encountered, an incomplete and therefore invalid signal processing network is encoded in the chromosome). For determining the length of sub-tree encoding portions of valid chromosomes the condition i=MAX is superfluous. In each pass through the program loop, in block 610, the rGeneNo variable is incremented by one less than the arity of the signal processing element represented by the ith gene, and in block 612 the index i that points to successive genes is incremented by 1. Block 614 denotes the bottom of the program loop. Block 616 is a decision block, the outcome of which depends on whether, after the program loop has been exited, the value of the variable rGeneNo is greater than zero. A value greater than zero, indicates that more terminal genes, than are present in a chromosome, would be necessary to provide inputs for all of the signal processing element genes present in the chromosome. If it is determined in block 616 that the value of rGeneNo is greater than zero, the routine 600 proceeds to block 618 in which an invalid chromosome indication is returned. If on the other hand, it is determined in block 616 that rGeneNo is equal to zero, then the routine branches to block 620 in which the value of the index i is returned as the length (number of genes) of the network encoding portion of the chromosome that was processed by the routine 600 or the length of a sub-tree encoding portion of the chromosome. For determining the length of sub-tree encoding portions of known valid chromosomes decision block 616 is superfluous, as the sub-program 600 will always report the length of the sub-tree encoding portion. Alternatively, for determining the length of sub-trees I can be initialized to the position of the root of the sub-tree in the full chromosome array, and in block 620 the final value of I can be reported back as the last gene in the sub-tree encoding portion of the full chromosome.
Table II below illustrates the operation of the sub-program 600.
In Table II the first column shows a portion of an exemplary chromosome (the depth first encoding of the signal processing network shown in
Referring again to
After the population member has been redone, or if the population member passed the check performed in block 108 initially, the program 100 branches to block 112. In block 112 component values, settings and/or control parameters of the signal processing elements in the signal processing network are automatically optimized. Examples of sub-programs that can be used for block 112 include programs that implement direct search methods such as the Nelder-Mead algorithm, a Simulated Annealing Algorithm, a Genetic Algorithm, or a Differential Evolution algorithm for example.
Block 1004 is the top of loop that processes successive generations of the populations of arrays of numerical values that are derived from the initial population.
In block 1006 a program model of the signal processing network being processed in the current iteration of the loop started in block 106 is generated. The program model may be developed by nesting calls to sub-programs that model individual signal processing elements. In block 1008 the performance related fitness of the signal processing network, when configured with each set of numerical values is checked. Note that in some implementations blocks 1006 and 1008 may be combined because the sub-programs that model individual signal processing parameters take the component values, settings, and control parameters, in addition to input or intermediate signal samples as sub-program parameters.
If it is determined in block 1112 that the root gene encodes a one-input signal processing element, then in block 1114 the child of the root gene is evaluated, in block 1116 the current values of the component values, settings and/or control parameters for the one-input signal processing element are read, and in block 1118 the value of the child and the component values, settings and/or control parameters are used to evaluate the output of the unary signal processing element encoded in the root gene. The Q-filter and the fast Q-filter are two examples of one-input signal processing elements.
Decision block 1120 which is reached if the outcome of decision blocks 1102 and 1112 indicate that the root gene encodes neither a unary nor a binary signal processing element, tests if the root gene encodes an input signal. If so, then the root gene, is set to the value of the input signal. In a signal processing network the input signal is typically a training signal vector. If the outcome of decision block 1120 is negative, then by default the root gene encodes a constant (the only thing left in this particular embodiment) and the value of the root gene is set to the value of the constant.
The sub-program 1100 uses software implementations of the signal processing elements. The sub-program 1100 propagates input signal vectors through a tree representation of a signal processing network from the leaves to the root. However, the sub-program 1100 does this by starting at the root and recursively calling itself to work down toward the leaves. The output of the signal processing network represented by the tree is also a signal vector.
Referring again to
Supervised training, unsupervised training, or indirectly supervised training can be used to obtain measures of the performance of the signal processing network depending on the nature of the application of the signal processing network.
The genetic programming program selects population members for reproduction based, at least in part, on the performance related fitness measure and the numerical optimization program 1204 adjusts component values, settings and control parameters based, at least in part on the performance related fitness measure. In the case that sub-program 1000 shown in
One example of signal processing system that can be designed by the program 100 shown in
One example of a situation in which indirectly supervised training could be used is to design a signal processing network for cleaning up a speech audio signal that is to processed by a speech recognition system. In this case, the unfiltered test signals 1208 include speech audio with background noise, the application specific test targets 1304 include information identifying words that are spoken in the speech audio, the speech recognition system is the application specific signal processor 1302, and the objective function computer 1210 computes an objective function that depends on the relative number of correct versus incorrect word recognitions. In this example the system 1300 will serve to design a signal processing system that processes the speech audio in order to maximize speech intelligibility. If the application specific signal processor 1302 requires training such training can be performed prior to training the signal processing network 1206 or simultaneously therewith.
An example of an application in which unsupervised training could be used is to design a filter network for pre-filtering the input to a correlating wireless signal detector, e.g., in a Code Division Multi-Access (CDMA) receiver. In this case the input signals 1208 include a clean signal to which noise has been added and/or which has been subjected to linear and/or non-linear distortion and the application specific signal processor 1002 is a software model of a correlating wireless signal receiver. In this example, the system 1400 is used to find one or more signal processing networks that compensate for noise and distortion in order to maximize the output (the integrated product) of the correlating wireless signal receiver. Conventionally, pulse shape match filters and equalizing filters that are based on simplifying assumptions of white noise and linear distortion are used for pre-filtering the input to correlating wireless detectors. However, such filters may have limitations in certain real world radio environments. Supervised training can also be used to design a filter network for pre-filtering the input to a correlating wireless signal detector, if a time-varying, information bearing signal is used for the input signals 1208.
Referring again to
On the other hand if it is determined in block 1010 that the fitness criteria has not yet been met, then execution proceeds to decision block 1014 the outcome of which depends on whether a generation limit has been reached. Note that the generation limit tested in block 1014 applies to the population of component values, settings and control parameters. If the generation limit has been reached the sub-program branches to block 1012, described above. If on the other hand the generation limit has not been reached, then in block 1016 the next generation of sets of numerical parameters (component values, settings and control parameters) is selected from the current generation based, at least in part, on fitness. According to the certain embodiments, population members are selected for replication using a stochastic remainder method. In the stochastic remainder method at least a certain number Ij of copies of each population member are selected for replication in a successive generation. The number Ij is given by the following equation:
where, N is the number of population members in each generation;
The fractional part of the quantity within the truncation function in equation one is used to determine if any additional copies of each population member (beyond the number of copies determined by equation one) will be replicated in a successive generation. The aforementioned fractional part is used as follows. A random number between zero and one is generated. If the aforementioned fractional part exceeds the random number then an addition copy the ith population member is added to the successive generation. The number of selections made using random numbers and the fractional parts of numbers Ij is adjusted so that successive populations maintain a programmed total number N of sets of numerical parameters.
Using the above described stochastic remainder method leads to selection of population members for replication based largely on fitness, yet with a degree of randomness. The latter selection method mimics natural selection in biological systems.
In block 1018 one point cross-over operations are performed on some of the arrays of numerical values that have been selected for replication. In block 1018 two-point crossover operations are performed on some of the arrays of numerical values that have been selected for replication. In performing crossover operations population members are paired together (e.g., randomly). A single crossover probability or separate crossover probabilities may be used in deciding whether or not to perform one and two point crossover operations. For each type of crossover operation, and for each pair of population members a random number between zero and one is generated. If the random number is less than the crossover probability, then a crossover operation is performed, if the random number is greater than the crossover operation then the pair of population members is kept unchanged. Alternative methods for determining whether crossover operations are performed may be used. If it is determined that a one point crossover operation is to be performed between a pair of population members then a crossover point is selected at random. Thereafter, all the elements (numerical values) in the two population members that follow the crossover point are exchanged between the two arrays of numerical values. If it is determined that a two-point crossover operation is to be performed between two population members, then two points are selected at random and elements of the population members (arrays of numerical values) between the two points are exchanged.
In block 1022 a genetic algorithm (G.A.) mutation operation is performed on selected numerical values. One form of G.A. mutation is expressed by the following formula:
x
i
new
=x
i+(rand−0.5)(0.1xi+eps) EQU. 2
where,
Note that equation two illustrates a mutation limited to maximum of plus or minus 5%. 5% is a reasonable limit for mutation but may be changed if desired.
In block 1024 differential evolution (D.E.) mutation is performed on selected population members. Note that in D.E. mutation operates on an entire population member which is an set of numerical values. Note also that in performing D.E. mutation the population member is treated as an ordered set (e.g., vector or array) of numerical values. One form of D.E. mutation is expressed by the following formula:
X
i
new
=X
best
+f·(Xj+Xk−Xl−Xm) EQU. 3
where,
Every numerical value in the replicated population is considered a candidate for applying G.A. mutation and every array of numerical values is considered a candidate for D.E. mutation. In order to determine whether G.A. mutation and D.E. mutation is applied to each numerical value and set of numerical values respectively, a random number between zero and one can be generated for each entity and compared to preprogrammed G.A. and D.E. mutation probabilities. If the random number is less than the preprogrammed G.A. or D.E. mutation probabilities then the entity (i.e. numerical value or array of numerical values respectively) is mutated. Although not shown in
After, block 1024, the sub-program loops back to block 1004 and continues executing as previously described. Thus, successive generations of populations of arrays of numerical values will be evolved until the performance related fitness criteria is met or a generation limit is reached.
After the sub-program 1000 is exited, upon returning to the main program 100 shown in
where, NCj stands for the cost of the jth signal processing network; and
Costi is the cost of the ith signal processing element in the jth signal processing network.
Next, the program 100 continues to decision block 116 which tests if more population members in the current generation remain to be processed. If so block 118 gets a next population member and then the program 100 loops back to block 108 and continues executing as previously described until all population members of the current generation have been processed.
When it is determined in decision block 116 that all of the population members of the current generation have been processed, then the program branches to block 120. Decision block 120 tests if an overall fitness goal has been reached. The overall fitness goal takes into account the fitness measure related to signal processing performance and the parsimony related fitness. According to one embodiment, the two component fitness measures are combined in a weighted sum that uses a programmed weight, i.e.:
F
j=(1−p)·PFj+p·NCj EQU. 5
where, Fj is an overall measure of fitness of an jth signal processing network that is represented by an jth population member;
PFj is the performance related fitness measure;
NCj is the parsimony related fitness measure; and
p is a parsimony weighting factor that determines the weight to be given to the parsimony related measure of fitness in the overall measure of fitness.
The decision block 116 compares the overall fitness to a programmed fitness goal G. According to certain embodiments the parsimony weighting factor p and the goal G are varied during the run of the program 100. For example the parsimony weighting factor p can initially be set to a low value (and possibly to zero), and later increased. The timing of changing the p and G can be based on the value of the overall fitness measure, the generation-to-generation change of the overall fitness measure or on the generation number.
If it is determined in block 116 that the fitness goal G has been satisfied, then the program 100 branches to block 126 in which information on the signal processing network that satisfied the fitness goal is output e.g., on a computer display. The information can also be written to an output file.
If it is determined in block 116 that the fitness goal has not yet been satisfied then in block 122 population members are selected for replication in the next generation based on overall fitness. The same stochastic remainder method discussed above that is used in selecting from populations of arrays of numerical values in the sub-program 800 can be used in block 122 as well. However, in block 122 it is the overall fitness that is used in the stochastic remainder method. The overall fitness includes the performance related fitness that is achieved with the highest fitness set of numerical values for each particular network.
Next in block 124 evolutionary operations are performed on the populations members (e.g., arrays, vectors, rows or columns) that have been selected in block 122. The evolutionary operations that are performed suitably include one-point crossover, two-point crossover and mutation. The one-point and two-point crossover operations are the same as described above in connection with sub-program 800 but are applied to the population members representing signal processing networks that are evolved by the main program 100. In program 100 mutation involves replacing a randomly selected gene (e.g., signal processing element or signal source) with another randomly selected gene. Determination of whether a particular gene in a particular chromosome will be mutated can be made using random numbers between zero and one and a programmed mutation rate as described above in connection with G.A. mutation and D.E. mutation performed in sub-program 800.
Block 122 and block 124 serve to prepare a new generation of signal processing networks by selecting members of the current generation for inclusion in the next generation based on fitness, and then performing evolutionary operation on the selected members. After block 126 the program 100 loops back to block 106 in order to process the new generation, as previously described.
Because of the lack of constraints on the design space that is explored by the program 100 signal processing networks for a variety of applications can be designed. Signal processing networks that do not conform to standard engineering practice and whose operation is not intuitively understood may be designed. A further enhancement to versatility and efficiency of the program 100 comes from using versatile configurable signal processing elements in the signal processing network. Three such versatile configurable signal processing elements are the Q-filter, the fast Q-filter and the Q-aggregator discussed above, and in more detail below.
A Q-filter can be defined by the following sequence of equations:
e=r
min
+C EQU. 6
where,
e is a filtered signal sample,
rmin is a minimum of an ordered sequence of thresholds to which the input signal Sj is compared. The ordered sequence of thresholds is represented as: ro<r1< . . . <rm-1. Note that rmin=ro<=Sj<=rm-1=rmax. The input signal is bounded between minimum threshold rmin and maximum threshold rmax. If necessary, preamplification or attenuation is used to scale the signal appropriately. Furthermore:
where
where,
λ>=−1 is a filter control parameter; and
Generally the thresholds ri will be evenly spaced, although unevenly spaced threshold may be used as well. Once the spacing of the thresholds has been fixed, the values of the parameter λ and of the density parameters fj remain to be fixed in order to fully define a Q-filter.
The scaler 1512 and biaser 1514 linearly transform the output of the Q-filter 1500. Thus the output of the biaser 1514 can be described by
e
LT
=α·e+β EQU. 10
where,
The scaler 1512 and the biaser 1514 can be included as separate signal processing elements that the program 100 uses to construct a signal processing system or can be incorporated into the Q-filter signal processing elements.
An alternative to the Q-filter is the fast Q-filter covered in co-pending patent application entitled “Fast Q-Filter”, Ser. No. ______ (Docket No. CML02826T).
In block 1606 a sorting of the window of samples is obtained. The sorting can take the form of an actual sorted array of samples, but can also take the form of a permutation array in which indexes referring to time indexes in the window of samples are sorted according to the magnitude of the samples referred to. The sorting can be base on magnitude or absolute magnitude.
Referring again to
ψi=f(i)+ψi+1+λf(i)ψi+1,i=n, . . . , 1 EQU. 11
where,
ψn+1=0 and
f(i)ε[0,1] is an ith filter parameter in a permutation of the filter parameters according to the same permutation required to sort the signal samples. The filter densities fi and λ are control parameters that are optimized in block 112 (e.g., in sub-program 800).
Note that the recursion relation given by equation 11 may change for each window of samples because the order in which the densities f(i) are used. It will be apparent to one skilled in the art that a programmed processor can be used to evaluate the recursion relation. However, a specialized hardware solution has also been developed. Co-pending patent application entitled “Hardware Arithmetic Engine for Lambda Rule Computations”, Ser. No. ______ (Docket No. CML03293T) to Irfan Nasir et al. discloses hardware for evaluating the recursion relation given by equation 11.
In block 1610 the set function values are normalized by dividing each one by the largest which is ψ1 to obtain a set of so-called “Q-measures”. Q-measures are describe in “Q-measures: An Efficient Extension of the Sugeno λ-Measure”, IEEE Transactions on Fuzzy Systems, Vol. 11, No. 3, June 2003.
In block 1612 successive pairs of Q-measures are subtracted to obtain a set of Q-measures discrete differences, given by the following equation:
In block 1614 the scalar product of the signal samples in the window (taken in order according to magnitude) and the Q-measures discrete differences is computed. The result obtained from block 1614 is a fast Q-filtered signal sample. As discussed above in reference to
Block 1616 test if there are more received signal samples beyond the window that has just been processed in blocks 1606-1614. If so, then in block 1618 the sample window is shifted by one sample position, the fast Q-filter returns to block 1606 in order to repeat the cycle described above. When there are no more samples to process the fast Q-filter stops.
Referring again to
where,
The number of inputs n is varied as needed for a particular system. The aggregator processing unit 2408 suitably comprises, by way of example, a microprocessor coupled to a memory that stores programming instructions for executing the aggregator function, or an Application Specific Integrated Circuit (ASIC), or a Field Programmable Gate Array (FPGA) configured to perform the aggregator function. In a hardware implementation the first input 2402, second input 2404, third input 2406 and control signal input 2412 can take the form of dedicated signal inputs. The hardware disclosed in the aforementioned co-pending patent application “Hardware Arithmetic Engine for Lambda Rule Computations”, Ser. No. ______ (Docket No. CML03293T) to Irfan Nasir et al. can also be used in implementing the Q-aggregator processing unit 2408. Depending on the setting of the control parameter λ the Q-aggregator processing unit 2408 can be configured to emulate a number of known functions, that are useful in signal processing systems.
Setting the control parameter to λ to a high value e.g., one-hundred causes the aggregator processing unit 2408 to perform a function that approximates the MIN function. The MIN function accepts two arguments and returns the lesser of the two as its output. With the control parameter λ set at a high number the aggregator 2400 also emulates the generalized mean with the exponent equal to a large negative number. Note that the generalized mean with the exponent equal to a large negative number is suitably used as a smooth approximation of the MIN function. The MIN function is often used in multi-valued logic systems to combine the membership functions of inputs that are connected by an intersection operator.
Considering the case in which the aggregator 2400 has only two-inputs, allows the input/output relation of the aggregator 2400 to be visualized using surface plots.
Setting the control parameter λ to values approaching or equal to negative one causes the aggregator processing unit 2408 to perform a function that approximates the MAX function. The MAX function accepts two arguments and returns the greater of the two as its output. With the control parameter λ set at a number approaching or equal to negative one the aggregator 2400 also emulates the generalized mean with the exponent equal to a large positive number. The generalized mean with the exponent equal to a large positive number is suitably used as a differentiable approximation of the MAX function. The MAX function is often used in multi-valued logic systems to combine the membership functions of inputs that are connected by a union operator.
Setting the control parameter λ to values approaching zero (e.g., 0.0001) causes the aggregator 2400 to output a value that approximates the average of the two-input values. Averaging is a fundamental process that is applicable to a variety of types of technical systems including signal processing systems.
The settings of the parameter λ discussed above are merely exemplary. In practice, the parameter λ can take on different values, e.g., values in the range the range −1 to plus infinity.
The ability to change the character of the aggregating function qualitatively by adjusting the value of the parameter λ, facilitates discovery of an appropriate signal processing function (e.g., MIN, MAX, average, or some intermediate function) in the course of machine learning in program 100.
The relationship of the main program 100 to the sub-programs 500, 600, 1000, 1100, 1600, 2000 is as follows. The main program basically handles network topology aspects of the design of the signal processing networks using a form of gene expression programming. The main program calls sub-program 600 to validate chromosome arrays encoding network topology. The main program 100 calls the sub-program 1000 for optimizing numerical parameters using a combination of genetic algorithm/differential evolution algorithm. The sub-program 1000 calls sub-program 500 to decode chromosome arrays in order extract encoded network topology information. The sub-program 1000 calls sub-program 1100 to simulate signal processing by signal processing networks encoded in chromosome arrays, where the signal processing networks are configured with trial numerical parameters selected by the sub-program 1000. The sub-program 1100 relies on network topology information generated by the sub-program 500. Sub-programs 500 and 1100 are used in block 1006 and 1008 of sub-program 1000. If a signal processing network generated by the main program 100 includes a fast Q-filter, sub-program 1600 is used for the fast Q-filter. Sub-program 2000 is used in block 1606 of sub-program 2000.
By using a separate specialized numerical optimizations for finding optimum component values, settings and configuration parameters, a genetic programming program (e.g., 100) can be relieved of the burden of finding numerical values so that the genetic programming program will be focused on the task to which it is more suited-determining an optimum signal processing network architecture. This arrangement is believed to be more efficient in certain cases than using genetic programming alone, e.g., using gene expression programming to determine both the architecture and accurate numerical parameters.
In the foregoing specification, specific embodiments of the present invention have been described. However, one of ordinary skill in the art appreciates that various modifications and changes can be made without departing from the scope of the present invention as set forth in the claims below. Accordingly, the specification and figures are to be regarded in an illustrative rather than a restrictive sense, and all such modifications are intended to be included within the scope of present invention. The benefits, advantages, solutions to problems, and any element(s) that may cause any benefit, advantage, or solution to occur or become more pronounced are not to be construed as a critical, required, or essential features or elements of any or all the claims. The inventionis defined solely by the appended claims including any amendments made during the pendency of this application and all equivalents of those claims as issued.