如何在 MATLAB 中使用小波变换改变音高?

信息处理 matlab 声音的 小波
2022-02-08 21:26:49

我正在尝试使用 MATLAB 增加 wav 文件的音高。(我不希望它听起来很好,但我试图弄清楚 MATLAB 中的小波是如何工作的。)这就是我正在做的事情:

scales = {2.34375,0.5,21};
result = cwtft(b5,'scales',scales);
result.scales = 2*scales;
b5high = icwtft(result);

b5只是贝多芬第五交响曲的开场,但它可以是任何声音文件。它恰好有 48 kHz 的采样率。)

在我看来,我正在b5使用 Morlet 小波进行小波变换。我使用的音阶捕获了 48 kHz 信号的人类可听频率。然后我将音阶向量加倍——导致向上移动 1 个八度音阶,然后转换回信号。但是,当我弹奏时b5high,听起来就像b5- 根本没有音高变化。

我的逻辑有什么问题?

谢谢。

1个回答

我还没有使用小波实现音高变换器,但我目前正在学习它们。据我了解,比例是频率的倒数,因此要获得所需的结果,您必须除以比例而不是相乘。

此外,根据“连续小波变换在音乐信号处理中的应用”,您还必须更新相位,因为调整音阶是不够的。论文中概述的算法是:

semitone = 12;
pitchFactor = 2^(semitone/12);

wt = cwtft(input);

mag = abs(wt.cfs);
phase = angle(wt.cfs);
unwrapped = unwrap(phase);

wt.cfs = mag.*exp(1i*unwrapped*pitchFactor);
wt.scales = wt.scales./pitchFactor;

result = icwtft(wt);

可悲的是,在我了解更多信息之前,我只能提供这些。