буфер

Буферный сигнальный вектор в матрицу кадров данных

Синтаксис

y = buffer(x,n)
y = buffer(x,n,p)
y = buffer(x,n,p,opt)
[y,z] = buffer(...)
[y,z,opt] = buffer(...)

Описание

y = buffer(x,n) делит сигнальный вектор длины-L x в неперекрывающиеся сегменты данных (кадры) длины n. Каждый кадр данных занимает один столбец матричного вывода y, который имеет строки n и столбцы ceil(L/n). Если L не является равномерно делимым n, последний столбец дополнен нулем к длине n.

y = buffer(x,n,p) перекрытия или underlaps последовательные кадры в выходной матрице выборками p:

  • Для 0 < p < n (перекрытие), buffer повторяет итоговые выборки p каждого кадра в начале следующего кадра. Например, если x = 1:30 и n = 7, перекрытие p = 3 выглядит так.

    Первый кадр запускается с нулей p (начальное условие по умолчанию), и количеством столбцов в y является ceil(L/(n-p)).

  • Для p < 0 (underlap), buffer пропускает выборки p между последовательными кадрами. Например, если x = 1:30 и n = 7, буфер с underlap p = -3 выглядит так.

    Количеством столбцов в y является ceil(L/(n-p)).

y = buffer(x,n,p,opt) задает вектор выборок, чтобы предшествовать x(1) в перекрывающемся буфере или количеству начальных выборок, чтобы пропустить в буфере underlapping:

  • Для 0 < p < n (перекрытие), opt задает вектор длины-p, чтобы вставить перед x(1) в буфер. Этот вектор может быть рассмотрен начальным условием, которое необходимо, когда текущая операция буферизации один в последовательности последовательных операций буферизации. Чтобы поддержать желаемое перекрытие кадра от одного буфера до следующего, opt должен содержать итоговые выборки p предыдущего буфера в последовательности. Смотрите Непрерывную Буферизацию ниже.

    По умолчанию opt является zeros(p,1) для перекрывающегося буфера. Установите opt на 'nodelay' пропускать начальное условие и начинать заполнять буфер сразу с x(1). В этом случае L должен быть length(p) или дольше. Например, если x = 1:30 и n = 7, буфер с перекрытием p = 3 выглядит так.

  • Для p < 0 (underlap), opt является целочисленным значением в области значений [0,-p], задающий количество начальных входных выборок, x(1:opt), чтобы пропустить перед добавляющими выборками к буферу. Первым значением в буфере является поэтому x(opt+1). По умолчанию opt является нулем для буфера underlapping.

    Эта опция особенно полезна, когда текущая операция буферизации один в последовательности последовательных операций буферизации. Чтобы поддержать желаемый кадр underlap от одного буфера до следующего, opt должен равняться различию между общим количеством точек, чтобы пропустить между кадрами (p) и число точек, которые были доступны, чтобы быть пропущенными в предыдущем входе к buffer. Если бы предыдущий вход имел меньше, чем точки p, которые могли бы быть пропущены после заполнения последнего кадра того буфера, остающиеся точки opt должны быть удалены из первого кадра текущего буфера. Смотрите Непрерывную Буферизацию для примера того, как это работает на практике.

[y,z] = buffer(...) делит сигнальный вектор длины-L x в кадры длины n и выходные параметры только полные кадры в y. Если y является перекрывающимся буфером, он имеет строки n и столбцы m, где m = floor(L/(n-p)) когда length(opt) = p или m = floor((L-n)/(n-p))+1 когда opt = 'nodelay'.

Если y является буфером underlapping, он имеет строки n и столбцы m, где m = floor((L-opt)/(n-p)) + (rem((L-opt),(n-p)) >= n).

Если количество выборок во входном векторе (после соответствующего наложения или underlapping операций) превышает количество мест, доступных в n-by-m буфер, остающиеся выборки в x выводятся в векторном z, который для перекрывающегося буфера имеет длину L - m*(n-p), когда length(opt) = p или L - ((m-1)*(n-p)+n), когда opt = 'nodelay', и для буфера underlapping имеет длину (L-opt) - m*(n-p).

Выведите доли z та же ориентация (строка или столбец) как x. Если нет никаких остающихся выборок во входе после буфера с заданным перекрытием, или underlap заполнен, z является пустым вектором.

[y,z,opt] = buffer(...) возвращает последние выборки p перекрывающегося буфера в выводе opt. В буфере underlapping opt является различием между общим количеством точек, чтобы пропустить между кадрами (-p) и число точек в x, которые были доступны, чтобы быть пропущенными после заполнения последнего кадра:

  • Для 0 < p < n (перекрытие), opt (как вывод) содержит итоговые выборки p в последнем кадре буфера. Этот вектор может использоваться в качестве начального условия для последующей операции буферизации в последовательности последовательных операций буферизации. Это позволяет желаемому перекрытию кадра сохраняться от одного буфера до следующего. Смотрите Непрерывную Буферизацию ниже.

  • Для p < 0 (underlap), opt (как вывод) является различием между общим количеством точек, чтобы пропустить между кадрами (-p) и число точек в x, которые были доступны, чтобы быть пропущенными после заполнения последнего кадра: opt = m*(n-p) + opt - L, где opt справа является входным параметром к buffer и opt слева, является выходным аргументом. z является пустым вектором. Здесь m является количеством столбцов в буфере, который является m = floor((L-opt)/(n-p)) + (rem((L-opt),(n-p))>=n).

    Обратите внимание на то, что для буфера underlapping вывод opt является всегда нулем, когда вывод z содержит данные.

    Вывод opt для буфера underlapping особенно полезен, когда текущая операция буферизации один в последовательности последовательных операций буферизации. Вывод opt от каждой операции буферизации задает количество выборок, которые должны быть пропущены в начале следующей операции буферизации, чтобы поддержать желаемый кадр underlap от одного буфера до следующего. Если бы меньше, чем точки p были доступны, чтобы быть пропущенными после заполнения последнего кадра текущего буфера, остающиеся точки opt должны быть удалены из первого кадра следующего буфера.

