mirror of
https://github.com/cgzirim/seek-tune.git
synced 2025-12-17 08:54:19 +00:00
Improve downsampling function to handle input length that's not divisible by ratio
This commit is contained in:
parent
026e9398c3
commit
3e3976992a
1 changed files with 5 additions and 6 deletions
|
|
@ -54,28 +54,27 @@ func Spectrogram(samples []float64, sampleRate int) ([][]complex128, error) {
|
|||
return spectrogram, nil
|
||||
}
|
||||
|
||||
// Downsample downsamples a list of float64 values to a specified ratio by averaging groups of samples
|
||||
func downsample(input []float64, ratio int) ([]float64, error) {
|
||||
// if ratio <= 0 || len(input)%ratio != 0 {
|
||||
// return nil, errors.New("invalid or incompatible ratio")
|
||||
// }
|
||||
if ratio <= 0 {
|
||||
return nil, errors.New("invalid or incompatible ratio")
|
||||
}
|
||||
|
||||
outputSize := len(input) / ratio
|
||||
outputSize := (len(input) + ratio - 1) / ratio
|
||||
output := make([]float64, outputSize)
|
||||
|
||||
for i := 0; i < outputSize; i++ {
|
||||
startIndex := i * ratio
|
||||
endIndex := startIndex + ratio
|
||||
if endIndex > len(input) {
|
||||
endIndex = len(input)
|
||||
}
|
||||
sum := 0.0
|
||||
|
||||
for j := startIndex; j < endIndex; j++ {
|
||||
sum += input[j]
|
||||
}
|
||||
|
||||
output[i] = sum / float64(ratio)
|
||||
output[i] = sum / float64(endIndex-startIndex)
|
||||
}
|
||||
|
||||
return output, nil
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue