simulink的frame和sample的问题

使用simulink的延时器的时候,通过不断地导出变量到工作区,我终于搞明白了延时器中基于帧和基于样点的设置的区别

使用场景

在使用simulink对信号的调制解调进行仿真学习的时候,由于过程中需要使信号通过各种滤波器,滤波器的群时延会导致滤波完的信号会有一定的延迟。所以在接收方接收到了信号,想拿来和发送的信号进行对比以计算误码率的时候,二者如果不同步就会导致误码率很高,基本都是50%(那不就是猜么),所以同步是一件非常有必要的事。

结合实例分析

既然滤波器导致的延迟无法避免,那我们可以将发送的信号进行延迟以进行同步。比如下图是一个简单的QPSK收发链路:
simulink的frame和sample的问题_第1张图片
其中黄框中的subsystem中包含有一个低通滤波器,并且和黄框相连的前后两个是两个根升余弦滚降滤波器(square root),这三者的阶数都设置为160,进而群延时为80个sample(这里就出现sample的概念了),如下图
simulink的frame和sample的问题_第2张图片
而在simulink中,会把数据分成帧(frame)来处理,比如伯努利信源的设置界面中:
simulink的frame和sample的问题_第3张图片
可以看到其中是包含有sample time和sample per frame的设置的。sample time就是采样率,可以理解为每隔1/1000秒,就可以得到一个随机bit;samples per frame就是帧长。那是啥?

可以理解为数据的一个打包。打包成帧之后,每一帧的数据就可以视为一个个独立的小矩阵,那对其进行一些矩阵操作,无论点乘(.*)还是普通矩阵乘,或者一些校验什么的,就会非常的方便。

但是到了延迟设置的时候,这个方便的帧就令人抓狂了。如下图两处的设置(其他设置我没用过也不太清楚):
simulink的frame和sample的问题_第4张图片

实验验证

我始终搞不懂这个sample based和frame based之间有啥区别,于是我就做了这么个实验:

使用伯努利信源,设置如下图,仿真时间设为10,将输出的信号导出到工作区,我得到一个维度为20x1x501的rdata1变量
即得到了501帧数据,每帧长20,且使用rdata(:, :, k)就可以方便的访问任意第k帧的数据。
simulink的frame和sample的问题_第5张图片
现在回到最开始的那个问题,如果我有三个filter,每个有80 samples的延迟,那我最后如何设置延迟器的延迟呢?(以下是针对该问题的具体计算,可跳过)

首先假设系统为BPSK,那么 R b = R s R_b = R_s Rb=Rs,在上图的设置,都为1000,但是在升余弦滚降滤波器中我使用了16x的上采样,于是采样率变为了16k。如果延迟了80x3个样点,就是延迟了80x3个样点的时间,即总延时:80x3x1/16k。现在要将这个总延时换算为样点数,因为是发送方直接将数据进行延迟之后和接收方进行计算误码率的,而不是上采样的数据。而在simulink的延迟器设置中,延时只能是一个样点时长的整数倍。所以使用之前得到的总延时除以发送方的采样率(也是符号率,但是这里是BPSK,所以同时也是比特率),即延迟的样点数为:(80x3x1/16k) / (1/1k) = 15个。

结论,应该延迟15个样点。

那在delay模块中怎么设置才行呢?

我又做了如下的实验:
simulink的frame和sample的问题_第6张图片
将Delay模块设置为基于sample,在工作区得到了rdata1和rdata2两个数据(如下图),通过对比可以发现,延迟过的数据是帧整体延迟了三个单位,数据的移动是按列为单位的。(注意下图的箭头反了)
simulink的frame和sample的问题_第7张图片
再将Delay模块设置为基于frame,得到了rdata1和rdata2两个数据(如下图),通过对比可以发现,延迟过的数据是帧中的数据延迟了三个单位,数据的移动是按其中的数据为单位的。
simulink的frame和sample的问题_第8张图片

结论

但是发现一点,如果设置成基于的,那么延迟的长度是几个样点;如果设置成样点的,那么延迟的长度是几。那这不是反过来了么? simulink这么设计是咋想的?

经过查阅资料,在《Simulink 与信号处理》书中,看到了这么一句话:
在这里插入图片描述
原来是这样,在simulink中,任何信号都可以看作是帧或者样点,如果视为,那么处理的最小单位就是帧里面的一个个的数据,将其中更小的单位视为不可分的“原子”(举例而已,原子可分);如果把信号视为样点,那么就把每个信号视为一个样点,样点总不能再分了吧,所以处理的对象就是它本身,把自己当作一个不可分“原子”,无论它本身是30x1还是20x1。

你可能感兴趣的:(数字信号处理)