На экран 320x240 влазит 107 полос. Всё от 5кГц до 10кГц - в оставшихся.
Полосы распределяются не по 80Гц на штуку, а
более сложно.
Всего после 1024-точечного анализа Фурье есть 512 "чистых" полос по 19,5Гц каждая. Если их просто отображать равномерно по всему экрану, получится полная ерунда. Правая часть экрана, от 5кГц до 10кГц будет прыгать как одно целое. Одна и та же разница между полосами в НЧ области и в ВЧ области для человеческого слуха - это совсем разные вещи.
Разница в одну полосу - между 20Гц и 40Гц очень хорошо различима - в два раза. А вот 9000Гц и 9020Гц для человека фактически одно и то же, хотя те же 20Гц. Поэтому и вывод на экран сделан сложнее, ближе к логарифмическому распределению по частотам. А именно (смотрите по коду):
Первые 48 полос (0..47) выводятся как есть, как 48 полос (0..47) => (0..917 Гц)
Ещё 48 полос (48..95) ужимаются вдвое, в 24 полосы (48..71) => (937..1855 Гц)
Ещё 96 полос (96..191) ужимаются вчетверо, в 24 полосы (72..95) => (1875..3730 Гц)
Ещё 192 полосы (192..383) ужимаются в 8 раз, в 24 полосы (96..119) => (3750..7480 Гц)
Последние 128 полос (384..511) ужимаются в 16 раз, в 8 полос (120..127) => (7500..9980 Гц)
Вот и получается, что на экране (320x240), c шириной 320px можно красиво нарисовать 107 полос шириной 2px и расстоянием 1px между ними. А это около 5кГц и получается.
На экране (480x320), с шириной 480px, можно красиво нарисовать 120 полос шириной 3px и расстоянием 1px - тут отображается где-то до 7,5кГц
А больше - оно и не нужно.
Как-то так, в общем.