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, использование свойств по умолчанию.

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

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

Свойства

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

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в 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

Figure contains an axes object. The axes object contains an object of type line.

Храните данные, которые считаны из буфера в 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

Figure contains an axes object. The axes object contains 2 objects of type line.

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