Tag: labview

C-通过二次拟合进行峰值检测

我有一个应用程序,我需要在给定的数据集中找到峰值的位置。 分辨率必须远高于数据点之间的间距(即,不足以找到最高数据点,而是必须在给定峰值形状的情况下估计“虚拟”峰值位置)。 峰值由大约4或5个数据点组成。 每隔几毫秒获取一个数据集,并且必须实时执行峰值检测。 我比较了LabVIEW中的几种方法,我发现LabVIEW PeakDetector.vi给出了最好的结果(在分辨率和速度方面),它使用移动窗口(> = 3点宽度)扫描数据集,并且每个位置执行一次二次拟合。 得到的二次函数(抛物线)具有局部最大值,而该局部最大值又与附近的点相比较。 现在我想在C中实现相同的方法。多项式拟合如下实现(使用高斯矩阵): // Fits *y from x_start to (x_start + window) with a parabola and returns x_max and y_max int polymax(uint16_t * y_data, int x_start, int window, double *x_max, double *y_max) { float sum[10],mat[3][4],temp=0,temp1=0,a1,a2,a3; int i,j; float x[window]; for(i = 0; i < window; i++) x[i] = […]

打开DOS窗口并从DLL中调出调试消息

我目前正在从labview调用DLL,但我需要能够实时调试它(因为它访问时间敏感的硬件)。 我想printf()我的错误断言消息但我不确定如何从DLL中打开DOS窗口以转储错误信息。 有没有人这样做过? 我知道我可以用文件做到这一点,我可能不得不这样做。 printf就是这样一个方便快捷的方式来做到这一点虽然:)。

在C和Labview之间共享一个变量?

允许C代码定期访问从单独的Labview程序生成的整数的瞬时值的最佳方法是什么? 我有时间关键的C代码控制科学实验并每20ms记录一次数据。 我还有一些labview代码可以操作不同的仪器并输出100ms的整数值。 我希望我的C代码能够记录labview的值。 做这个的最好方式是什么? 一个想法是让Labview在循环中将整数写入文件,并让C代码在循环中读取文件的值。 (如果需要,我可以在我的C代码中添加第二个线程。)Labview也可以链接到C dll。 所以我可以在C中编写一个DLL,以某种方式促进两个程序之间的共享。 这是可取的吗? 我该怎么办?