【发布时间】:2017-11-25 16:18:22
【问题描述】:
我可以使用重采样对整个信号进行音调移位,并且我已经尝试过相位声码器代码 here。
我也尝试过repmat and interpolation 并查看了fft and interp1
如何随着时间的推移逐步/逐渐改变信号的音高?我已经包含了Original Signal 的示例以及我试图让Processed Signal 发声像(我使用 Audacity 并使用它们的效果 Sliding time scale / pitch shift 创建了处理后的信号)但是想在 Octave 4.0 中创建这个信号。
如果您收听Processed Signal,您可以听到文件的音调逐渐增加,但文件的长度(秒)与Original Signal 文件相同。
我使用的是 Octave 4.0,类似于 Matlab
这里的代码可以改变整个信号的音高并在几秒钟内保持原始信号的相同长度,但我不知道如何让它随着时间的推移逐渐改变信号的音高。感谢 rayryeng 让我走到这一步。
clear, clc
[ya, fs, nbitsraw] = wavread('/tmp/original_signal.wav');
num_per_sec=2.4; %// Define total number of times we see the signal
%// Get total number of integer times we see the signal
num_whole = floor(num_per_sec);
%// Replicate signal
yb=repmat(ya,num_whole,1);
%// Determine how many samples the partial signal consists of
portion = floor((num_per_sec - num_whole)*length(ya));
%// Sample from the original signal and stack this on top of replicated signal
yb = [yb; ya(1:portion)];
%interpolation
xxo=linspace(0,1,length(yb))';
xxi=linspace(0,1,length(ya))';
yi_t=interp1(xxo,yb,xxi,'linear');
wavwrite([yi_t'] ,fs,16,strcat('/tmp/processed_signal.wav')); % export file
【问题讨论】:
标签: matlab signal-processing fft octave pitch-shifting