Я могу изменить высоту тона всего сигнала, используя передискретизацию, и я попробовал код фазового вокодера здесь.
Я также пробовал repmat и интерполяция, и я изучил fft и interp1
Как постепенно/постепенно изменять высоту сигнала с течением времени? Я включил пример Исходный сигнал и что я пытаюсь получить Обработанный сигнал, чтобы он звучал так (я создал обработанный сигнал с помощью Audacity и использовал их эффект Sliding time scale / pitch shift
) Но хотел бы создать этот сигнал в Octave 4.0. Если вы прослушаете обработанный сигнал, вы постепенно услышите высоту тона файла. увеличивается, но файл имеет ту же длину (в секундах), что и исходный Сигнальный файл.
Я использую 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