我正在一个项目,该项目使用切线定律在典型的立体声设置(两个扬声器成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))),也使用表格,但它给了我一个错误或仅绘制了一个点,显然我在这里缺少了一些东西。 / p>
答案 0 :(得分:0)
g(2)
只能是一个值。它是一个索引。向量不能存储在一个存储单元中。如果theta
是向量,则结果表达式
tan θ – tan ϕ
– ——————————————
tan θ + tan ϕ
也应该是为theta
中的每个元素计算的向量,因此将需要element-wise division(如pointed out等于Wolfie)。
因此,使用与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));