dsp. AsyncBuffer

Описание

Система dsp.AsyncBuffer object™ пишет выборки в и читает выборки из метода "первым пришел - первым вышел" (FIFO) буфер. Метод write записывает данные к буферу, и метод read считывает данные из буфера. При создании объекта можно определить номер выборок (строки) буфера с помощью свойства Capacity. Номер каналов (столбцы) определяется во время первого вызова write. Инициализируйте буфер путем вызова write или setup перед первым вызовом read.

Данные, которые вы пишете, занимают следующее свободное место в буфере. Если буфер полон, и все данные в нем являются непрочитанными (asyncBuff.NumUnreadSamples == asyncBuff.Capacity), объект перезаписывает самые старые данные с любыми новыми данными, которые входят. Буфер удаляет данные только, когда данные перезаписываются, таким образом, можно перечитать данные из прошлого. Запись поддержки объектов dsp.AsyncBuffer и чтение переменных сигналов формата кадра. Для примеров смотрите Форматы кадра Переменной Чтения от Форматов кадра Переменной Буфера и Записи, чтобы Буферизовать.

Записать и считать выборки из буфера FIFO:

  • Создайте объект dsp.AsyncBuffer и установите свойства объекта.

  • Вызовите write, чтобы записать выборки в буфер.

  • Вызовите read, чтобы считать выборки из буфера.

  • Вызовите peek, чтобы считать выборки, не изменяя количество непрочитанных выборок в буфере.

Создание

Синтаксис

asyncBuff = dsp.AsyncBuffer
asyncBuff = dsp.AsyncBuffer(cap)

Описание

пример

asyncBuff = dsp.AsyncBuffer возвращает асинхронный буферный Системный объект, asyncBuff, с помощью свойств по умолчанию.

asyncBuff = dsp.AsyncBuffer(cap) устанавливает свойство Capacity на cap.

Пример: asyncBuff = dsp.AsyncBuffer(200000);

Свойства

развернуть все

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и функция release разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).

Количество перезаписываемых/читаемых строк в буфере, заданном как положительное целое число, больше, чем или равный 2. Количество строк во время каждой записи к буферу не должно превышать мощность буфера. Если буфер полон, и все данные в являются непрочитанными, объект перезаписывает самые старые данные с любыми новыми данными, которые входят. Свойство CumulativeOverrun, возвращенное info, дает количество выборок, превышенных на канал начиная с последней возможности к reset. Количество превышенных выборок является количеством непрочитанных перезаписанных выборок.

По умолчанию это свойство имеет тип данных int32.

Пример: asyncBuff = dsp.AsyncBuffer(200000);

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Это свойство доступно только для чтения.

Количество непрочитанных выборок в каждом канале (столбец) буфера, заданного как целое число, больше, чем или равный 0. Общим количеством непрочитанных выборок в буфере является NumUnreadSamples × numChann. Переменная numChann является количеством каналов в буфере. Количество каналов в буфере является количеством столбцов данных в первом вызове write.

Свойство CumulativeUnderrun, возвращенное методом info, дает количество демонстрационной недогрузки на канал начиная с последней возможности к reset. Недогрузка происходит, при попытке считать больше выборок, чем доступный.

Пример: asyncBuff = dsp.AsyncBuffer; input = randn(512,1); numUnreadSamples = write(asyncBuff,input)

Типы данных: int32

Использование

Записать и считать выборки из асинхронного буфера:

  • Создайте объект dsp.AsyncBuffer и установите свойства объекта.

  • Вызовите write, чтобы записать выборки в буфер.

  • Вызовите read, чтобы считать выборки из буфера.

  • Вызовите peek, чтобы считать выборки, не изменяя количество непрочитанных выборок в буфере.

Функции объекта

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

развернуть все

infoПолучите совокупное переполнение и недогрузку
readСчитайте данные из буфера
writeЗапишите данные, чтобы буферизовать
peekСчитайте данные из буфера, не изменяя количество непрочитанных выборок
stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

развернуть все

Система dsp.AsyncBuffer object™ форматы кадра переменной чтения поддержек от буфера.

Создайте Системный объект dsp.AsyncBuffer. Вход является белым Гауссовым шумом со средним значением 0, стандартным отклонением 1 и форматом кадра 512 выборок. Запишите вход в буфер с помощью метода write.

asyncBuff = dsp.AsyncBuffer;
input = randn(512,1);
write(asyncBuff,input);
plot(input)
hold on

