Do przetwarzania dźwięku (choć równie dobrze może to być przetwarzanie obrazu) Mam jednowymiarową tablicę liczb. (Są to 16-bitowe liczby całkowite ze znakiem reprezentujące próbki audio, to pytanie może dotyczyć również liczb zmiennoprzecinkowych lub liczb całkowitych o różnych rozmiarach jednakowo.)Algorytmy do efektywnego "skalowania" lub "zmiany rozmiaru" tablicy liczb (próbkowanie dźwiękowe)
Aby dopasować dźwięk do różnych częstotliwości (np. Zmieszać próbkę 44,1 kHz z 22 kHz próbka), muszę rozciągnąć lub zgnieść tablicę wartości, aby osiągnąć określoną długość.
Połówkowanie tablicy jest proste: upuść każdą inną próbkę.
[231, 8143, 16341, 2000, -9352, ...] => [231, 16341, -9352, ...]
podwojenie szerokości tablicy jest nieco mniejsza prosta dwukrotnie każdy wpis w miejsce (lub opcjonalnie wykonać pewne interpolacji próbek między sąsiadującymi „prawdziwe”).
[231, 8143, 16341, 2000, -9352, ...] => [231, 4187, 8143, 12242, 16341, ...]
Co chcę jest wydajny, prosty algorytm, który obsługuje dowolny współczynnik skalowania i (najlepiej) opcjonalnie obsługuje wykonywania interpolacji takiego czy innego rodzaju procesu.
W moim przypadku używasz tablic Ruby, ale z chęcią przyjmę odpowiedzi w większości języków lub pseudokodu.
Świetne pytanie. –
dla zmniejszenia o połowę tablicy, zwykle chcesz ** lowpass ** _przed wyrzuceniem próbek (w przeciwnym razie istnieje potencjalnie aliasing). – lijie