matlab - 使用八度音阶的平移律幅度插值
问题描述
我正在开展一个项目,该项目使用切线定律来定位典型立体声设置中的幻象源(两个扬声器呈 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)
只能是一个值。它是一个单一的索引。向量不能存储在一个内存位置。如果theta
是一个向量,那么结果表达式
tan θ – tan ϕ
– ——————————————
tan θ + tan ϕ
也应该是为每个元素计算的向量theta
,因此需要按元素划分(如Wolfie所指出的)。
theta
因此,使用与存储所有收益相同数量的索引g
:
g(2:numel(theta)+1) = -(tan(theta)-tan(phi)) ./ (tan(theta)+tan(phi));
另请注意,该tan
函数以弧度计算参数的正切。如果要以度为单位表示角度,请使用tand
ie
g(2:numel(theta)+1) = -(tand(theta)-tand(phi)) ./ (tand(theta)+tand(phi));
推荐阅读
- asp.net-core - Oracle.ManagedDataAccess.Core (Odp.Net Core) 用户定义类型和关联数组类型
- kotlin - 通过 mockContstructor 验证深度模拟失败
- node.js - 抽象类子的动态类型
- python - 如何正确使用 tensorflow ctc 光束搜索?
- ubuntu - Bitbucket 管道:bash:cap:找不到命令
- c# - MEF 未列出插件
- python - 使用 pandas、python 为数据框创建辅助轴
- python - 如何修复moviepy中to_soundarray的越界错误?
- jquery - 在受信任的 Angular 注入的 HTML 中注册 jQuery 事件
- typescript - 通过对象递归检查未定义的值