Храните данные, которые считаны из буфера в outTotal.

Постройте входной сигнал и данные, которые считаны из буфера в том же графике. Считайте данные из буфера, пока все выборки не будут считаны. В каждой итерации цикла randi определяет количество выборок, чтобы читать. Поэтому сигнал читается в как сигнал переменного размера. Переменная prevIndex отслеживает предыдущее индексное значение, которое содержит данные.

outTotal = zeros(size(input));
prevIndex = 0;
while asyncBuff.NumUnreadSamples ~= 0
    numToRead = randi([1,64]);
    out = read(asyncBuff,numToRead);
    outTotal(prevIndex+1:prevIndex+numToRead) = out;
    prevIndex = prevIndex+numToRead;
end
plot(outTotal,'r')
hold off

Проверьте, что входные данные и данные, считанные из буфера (исключая выборки недогрузки, если таковые имеются), являются тем же самым. Совокупное число превышенных и выборок недогрузки в буфере определяется функцией info.

S = info(asyncBuff)
S = struct with fields:
     CumulativeOverrun: 0
    CumulativeUnderrun: 28

Поле CumulativeUnderrun показывает количество демонстрационной недогрузки на канал. Недогрузка происходит, при попытке считать больше выборок, чем доступный.

Запишите синусоиду переменного формата кадра к буферу. Вычислите БПФ синусоиды и визуализируйте результат на графике массивов.

Инициализируйте dsp.AsyncBuffer, dsp.ArrayPlot и Системные объекты dsp.FFT.

asynBuff = dsp.AsyncBuffer;
plotter = dsp.ArrayPlot;
fftObj = dsp.FFT('FFTLengthSource','Property','FFTLength',256);

Синусоида сгенерирована с помощью функции sin в MATLAB. Переменные start и finish отмечают запуск и индексы конца каждого кадра. Если достаточно данных кэшируется, читайте из буфера и выполните БПФ. Просмотрите БПФ на графике массивов.

start = 1;

for Iter = 1 : 2000
    numToWrite = randi([200,800]);
    finish = start + numToWrite;

    inputData = sin(start:finish)';
    start = finish + 1;

    write(asynBuff,inputData);
    while asynBuff.NumUnreadSamples >= 256
        x = read(asynBuff,256);
        X = abs(fftObj(x));
        plotter(log(X));
    end
end

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

Создайте Систему dsp.AsyncBuffer object™. Вход является вектор-столбцом 100 выборок, 1 - 100. Запишите данные в буфер.

asyncBuff = dsp.AsyncBuffer
asyncBuff = 
  AsyncBuffer with properties:

            Capacity: 192000
    NumUnreadSamples: 0

input = (1:100)';
write(asyncBuff,input);

Посмотрите на первые три выборки. Вывод [1 2 3]'.

out1  = peek(asyncBuff,3)
out1 = 3×1

     1
     2
     3

NumUnreadSamples равняется 100, указывая, что функция peek не изменила количество непрочитанных выборок в буфере.

asyncBuff.NumUnreadSamples
ans = int32
    100

После заглядывания считайте 50 выборок с помощью функции read. Вывод [1:50]'.

out2  = read(asyncBuff,50)
out2 = 50×1

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
      ⋮

NumUnreadSamples равняется 50, указывая, что функция read изменила количество непрочитанных выборок в буфере.

asyncBuff.NumUnreadSamples
ans = int32
    50

Теперь посмотрите снова на первые три выборки. Вывод [51 52 53]'. Проверьте, что NumUnreadSamples равняется все еще 50.

out3  = peek(asyncBuff,3)
out3 = 3×1

    51
    52
    53

asyncBuff.NumUnreadSamples
ans = int32
    50

Считайте 50 выборок снова. Вывод теперь содержит последовательность [51:100]'. Проверьте, что NumUnreadSamples 0.

out4  = read(asyncBuff)
out4 = 50×1

    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
      ⋮

asyncBuff.NumUnreadSamples
ans = int32
    0

Ограничения

Прежде, чем вызвать метод read, необходимо инициализировать буфер путем вызова или write или метода setup. Для примера смотрите, Почему Делает dsp. Ошибка Объекта AsyncBuffer, Когда Вы чтение Вызова Перед записью?

Расширенные возможности

Введенный в R2017a

Для просмотра документации необходимо авторизоваться на сайте