在通信系统中,通常基于一帧一帧的数据来通信,在simulink建模仿真中基于帧的处理也是非常方便的。但有时候需要对帧里的数据做一些处理,就需要把一帧的数据打散开来,这时候就可以用到buffer/unbuffer来操作了。
Unbuffer 把一帧的数据转成一序列的数据来操作,比如说经过Sigma-delta modulator。处理完后转成sample, 再用buffer把数据转成帧。
操作是很容易,但是有几个地方要注意,否则你会发现跟你想要的仿真结果差得很远。
1)buffer 转帧的时候,假定帧长是1000,那么需要等到1000个样点到来,才能转帧,在此之前输出就都是零了(初始值设0);
2)帧数据是一次读取的,因为buffer 转帧的操作,仿真器自动增加了一帧。虽然设置的仿真时长是一个帧长,因为有了buffer 的操作,仿真时长自动变成两个帧长。源数据变成两帧,buffer 输出也是两帧,但是第一帧是0,第二帧才是源的第一帧。
3)对于需要和源数据对齐的操作,特别要注意这点,可以用delay 把数据对齐。旧的simulink 版本里的DSP 工具箱里的delay 模块可以选择延时单位为帧,这样源数据延时一帧就解决了。新的版本把这个功能去掉了,用通用库的delay 模块延时一个帧长也是同样的结果;
4)如果仿真时长小于一个帧长,这时buffer 等不到一帧长的数据就仿真结束了,最后输出的就是一帧全部是0的数据了。