带八度的平移律振幅插值

Panning Law amplitude interpolation with Octave

我正在开展一个项目,该项目使用切线法则来定位典型立体声设置中的幻像源(两个扬声器呈 60º 角)。 由于正切定律显示了幻像的角度与扬声器增益之间的关系,我的目标是绘制一个扬声器在幻像源的不同角度下的振幅响应(以 dB 为单位),这是工作正常的代码同源定位:

%-----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

我尝试创建一个 theta 向量并尝试绘制 (theta, 20*log(g(2)),也使用 table 但它要么给我一个错误,要么只绘制一个点,我是显然这里遗漏了一些东西。

g(2)只能是一个值。它是一个单一的索引。一个向量不能存储在一个内存位置。如果 theta 是向量,则结果表达式

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

也应该是为 theta 中的每个元素计算的向量,因此 element-wise division will be needed (as by Wolfie)。

因此,使用与theta所需的相同数量的索引来存储所有收益g:

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

另请注意 tan function calculates the tangent of argument in radians. If you want to put the angle in degrees, use tand

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