背景说明:1.使用的是TI提供的MCSDK数据包中的原始程序进行PDSCH信道的仿真;
2.对物理层进行每个步骤进行对比仿真,当前已经进行调制这个步骤的仿真;
3.对于CRC、ENC、RM三个模块无论是单独模块仿真,还是三个模块联合仿真,都能够找到对应的输出格式。
问题:一次性调用CRC\ENC\RM\MOD四个模块仿真输出数据格式与maltab软件仿真数据对不上,我对数据进行了如下实验:
1.只对数据调用MOD模块进行调制步骤(这里不适用扰码功能,后面的也是一样,matlab仿真也一样),调制数据输出正确,能够对应相应格式;
2一次性在BCP中调用CRC\ENC\RM\MOD(扰码功能disable)模块进行仿真,输出数据出错(我说的出错是指与maltab仿真结果不一致);
3.首先调用一次BCP进行CRC\ENC\RM三个模块的仿真,获取RM输出数据,并以8bit长度进行保存;然后以该数据作为MOD模块输入,调用一次BCP进行MOD模块仿真(即第一个实验)。实验发现输出数据与matlab仿真结果一致。
因此,我推断是RM输出到PC中进行保存后输入到MOD模块的数据格式与RM模块直接输出到MOD模块的数据格式不一致造成的,所以我想问一下尊敬的TI工程师,这里的输入数据格式是否有所差异,或者是RM直接输入时需要添加某些类型的字段?希望您能帮我解答这个问题
同时也希望您能够提供一些BCP各个模块的相关资料,谢谢!
cat cat:
回复 Adam Yao94020:
尊敬的TI工程师Adam Yao:
1.MOD输出数据格式与maltab仿真数据格式不一样,而且数据大小、正负都不一样。
2.BCP输出数据大小端这个的确是不一样的,因为前面仿真的时候已经发现,所以这个问题考虑过的,但是肯定不是这个答案。
3.我是在simulator上面进行的。难道是仿真软件的问题?
cat cat:
回复 Adam Yao94020:
尊敬的TI工程师Adam Yao:
我今天在EVM板上同样进行了CRC->ENC->RM->MOD的数据操作,发现MOD输出数据与在simulator上仿真输出数据一致,同样是错误的数据。所以我觉得还是RM直接输入到MOD的数据格式与RM输出到PC保存后再输入到MOD的数据格式不一样导致的,希望您能够帮我解决一下这个问题。如果有必要,我可以将代码传给您检测。
Adam Yao94020:
回复 cat cat:
你好,MCDSK中的例子是TI测试通过的,不会存在RM输出和MOD输入之间格式的不匹配。
你的测试的是TI的MCDSK程序,还是自己开发的程序呢。
照你的描述,可能出现问题的地方就是RM输出的软比特字节顺序和MOD输入之间的软比特顺序,请参考sprugz1文档figure 4-39的图。如果你使用的是TI的MCSDK,输出肯定是正确的,我觉得你可以检查一下Matlab 调制输入的顺序是否跟协议的顺序一致。软比特的顺序一反的话,调制结果肯定就是不对的。
还有一种方法去判断是不是这个问题,可以采用全0的软比特做输入,看这时候MOD输出的结果,跟你matlab输出的结果是否一致。
cat cat:
回复 Adam Yao94020:
尊敬的TI工程师Adam Yao:
您好,我使用的是MCSDK中的例子,修改部分只是对PSDCH那个函数中的一些参数和输入数据进行了修改,比如输入bit数、G参数的大小、关闭扰码功能以及输入数据为全1。相信这么修改不会将实例的架构破坏。
另外您说的使用全0的方式进行验证,这种方式我使用过的,在BCP中一次性调用CRC-ENC-RM-MOD,采用的QPSK调制、使用的是compress数据输出方式,输出的结果全为2,与matlab仿真输出是一样的。
其实我也认为是RM输出bit顺序和MOD输入bit顺序这个地方没有弄清楚,但是RM输出到PC端的数据是满足TI提供的BCP User guide上的输出格式的,然后我将其再输入到MOD模块中,仿真数据与matlab仿真数据一样。反而是一次性调用RM、MOD等模块进行处理时无法与maltab仿真数据一致,这个我就有点不明白了?
还有就是我MOD模块只使用了调制这个功能,我应该可以反推出RM模块输出的数据,明显反推出的RM输入到MOD模块的数据与以前保存的RM输出数据(一次性调用CRC、ENC、RM三个模块所产生的输出数据)是不一样的,明显是错的。
希望您能帮我解决一下这个问题。
Adam Yao94020:
回复 cat cat:
你好,全0的方式验证通过的话,说明BCP包头的配置都是正确的。我觉得还是endian这里转换的时候有问题。
现在DSP运行在大端还是小端?还有TM table中的ENDIAN_IN, FORMAT_IN, ENDIAN_OUT, FORMAT_OUT各配置为多少?
cat cat:
回复 Adam Yao94020:
尊敬的TI工程师Adam Yao:
您好,我使用的DSP的小端。我想应该是我在修改RM和MOD模块参数的时候出现了错误,因为昨天晚上我重新使用原始的MCSDK中的工程进行仿真,发现数据与matlab仿真数据一致。具体是什么地方出现了错误暂时还不知道,需要今天去对比程序。谢谢您帮我分析错误的原因。
另外想问一下关于MOD的一点疑惑吧,我发现MOD模块输出有两种类型,soft mode和hard mode,我发现soft mode好像还涉及到一些信道的概念,即一些LTE协议中控制信息(CQI、RI什么的),我想问:是不是在实现LTE协议的时候最好使用soft mode呢?因为我觉得hard mode更像是一个调试模式,看一看输出数据是什么样的?
cat cat:
回复 Adam Yao94020:
尊敬的TI工程师Adam Yao:
您好,我已经找到数据不正确的原因了,根本原因是在CRC数据分块的时候产生的。因为MCSDK数据包中的原始程序并没有将输入数据进行分块,然后输入到BCP的程序。因此,这部分需要自己修改。我在修改的时候将translation channel的判断语句少算了一种情况,即数据块小于6144的情况,导致系统最少也需要两个channel,然后就出现了错误。
最后谢谢您的回复!!!