这段时间一直在用matlab的simulink,因为毕设需要,在此记录一些学习心得。
首先要先了解simulink是什么,据维基百科上说:
Simulink是The MathWorks公司开发的用于动态系统和嵌入式系统的多领域仿真和基于模型的设计工具,常集成于MathWorks公司的另一产品MATLAB中与之配合使用。
Simulink提供了一个交互式的图形化环境及可定制模块库(Library),可对各种时变系统,例如通讯、控制、信号处理、视频处理和图像处理系统等进行设计、仿真、执行和测试。
就我理解,它把很多需要的系统模块化,只需要简单的连接就能完成和编程一样的效果,当然有些特殊处理还是要编程解决。
下面介绍一些小用法,很初级,以供参考(本文使用matlab2011b版本):
1.仿真时间和workspace
首先建立以下模型
一个可以产生8进制整数的随机发生器,接一个输出simout,它其实是一个输出指向workspace的模块,可以通过在workspace中观察数据,这是一个很好的办法知道自己的数据是什么或者对否。我们将仿真时间设置为10,上图红笔画出部分。
进行仿真后,我们来看看输出到底什么,在命令窗口右上角能够找到workspace。
你会发现simout和tout,tout是仿真时间。双击simout--signals--values,你会发现输出数据:
你会发现产生了11个8进制数,但是仿真时间却为10,其实simulink从0开始就会产生第一个数据,从tout中也可以看到是11个仿真时间。我们再把仿真时间设置为9.99来看一看:
很容易发现现在数据变为了10个,这里需要注意仿真开始后,实际在0单位时间时就会有第一个数据输出了。同时合理使用to
workspace和from workspace能起到很好的效果。
2.仿真参数化
很多时候,我们会建立复杂的模型,这时很多数据会从头到尾都会用到,例如某些数据长度,当然可能在你模型中,到处都是数字,如果我们能够将某些数字参数化,对于自己或其他人的理解和修改控制等方面都会起到很大帮助。我们仍然以刚才模型为例,如果我们想要输出一帧一帧的数据,可以如下设置:
这里一帧的长度为10,当然这里模块很少,但是当模块很多时,这个“10”在后面某些地方也会出现,例如需要数据速率相同时或者产生其他数据拼装时,那么后面可能会出现更多的“10”或“1/10”这样的数字,对于自己理解和修改或别人理解修改都很不方便,也许时间长了回来再看某一部分都不会知道10到底是什么意思或者从何而来。
我们其实只需要将其参数化便能解决一系列麻烦的问题,我们将10改为data_length:
然后我们打开file选项:
打开file--model properties--callbacks--initfcn,将输入如下语句,记得加分号。
然后,模型中所有data_length都会被换为10,这样我们不仅可以了解参数的含义,也能够很容易修改或者控制,例如switch模块。
在此先介绍两个小用法,尽管很简单,但是却容易被忽略。
这次简单描述一下upsample的用法,该模块如同其名字——上采样或升采样。
我们做一个简单的测试,做模型如下:
我们将随机整数发生器设置为8进制,采样时间为4。我们将仿真时间定为20,接下来我们观察一下scope和scope1:
采样时间似乎变成原来的1/4了。
我们再来看看workspace里的数据(workspace用法在http://www.cnblogs.com/Godsake/archive/2012/05/12/2497164.html):
simout输出数据:
simout1输出数据:
每个输出数据间插入了3个零,当然这也就是将采样时间缩短为原来的1/4,从频率上看,频率变为原来的1/4。同时数据长度也变为原来的四倍。
这里需要注意一点,4倍升采样后,功率也变为原来的1/4,如果需要,可以增加增益等方法处理。
我们来看matlab中一个自带的model(2011b,matlab7中也有该model),进入help,输入qpsk,在右上角有“OPEN
THIS MODEL”:
我们选择根余弦滤波器(关于根余弦滤波器请自行查阅资料),会发现其中便有upsample选项,该选项为8。我们稍微修改一下这个model。
右边接收部分都删掉,星座图也删掉,接一个spectrum模块,其中设置为:
一下分别为8倍,4倍和2倍升采样频谱图:
可以看出,频率被压缩了,若不加升采样,频谱将是全频段的,对于调制会产生交叠。该model对qam调制同样适用。
simulink中还有downsample这个模块,基本上是upsample的逆过程。
以上是我对upsample模块的理解,有不足之处欢迎批评指正。 |