Буферный вектор сигнала в матрицу кадров данных
Создайте буфер, содержащий 100 кадров, каждый из которых содержит 11 выборок.
data = buffer(1:1100,11);
Взять кадры (столбцы) в матрице data чтобы быть последовательными выходами платы сбора данных, дискретизирующей физический сигнал: data(:,1) - первый A/D выход, содержащий первые 11 выборок сигнала, data(:,2) - второй выход, содержащий следующие 11 выборок сигнала, и так далее.
Вы хотите дать отпор этому сигналу от полученного размера кадра 11 до размера кадра 4 с перекрытием 1. Звонить buffer для работы с каждым последовательным входным кадром, используя opt для сохранения согласованности в перекрытии от одного буфера к другому.
Задайте параметры буфера. Укажите значение -5 для y(1). Вектор переноса первоначально пуст.
n = 4; p = 1; opt = -5; z = [];
Теперь многократно звоните buffer, каждый раз проходя в новом сигнальном кадре (столбце) от data. Выборки переполнения (возвращены в z) переносятся и добавляются к входу в последующем вызове buffer.
Для первых четырех итераций показать кадр ввода [z;x]', входные и выходные значения opt, выходной буфер yи переполнение z. Размер выходной матрицы, y, может изменяться в одном столбце от одной итерации к другой. Это типично для операций буферизации с перекрытием или подложкой.
for i = 1:size(data,2) x = data(:,i); [y,z,oppt] = buffer([z;x],n,p,opt); if i <= 4 disp(' '), i, ifrm = [z;x]', opts = [opt oppt], y, z, disp(' ') end opt = oppt; end
i = 1
ifrm = 1×13
10 11 1 2 3 4 5 6 7 8 9 10 11
opts = 1×2
-5 9
y = 4×3
-5 3 6
1 4 7
2 5 8
3 6 9
z = 2×1
10
11
i = 2
ifrm = 1×12
22 12 13 14 15 16 17 18 19 20 21 22
opts = 1×2
9 21
y = 4×4
9 12 15 18
10 13 16 19
11 14 17 20
12 15 18 21
z = 22
i = 3
ifrm = 1×11
23 24 25 26 27 28 29 30 31 32 33
opts = 1×2
21 33
y = 4×4
21 24 27 30
22 25 28 31
23 26 29 32
24 27 30 33
z = 0x1 empty double column vector
i = 4
ifrm = 1×13
43 44 34 35 36 37 38 39 40 41 42 43 44
opts = 1×2
33 42
y = 4×3
33 36 39
34 37 40
35 38 41
36 39 42
z = 2×1
43
44
Создайте буфер, содержащий 100 кадров, каждый из которых содержит 11 выборок.
data = buffer(1:1100,11);
Бери data(:,1) в качестве первого A/D выхода, содержащего первые 11 выборок сигнала, data(:,2) в качестве второго выходного сигнала, содержащего следующие 11 выборок сигнала, и так далее.
Этот сигнал необходимо отбросить от полученного размера кадра 11 до размера кадра 4 с подложкой 2. Для этого вы будете неоднократно звонить buffer для работы с каждым последовательным входным кадром, используя opt для поддержания согласованности в подложке от одного буфера к другому.
Задайте параметры буфера. Укажите новый размер рамки 4 и подложку -2. Пропустите первый входной элемент, x(1), путем установки opt на 1. Вектор переноса первоначально пуст.
n = 4; p = -2; opt = 1; z = [];
Теперь многократно звоните buffer, каждый раз проходя в новом сигнальном кадре (столбце) от data. Выборки переполнения (возвращены в z) переносятся и добавляются к входу в последующем вызове buffer.
Для первых трех итераций показать кадр ввода [z';x]', входные и выходные значения opt, выходной буфер yи переполнение z. Размер выходной матрицы, y, может изменяться в одном столбце от одной итерации к другой. Это типично для операций буферизации с перекрытием или подложкой.
for i = 1:size(data,2) x = data(:,i); [y,z,oppt] = buffer([z';x],n,p,opt); if i <= 3 disp(' '), i, ifrm = [z';x]', opts = [opt oppt], y, z, disp(' ') end opt = oppt; end
i = 1
ifrm = 1×11
1 2 3 4 5 6 7 8 9 10 11
opts = 1×2
1 2
y = 4×2
2 8
3 9
4 10
5 11
z = 1x0 empty double row vector
i = 2
ifrm = 1×14
20 21 22 12 13 14 15 16 17 18 19 20 21 22
opts = 1×2
2 0
y = 4×1
14
15
16
17
z = 1×3
20 21 22
i = 3
ifrm = 1×13
32 33 23 24 25 26 27 28 29 30 31 32 33
opts = 1×2
0 0
y = 4×2
20 26
21 27
22 28
23 29
z = 1×2
32 33
x - Входной сигналВходной сигнал, заданный как вектор.
n - Длина кадраДлина кадра, заданная как положительный действительный скаляр.
p - Количество образцовЧисло выборок, указанное как действительный положительный скаляр.
Для 0 < p < n (перекрытие), buffer повторяет окончательный p выборки каждого кадра в начале следующего кадра. Например, если x = 1:30 и n = 7, перекрытие p = 3 выглядит вот так.

Первый кадр начинается с p нули (исходное условие по умолчанию) и количество столбцов в y является ceil(L/(n-p)).
Для p < 0 (подложка), buffer пропуски p отсчеты между последовательными кадрами. Например, если x = 1:30 и n = 7, буфер с подложкой p = -3 выглядит вот так.

Количество столбцов в y является ceil(L/(n-p)).
opt - Опционzeros(p,1) (по умолчанию) | 'nodelay' | вектор | целое числоПараметр, заданный как вектор или целое число.
Для 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 (подложка), opt - целое значение в диапазоне [0,-p] указание количества начальных входных выборок, x(1:opt), чтобы пропустить перед добавлением образцов в буфер. Поэтому первое значение в буфере - x(opt+1). По умолчанию opt равен нулю для буфера подложки.
Этот параметр особенно полезен, если текущая операция буферизации состоит из последовательности последовательных операций буферизации. Для сохранения требуемой подложки кадра из одного буфера в другой opt должна равняться разнице между общим количеством пропускаемых точек между кадрами (p) и количество точек, которые можно было пропустить при предыдущем вводе в buffer. Если предыдущий вход был меньше, чем p точки, которые могут быть пропущены после заполнения последнего кадра этого буфера, оставшиеся opt необходимо удалить точки из первого кадра текущего буфера. Пример того, как это работает на практике, см. в разделе Непрерывная буферизация.
y - Кадр данныхКадр данных, возвращаемый в виде матрицы. Каждый кадр данных занимает один столбец y, который имеет n строки и ceil(L/n) столбцы. Если L не делится равномерно на n, последний столбец заполнен нулями до длины n.
Если y является перекрывающимся буфером, он имеет n строки и m столбцы, где m = floor(L/(n-p)) когда length(opt) = p или m = ceil((L-p)/(n-p)) когда opt = 'nodelay'.
Если y является буфером-подложкой, имеет n строки и m столбцы, где m = floor((L-opt)/(n-p)) + (rem((L-opt),(n-p)) >= n).
z - Оставшиеся образцыОставшиеся выборки, возвращенные в виде вектора. Если количество отсчетов во входном векторе (после соответствующих операций наложения или наложения) превышает количество мест, доступных в nоколо-m буфер, остальные образцы в x выводятся в векторе z, которая для перекрывающегося буфера имеет длину L - m*(n-p) когда length(opt) = p или L - ((m-1)*(n-p)+n) когда opt = 'nodelay', а для буфера подложки имеет длину (L-opt) - m*(n-p).
Если y является перекрывающимся буфером или неперекрывающимся буфером, то z имеет ту же ориентацию (строка или столбец), что и x.
Если y является буфером-подложкой, затем z возвращается как вектор строки.
Если после заполнения буфера с указанным перекрытием или подложки на входе нет оставшихся выборок, z является пустым вектором.
opt - Последнее p образцыВ последний раз p выборки, возвращенные в виде вектора. В буфере подложки opt - разница между общим количеством пропускаемых точек между кадрами (-p) и количество точек в x которые можно было пропустить после заполнения последнего кадра. В последовательности операций буферизации opt выходные данные каждой операции должны использоваться в качестве opt вход в последующую операцию буферизации. Это гарантирует, что требуемое перекрытие кадра или подложка поддерживается от буфера к буферу, а также от кадра к кадру в пределах того же буфера. Пример того, как это работает на практике, см. в разделе Непрерывная буферизация.
Для 0 < p < n (перекрытие), opt (в виде выходных данных) содержит окончательный p выборки в последнем кадре буфера. Этот вектор может использоваться в качестве начального условия для последующей операции буферизации в последовательности последовательных операций буферизации. Это позволяет поддерживать требуемое перекрытие кадров от одного буфера к следующему.
Для p < 0 (подложка), 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).
Обратите внимание, что для вывода буфера подложки: opt всегда равно нулю при выводе z содержит данные.
opt вывод для буфера-подложки особенно полезен, когда текущая операция буферизации состоит из последовательности последовательных операций буферизации. opt выходные данные каждой операции буферизации определяют количество выборок, которые необходимо пропустить в начале следующей операции буферизации для поддержания требуемой подложки кадра из одного буфера в другой. Если меньше, чем p точки были доступны для пропуска после заполнения последнего кадра текущего буфера, остальные opt необходимо удалить точки из первого кадра следующего буфера.
При отображении сообщений об ошибках 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 с синтаксисом двух выходных аргументов:
[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 в этом случае заполняется нулями, что добавляет новые выборки к сигналу.
Непрерывная буферизация при наличии перекрытия и подложки обрабатывается с помощью opt параметр, который используется как вход, так и выход для buffer. Два примера на этой странице демонстрируют, как opt должен использоваться параметр.
Эта функция полностью поддерживает массивы графических процессоров. Дополнительные сведения см. в разделе Запуск функций MATLAB на графическом процессоре (панель инструментов параллельных вычислений).
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.