使用matlab里面的demo,用UDP发送电流/电压的实时数据。c#接收数据并做实时分析实际编程后发现,c#接收数据跟分析运算的速度太慢。50Hz的正弦波,每周期采样20个点,就是每1ms采样一次;每接收到500个点进行一次FFT运算(补12个0).matlab发送100s的采样信号,c#显示只进行了10次FFT运算。理想情况下应该是进行200次运算....每个周期采样20个点本身已经算少了,但这种情况下都来不及处理。请问是c#本身不适合进行这种高频率的实时运算分析吗?有没有什么办法能解决?

解决方案 »

  1.   

    没有做过,不过听起来貌似零拷贝,这种延时往往是因为内存之间数据拷贝造成的,从某种意义上来说,你不能把数据交给操作系统提供的接口,而是要在信号到达IO就直接处理了。好在你这个数据量还算小,不用处理整个报文,毕竟C#是虚拟机程序,IO处理还要依赖操作系统的接口。这个问题应该问问电科院或则南瑞的开发工程师。
      

  2.   

    感觉你程序编的有问题,或者是运行电脑配置太低,和C#没啥关系。数据量多大?用什么接口采集,串口?PCI卡?USB?这些也是影响速度的因素。。
      

  3.   

    用UDP协议接收数据。现在调试阶段是同一台PC上用matlab发送数据,用c#接收跟处理数据。数据量是每毫秒收到一个double数据,收到500个以后进行一次FFT运算。本来希望在FFT的基础上进行谐波分析,功率因数等其他计算。谁知道连最基本的FFT运算都完成不了。
      

  4.   

    数据量很小,建议你优化下程序。我用C#做过Gage采集卡16MB/秒的FFT,峰值,功率因数实时计算,没有问题。
      

  5.   

    研究一下你的算法吧,这点负荷不算什么。
    我用千兆网卡抓包,满负荷复制文件,做即时统计数据流量分析,在低端双核机上,c#的效率还是可以的,没有丢包现象。
    或者检查一下你的程序结构,这种实时性要求比较高的场合,要求使用比较效率高的数据结构,如Dictionary的键值查找效率远高于List的IndexOf,前者基于Hash,后者基于循环。
      

  6.   

    C#真差劲,1秒钟连两个512的FFT都处理不了,还不如ie6下的javascript。
      

  7.   

    C#做过电力行业的数据采集
    我那是10ms采集一次,进行分析计算,显示,存贮,并网络传输到主站
    没有任何问题
    楼主继续研究自己的代码吧
      

  8.   


    请你先用matlab写一遍,再用.net来写。
      

  9.   

    1ms采集需要用wmlib里的函数进行设置系统计时精度!