matlab - 使用 Octave 音阶的平移律振幅插值

标签 matlab audio plot octave audio-panning

我正在一个项目中,该项目使用切线定律在典型的立体声设置(两个扬声器成60º角)中定位幻像源。
由于切线定律表明了幻像图像的 Angular 与扬声器增益之间的关系,因此我的目的是绘制一个扬声器在幻像源不同 Angular 下的幅度响应(以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 vector 并尝试绘制(theta,20 * log(g(2))),也使用表格,但是它给我一个错误或仅绘制了一个点,显然我在这里缺少了一些东西。

最佳答案

g(2)只能是一个值。它是一个索引。 vector 不能存储在一个存储单元中。如果theta是 vector ,则结果表达式

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

还应该是为theta中的每个元素计算的 vector ,因此将需要element-wise division(如pointed out等于Wolfie)。

因此,请使用theta所需的相同数量的索引来存储所有增益g:
g(2:numel(theta)+1) = -(tan(theta)-tan(phi)) ./ (tan(theta)+tan(phi));

另请注意, tan 函数以弧度计算参数的正切值。如果要以度为单位放置 Angular ,请使用 tand ,即
g(2:numel(theta)+1) = -(tand(theta)-tand(phi)) ./ (tand(theta)+tand(phi));

关于matlab - 使用 Octave 音阶的平移律振幅插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54315176/

相关文章:

python - 在Python中的世界地图上覆盖数组

python - 使用 groupby 和 pandas 数据框中的多列从字符串数据创建条形图

matlab - 使用 cellfun 进行条件元素替换

python - 如何使用正则表达式删除 python 字符串中的十六进制值?

c# - 在C#.NET Web应用程序中记录并保存音频

javascript - 在 Raphael JS 动画中播放音频时出现问题

matlab - 当包含在元胞数组中时,如何删除矩阵行?

matlab - 如何比较matlab细胞或结构

javascript - 调用 .play() 会产生 "Uncaught (in promise) DOMException: The element has no supported sources."错误

python - matplotlib 数据点之间的间距相等