DEVICES, SYSTEMS AND METHODS FOR DIGITAL FILTERING

DE102022110990B4Active Publication Date: 2026-08-27INFINEON TECHNOLOGIES AG
View PDF 1 Cites 0 Cited by

Patent Information

Application Number
DE102022110990
Authority / Receiving Office
DE · DE
Patent Type
Patents
Current Assignee / Owner
Filing Date
2022-05-04
Publication Date
2026-08-27
Estimated Expiration
2042-05-04

Smart Images

  • Figure 00000000_0000_ABST
    Figure 00000000_0000_ABST
Patent Text Reader

Abstract

A device (100) configured for filtering a plurality of discrete samples, comprising: at least one processor; a sample buffer (310) configured for storing samples, wherein the sample buffer (310) is a ring buffer; a coefficient array (320) storing coefficients of a digital filter, wherein the coefficient array (320) comprises a set of coefficients (320a) for the digital filter and a copy of the set of coefficients (320b); wherein, for each sample of a plurality of input samples, the at least one processor is configured to: receive a sample and store the sample as a value in a sample buffer (310) at a position of the sample buffer (310) indicated by a buffer pointer;Computation of an output sample (y[n]), comprising performing a multiply-accumulate (MAC) operation on values ​​currently stored in the sample buffer (310) and a subset of the coefficients stored in the coefficient array (320), wherein a position of the subset of coefficients in the coefficient array (320) is indicated by a coefficient pointer (CP); and updating the buffer pointer and the coefficient pointer (CP).
Need to check novelty before this filing date? Find Prior Art

Description

