新手刚接触DSP,想用开发板做一个函数,但是遇到了DSP端函数跑不出结果的问题。
开发环境:艾睿合众SEED-DTK6446实验箱,芯片型号为DM6446
提供的视频采集显示的例程完成的内容是从摄像头采集图像,然后将图象显示在开发板的显示屏上。其中包含三个部分:codecs算法包, servers算法封装包, video_app应用程序(ARM端)。
我在codecs当中的video_copy.c文件中加入了自己写的二维FFT处理函数,其他部分未做修改,想要完成一个从摄像头采集图像、对图像进行FFT、FFT之后的幅度结果显示在显示屏上这样的程序。
在实际调试的过程中发现显示屏上完全没有结果显示。经过测试,发现如果将自己写的二维FFT函数变换的区域大小减小到64x64以下,而其他部分不进行处理时,程序可以正常运行,显示屏上出现的现象就是一部分处理过,另一部分未处理的图象。但当我将FFT的尺度变大到128x128的时候,虽然仍然正常运行,但是显示屏上的视频出现了明显的卡顿情况,帧率小于2fps。
尺度再变大到256x256时,显示屏上就没有任何结果显示了。经过测试,程序应该是卡在了ARM调用DSP函数的时候,也就是我修改过的函数没有跑出结果,导致ARM端的程序没有办法继续运行,使得后续的显示部分也没有运行起来。
所以问题还是出在我修改过的2dFFT函数上面。下面是我个人的分析:
1.FFT尺度变大导致视频出现卡顿,说明在此时FFT运行速度较慢导致跟不上视频帧率从而出现卡顿,说明是算法本身受到了内存等资源的限制。
2.但是问题在于直观上讲,以DSP芯片的处理能力不应该处理一个二维FFT就卡慢,甚至跑不出结果。所以暂时不知道该如何解决,是应该修改我的二维FFT算法,还是应该解决DSP芯片的内存问题。
如果修改算法,能否推荐一个现有的纯C语言的算法(我感觉TI应该有函数库但是不太找得到也不太会用)
如果解决DSP芯片的内存问题,应该具体怎么解决,或者有没有可能是其他问题,希望各位赐教 |