调程序什么的。。虐心的累啊!!
卧了个大槽!!!还是之前这里提到的帮师兄弄一个演示系统的事,决定了用C++调用matlab后,一直是一波三折啊!!!
之前研究C++怎么调用matlab,自己写的是一个超级迷你的一个matlab function,就一行语句,成功了,结果移植那个算法的时候,已跑到调用matlab的那个语句就崩了,一跑就崩。。然后我采用了一个超级愚蠢的方法,一行语句一行语句加,看加到那一行语句出问题,结果定位在一句滤波函数fir1那里,不知道为什么,然后我就改成conv呗,还是不行,于是乎。。。自己写了一个卷积的matlab函数,用那个函数代替conv,结果就过了fir1那一关,一跑完整的程序,又崩了尼马。。。然后继续一行一行加。。。fft函数。。尼马,算了,我大概知道什么样的函数行不通了。。调试到两点多,不管了,睡觉!!
第二天,把程序直接搬到实验室电脑上,我靠!!!一点压力都没有的给我显示出来一个正确的频率!!
我以为一切顺利了,结果把界面什么的一整合,开始还很正常, 结果不知道为什么计算出来的频率会在70+M突然跳到300+M,时不时还跳回来,或者索性就不跳了。。,完全无法理解啊!!然后师兄总结出来一个结论,知道了什么样的波形出来数据会有问题,什么样的数据没问题,好吧,但愿到时候波形好一点。。。然后第二天,师兄跟我说,那个70+M的频率把他搞崩溃了!!我说那我也不知道怎么调啊。。
一开始我还以为是算法的问题,但是把原封不动的数据放到matlab里面跑,是正常的,300+M的结果,但是C++一跑就变70+M。。。
然后师兄把几个C++跑出来是300+M的数据放到matlab里面跑,虽然也是300+M,但是还是有几兆的误差的。。。于是乎,我就把这个结果归咎于。。。C++调用函数和matlab调用精度不一样为由,虽然这绝对解释不了为什么300+M会变到70+M这种“精度误差”。。。
拜托了,神啊,都已经是这样的人生了……请让我做一次幸福的梦…
然后我就不想管师兄了。。因为我感觉上啊,是C++调用matlab的时候不知道哪里出了问题。。。而且因为是DLL调用,还没办法深入调试。。【有办法的么??】
然后,明天要演示了,我刚吃完饭,师兄一个电话打来,说“我要被那个60+M的东西搞崩溃了。。。”。。。啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊。。。我也要崩溃了!!!!
然后师兄提出了一个严重违背学术道德的方法,这里就不提及了。。。让我去完成,无奈,至少那个备用方法是我可以保证可以完成的。。。于是,拖着疲惫的身躯,寒风细雨中滚到了隔壁实验楼,但是我还是决定最后跟这个程序拼一拼,于是放弃了那个“严重违背学术道德”的方案。。。测试了一种有一种设想,突然,我发现了一个很不对劲的问题,我们之前跑matlab算法的时候,都是用GPIB采集到的数据保存为文本,然后拿到matlab里面跑来算哪个频率,但是我刚刚保存了以下数据,发现保存的文本第一个字符是个空格,然后后面才是数据??实在很在意这个问题,去看代码,完全没有插入空格的语句啊,于是乎,我查了一下GPIB返回来的数据,尼马,这什么玩意儿啊,那个字符串第一个字符居然是空格!!然后我就在代码里加了一句”str++”,跳过了那个空格,然后。。。。世界太平。。。。
matlab君,对不起,是我误解了你,你是个好人,你一直都没错。。。。都是世界的错,好吧,其实是时辰的错!!!
我QNMLGB的GPIB,TMD居然是你给补的刀!!!要是不他喵的我看了一下基本用不上的文本的数据,鬼才知道前面有个空格啊,我之前已经watch了gpib返回来的变量,一直觉得没错啊,我靠你前面加个什么字符不好,你加个空格??!!鬼他妹的才看得出来!!!
尼马哥复习六级的时间全部他喵的被你给耽搁了,现在还要花半个小时时间来写一篇博文来出口气!!!然后还要担心我另外一个用GPIB采集数据的程序会不会有问题。。。。
!!!!!!