package gpudemod // BuildPolyphaseTapsPhaseMajor builds a phase-major polyphase tap layout: // tapsByPhase[p][k] = h[p + k*D] // Flattened as: [phase0 taps..., phase1 taps..., ...] func BuildPolyphaseTapsPhaseMajor(base []float32, decim int) []float32 { if decim <= 0 || len(base) == 0 { return nil } maxPhaseLen := (len(base) + decim - 1) / decim out := make([]float32, decim*maxPhaseLen) for p := 0; p < decim; p++ { for k := 0; k < maxPhaseLen; k++ { src := p + k*decim if src < len(base) { out[p*maxPhaseLen+k] = base[src] } } } return out } func PolyphasePhaseLen(baseLen int, decim int) int { if decim <= 0 || baseLen <= 0 { return 0 } return (baseLen + decim - 1) / decim }