Function

vDSP_wiener(_:_:_:_:_:_:_:)

Creates an FIR filter that can be used as a Wiener filter; single precision.

Declaration

func vDSP_wiener(_ __L: vDSP_Length, _ __A: UnsafePointer<Float>, _ __C: UnsafePointer<Float>, _ __F: UnsafeMutablePointer<Float>, _ __P: UnsafeMutablePointer<Float>, _ __Flag: Int32, _ __Error: UnsafeMutablePointer<Int32>)

Parameters

__L

Desired FIR filter length.

__A

Single-precision real input vector: autocorrelation of a given signal.

__C

Single-precision real input vector: cross-correlation of signal and observation.

__F

Single-precision real output vector: FIR filter.

__P

Single-precision real output vector: performance index. See Discussion below.

__Flag

Not currently used, pass zero.

__Error

Error flag.

Discussion

Performs the following operation:

mathematical formula

to solve a set of single-channel normal equations described by:

 B[n] = C[0] * A[n] + C[1] * A[n-1] +, . . . ,+ C[N-1] * A[n-N+1]
 for n = {0, N-1}

where matrix A contains elements of the symmetric Toeplitz matrix shown below. This function can only be done out of place.

Note that A[-n] is considered to be equal to A[n].

vDSP_wiener solves this set of simultaneous equations using a recursive method described by Levinson. See Robinson, E.A., Multichannel Time Series Analysis with Digital Computer Programs. San Francisco: Holden-Day, 1967, pp. 43-46.

 |A[0]  A[1]  A[2] ... A[N-1] |    |C[0]  |   |B[0]  |
 |A[1]  A[0]  A[1] ... A[N-2] |    |C[1]  |   |B[1]  |
 |A[2]  A[1]  A[0] ... A[N-3] |  * |C[2]  | = |B[2]  |
 | ...   ...   ... ... ...    |    | ...  |   | ...  |
 |A[N-1]A[N-2]A[N-3] ... A[0] |    |C[N-1]|   |B[N-1]|

Typical methods for solving N equations in N unknowns have execution times proportional to N3, and memory requirements proportional to N2. By taking advantage of duplicate elements, the recursion method executes in a time proportional to N2 and requires memory proportional to N. The Wiener-Levinson algorithm recursively builds a solution by computing the m+1 matrix solution from the m matrix solution.

With successful completion,vDSP_wiener returns zero in error flag IERR. If vDSP_wiener fails, IERR indicates in which pass the failure occurred.

The solution, left in F, can be used as a Wiener filter.

Beta Software

This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software implemented according to this documentation should be tested with final operating system software.

Learn more about using Apple's beta software