保存每 300 毫秒重复一次的样本
Save samples that repeat every 300 ms
我想对音频信号进行采样。我有一个 5 秒长的 wav
文件。我想每 300 毫秒保存一次样本。
我在 MATLAB 中使用函数 audioread
读取文件中包含的样本,这是我的代码:
[signal,fs]=audioread('file.wav');
dt = 1/fs;
N = length(signal);
t = 0:dt:(N-1)*dt;
plot(t,signal)
ms=t*1000;
如何将每 300 毫秒重复一次的样本保存到数组中?
让我们假设您的 wav
文件的采样率为 fs = 44100
(这很常见),即您每秒有 44100
个样本。现在,您希望每个 0.3 s
有一个样本。您必须根据原始采样率计算 "skip" 的相应样本数,即本例中的 skip = 0.3 * fs = 13230
。现在,您可以简单地访问原始 signal
中的每个 skip
个元素(以及时间间隔 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
函数可用。我不确定这个函数在这里是否有用,因为新的采样率将是 fs_new = 1 / 0.3 = 3.3333
,但 resample
只接受整数。也许,还有另一个更复杂的(工具箱)功能可以自动完成这项工作。
我想对音频信号进行采样。我有一个 5 秒长的 wav
文件。我想每 300 毫秒保存一次样本。
我在 MATLAB 中使用函数 audioread
读取文件中包含的样本,这是我的代码:
[signal,fs]=audioread('file.wav');
dt = 1/fs;
N = length(signal);
t = 0:dt:(N-1)*dt;
plot(t,signal)
ms=t*1000;
如何将每 300 毫秒重复一次的样本保存到数组中?
让我们假设您的 wav
文件的采样率为 fs = 44100
(这很常见),即您每秒有 44100
个样本。现在,您希望每个 0.3 s
有一个样本。您必须根据原始采样率计算 "skip" 的相应样本数,即本例中的 skip = 0.3 * fs = 13230
。现在,您可以简单地访问原始 signal
中的每个 skip
个元素(以及时间间隔 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
函数可用。我不确定这个函数在这里是否有用,因为新的采样率将是 fs_new = 1 / 0.3 = 3.3333
,但 resample
只接受整数。也许,还有另一个更复杂的(工具箱)功能可以自动完成这项工作。