Сохранить образцы, которые повторяются каждые 300 мс - PullRequest
0 голосов
/ 24 октября 2019

Я хочу сэмплировать аудиосигнал. У меня есть файл wav длиной 5 секунд. Я хочу сохранять сэмплы каждые 300 мс.

Я использую функцию audioread в MATLAB, которая считывает сэмплы, содержащиеся в файле, это мой код:

[signal,fs]=audioread('file.wav');

dt = 1/fs;
N = length(signal);
t = 0:dt:(N-1)*dt;

plot(t,signal)
ms=t*1000;

Как я могу сохранить вобразцы массивов, которые повторяются каждые 300 мс?

1 Ответ

1 голос
/ 24 октября 2019

Предположим, что ваш файл 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:

Output

Если вы посмотрите на 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 принимает только целые числа. Возможно, есть еще одна более сложная функция (набор инструментов) для автоматического выполнения работы.

...