正弦合唱效果

信息处理 matlab 过滤器 梳子
2022-02-09 20:31:09

我想在 MATLAB 中创建一个正弦合唱效果函数,其中输入和输出将是:y=chorus(x, f_sine, delay, depth, mix, fs). 我想要做的就是这张图片

在此处输入图像描述

其中是我的样本延迟运算符及其给定:其他参数是:MMΜ(n)=delay+depth(0.5+0.5sin(2π*f_sine *n/fs))

  • FF = 前馈
  • FB = 反馈
  • BL = 混合。

我想做的是:

for n=1:length(x);
M(n)=delay+depth*(0.5+0.5*sin(2*pi*f_sine*n/fs)); 
xh=x(n)+FB*xh(n-M(n));
y(n)=FF*xh(n-M(n))+BL*xh(n);
end;

不管我的代码是否正确,我的问题是可能是一个实数,因此也可能是一个实数。所以无法计算......(我有一个离散信号,我想要一个整数)。我不知道我想说的是否绝对正确(如果它不能解释我为什么),但如果是,我该如何解决这个问题?M(n)nM(n)xh(nM(n))xh

1个回答

你确实找到了构建一个好的合唱的关键问题:你需要一个分数延迟。您的延迟随着时间的推移而移动得相当缓慢,并且它将采用非整数值。

诀窍是将实际延迟拆分为整数部分和小数部分。因此,如果您的延迟 37.83 个样本,您可以从延迟线应用 37 个抽头延迟加上 0.83 个抽头分数延迟。分数延迟通常使用多相 FIR 滤波器完成。我建议你可以谷歌它或回来另一个问题。

一些很好的阅读是http://ieeexplore.ieee.org/document/482137/这里有 Matlab 代码http://legacy.spa.aalto.fi/software/fdtools/不幸的是,IEEE 论文不是免费的。你也可以试试这个https://hub.hku.hk/bitstream/10722/46311/1/71706.pdf?accept=1