Technical field Various embodiments generally refer to digital filters and the implementation of digital filters. background The term von Neumann bottleneck describes the performance limitation imposed by a processor architecture that includes a control unit, an arithmetic logic unit (ALU), registers, and memory. It is the effect of a discrepancy in processing speed between these different parts of the processor, leading to idle times and standstill. A prominent example is the difference in processing speed between ALU operations and memory accesses. This could be due to a load / store architecture, where the ALU must wait for data to be loaded from memory into a register or stored from a register into memory. Because of these characteristics, it is generally desirable to limit memory accesses as much as possible. Many digital signal processors (DSPs) have dedicated multiply-accumulate units (MACs), but other processors do not. The latter are even more severely affected by the von Neumann bottleneck because they have to perform complex operations using multiple individual instructions. Two examples of how they are more severely affected are: A MAC instruction must be split into a multiplication instruction followed by an addition instruction, which means that the operand and result registers can be used for each instruction (e.g., in the case of a load / store architecture). Two instructions must be fetched, decoded, and executed, which can lead to delays if executed sequentially. Since many processors lack dedicated multiplication units, an ALU performs multiplication using addition and shift operations, which usually takes longer than if a dedicated multiplication unit were available. In a load / store architecture, a dedicated MUL / MAC unit doesn't necessarily solve the bottleneck problem. This is because multiple memory operations can lead to undesirable delays, and operands also need to be loaded into or stored from registers. Therefore, register files are a crucial factor in managing the bottleneck. The fewer memory accesses required, the less significant the impact of the bottleneck. The more data that can be stored in registers, and the longer the data can be stored, the fewer memory accesses are needed, as the data doesn't need to be moved between registers and memory as frequently. Furthermore, caching can be used to address the above-mentioned aspects, but this presents problems regarding availability and licensing. Instead, improving existing algorithms might be the more cost-effective option. An algorithm could better meet timing requirements if it is optimized to require less data and pointers, fewer load and save operations, fewer operations, or to avoid frequent (re)writing of registers. This can be especially true for algorithms like FIR algorithms. The bottleneck in FIR algorithms is highly dependent on the processor architecture. The more stringent the requirements for cycle time and area, the greater the interest in fast algorithms for calculating FIR filters. US 2006 / 0195498 A1 discloses a digital filter instruction and a filter that implements the filter instruction. The filter instruction synthesizes a digital filter and includes an instruction field, a tap length field, a coefficient address field, a data header address field, a clear accumulator bit, and an update bit. The filter instruction has a concise instruction format to significantly reduce memory requirements, enable instruction pipelining without branching drawbacks, and use a ring buffer for the data so that the data address pointer only needs to be updated for the next input sample. Brief description of the drawings In the drawings, identical reference numerals generally refer to the same parts in the different views. The drawings are not necessarily to scale; instead, the emphasis is generally placed on illustrating the principles of the invention. In the following description, various embodiments of the invention are described with reference to the following drawings, in which: Fig. 1 is a diagram showing a processing or computing device according to at least one exemplary embodiment of the present disclosure. Fig. 2 is a diagram of a finite impulse response (FIR) filter. Figs. 3A-3M show a method for implementing a digital filter according to at least one exemplary embodiment of the present disclosure.Figures 4A-4D represent a method for implementing a digital filter according to at least one exemplary embodiment of the present disclosure. Figures 5 to 6 each show an exemplary sample code for implementing a digital filter according to at least one exemplary embodiment of the present disclosure. Figure 7 shows an exemplary method for digitally filtering samples according to at least one exemplary embodiment of the present disclosure. Figure 8 shows an exemplary sample and coefficient buffer used for digital filtering according to at least one exemplary embodiment of the present disclosure. Figures 9A-9K represent a method for implementing a digital filter according to at least one exemplary embodiment of the present disclosure. Description The following detailed description refers to the accompanying drawings, which show certain details and embodiments of the invention for illustrative purposes. The words "plural" and "multiple" in the description or claims expressly refer to a set greater than one. The terms "group (of)," "set (of)," "collection (of)," "series (of)," "sequence (of)," "grouping (of)," etc., and the like, in the description or claims, refer to a set equal to or greater than one, i.e., one or more. Any term expressed in the plural form that does not expressly mean "plural" or "more" also refers to a set equal to or greater than one. The terms "proper subset," "reduced subset," and "smaller subset" refer to a subset of a set that is not equal to the set, i.e., a subset of a set that contains fewer elements than the set. Fig. 1 shows a diagram illustrating a processing or computing device 100. In one example, the processing device 100 can be a microcontroller or a microcontroller unit (MCU). The device 100 can have one or more cores 110, which can be processor cores or central processing units (CPUs) capable of performing one or more operations by executing program instructions or software. Such instructions can be stored on or located in the processing device 100 on a (permanent) computer-readable storage medium (e.g., memory / memory 150). Similarly, the device 100 can include a DSP 120 for performing digital signal processing. Like the cores 110, the DSP can perform operations by executing program instructions. The device 100 may further comprise an analog-to-digital converter (ADC) 130. The ADC may, for example, receive analog inputs from one or more sources either on the device 100 or outside the device 100, e.g., from a sensor, a connector, etc. The analog-to-digital converter converts analog inputs into discrete samples or digital outputs, which can then be passed on to other components of the device 100. The device 100 may include one or more memory and / or storage devices 150 for storing data, instructions, etc., and may also include other, unspecified components, MISC 160. Such other components may include sensors, controllers, interfaces, ports, or other types of circuits. Connections between the components of the device 100 may be assumed, even if they are not shown in Fig. 1. Fig. 2 shows a diagram of a finite impulse response (FIR) filter 200. The inputs or input values ​​210 (x[n]) are processed using the taps / delays 220 and coefficients (c0-cN-1) 230. That is, a series of multiple multiplication 250 and addition 260 operations are performed to produce a filter output or output values ​​240 (y[n]), where n is the index of the input sample or input signal or output signal. The FIR filter 200 has order N-1. Accordingly, the filter 200 has a number of N delays 220 (z-1), and therefore N-1 old input values ​​and one (1) current input value are required to produce a single filter output or output value. The inputs or input values ​​can be stored together in a memory, for example, sequentially. Filter 200 is a well-known FIR filter, but it is not often used in the form shown. The reason for this is the need to shift each memory element one position to the right with each calculation of an output sample. With an FIR filter of this configuration and 100 taps, 100 samples must be shifted, 100 products calculated, and 99 additions performed, which is computationally very expensive. Figures 3A-3M illustrate a process or method 300 for implementing a digital filter according to at least one exemplary embodiment of the present disclosure. According to at least one example, the implemented digital filter can be a finite impulse response (FIR). In other cases, other types of digital filters can be implemented, such as an infinite impulse response (IIR) filter in one example. Process 300 can be implemented by one or more processors that execute instructions stored or contained in a non-transmittable, computer-readable medium. Furthermore, the one or more processors can be a digital signal processor (DSP). The one or more processors can include or utilize a multiply-accumulate unit (MAC) within Process 300. For example, the device 100 from Fig. 1 can utilize the DSP 120 to implement the filter process 300. In other cases, other types of devices may or may not include a DSP or a MAC. As shown in Fig. 3A, a sample buffer 310 can be provided and used for the process 300. The sample buffer 310 can be implemented as a data structure in a portion or section of memory or storage and can be used or configured to store discrete input samples or input values. In this example, the digital filter can be an N-tap filter, and therefore the sample buffer 310 can store N elements or be considered to be N elements long. According to the example in Fig. 3A-3M, N equals 4. Input samples / values ​​can originate from any suitable source and then be stored, for example, as values ​​or data in sample buffer 310. For instance, the input samples can come from an analog-to-digital converter (ADC), which converts or samples an analog signal to provide discrete output in the form of digital samples. In other cases, the input signals can come from other sources or devices that incorporate downsampling components or circuits. For example, a downsampling device or circuit can downsample the ADC samples and then provide them as input samples. In some cases, sample buffer 310 can be initialized or reset to contain a series of initial or reset values ​​R (R0-R3) (sometimes referred to here as reset samples). That is, after initializing or resetting sample buffer 310 and / or process 300, the reset values ​​R can be stored in sample buffer 310. According to at least one exemplary embodiment of the present disclosure, the sample buffer 310 is realized or implemented as a ring buffer, for example, if the ends or end elements of the buffer are connected or linked end-to-end. The sample buffer 310 can be a ring buffer implemented by software, firmware, or hardware, to name just a few. As shown in Fig. 3A, a coefficient array 320 can also be provided and used for the process 300. The coefficient array 320 can also be implemented as a data structure within, or as part or section of, a memory or storage device and stores coefficients for a digital filter. According to at least one exemplary embodiment of the present disclosure, the coefficient array 320 comprises a set of coefficients 320a for the digital filter. The set of coefficients 320a can be a complete set, i.e., it comprises every coefficient (c0-cN-1) for the digital filter. Furthermore, the coefficient array 320 of Fig. 3A contains a copy of the set of coefficients 320b (copy set). The copy of the set of coefficients 320b can be a complete or partial copy of the set of coefficients 320a. If the copy of coefficients 320b is a complete copy and contains all the coefficients of the set of coefficients 320a, as will be explained or shown later, not all of these coefficients may be used or required. For example, in Fig. 3A, the coefficient c0, which is stored at the last element or at the right end of the coefficient array 320 (within the dashed line), need not be used in process 300. In general, a filter with N taps has N coefficients (c0-cN-1), and the set of coefficients 320a also has length N. The copy of coefficients 320b can also have length N if it is a complete copy of the set of coefficients. In this case, the length of the coefficient array 320 is 2N, as shown in Fig. 3A. In other cases, the copy of coefficients 320b is not a complete copy of the set of coefficients 320a. For example, if the copy of the set of coefficients 320b does not contain any of the coefficients of the set of coefficients 320a (e.g., c0), then the length of the set of coefficients is N-1 and the length of the coefficient array is 2N-1. As shown in Fig. 3A, the set of coefficients 320a and the copy of the set of coefficients 320b can be adjacent or next to each other in the coefficient array. The coefficients of the coefficient array 320 can be arranged consecutively in ascending or descending order. As shown in Fig. 3A, for example, coefficient c3 (with an order of 3) is next to coefficient c2 (with an order of 2). According to at least one exemplary embodiment of the present disclosure, the digital filter or the digital filter process 300 can be implemented using pointers and pointer operations. In Figures 3B to 3M, the buffer pointer BP is an object that can point to, display, or have the address or position of an element of the sample buffer 310, and the coefficient pointer CP is an object that can point to, display, or have the address or position of an element of the coefficient array 320. Furthermore, in some examples, including those described with reference to Method 300, the buffer pointer BP can be constructed or determined from the coefficient pointer CP, or vice versa. For example, the position of the coefficient can be specified by modifying the buffer pointer BP (modified BP). Alternatively, the address of the sample in the buffer can be a modification of the coefficient pointer CP (modified CP). As described in other sections, these modifications can be made or implemented by code or program instructions. As described in the examples herein, the buffer pointer BP can move according to the connection or structure of the sample buffers, which may be ring buffers. For example, in ring buffers, advancing a buffer pointer BP within a sample buffer can cause the buffer pointer to mimic the circular connection and thus move successively from one boundary or end section to the other. For instance, during movement, the buffer pointer can successively move from a starting position to a final section of a sample buffer, or vice versa. According to various embodiments of the present disclosure, the purpose of the buffer pointer, such as the buffer pointer BP, can point to the oldest input sample in the sample buffer and thus be updated or changed according to or in response to changing or updated values ​​or samples of the sample buffer. Initializing or resetting the digital filter process can result in the sample buffer shown in Figures 3A-3B. That is, the sample buffer 310 contains the reset values ​​(R0-R3), and the buffer pointer BP is set or reset to a predefined initial position of the sample buffer. As further shown in Figure 3B, the predefined initial position to which the buffer pointer BP is reset is the first buffer element, which in this case is the leftmost element of the sample buffer 310. In other examples where the samples of the sample buffer are stored or arranged differently, the start or reset position of the buffer pointer BP may be different and, for example, be a last or rightmost element of the sample buffer 310. Similarly, the coefficient pointer CP can be set to a predefined initial position of the coefficient array 320 in response to an initialization or a reset. In the example shown in Fig. 3B, the initial position of the coefficient pointer CP is set to the lowest-order coefficient (c0). More precisely, it is set to the first lowest-order coefficient (from left to right) in the coefficient array 320. After the sample buffer 310 has been initialized or reset, as shown in Fig. 3A, and after the buffer pointer BP and the coefficient pointer CP have been set or initialized, as shown in Fig. 3B, a first input sample x0 can be obtained. The first input sample x0 is received and stored in the sample buffer at the position indicated by the buffer pointer BP, the leftmost position / element. After saving the first input sample x0, process 300 generates or determines a filter output. The filter output y0 is calculated based on the current samples / values ​​in sample buffer 310, which contain the initial sample x0 and the reset values ​​R0-R2. More precisely, the filter output y0 is generated by a multiply-accumulate (MAC) operation using the current values ​​of sample buffer 310 and a specified subset of the coefficients in coefficient array 320. Unless otherwise specified, a subset refers to less than the entirety of a set. For example, the subset of coefficients is smaller than all the stored coefficients of the coefficient array 320. Accordingly, as shown in Fig. 3C, the filter output is given by equation 330: Determining the filter output y0 involves multiplying the current values ​​of the sample buffer 310 by the corresponding coefficients of the coefficient array 320. Here, too, the corresponding coefficients are a subset of the coefficients stored in the coefficient array, each representing a coefficient for a digital filter. That is, one of the coefficients c0-c3 is used. The coefficient pointer CP specifies the subset by indicating, for example, the beginning or end of the subset of corresponding coefficients. This means that the coefficients of the subset of corresponding coefficients are arranged sequentially or at successive positions in the coefficient array 320. Accordingly, the multiplication operation involves multiplying the sample / value of the first element (the leftmost element) of sample buffer 310 by the coefficient in coefficient array 320 located at the position specified by the coefficient pointer CP. Therefore, x0, the most recently stored value in the first element, is retrieved and multiplied by the coefficient c0, which is retrieved from the position in coefficient array 320 specified by the coefficient pointer CP. The other samples in coefficient array 320 are multiplied in a similar manner. That is, the multiplication operation continues as the remaining values ​​in sample buffer 310 and their corresponding coefficients in coefficient array 320 are multiplied.The value R2 stored in the second element, which is located in a subsequent element or following the first element of the sample buffer 310, can be retrieved and multiplied by the coefficient c3, which is retrieved from a next or subsequent position that is removed from the position in the coefficient array 320 specified by the coefficient pointer CP. The value R1, located at the next position / element (the third element from the left in sample buffer 310), is retrieved and multiplied by the coefficient c2, which is retrieved at the next or subsequent position away from the coefficient pointer CP. Finally, in this example, the value R0, stored in the next or subsequent element (the fourth element) of sample buffer 310, is retrieved and multiplied by the coefficient c1, which is retrieved at the next or subsequent position away from the position specified by the coefficient pointer CP. To illustrate this, Fig. 3C shows the sample buffer 310 aligned with the subset of coefficients in the coefficient array 320 to demonstrate the correspondence in the MAC operation. As indicated by the arrow 340, the multiplication process proceeds in a single direction with respect to the sample buffer 310 and the coefficient array 320. The propagation direction 340 shows how the values ​​of the sample buffer 310 are to be aligned with or correspond to a subset of coefficients. In the example of Fig. 3A-3M, the propagation direction 340 is from left to right. Thus, the propagation of the multiplication begins at the first or leftmost position / element of the sample buffer 310 and starts with the position / element of the coefficient array 320 indicated by the coefficient pointer CP. In other examples, however, the propagation direction may be different (e.g.,(from right to left), wherein the samples of the sample buffer 310 and / or the coefficients of the coefficient array 320 are stored or arranged differently. After each multiplication of the values ​​in sample buffer 310 by coefficients (e.g., a subset of coefficients) from coefficient array 320, an addition operation is performed in which the resulting multiplication products are added, summed, or accumulated. The result is a filter output (y0) of the digital filter. The filter output (y0) and other filter outputs described herein can be computed using a DSP (or other processor) that has a multiply-accumulate unit (MAC). The MAC unit can perform the MAC operation faster or more efficiently by taking the values ​​of the sample buffer 310 as one operand and the subset of coefficients (specified by the coefficient pointer CP) as a second operand, and producing an output according to equation 330. After generating a filter output, the buffer pointer BP and the coefficient pointer CP are updated, for example, by the at least one processor. As shown in Fig. 3D, the buffer pointer BP was updated to point to the next consecutive or subsequent element of the sample buffer 310. In this case, the next subsequent element is the position / element of sample buffer 310 to the right of the previous position indicated by the buffer pointer BP. The buffer pointer BP thus "moves" to the right and points to the second element from the left, which in this case has the value R2. The coefficient pointer CP was also updated or moved to a subsequent position. As shown, the coefficient pointer CP (in the left-to-right direction) was moved from its previous position to a preceding subsequent position (moving to the left or opposite to the direction of advance 340) and now points to the element or position of the coefficient array with the coefficient c1 (third element from the left). Thus, the CP pointer is updated to point to the coefficient to be multiplied by the first (leftmost) element of the sample buffer. In various examples, the coefficient pointer CP can move to a preceding element or advance (from the left-to-right perspective or in the direction of 340) to indicate a coefficient one order higher than the preceding coefficient. When the coefficient pointer CP indicates a coefficient of order M (cM), it is generally moved to a position containing a coefficient of a higher order (cM+1) than before when the coefficient pointer CP is updated. An exception occurs when the coefficient pointer moves from the highest-order coefficient (cN-1) to the lowest-order coefficient (c0). The coefficient pointer CP can be moved or advanced consistently in one direction, one element, or one position at a time, except when the coefficient pointer CP is at a boundary, a start or end position / start or end element of the coefficient array 320. In the present embodiments, an end position of an array or buffer can be a beginning or an end of the array or buffer. In other words, the end position can be the beginning or the last index position of the array or buffer. After updating the buffer pointer BP, the next new input sample x1 can be retrieved and stored in the sample buffer 310 at the position specified by the buffer pointer BP. In Fig. 3E, after updating the pointers and storing the next sample x1 in sample buffer 310, the next filter output y1 can be determined using the values ​​in sample buffer 310 and the subset of coefficients in coefficient array 320. Again, the values ​​in sample buffer 310 are multiplied by the subset of coefficients in coefficient array 320 specified by the coefficient pointer CP. The multiplicative products are then summed, added, or accumulated to determine the filter output y1. That is, the filter output y1 is also determined using a MAC operation, just like the previous filter output y0 in Fig. 3C. Accordingly, in this example, the filter output y1 is given or defined by equation 330 in Fig. 3E: A MAC operation can also be used to generate the filter output y1. After determining the filter output y1, the pointers BP and CP can then be updated as shown in Fig. 3F. Here too, the buffer pointer BP can move or indicate a next position (e.g., the next position) of the sample buffer 310, and the coefficient pointer CP can also be updated to a next position (e.g., the next preceding position) of the coefficient array 320. In Fig. 3G, the process is repeated similarly, whereby, after updating the pointers BP and CP in Fig. 3G, the next sample input x2 is received and stored in the sample buffer 310 at the position currently indicated by the buffer pointer BP. Then, the next filter output, y2, is determined in the manner previously described in Fig. 3C and Fig. 3E. That is, a MAC operation can be performed, and the filter output y2 is determined by the following equation 330 in Fig. 3G: In Fig. 3H, the buffer pointer BP and the coefficient pointer are updated again. The buffer pointer BP moves to the right and points to the next element, which is now the last or rightmost element. The coefficient pointer CP moves to the left to the next preceding element. Accordingly, the coefficient pointer CP again points to the position or element in the coefficient array 320 that is to be multiplied by the first or leftmost element of the sample buffer 310, which still contains the value x0, of the oldest stored input sample. In Fig. 3I, the sample buffer 310 was updated again to store the next received input sample x3. After storing the input sample x3, the filter output y3 can be determined as described previously, e.g., by a MAC operation using the values ​​in the sample buffer 310 and the corresponding subset of coefficients in the coefficient array 320. The filter output y3 in Fig. 3I is therefore given by equation 330: After determining the filter output y3, the buffer pointer BP and the coefficient pointer CP are updated and moved. However, as shown in Fig. 3H and Fig. 3I, before they are moved, both the buffer pointer BP and the coefficient pointer CP are at or indicate the end positions, end elements, or boundaries of the sample buffer 310 and the coefficient array 320, respectively. Since the sample buffer 310 is a ring buffer, advancing the buffer pointer BP to the next position of the sample buffer 310 at the right end position or boundary brings the buffer pointer BP to the first or leftmost position / element of the sample buffer 310. This is illustrated in Fig. 3J. In general, in the embodiments described here, the buffer pointers BP can always advance to the next position in the sample buffer because the sample buffer is a ring buffer and its end positions or boundaries are therefore interconnected or logically linked. For the coefficient pointer CP, the coefficient array 320 is not a ring buffer, and therefore there is no next position from the leftmost end position or the leftmost end element of the coefficient array 320. When the coefficient pointer CP reaches the end (far left) of the coefficient array 320, the coefficient pointer CP advances to a predefined position. In the example of Fig. 3J, this predefined or predetermined position can be the position of the coefficient array 320 with the first instance (from left to right) of the lowest-order coefficient, c0, since the coefficient pointer CP previously pointed to the coefficient c3, the highest-order coefficient of the digital filter with 4 taps. After the buffer pointer BP in Fig. 3K has been updated, the next or newest input sample x4 can be stored in sample buffer 310 according to the position specified by the buffer pointer BP. In this case, the new sample x4 replaces the previous oldest sample x0 in the sample buffer. After updating the pointer and storing sample x4, the filter output y4 is again determined using the samples in sample buffer 310 and the subset of coefficients in coefficient array 320 (again specified by the coefficient pointer CP). Another MAC operation is then performed using the samples in sample buffer 310 and the subset of coefficients in coefficient array 320. The filter output y4 in Fig. 3K is given by the following equation: The process shown in Figs. 3A-3K can continue indefinitely until a reset or initialization is performed. Fig. 3L, for example, shows the next advance of pointers BP and CP, and Fig. 3M shows the next filter output y5 from the next input sample x5. When a reset is performed, the sample buffer 310 can return to a state containing the reset values ​​shown in Fig. 3A or other values. Furthermore, the buffer pointer BP and the coefficient pointer CP can return and indicate or point to the positions of the sample buffer 310 and the coefficient array 320 shown in Fig. 3B. The sample buffer 310 and coefficient array 320 described or illustrated in Figures 3A-3M are merely examples of how samples / values ​​and coefficients can be arranged or stored. For example, the input samples can be stored in reverse order or direction, e.g., from right to left (opposite to the direction of 340), with the rightmost element being the "first" element. Furthermore, the coefficients of the coefficient array can also be arranged or stored differently, e.g., in reverse order to the arrangement shown in Figures 3A-3M. Furthermore, as already explained, the coefficient array 320 does not require the last or rightmost coefficient c0 to implement the digital filter. That is, the last element or the last position of the coefficient array does not need to be used or implemented. The coefficient array only requires 2N-1 elements, where N is the number of taps of the digital filter to be implemented. According to other examples, other coefficients can be excluded or omitted from a coefficient array. Referring to coefficient array 320 of Fig. 3A, instead of omitting the rightmost element or the rightmost coefficient c0, the leftmost element or the leftmost coefficient c3 can be omitted from the coefficient array. An example of this is coefficient array 420 from Fig. 4A. As shown, coefficient array 420 has a length of 7 (or 2N-1, where N equals 4), and the coefficient at the leftmost position or element of coefficient array 420 is c2, and the rightmost coefficient is c0. Accordingly, references 420a and 420b refer to elements similar to references 320a and 320b of Fig. 3A. In Figures 4A-4D, the coefficient array 420 can be used to implement a digital filter or process 400, e.g., similar to the process 300 described in Figures 3A-3M. Figure 4B, for example, shows an implementation at the same location as Figure 3G, where two filter outputs were computed after the reset. In this case, the sample buffer 410 can be implemented in the same way as the sample buffer 310. In Figure 4B, a third sample input x2 was received and stored at the position specified by the buffer pointer BP. The position of the buffer pointer BP in Figure 4B is the same as the position of the buffer pointer BP in Figure 3G. The coefficient pointer CP in Figure 4B and the coefficient pointer CP in Figure 3G each point to or specify a position with the same coefficient (c2). The position of the coefficient pointer CP from Fig.However, in Fig. 4B, the element or position is located one element or position before or to the left of the position indicated by the coefficient pointer CP of Fig. 3G. The coefficient pointer CP from Fig. 4B is located at the first position or the leftmost element of the sample buffer 410, while the coefficient pointer CP of Fig. 3G is located at or indicates the second position or the second position from the left of the sample buffer 310. The filtering process in Fig. 4B proceeds as previously described, since a MAC operation is implemented to generate the filter output y2, which uses the same subset of coefficients as the MAC operation implemented in Fig. 3G. Accordingly, equation 430 for the output y2 in Fig. 4B is the same as equation 330 in Fig. 3G. After determining the filter output y2, the pointers BP and CP in Fig. 4D are updated or moved. Since the coefficient pointer CP is located at the far left, or beginning, of the coefficient array 420 in this case, it cannot be moved to a previous element of the coefficient array 420. Instead, the coefficient array 420 is set or advanced to the position containing the coefficient c3, which has a coefficient of order one greater than the coefficient (c2) at the previous position of the coefficient pointer CP. Accordingly, the coefficient pointer CP now indicates the fourth position, or the fourth from the left, or the beginning of the coefficient array 420. The filter output y3 can also be determined here (e.g., using a MAC operation). As can be seen, equation 430, which gives the filter output y3, is the same as equation 330 from Fig. 3I. As mentioned previously, the approach or process described in Figures 3A-3M or 4A-4D, the propagation direction, or the direction in which the samples / values ​​of the sample buffer and the coefficients of the coefficient array are aligned (see arrows 340 and 440), depends on the arrangement of the samples and coefficients in the sample buffer and coefficient buffer, respectively. In other cases, the samples and coefficients may be arranged in the opposite or reverse order / direction to the arrangements shown in Figures 3A-4D, and the propagation direction may also be reversed. The updating or moving of the buffer pointer and the coefficient pointer may also be opposite or reversed in such cases. Figure 5 shows exemplary sample code which, when executed, can implement a digital filtering process similar to that described in conjunction with Figures 3A-3M. In the example shown in Figure 5, the sample code, when executed, can implement a digital FIR filter with 8 taps. Fig. 6 shows a sample code 600 that implements a similar method to the one described in conjunction with Figs. 4A-4D. In the example of Fig. 6, the sample code, when executed, implements a digital FIR filter with 8 taps. Fig. 7 shows an exemplary method 700 for digitally filtering samples according to at least one exemplary embodiment of the present disclosure. Method 700 comprises, at 710, providing a sample buffer configured to store samples, wherein the sample buffer is a ring buffer. At 720, the method further comprises providing a coefficient array that stores coefficients of a digital filter, wherein the coefficient array includes a set of coefficients for the digital filter and a copy of the set of coefficients.Furthermore, at 730, the procedure further comprises, for each sample from a plurality of input samples: - at 740, obtaining the sample and storing the sample in the sample buffer at a position of the sample buffer indicated by a buffer pointer; - at 750, computing an output sample, comprising performing a multiply-accumulate (MAC) operation with the samples stored in the sample buffer and a subset of the coefficients stored in the coefficient array, wherein a position of the subset of coefficients is indicated by a coefficient pointer; and - at 760, updating the buffer pointer and the coefficient pointer. In one or more exemplary embodiments of the present disclosure, the processes or methods described herein may be implemented on a sample-by-sample basis. That is, the determination of a filter output may be triggered by the arrival of an incoming input sample. For example, one or more processors (e.g., DSPs) implementing one of the methods or variants thereof may be in a sleep state and then wake up in response to the arrival of a new sample. The sample inputs may then be supplied in a stream or on a consistent basis or at a uniform rate. In various examples, the rate of input samples arriving at the filter may be independent of whether the one or more processors implementing the filter or filtering described herein are asleep or not. In some cases, the processor(s) implementing the digital filter may also sleep until a new sample or samples arrive, the arrival of which wakes up the one or more processors. In one or more exemplary embodiments of the present disclosure, SIMD (Single-Instruction-Multiple-Data) instructions can be used to implement the described processes or procedures. For example, DSPs executing an arbitrary SIMD instruction implement the following for two coefficients (ci, ci+1) stored in C and two input samples (xn, x) stored in B:n+1 Therefore, the use of SIMD instructions in various embodiments of the present disclosure (e.g., methods 300, 400, etc.) can be used to retrieve multiple coefficients and multiple samples or values ​​for calculating an output sample y[n]. In conjunction with Figures 3A-3M and 4A-4D, examples of digital filtering methods for an N-tap filter, where N=4, were given. However, these methods or variants can also be implemented for any size N and are not limited to N=4. In this case, Figure 8 shows an example of a corresponding sample buffer 810 and a coefficient array 820 for any size N. Figure 820a shows the set of coefficients and Figure 820b a copy of the set of coefficients. Figures 9A-9K show another method 900 for implementing a digital filter according to another exemplary embodiment of the present disclosure. The process 900 can be implemented similarly to the process 300 described in Figures 3A-3M. As in Figure 3A, the exemplary process 900 applies to a digital filter with 4 taps (N=4). However, as shown in Figure 9A, the coefficient array 920 is implemented differently. As shown, the set of coefficients 920a is stored together or sequentially as in other examples, but the coefficients of the copy of the set of coefficients are not stored together. In this example, the copy of the coefficients has a first part 920b1 and a second part 920b2. The last coefficient, c1, is optional for the coefficient array 920 and can be omitted in the second part 920b2 of the copy of the coefficients. Furthermore, sample buffer 910 also contains reset values, e.g., after initialization or after a pause. However, the reset values ​​may be implemented differently in this case. That is, the "oldest" reset value R3 is no longer stored at either the beginning or end of sample buffer 910. Fig. 9B shows the buffer pointer BP and the coefficient pointer CP in predefined output or reset positions. The buffer pointer BP in Fig. 9B starts or initializes at the second position or second index position from the left in sample buffer 910. In contrast, the buffer pointer BP in Fig. 3B starts or initializes at the first or leftmost end position of sample buffer 310. That is, the buffer pointer BP in Fig. 9B no longer needs to be reset or initialized at an end position or boundary of sample buffer 910. The coefficient pointer CP of Fig. 9B also has the same starting or initialization position as the coefficient pointer CP of Fig. 3B. Here in Fig. 9B, the coefficient pointer CP points to the coefficient c1 and not to the coefficient c0 as in Fig. 3B. Nevertheless, the process of determining the output samples in process 900 is similar to that of process 300. As with processes 300 and 400, the buffer pointer BP in Figures 9A-9K is updated in a similar manner to advance to the right (like the forward direction in 940) to point to or display the oldest value in sample buffer 910. As with processes 300 and 400, the calculation of the output samples y[n] is also performed in a similar way. As shown in Figure 9C, the filter output is specified by equation 930: As in other exemplary embodiments of the present disclosure, determining the filter output y0 can involve multiplying current values ​​of the sample buffer 910 by corresponding coefficients of the coefficient array 920. The corresponding coefficients are a subset of the coefficients stored in the coefficient array, each containing, for example, one of the coefficients (c - c03). The coefficient pointer CP displays the corresponding coefficients or the subset, for example, by indicating the beginning or end of the subset of corresponding coefficients. The coefficients to be used again for multiplication, i.e., the corresponding subset of coefficients, are located sequentially or at successive positions in the coefficient array 920. Equation 930 for Fig. 9C is, in fact, the same as equation 330 for Fig. 3C. That is to say, in both Fig. 3C and Fig.In 9C, the same equation is used to determine the output y0. As in other cases, the multiplication operation involves multiplying the sample or the value of the first (leftmost) element of sample buffer 910 and the coefficient in coefficient array 920 located at the position specified by the coefficient pointer CP. Therefore, R0, stored in the first (leftmost) element of sample buffer 910, can be retrieved and multiplied by the coefficient c1, retrieved from the position of coefficient array 920 specified by the coefficient pointer CP. The other values ​​or samples of coefficient array 920 can be multiplied in a similar manner. Again, the multiplication process proceeds by multiplying the remaining values ​​of sample buffer 910 and their corresponding coefficients in coefficient array 920. The value x0, stored in the second element, or the second element from the left, of sample buffer 910, is the next or subsequent element after the first element of sample buffer 910. Thus, x0 can be retrieved and multiplied by the coefficient c0, which is retrieved from the next or subsequent position in coefficient array 920, removed from the position specified by the coefficient pointer CP. Furthermore, the reset value R2, located at the next position / element (the third element from the left of sample buffer 910), is retrieved and multiplied by the coefficient c3, which is retrieved from the next or subsequent position removed from the coefficient pointer CP. Finally, in this example, the value R1, stored in the next or subsequent element (the fourth or last element of sample buffer 910), is retrieved and multiplied by the coefficient c2, which is retrieved from the next or subsequent position removed from the position indicated by the coefficient pointer CP. For illustrative purposes, in Fig. 9C the sample buffer 910 was again horizontally aligned with the subset of coefficients in the coefficient array 920 to show the correspondence for the MAC operations. As indicated by the arrow 940, the multiplication process with respect to the sample buffer 910 and the coefficient array 920 is traversed or performed in a single direction. As shown in Figs. 9D-9K, process 900 continues as in other examples described here, with the buffer pointer BP and the coefficient pointer CP advancing after a MAC operation and the obtained samples being stored at the position of the sample buffer 910 specified by the buffer pointer BP. Furthermore, the MAC operations and equations 930 for outputs y1, y2, y3, etc., can be identical to equations 330 for outputs y1, y2, y3, etc. In Fig. 9J, the coefficient pointer CP has been reset to an output position. Previously, the coefficient pointer CP had advanced to the left to the first position of the coefficient array 920. During the update in Fig. 9K, the coefficient pointer is reset to the fourth position of the coefficient array to again display the coefficient c1. Similarly, the buffer pointer BP has also returned to its output position, which contains the oldest value x0. As in other cases, the buffer pointer BP moves to the right, or in the forward direction 940, according to the specifications or principles of the sample buffer 910, which is a ring buffer whose boundaries or end sections (first and last positions) are connected. As shown in Fig. 9K, the value x0, the oldest value, is replaced by the newest value, x4. The process 900 can be continued with a new sample or reset, e.g. to the state shown in Fig. 9A. Although method 900 is shown for the case of N=4, the value of N can have different values, as with the other methods (300, 400, etc.). Furthermore, other variants of method 900 can be implemented. As described in other exemplary embodiments of the present disclosure, process 900 can be implemented in reverse order, i.e., the coefficients of the coefficient array 920 and the values ​​of the sample buffer 910 are stored in reverse order, and the movement of the buffer pointer BP, the coefficient pointer CP, and the forward direction 940 of the MAC operations are also implemented in an order that is reversed to that shown in Figures 9A-9K. The various embodiments disclosed here for implementing a digital filter require fewer instructions to process a single input sample. Furthermore, some embodiments produce time-equidistant filter outputs or output samples, which can be advantageous for systems with strict timing requirements. For example, the processes, devices, or methods described here can be used in decomposition filters such as multiphase filters, which divide the filtering function into subfilters. These subfilters can, in turn, be implemented using the filtering processes, methods, or devices described here.Although the application of some of the methods has been described using a MAC unit or a DSP, such components are not required to carry out the embodiments described here, as other processors, devices or components can also be used to carry out the method. The following examples relate to further aspects of this disclosure: Example 1 is a method for filtering a plurality of discrete samples, comprising: providing a sample buffer configured to store samples, wherein the sample buffer is a ring buffer; providing a coefficient array storing coefficients of a digital filter, wherein the coefficient array comprises a set of coefficients for the digital filter and a copy of the set of coefficients; wherein the method, for each sample of a plurality of input samples, comprises: receiving the sample and storing the sample as a value in the sample buffer at a position in the sample buffer indicated by a buffer pointer; computing an output sample, comprising performing a multiply-accumulate (MAC) operation with values ​​currently stored in the sample buffer and a subset of the coefficients,which are stored in the coefficient array, wherein a position of the subset of coefficients in the coefficient array is indicated by a coefficient pointer; and updating the buffer pointer and the coefficient pointer. Example 2 is the subject of Example 1, wherein the buffer pointer can indicate a position in the sample buffer that contains an oldest value of the sample buffer. Example 3 is the subject of Example 1 or 2, wherein performing the MAC operation can further include: multiplying the values ​​of the sample buffer each by the subset of coefficients to produce a plurality of multiplicative products, summing the multiplicative products together to produce a filter output. Example 4 is the subject of Example 3, wherein multiplying the values ​​of the sample buffer each by the subset of coefficients for a plurality of iterations can include: retrieving one of the values ​​from the sample buffer,Retrieving the corresponding coefficient for the retrieved sample and multiplying the retrieved sample by the retrieved coefficient. Example 5 is the subject of Example 4, wherein for the plurality of iterations an initially retrieved value may be the value located at an end position of the sample buffer, and each value retrieved after the initially retrieved sample may be located one position further away in the sample buffer from the initially retrieved value, and an initially retrieved coefficient may be the coefficient located at a position of the coefficient array indicated by the coefficient pointer, and wherein each sample after the initially retrieved coefficient is positioned one position further away from the initially retrieved coefficient in the coefficient array. Example 6 is the subject of any one of Examples 1 to 5.where updating the buffer pointer can include updating the buffer pointer to display a position in the sample buffer that is one position further away from the previous position displayed by the buffer pointer, each update of the buffer pointer advancing the position displayed by the buffer pointer in a first direction. Example 7 is the subject of any one of Examples 1 to 6, where updating the coefficient pointer can include: updating the coefficient pointer to display a position in the coefficient array that is one position further away from the previous position displayed by the coefficient pointer, if the previous position is not at an end position or boundary of the coefficient array, and where the update is performed in a second direction, and updating the coefficient pointer to a predefined position.when the previous position is at an end position of the coefficient array. Example 8 is the subject of Example 7, wherein the second direction may be opposite to the first direction. Example 9 is the subject of any of Examples 1 to 6, wherein the copy of the set of coefficients may contain all or fewer than all of the coefficients of the set of coefficients. Example 10 is the subject of Example 1, wherein performing a multiply-accumulate (MAC) operation may involve performing the MAC operation with a MAC unit that takes the values ​​currently stored in the sample buffer as a first input operand and the subset of the coefficients of the coefficient array as a second input operand. Example 11 is the subject of any of Examples 1 to 10, wherein the digital filter may be a finite impulse response (FIR) filter. Example 12 is the subject of any of Examples 1 to 10.where the digital filter can be an infinite impulse response (IIR) filter. Example 13 is the subject of any one of Examples 1 to 11, wherein the digital filter can be an N-tap digital filter, wherein the sample buffer length is N, the coefficient array length is 2N-1, and the set of coefficients in the coefficient array length is N, and the copy of the set of coefficients in the coefficient array length is N-1. Example 14 is the subject of any one of Examples 1 to 11, wherein the set of coefficients can be arranged in ascending or descending order in the coefficient array. Example 15 is the subject of any one of Examples 1 to 14, wherein the sample acquisition can include obtaining the sample from an analog-to-digital converter (ADC). Example 16 is the subject of any one of Examples 1 to 15, further comprising applying a reset to the digital filter. can,Featuring: storing reset values ​​in the sample buffer; updating the buffer pointer to display a predefined reset position of the sample buffer; updating the coefficient array to display a predefined reset position of the coefficient array. Example 17 is the subject of Example 16, where the buffer pointer can be updated to an end position of the sample buffer. Example 1A is a persistent, computer-readable medium comprising instructions configured to be executed by at least one processor, and inducing the at least one processor to perform a procedure for filtering a plurality of discrete samples, comprising: wherein, for each sample of a plurality of input samples, the at least one processor is configured to: receive a sample and store the sample as a value in a sample buffer at a position of the sample buffer indicated by a buffer pointer, wherein the sample buffer is a ring buffer; compute an output sample, comprising performing a multiply-accumulate (MAC) operation on values ​​currently stored in the sample buffer and a subset of the coefficients stored in a coefficient array, wherein a position of the subset of coefficients in the coefficient array is indicated by a coefficient pointer;and updating the buffer pointer and the coefficient pointer.; Example 2A is the subject of Example 1A, where the buffer pointer can indicate a position in the sample buffer that has an oldest value in the sample buffer. Example 3A is the subject of Example 1A or 2A, where performing the MAC operation may further include: multiplying the values ​​of the sample buffer by the subset of coefficients to generate a plurality of multiplicative products, and summing the multiplicative products to generate a filter output. Example 4A is the subject of Example 3A, where multiplying the values ​​of the sample buffer by the subset of coefficients for a plurality of iterations may involve: retrieving one of the values ​​from the sample buffer, retrieving the corresponding coefficient for the retrieved sample, and multiplying the retrieved sample by the retrieved coefficient. Example 5A is the subject of Example 4A, wherein for the plurality of iterations an initially retrieved value may be the value located at an end position of the sample buffer, and each value retrieved after the initially retrieved sample may be located one position further away in the sample buffer from the initially retrieved value in the sample buffer, and an initially retrieved coefficient may be the coefficient located at a position of the coefficient array indicated by the coefficient pointer, and wherein each sample after the initially retrieved coefficient is positioned one position further away from the initially retrieved coefficient in the coefficient array. Example 6A is the subject of any one of Examples 1A to 5A, wherein the buffer pointer update may include an update of the buffer pointer to indicate a position in the sample buffer that is one position further away from the previous position indicated by the buffer pointer, wherein each buffer pointer update advances the position indicated by the buffer pointer in a first direction. Example 7A is the subject of any of Examples 1A to 6A, wherein the update of the coefficient pointer may include: updating the coefficient pointer to indicate a position in the coefficient array that is one position further away from the previous position indicated by the coefficient pointer, if the previous position is not at an end position or boundary of the coefficient array, and wherein the update is performed in a second direction, and updating the coefficient pointer to a predefined position if the previous position is at an end position of the coefficient array. Example 8A is the subject of Example 7A, where the second direction can be a direction opposite to the first direction. Example 9A is the subject of any of Examples 1A to 6A, where the copy of the set of coefficients may contain all or fewer than all of the coefficients of the set of coefficients. Example 10A is the subject of Example 1A, wherein performing a Multiply-Accumulate (MAC) operation may involve performing the MAC operation with a MAC unit which takes the values ​​currently stored in the sample buffer as a first input operand and the subset of coefficients of the coefficient array as a second input operand. Example 11A is the subject of one of Examples 1A to 10A, where the digital filter can be a finite impulse response (FIR) filter. Example 12A is the subject of one of Examples 1A to 10A, where the digital filter can be an Infinite Impulse Response (IIR) filter. Example 13A is the subject of any one of Examples 1A to 11A, wherein the digital filter can be an N-tap digital filter, where the length of the sample buffer is N, where the length of the coefficient array is 2N-1, and where the length of the set of coefficients in the coefficient array is N, and the length of the copy of the set of coefficients in the coefficient array is N-1. Example 14A is the subject of any of Examples 1A to 11A, where the set of coefficients can be arranged in ascending or descending order in the coefficient array. Example 15A is the subject of any of Examples 1A to 14A, where obtaining the sample may involve obtaining the sample from an output of an analog-to-digital converter (ADC). Example 16A is the subject of one of Examples 1A to 13A, which may further include applying a reset to the digital filter, comprising: storing reset values ​​in the sample buffer; updating the buffer pointer to display a predefined reset position of the sample buffer; updating the coefficient array to display a predefined reset position of the coefficient array. Example 17A is the subject of Example 16A, where the buffer pointer can be updated to an end position of the sample buffer. Example 1B is a device configured for filtering a plurality of discrete samples, comprising: at least one processor; a sample buffer configured for storing samples, wherein the sample buffer is a ring buffer; a coefficient array storing coefficients of a digital filter, wherein the coefficient array comprises a set of coefficients for the digital filter and a copy of the set of coefficients; wherein, for each sample from a plurality of input samples, the at least one processor is configured to: receive the sample and store the sample as a value in a sample buffer at a position of the sample buffer indicated by a buffer pointer;Computation of an output sample, comprising performing a multiply-accumulate (MAC) operation on values ​​currently stored in the sample buffer and a subset of the coefficients stored in the coefficient array, wherein the position of the subset of coefficients in the coefficient array is indicated by a coefficient pointer; and updating the buffer pointer and the coefficient pointer. Example 2B is the subject of Example 1B, where the buffer pointer can indicate a position in the sample buffer that has an oldest value in the sample buffer. Example 3B is the subject of Example 1B or 2B, where performing the MAC operation may further include: multiplying the values ​​of the sample buffer by the subset of coefficients to generate a plurality of multiplicative products, summing the multiplicative products together to generate a filter output. Example 4B is the subject of Example 3B, where multiplying the values ​​of the sample buffer by the subset of coefficients for a plurality of iterations may involve: retrieving one of the values ​​from the sample buffer, retrieving the corresponding coefficient for the retrieved sample, and multiplying the retrieved sample by the retrieved coefficient. Example 5B is the subject of Example 4B, wherein for the plurality of iterations an initially retrieved value may be the value located at an end position of the sample buffer, and each value retrieved after the initially retrieved sample may be located one position further away in the sample buffer from the initially retrieved value in the sample buffer, and an initially retrieved coefficient may be the coefficient located at a position of the coefficient array indicated by the coefficient pointer, and wherein each sample after the initially retrieved coefficient is positioned one position further away from the initially retrieved coefficient in the coefficient array. Example 6B is the subject of any one of Examples 1B to 5B, wherein the buffer pointer update may include an update of the buffer pointer to indicate a position in the sample buffer that is one position further away from the previous position indicated by the buffer pointer, wherein each buffer pointer update advances the position indicated by the buffer pointer in a first direction. Example 7B is the subject of any one of Examples 1B to 5B, wherein the update of the coefficient pointer may include: updating the coefficient pointer to indicate a position in the coefficient array that is one position further away from the previous position indicated by the coefficient pointer, if the previous position is not at an end position or boundary of the coefficient array, and wherein the update is performed in a second direction, and updating the coefficient pointer to a predefined position if the previous position is at an end position of the coefficient array. Example 8B is the subject of Example 7B, where the second direction can be a direction opposite to the first direction. Example 9B is the subject of any of Examples 1B to 6B, where the copy of the set of coefficients may contain all or fewer than all of the coefficients of the set of coefficients. Example 10B is the subject of Example 1B, which may further include: a Multiply-Accumulate (MAC) unit, wherein performing a Multiply-Accumulate (MAC) operation may include performing the MAC operation with a MAC unit which takes the values ​​currently stored in the sample buffer as a first input operand and the subset of the coefficients of the coefficient array as a second input operand. Example 11B is the subject of one of Examples 1B to 10B, where the digital filter can be a finite impulse response (FIR) filter. Example 12B is the subject of one of Examples 1B to 10B, where the digital filter can be an infinite impulse response (IIR) filter. Example 13B is the subject of any one of Examples 1B to 11B, wherein the digital filter can be an N-tap digital filter, where the length of the sample buffer is N, where the length of the coefficient array is 2N-1, and where the length of the set of coefficients in the coefficient array is N, and the length of the copy of the set of coefficients in the coefficient array is N-1. Example 14B is the subject of any of Examples 1B to 11B, where the set of coefficients can be arranged in ascending or descending order in the coefficient array. Example 15B is the subject of any of Examples 1B to 14B, wherein receiving the sample may involve receiving the sample provided by an output of an analog-to-digital converter (ADC). Example 16B is the subject of Example 15B, where the ADC can be configured to provide the input sample to at least one processor for digital filtering. Example 17B is the subject of any of Examples 1B to 14B, wherein the at least one processor may further be configured to apply a reset to the digital filter, comprising: storing reset values ​​in the sample buffer; updating the buffer pointer to display a predefined reset position of the sample buffer; updating the coefficient array to display a predefined reset position of the coefficient array. Example 18B is the subject of Example 17B, where the buffer pointer can be updated to an end position of the sample buffer. Example 19 is the subject of one of Examples 1B to 18B, wherein the at least one processor may include a digital signal processor (DSP).

Claims

A device (100) configured for filtering a plurality of discrete samples, comprising: at least one processor; a sample buffer (310) configured for storing samples, wherein the sample buffer (310) is a ring buffer; a coefficient array (320) storing coefficients of a digital filter, wherein the coefficient array (320) comprises a set of coefficients (320a) for the digital filter and a copy of the set of coefficients (320b); wherein, for each sample of a plurality of input samples, the at least one processor is configured to: receive a sample and store the sample as a value in a sample buffer (310) at a position of the sample buffer (310) indicated by a buffer pointer;Computation of an output sample (y[n]), comprising performing a multiply-accumulate (MAC) operation on values ​​currently stored in the sample buffer (310) and a subset of the coefficients stored in the coefficient array (320), wherein a position of the subset of coefficients in the coefficient array (320) is indicated by a coefficient pointer (CP); and updating the buffer pointer and the coefficient pointer (CP). The device (100) according to claim 1, wherein performing the MAC operation further comprises: multiplying the values ​​of the sample buffer (310) each by the subset of coefficients to generate a plurality of multiplicative products, and summing the multiplicative products together to generate a filter output. The device (100) according to one of claims 1 or 2, wherein updating the buffer pointer comprises updating the buffer pointer to indicate a position in the sample buffer (310) that is one position further away from the previous position indicated by the buffer pointer, wherein each update of the buffer pointer advances the position indicated by the buffer pointer in a first direction. The device (100) according to claims 1 to 3, wherein the updating of the coefficient pointer (CP) comprises: updating the coefficient pointer (CP) to indicate a position in the coefficient array (320) that is one position further away from the previous position indicated by the coefficient pointer (CP) if the previous position is not at an end position of the coefficient array (320), and wherein each update advances the position indicated by the coefficient pointer (CP) in a second direction, and updating the coefficient pointer (CP) to a predefined position if the previous position is at an end position of the coefficient array (320). The device (100) according to claim 1, further comprising: a Multiply-Accumulate unit (MAC); wherein the performance of the Multiply-Accumulate operation (MAC) comprises that the at least one processor performs the MAC operation by means of the MAC unit using the values ​​currently stored in the sample buffer (310) as a first input operand and the subset of the coefficients of the coefficient array (320) as a second input operand. The device (100) according to any one of claims 1 to 5, wherein the digital filter is a finite impulse response (FIR) filter. The device (100) according to any one of claims 1 to 5, wherein the digital filter is an infinite impulse response (IIR) filter. The device (100) according to one of claims 1 to 7, further comprising: an analog-to-digital converter (ADC), wherein the ADC is configured to supply input samples to at least one processor for digital filtering. The device (100) according to any one of claims 1 to 8, wherein the at least one processor is further configured to: apply a reset to the digital filter, comprising: storing reset values ​​in the sample buffer; (310) updating the buffer pointer to display a predefined reset position of the sample buffer (310); updating the coefficient array (320) to display a predefined reset position of the coefficient array (320). The device (100) according to any one of claims 1 to 9, wherein the at least one processor comprises a digital signal processor (DSP). A method for filtering a plurality of discrete samples, comprising: providing a sample buffer configured to store samples, wherein the sample buffer is a ring buffer (710); providing a coefficient array storing coefficients of a digital filter, wherein the coefficient array comprises a set of coefficients for the digital filter and a copy of the set of coefficients (720); comprising, for each sample from a plurality of input samples (730): retrieving the sample and storing the sample as a value in the sample buffer at a position in the sample buffer indicated by a buffer pointer (740);Computation of an output sample, comprising performing a multiply-accumulate (MAC) operation on values ​​currently stored in the sample buffer and a subset of the coefficients stored in the coefficient array, wherein a position of the subset of coefficients in the coefficient array is indicated by a coefficient pointer (750); and updating the buffer pointer and the coefficient pointer (760). The method according to claim 11, wherein the buffer pointer indicates a position in the sample buffer which has an oldest value of the sample buffer. The method according to claim 11 or 12, wherein performing the MAC operation further comprises: multiplying the values ​​of the sample buffer each by the subset of coefficients to generate a plurality of multiplicative products, and summing the multiplicative products together to generate a filter output. The method according to claim 13, wherein the multiplication of the values ​​of the sample buffer each with the subset of coefficients for a plurality of iterations comprises: retrieving one of the values ​​from the sample buffer, retrieving the corresponding coefficient for the retrieved sample, and multiplying the retrieved sample with the retrieved coefficient. The method according to claim 14, wherein for the plurality of iterations, an initially retrieved value is the value located at an end position of the sample buffer, and each value retrieved after the initially retrieved sample is located one position further away from the initially retrieved value in the sample buffer, and an initially retrieved coefficient is the coefficient located at a position of the coefficient array indicated by the coefficient pointer, and wherein each sample after the initially retrieved coefficient is arranged one position further away from the initially retrieved coefficient in the coefficient array. The method according to any one of claims 11 to 15, wherein updating the buffer pointer comprises updating the buffer pointer to indicate a position in the sample buffer that is one position further away from the previous position indicated by the buffer pointer, wherein each update of the buffer pointer advances the position indicated by the buffer pointer in a first direction. The method according to claims 11 to 16, wherein updating the coefficient pointer comprises: updating the coefficient pointer to indicate a position in the coefficient array that is one position further away from the previous position indicated by the coefficient pointer, if the previous position is not at an end position or boundary of the coefficient array, and wherein the update is performed in a second direction, and updating the coefficient pointer to a predefined position if the previous position is at an end position of the coefficient array, wherein the second direction is a direction opposite to the first direction, and wherein the copy of the set of coefficients contains all or fewer than all the coefficients of the set of coefficients. The method according to one of claims 11 to 16, wherein the digital filter is an N-tap digital filter, wherein the length of the sample buffer is N, wherein the length of the coefficient array is 2N-1, and wherein the length of the set of coefficients in the coefficient array is N, and the length of the copy of the set of coefficients in the coefficient array is N-1. A persistent, computer-readable medium comprising instructions configured to be executed by at least one processor, and instructing the at least one processor to perform a method for filtering a plurality of discrete samples, wherein, for each sample of a plurality of input samples, the at least one processor is configured to: receive a sample and store the sample as a value in a sample buffer at a position of the sample buffer indicated by a buffer pointer, the sample buffer being a ring buffer; computation of an output sample, comprising performing a multiply-accumulate (MAC) operation with values ​​currently stored in the sample buffer and a subset of the coefficients stored in a coefficient array, wherein a position of the subset of coefficients in the coefficient array is indicated by a coefficient pointer;and updating the buffer pointer and the coefficient pointer.; The computer-readable medium according to claim 19, comprising performing a multiply-accumulate operation (MAC), performing the MAC operation by means of a MAC unit using the values ​​currently stored in the sample buffer as a first input operand and the subset of the coefficients of the coefficient array as a second input operand.

Citation Information

Patent Citations

  • Digital filter instruction and filter implementing the filter instruction

    US20060195498A1