SIMULINK非常的强大,可以模拟几乎任何系统,而且你只需要了解原理即可。
最初学习SIMULINK时,困扰我的问题有两个,第一个:连续和离散。
对于学习通信出身的人来说,连续和离散起始很好理解,而关键的是,我怎么把连续的东西离散了?怎么让连续的模块能与离散的模块配合工作呢?难道还要去了解采样定理,实现采样保持这么一个模块才能行么?
不,MATLAB虽然有连续和离散系统,但是一个万恶的模块就能将他们连在一起,那就是
“采样率转换模块”
SampleRate Conversion
有了这个模块,就可以将连续的转换为离散的,再用DSP TOOLBOX里的模块处理和观察了。
第二个:基于帧(frame)?和基于采样(sample)?
这个头疼的问题还得引入第三个纠结因子:通道(channel)。
用一张表来阐述这个问题,在simulink的数据处理中,通常都是以2维矩阵来表示数据,如表所示。
| channel1 | channel2 | channel3 |
|
sample1 | 1 | 11 | 21 | frame1 |
sample2 | 2 | 12 | 22 | |
sample3 | 3 | 13 | 23 | frame1 |
sample4 | 4 | 14 | 24 | |
sample5 | 5 | 15 | 25 | frame1 |
sample6 | 6 | 16 | 26 |
如表所标注的,每一行为一个采样,这一行又包括了3个通道的数据,而相邻的两个采样组成了一个帧。
基于采样的处理方式,每个仿真周期处理一个采样的数据(含3个通道)。
基于帧的处理方式,每个仿真周期处理一个帧的数据(含2个采样3个通道)。
在 simulink 中,矩阵就是数据形式的定义。也就是说,每一列一定是一个通道,每一行一定是一个采样(或者只含一个采样的帧)。而一般处理过程中,一个矩阵仅含有一个帧,帧是仿真过程中的最大包。
通过 buffer 和 unbuffer 可以调整帧的大小。
通过 math function 中的 转置或者 reshape 模块可以调整通道数。
好了,说道这里,剩下的自己探索了,别忘了,兴趣是最好的老师。
(2016.11.22新增)
Buffer 工具的缓存方式一般为按采样来进行缓存,如果第一个 Buffer 缓存 4 个采样为一帧,后接一个 Buffer 缓存 2 个为一帧,系统如下:
信号A -> Buffer4 -> 信号B -> Buffer2 -> 信号C
那么假设信号 A 的采样率为 fs,那么信号 B 的采样率为 fs/4,信号C的采样率为 fs/2。同时,每一个信号 B 帧进入 Buffer2 时,Buffer2不会按照每一帧进行缓存,而仍然是按照采样进行缓存,导致的结果就是信号 B 的每一帧被拆分为两个信号 C 帧。