Амплитудная интерполяция закона панорамирования с октавой - PullRequest
0 голосов
/ 22 января 2019

Я работаю над проектом, который использует касательный закон для локализации фантомного источника в типичной стереосистеме (два динамика под углом 60º).Поскольку закон тангенса показывает связь между углом фантомного изображения и усилением громкоговорителей, моя цель состоит в том, чтобы построить амплитудный отклик в дБ одного громкоговорителя под разными углами источника фантома, вот код, который отлично работаетс исходным позиционированием:

%-----stereo panning------%
%variables:
Fs = 44100;
theta = 25;       %virtual source
phi = 30;         %loudspeaker
g(1) = 1;         %L gain
g(2) = -(tan(theta)-tan(phi)) / (tan(theta)+tan(phi));
%sum of gains has to be normalized
g = g/sqrt(sum(g.^2));
signal=mod([1:20000]',200)/200;          %signal
loudsp_sig=[signal*g(1) signal*g(2)];    %panning
soundsc(loudsp_sig,Fs);                  %play audio

Я попытался создать тета-вектор и попытался построить график (тета, 20 * log (g (2)), также используя таблицу, но либо выдает ошибку, либо выводит только одинточка, я явно что-то здесь упускаю.

1 Ответ

0 голосов
/ 23 января 2019

g(2) может быть только одним значением.Это единый индекс.Вектор не может быть сохранен в одной ячейке памяти.Если theta является вектором, то результирующее выражение

   tan θ – tan ϕ 
– ——————————————
   tan θ + tan ϕ

также должно быть вектором, рассчитанным для каждого элемента в theta, и поэтому потребуется поэлементное деление (так как указал Вольф ).

Итак, используйте то же количество индексов, которое требуется theta для хранения всех усилений g:

g(2:numel(theta)+1) = -(tan(theta)-tan(phi)) ./ (tan(theta)+tan(phi));

Также обратите внимание, что tan Функция вычисляет тангенс аргумента в радианах.Если вы хотите указать угол в градусах, используйте tand т.е.

g(2:numel(theta)+1) = -(tand(theta)-tand(phi)) ./ (tand(theta)+tand(phi));
...