Distance-Based Panning: KNN

KNN selects the loudspeakers closest to the source position and applies level differences between them. The gain differences are calculated based on the distance between the source and the selected loudspeakers.

The number of loudspeakers K is chosen by the user with the “Neighbors” parameter.

Unlike angular panning algorithms, KNN places no constraints on loudspeaker placement, and can therefore adapt to almost any loudspeaker layout. This great flexibility makes it valuable in cases where VBAP or LBAP do not work, or when more flexibility in creative options is desired. This is frequently the case with immersive artistic installations where the listening space consists of sometimes several listening zones with different geometries and heterogeneous loudspeaker distributions.

More precisely, KNN (K Nearest Neighbours) determines the distance between a source S and the “k” loudspeakers nearest to the source ( (k=3) for example) to calculate the gain to apply to the signal (S(t)) for each of them.

Example of source signal distribution across the k=3 nearest loudspeakers, KNN.

For the loudspeaker closest to the source, since the distance is smallest ((d_{2})), the level will be highest and a maximum gain ((G_{2})) will be applied to the source signal (S) for that loudspeaker.

For the other ((k-1)) loudspeakers “i”, the gain (G_{i}) will be evaluated between the distance (d_{i}) of each from the source and the smallest distance ((d_{2})). Here we will have (d_{2})>(d_{1})>(d_{3}) and therefore in the end (G_{2})>(G_{1})>(G_{3}).

Unlike DBAP[1] (Distance Based Amplitude Panning), only (k) loudspeakers are used. This avoids the contribution of certain loudspeakers that are not in the direction of the source and that could be perceived by a listener near them: loudspeaker number 6 for example.

From an implementation standpoint, this algorithm is not constrained by the proper distribution of the loudspeaker network around the audience.

A “spread” (distribution) parameter from 0 to 100% will allow erasing the gain difference between the (k) contributing loudspeakers. If “spread” is at 100% then in our example (G_{2})=(G_{1})=(G_{3}).


[1] DBAP is not implemented in Holophonix. It is a special case of KNN where k equals the total number of loudspeakers.