FIR(Finite Inpluse Response) フィルター
実float FIR
vDSP_desamp(
const float * A, // real input vector A のサイズは DF * (N-1) + P 以上
vDSP_Stride DF, // Decimation factor
const float * F, // real filter vector
float * C, // real output vector
vDSP_Length N, // length of output vector c
vDSP_Length P); // length of filter F
for (int n = 0; n < N; ++n)
{
float sum = 0;
for (int p = 0; p < P; ++p) {
sum += A[n * DF + p] * F[p];
}
C[n] = sum;
}
複素float FIR
void vDSP_zrdesamp(
const DSPSplitComplex *A,
vDSP_Stride DF,
const float *F,
const DSPSplitComplex *C,
vDSP_Length N,
vDSP_Length P);
for (int n = 0; n < N; ++n) {
sum = 0;
for (p = 0; p < P; ++p)
sum += A[n*DF+p] * F[p];
C[n] = sum;
}
IIR(Infinite Inpulse Response)フィルター2次
void vDSP_deq22(
const float *A, // real input vector
vDSP_Stride IA, // stride for A
const float *B, // 5 inputs (filter coefficients), with stride 1
float *C, // output vector
vDSP_Stride IC, // stride for C
vDSP_Length N); // number of new output elements to produce
C[n] = A[n ] * B[0]
+ A[n-1] * B[1]
+ A[n-2] * B[2]
- C[n-1] * B[3]
- C[n-2] * B[4]
n = {2, N+1}