В последовательности буферизации операций opt вывод от каждой операции должен использоваться в качестве входа opt к последующей операции буферизации. Это гарантирует, что желаемое перекрытие кадра или underlap сохраняются с буфера на буфер, а также от кадра до кадра в том же буфере. Смотрите Непрерывную Буферизацию ниже для примера того, как это работает на практике.

Примеры

свернуть все

Создайте буфер, содержащий 100 кадров, каждого с 11 выборками.

data = buffer(1:1100,11);

Возьмите кадры (столбцы) в матричном data, чтобы быть последовательными выходными параметрами платы сбора данных, выбирающей физический сигнал: data(:,1) является первый D/A вывод, содержа первые 11 выборок сигнала; data(:,2) является второй вывод, содержа следующие 11 выборок сигнала, и так далее.

Вы хотите повторно буферизовать этот сигнал от полученного формата кадра 11 к формату кадра 4 с перекрытием 1. Вызовите buffer, чтобы работать с каждым последовательным входным кадром, с помощью параметра opt, чтобы поддержать непротиворечивость в перекрытии от одного буфера до следующего.

Установите буферные параметры. Задайте значение-5 для y(1). Вектор переноса пуст первоначально.

n = 4;
p = 1;
opt = -5;
z = [];

Теперь неоднократно вызывайте buffer, каждый раз передавая в новом кадре сигнала (столбец) от data. Выборки переполнения (возвратился в z) переносятся и предварительно ожидаются к входу в последующем вызове buffer.

for i = 1:size(data,2)
   x = data(:,i);
   [y,z,opt] = buffer([z;x],n,p,opt);
end

Вот то, что происходит во время первых четырех итераций.

Размер выходной матрицы, y, может отличаться отдельным столбцом от одной итерации до следующего. Это типично для буферизации операций с перекрытием или underlap.

Создайте буфер, содержащий 100 кадров, каждого с 11 выборками.

data = buffer(1:1100,11);

Возьмите data(:,1) в качестве первого D/A вывод, содержа первые 11 выборок сигнала, data(:,2) как второй вывод, содержа следующие 11 выборок сигнала, и так далее.

Вы хотите повторно буферизовать этот сигнал от полученного формата кадра 11 к формату кадра 4 с underlap 2. Для этого вы будете неоднократно вызывать buffer, чтобы работать с каждым последовательным входным кадром, с помощью параметра opt, чтобы поддержать непротиворечивость в underlap от одного буфера до следующего.

Установите буферные параметры. Задайте новый формат кадра 4 и underlap-2. Пропустите первый входной элемент, x(1), установкой opt к 1. Вектор переноса пуст первоначально.

n = 4;
p = -2;
opt = 1;
z = [];

Теперь неоднократно вызывайте buffer, каждый раз передавая в новом кадре сигнала (столбец) от data. Выборки переполнения (возвратился в z) переносятся и предварительно ожидаются к входу в последующем вызове buffer.

for i = 1:size(data,2)
   x = data(:,i);
   [y,z,opt] = buffer([z';x],n,p,opt);
end

Вот то, что происходит во время первых трех итераций.

Размер выходной матрицы, y, может отличаться отдельным столбцом от одной итерации до следующего. Это типично для буферизации операций с перекрытием или underlap.

Диагностика

Сообщения об ошибке отображены когда p ≥n или length(opt)length(p) в перекрывающемся буферном случае:

Frame overlap P must be less than the buffer size N.
Initial conditions must be specified as a length-P vector.

Больше о

свернуть все

Непрерывная буферизация

В непрерывной операции буферизации векторный вход к функции buffer представляет один кадр в последовательности кадров, которые составляют дискретный сигнал. Эти кадры сигнала могут произойти в основанном на кадре процессе сбора данных, или в рамках основанного на кадре алгоритма как БПФ.

Как пример, вы можете получить данные из карты A/D в кадрах 64 выборок. В самом простом случае вы могли повторно буферизовать данные в кадры 16 выборок; buffer с n = 16 создает буфер четырех кадров от каждого входного кадра с 64 элементами. Результат состоит в том, что сигнал формата кадра 64 был преобразован в сигнал формата кадра 16; никакие выборки не были добавлены или удалены.

В общем случае, где исходный формат кадра сигнала, L, не является одинаково делимым новым форматом кадра, n, переполнение от последнего кадра должно быть получено и переработано в следующий буфер. Можно сделать это путем итеративного вызова buffer на входе x с синтаксисом 2D выходного аргумента:

[y,z] = buffer([z;x],n)     % x is a column vector.
[y,z] = buffer([z,x],n)     % x is a row vector.

Это просто получает любое переполнение буфера в z и предварительно ожидает данные к последующему входу в следующем вызове buffer. Снова, входной сигнал, x, формата кадра L, был преобразован в сигнал формата кадра n без любой вставки или удаления выборок.

Обратите внимание на то, что непрерывная буферизация не может быть сделана с синтаксисом одно вывода   y = buffer(...), потому что последний кадр y в этом случае является дополненным нулем, который добавляет новые выборки в сигнал.

Непрерывная буферизация в присутствии перекрытия и underlap обработана с параметром opt, который используется в качестве обоих ввод и вывод к buffer. Эти два примера на этой странице демонстрируют, как параметр opt должен использоваться.

Смотрите также

Представлено до R2006a