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
}`
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
}`