Skip to content

Filtfilt equivalent #32

@mcrooks83

Description

@mcrooks83

I am working with the library to attempt a filtfilt equivalent (python filtfilt). I have attempted the oddExtenstion as in scipy and performing the forward / backward part. There are some other aspects to scipy that i dont understand. Any advice or ideas on how to achieve this?

`private fun filterResultantFiltFilt(resultants: DoubleArray, outputRate: Int): DoubleArray {
val order = 4
val fs = outputRate.toDouble()
val center = (6 + 0.1) / 2
val width = 6 - 0.1

//filtfilt 
val ntaps = 2 * order + 1
println("n taps ${ntaps}")
val edge = ntaps * 3

val extension = oddExtension(resultants, edge)

val forwardFilter = Butterworth().apply {
    bandPass(order, fs, center, width, DirectFormAbstract.DIRECT_FORM_II)
}

// Forward pass
val forwardFiltered = DoubleArray(extension.size)
for (i in extension.indices) {
    forwardFiltered[i] = forwardFilter.filter(extension[i])
}

// Backward pass on reversed signal
val backwardFilter = Butterworth().apply {
    bandPass(order, fs, center, width, DirectFormAbstract.DIRECT_FORM_II)
}
val reversed = forwardFiltered.reversedArray()
val backwardFiltered = DoubleArray(reversed.size)
for (j in reversed.indices) {
    backwardFiltered[j] = backwardFilter.filter(reversed[j])
}

val finalReversed = backwardFiltered.reversedArray()
println("filtered len ${finalReversed.size}")
val filteredTrim = finalReversed.sliceArray(edge until (finalReversed.size - edge))
println("filtered trim len ${filteredTrim.size}")
// Reverse back to original order
return  filteredTrim

}`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions