Abstract:
A filter for a system for processing audio samples, which dynamically vaires its length responsive to a moving average of variations in an audio input rate. The filter lengthens at substantially constant input rate variations to reduce input noise, and shortens at rapid input rate variations to enhance responsiveness.

Description:
RELATED APPLICATION 
     This application is a continuation of application Ser. No. 08/937,136, filed Sep. 24, 1997, now abandoned. 
    
    
     BACKGROUND OF THE INVENTION 
     1. Field of the Invention 
     The present invention relates generally to filters. It relates more particularly to a filter which has a length which varies dependent on a variable audio sample input rate. 
     2. Art Background 
     Filters have been used to filter noisy inputs in systems for processing signals. In a device such as an audio player and recorder for media playback and recording, which includes a system for processing the motion imparted by a user to an audio input to generate an audio sample rate output for controlling the motion of an audio transport, the audio input may be noisy. The noisy input may be due to an audio ripple resulting from the aliasing effect of a wow from motion variations imparted by the audio input user in speeding up, slowing down, speeding up, slowing down, and the like. 
     A filter may be implemented to filter the noisy input. The filter needs to be long enough to eliminate the input noise. Some specialized filters may be implemented to be long enough to eliminate the input noise. Such specialized filters may include a multiplicity of tap points, which may be computationally very intensive, requiring as many multiplies as there are tap points on the filter, which, for a filter with a multiplicity of tap points, would require a substantial number of multiplies. If the specialized filter is implemented with a constant gain, by averaging the sample values over the length of the filter, so as to generate coefficients of the filter equal to each other and constant, which are convolved at the input in an averaging calculation over the same number of samples to obtain the output, no multiplies are required. This can be implemented by a circular buffer and an accumulator. In such implementation, each time a sample is put into the circular buffer, the new sample value is added to the accumulator, and the oldest samples are taken out and their values are subtracted from the accumulator. The output of the filter is the accumulated sum of all the sample values divided by the length of the filter. This implementation is a computationally efficient version of a filter, in that regardless of how long it is, all it requires is an addition and a divide to calculate the filter. However, such a filter needs to be lengthened in order to attenuate the higher frequencies, requiring a longer buffer of samples to keep track of. 
     However, lengthening the filter may add a delay to the system which, along with the delay in the system imparted by a network for processing the signal, may make the system unresponsive, even if the processing time is sufficient to implement the filter. Also, the filter implementation may not run fast enough to run in real time, with the numerous other businesses running in the system. 
     Therefore, there has been a need existing for a filter which varies its length in response to a variable audio sample input rate, without an accumulator, to filter input noise. The present invention fulfills those needs. 
     SUMMARY OF THE INVENTION 
     Briefly and in general terms, the present invention provides a filter which dynamically varies its length responsive to a moving average of variations in an input rate. 
     The filter includes a circular buffer including a plurality of positions for storing audio sample values during iteration of the processing system, and means for adding an audio sample to the buffer upon each iteration of the processing system. The filter further includes means for generating an audio sample value for each position in the circular buffer upon each iteration of the processing system, wherein the audio sample value comprises the sum of the audio sample added to the position and the audio sample stored in the prior position. The filter still further includes means for generating a calculated average of the plurality of audio sample values stored in the positions in the buffer, and means for changing the length of the filter responsive to the calculated average. 
     One aspect of the present invention is that the filter lengthens at substantially constant input rate variations to reduce input noise. 
     Another aspect of the present invention is that the filter shortens at rapid input rate variations to enhance responsiveness. 
     Other features and advantages of the invention will become apparent from the following detailed description taken in conjunction with the accompanying drawings, which illustrate, by way of example, the features of the invention. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     FIG. 1 is a diagram illustrating circular buffer for accumulated sample values in accordance with the present invention; 
     FIG. 2 is a diagram illustrating an embodiment of a circular buffer for sample values and accumulators, in accordance with the prior art; 
     FIG. 3 is a diagram illustrating an embodiment of a circular buffer for sample values and accumulators, in accordance with the prior art; 
     FIG. 4 is a graph of coefficients of sample values in a constant moving average filter; and 
     FIG. 5 is a graph of coefficients of sample values in a Gaussian filter. 
    
    
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS 
     Referring now to the drawings, and in particular to FIG. 1, there is shown a filter 10, comprising a circular buffer 12 which includes a plurality of positions 14 and a plurality of values 16 of audio samples 18 in positions 14. 
     Circular buffer 12 in the embodiment of the invention as shown in FIG. 1, stores the accumulated sum of all the audio samples 18 received by filter 10 and stored in an audio sample buffer 12, as accumulated audio sample values 16. The accumulated value buffer 12 includes a word length sufficiently long to prevent the overflow of values 16. To derive the average value in the buffer from the latest sample back, the number of samples back to be averaged is selected. For example, audio sample inputs 18 of value 3, 5, 1 and 6 to be stored in the audio sample buffer 12, are stored in the accumulated audio sample buffer 12 as inputs as follows: The first input sample 18 of value 3 is stored in the first buffer position 14. Then the next input sample 18 of value 5 is added to the prior stored sample value 3 to generate an accumulated input of value 8, which is stored in the next buffer position 14. Then the next input sample 18 of value 1 is added to the prior stored accumulated value 8 to generate an accumulated value of 9 which is stored in the next buffer position 14. Then the next input sample 18 of value 6 is added to the prior stored accumulated sample value of 9 to generate an accumulated sample value of 15 which is stored in the next buffer position 14. 
     To derive the average accumulated value, for example, for the last three samples 18 of value 5, 1, and 6, input into buffer 12, the accumulated value three sample back, 3, is subtracted from the last accumulated value, 15, generating a 12, which is divided by the number of samples being averaged, 3, generating an average accumulated value of 4. That average, 4, is consistent with the average derived by adding the last three sample values in the buffer, 5, 1, and 6, generating a 12, and dividing by the number of samples being averaged, 3. 
     The average accumulated value in buffer 12 can be derived by looking at the current sample of interest, going back any distance in the buffer, calculating the difference of accumulated values between those two positions in the buffer, and dividing by the distance in the buffer, to efficiently and effectively compute the output of the moving average filter, to dynamically change the filter length as required without storing sample values in separate accumulators. 
     Moving average filters 10 in the prior art as illustrated in FIG. 2 and 3 include a circular buffer of length N, where N is the number of taps on the filter, and one accumulator 20 in FIG. 2 and a plurality of accumulators 20 in FIG. 3 that keep a running average of all the sample values in buffer 12. To change the length of moving average filter 10, a separate accumulator 20 would be needed for each length, or an accumulator 20 to store all the sample averages. For example, to change the filter length from 1 to N or any value in between, a plurality of accumulators 20 for storing average values could include a plurality of accumulators 20 that accumulate sample values, specifically accumulator 1, which accumulates the last sample value, accumulator 2, which accumulates the last two samples values, through an accumulator N that accumulates the last N sample values. To dynamically change the filter length, each of the N accumulators 20 would have to be accumulated for each sample period, which, particularly for a long filter, requires a substantial amount of computation. To calculate the output for the entire buffer 12, every value in the whole buffer 12 must be added. 
     To implement a moving-average filter 10, input samples 16 are stored in circular buffer 12 and a separate accumulated sample value 20 is kept that is equal to the sum of sample values 16 in buffer 12. Each sample period, a new sample 16 is input into buffer 12, and its value is added to the accumulated value; at the same time, the oldest sample 16 is removed from buffer 12 and its value is subtracted from the accumulated value. The output of filter 10 is the accumulated sample value divided by the length of buffer 12. 
     The present invention stores in the circular buffer 12 the accumulated sum of all input sample values 16 to date, not the value of each input sample 16, by adding the new input sample value to the previous value that was stored in buffer 12, and storing this sum into the next buffer position 14. Then the output average is derived by taking the difference between the new input to buffer 12 and the oldest value in buffer 12, and dividing by the buffer length; there is no separate accumulator. The average can be calculated for any length filter 10 at any time, up to the full length of buffer 12, such that a controller can dynamically choose the filter length without adding any overhead to the filter calculations. To do this in the prior art required storing one accumulated value for every possible filter length, and updating each of the accumulators every sample period, substantially compromising the computational benefits of the moving average filter. 
     By limiting filter length selection to powers of two, the division by buffer length can be accomplished by shifting the word instead of doing a divide. Also, the word size of the buffer should be chosen to be large enough to represent the accumulated values of all samples in the buffer without overflowing. In general, the word size should be at least the size of the input samples plus enough bits to represent the full length of the buffer. 
     The input and output of filter 10 represent positional information, but the controlling parameter for selecting the filter length is the input rate, not position. To derive a rate, the current length of filter 10 may be split into two equal parts and each part treated as a positional filter (one giving the current position and one giving a delayed position) and the positional difference divided by the time difference to get the rate. In addition to being able to change the length of the filter dynamically, the position in time can be changed as well, as long as the selected delay plus filter length do not exceed the full length of the buffer. 
     Storing accumulated values in the filter buffer instead of direct sample values can be extended to two or more dimensions. For example, a two-dimensional image indexed as (x,y) coordinates could be stored with each point being the sum of the pixel values in the rectangle with corners at (0,0) and (x,y). Then the average value for any rectangle in the image could quickly be calculated by subtracting the value stored at the corner of the rectangle with the lowest (x,y) coordinates from the value stored at the corner with the highest coordinates, and dividing by the number of pixels in the rectangle. This average could then be used to process the image by low-pass filtering, creating a mosaic effect, etc. 
     A functional description of the variable-length moving-average filter of the present invention is included in the attached Appendix A. 
     While this invention has been particularly described with reference to a preferred embodiment thereof, it will be understood by one skilled in the art that the present system may be practiced without many of the specific details disclosed above, and that changes in the above description or illustrations may be made with respect to form or detail without departing from the spirit and scope of the invention. ##SPC1##