带八度的平移律振幅插值
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));
我正在开展一个项目,该项目使用切线法则来定位典型立体声设置中的幻像源(两个扬声器呈 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
因此,使用与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));