【问题标题】:Panning Law amplitude interpolation with Octave使用八度音阶的平移律幅度插值
【发布时间】:2019-01-22 19:28:48
【问题描述】:

我正在开展一个项目,该项目使用切线定律来定位典型立体声设置中的幻象源(两个扬声器呈 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)),也使用表格,但它给我一个错误或只绘制一个点,我显然在这里遗漏了一些东西。

【问题讨论】:

  • g(2) 只能是一个值。它是一个单一的索引。您不能期望单个索引存储标量以外的任何内容,因此您会出错。
  • 我认为您还打算使用 g = g./sqrt(...) 而不是 g = g/sqrt(...) 来划分元素。

标签: matlab audio plot octave audio-panning


【解决方案1】:

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

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

也应该是为theta 中的每个元素计算的向量,因此需要element-wise division(如pointed out by 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));

【讨论】:

  • 所有点都使用相同的 y 坐标(仅针对 g(2) 计算)。除了在 y 轴上获得相同的值之外,您还期望什么结果? g(2) 是一分。它不是向量。你应该这样做:plot(theta, 20*log(g(2:end)), '*');
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 2014-11-06
  • 1970-01-01
相关资源
最近更新 更多