Предположим, что ваш файл wav
имеет частоту дискретизации fs = 44100
(что довольно часто), т.е. у вас есть 44100
выборок в секунду. Теперь вы хотите иметь один образец каждый 0.3 s
. Вы должны рассчитать соответствующее количество выборок, которое нужно «пропустить» по отношению к вашей исходной частоте дискретизации, т.е. skip = 0.3 * fs = 13230
в этом случае. Теперь вы можете просто получить доступ к каждому skip
-ому элементу в исходном signal
(а также к временному интервалу t
).
Вот некоторый код для выполнения работы и визуализируйте вышеприведенное:
% Artificial data
signal = sin(linspace(0, 2*pi, 5 * 44100));
fs = 44100;
dt = 1 / fs;
N = length(signal);
t = 0:dt:(N-1)*dt;
% "Re-sampling" parameters
dt_new = 0.3;
skip = dt_new * fs;
% Extract every skip'th value from original time interval and signal
t_new = t(1:skip:end).'
signal_new = signal(1:skip:end);
% Some visualization
figure(1);
hold on;
plot(t, signal);
plot(t_new, signal_new, 'r.', 'MarkerSize', 15);
hold off;
Мы получаем следующий вывод, исходный сигнал синего цвета, красные точки - выборки на каждом 0.3 s
:
Если вы посмотрите на t_new
, вы увидите, что точки выборки точно соответствуют желаемому интервалу 0.3 s
:
t_new =
0.00000
0.30000
0.60000
0.90000
1.20000
1.50000
1.80000
2.10000
2.40000
2.70000
3.00000
3.30000
3.60000
3.90000
4.20000
4.50000
4.80000
Надеюсь, это поможет!
РЕДАКТИРОВАТЬ: Существует также функция resample
, доступная в Toolbox Toolbox . Я не уверен, полезна ли эта функция здесь, поскольку новая частота дискретизации будет fs_new = 1 / 0.3 = 3.3333
, но resample
принимает только целые числа. Возможно, есть еще одна более сложная функция (набор инструментов) для автоматического выполнения работы.