主要内容

dsp。AsyncBuffer

FIFO缓冲

描述

dsp。AsyncBuffer系统对象™将样本写入先进先出(FIFO)缓冲区,并从其中读取样本。的方法将数据写入缓冲区,而方法从缓冲区读取数据。属性在创建对象时,可以设置缓冲区的样本(行)数能力财产。通道(列)的数量在第一次调用时设置.通过调用来初始化缓冲区设置之前第一次打电话来

写入的数据将占用缓冲区中的下一个可用空间。如果缓冲区已满,且其中的所有数据都未读(asyncBuff。NumUnreadSamples == asyncBuff。能力)时,对象会用任何新的数据覆盖旧的数据。缓冲区仅在数据被覆盖时删除数据,因此您可以从过去重新读取数据。的dsp。AsyncBuffer对象支持写入和金宝app读取可变帧大小信号。有关示例,请参见从缓冲区读取可变帧大小而且将可变帧大小写入缓冲区

从FIFO缓冲区中写入和读取样本:

  • 创建一个dsp。AsyncBuffer对象,并设置对象的属性。

  • 调用将样例写入缓冲区。

  • 调用从缓冲区中读取样本。

  • 调用偷看在不改变缓冲区中未读样本数的情况下读取样本。

创建

描述

例子

asyncBuff= dsp。AsyncBuffer返回一个异步缓冲区系统对象,asyncBuff,使用默认属性。

asyncBuff= dsp。AsyncBuffer (设置能力财产

例子:asyncBuff = dsp.AsyncBuffer(200000);

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放功能解锁它们。

如果属性为可调,您可以随时更改其值。

有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计

缓冲区中可写/可读的行数,指定为大于等于2的正整数。每次写入缓冲区时的行数不能超过缓冲区的容量。如果缓冲区已满,且其中的所有数据都未读,则对象将使用任何新进入的数据覆盖最老的数据。的CumulativeOverrun归还的财产信息给出自上次调用以来每个通道溢出的样本数重置.溢出的样本数是被覆盖的未读样本数。

默认情况下,此属性具有数据类型int32

例子:asyncBuff = dsp.AsyncBuffer(200000);

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

此属性是只读的。

缓冲区的每个通道(列)中未读样本的数量,指定为大于或等于0的整数。缓冲区中未读样本的总数为NumUnreadSamples×numChann.的变量numChann缓冲区中的通道数。缓冲区中的通道数是第一次调用中的数据列数

CumulativeUnderrun返回的属性。信息方法给出自上次调用以来每个通道未执行的样本数重置.如果试图读取比可用样本更多的样本,就会发生欠压。

例子:asyncBuff = dsp.AsyncBuffer;Input = randn(512,1);numUnreadSamples = write(asyncBuff,input)

数据类型:int32

使用

从异步缓冲区中读写样本:

  • 创建一个dsp。AsyncBuffer对象,并设置对象的属性。

  • 调用将样例写入缓冲区。

  • 调用从缓冲区中读取样本。

  • 调用偷看在不改变缓冲区中未读样本数的情况下读取样本。

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:

发行版(obj)

全部展开

信息 获得累积超支和不足
从缓冲区读取数据
将数据写入缓冲区
偷看 在不改变未读样本数的情况下从缓冲区读取数据
一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 重置的内部状态系统对象

例子

全部折叠

dsp。AsyncBuffer系统对象™支持从缓冲区读取可变金宝app帧大小。

创建一个dsp。AsyncBuffer系统对象。输入均值为0,标准差为1,帧大小为512个样本的高斯白噪声。方法将输入写入缓冲区方法。

asyncBuff = dsp.AsyncBuffer;Input = randn(512,1);写(asyncBuff、输入);情节(输入)

图中包含一个轴对象。axis对象包含一个line类型的对象。

存储从缓冲区读取的数据outTotal

将输入信号和从缓冲区读取的数据绘制在同一个图中。从缓冲区读取数据,直到读取所有样本。在循环的每次迭代中,兰迪确定要读取的样本数。因此,信号被读入为可变大小的信号。的prevIndex变量跟踪包含数据的前一个索引值。

outTotal = 0 (size(input));prevIndex = 0;asyncBuff。NumUnreadSamples ~= 0 numToRead = randi([1,64]);out = read(asyncBuff,numToRead);outTotal(prevIndex+1:prevIndex+numToRead) = out;prevIndex = prevIndex+numToRead;结束情节(outTotal“r”)举行

图中包含一个轴对象。axis对象包含2个line类型的对象。

验证输入数据和从缓冲区读取的数据(不包括底层示例,如果有的话)是相同的。缓冲区中溢出和不足样本的累积数量由信息函数。

S = info(asyncBuff)
S =带字段的结构:累积超限:0累积欠限:28

CumulativeUnderrun字段显示每个通道下运行的样本数量。如果试图读取比可用样本更多的样本,就会发生欠压。

写入一个可变帧大小的正弦波到缓冲区。计算正弦波的FFT,并在数组图上可视化结果。

初始化dsp。AsyncBufferdsp。ArrayPlot,dsp。FFT系统对象。

asynBuff = dsp.AsyncBuffer;绘图器= dsp.ArrayPlot;fftObj = dsp。FFT (“FFTLengthSource”“属性”“FFTLength”, 256);

正弦波是用函数的MATLAB。的开始而且完成变量标记了每一帧的开始和结束索引。如果缓存了足够多的数据,则从缓冲区读取并执行FFT。在数组图上查看FFT。

Start = 1;Iter = 1: 2000 numToWrite = randi([200,800]);finish = start + numToWrite;inputData = sin(start:finish)';开始=结束+ 1;写(asynBuff inputData);asynBuff。NumUnreadSamples >= 256 x = read(asynBuff,256);X = abs(fftObj(X));绘图仪(日志(X));结束结束

方法从异步缓冲区读取数据,而不改变未读示例的数量偷看函数。

创建一个dsp。AsyncBuffer系统对象™。输入是100个样本的列向量,从1到100。将数据写入缓冲区。

asyncBuff = dsp。AsyncBuffer
容量:192000 NumUnreadSamples: 0
Input = (1:100)';写(asyncBuff、输入);

看一下前三个样本。输出为[1 2 3]'。

out1 = peek(asyncBuff,3)
着干活=3×11 2 3

NumUnreadSamples是100,表示偷看函数没有改变缓冲区中未读样本的数量。

asyncBuff。NumUnreadSamples
ans =int32One hundred.

看完后,阅读50个样本函数。输出是[1:50]'。

out2 = read(asyncBuff,50)
out2 =50×11 2 3 4 5 6 7 8 9 10 `

NumUnreadSamples是50,表示函数改变了缓冲区中未读样本的数量。

asyncBuff。NumUnreadSamples
ans =int3250

现在再看一下前三个样本。输出为[51 52 53]'。验证NumUnreadSamples还是50岁。

out3 = peek(asyncBuff,3)
out3 =3×151 52 53
asyncBuff。NumUnreadSamples
ans =int3250

再读50个样本。输出现在包含序列[51:100]'。验证NumUnreadSamples是0。

out4 = read(asyncBuff)
out4 =50×151 52 53 54 55 56 57 58 59 60
asyncBuff。NumUnreadSamples
ans =int320

限制

在致电方法初始化缓冲区时,必须调用设置方法。有关示例,请参见为什么dsp。AsyncBufferObject Error When You Call read Before write?

扩展功能

在R2017a中引入