cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 839|回复: 1

高手来帮帮忙吧·····感激

[复制链接]
发表于 2009-5-24 15:28:34 | 显示全部楼层 |阅读模式
本人的毕业设计由于要用到cvi仿真
设计一个形态滤波器 用于检测电能质量
其中要用数学形态学运算

具体程序如下:
#include <utility.h>
#include <ansi_c.h>
#include <analysis.h>
#include <cvirte.h>  
#include <userint.h>
#include "mm.h"
static int panelHandle;
void xab(double *x,double *xb,int M);
void xsb(double *x,double *xb,int M);
int detp(double *data,double vdmax,double *out,int l);
/* (x+B)(n)  x[]输入数据,2048个。xb[]输出数据,(2048-M)。扁平结构,M=6个,幅值0.1.*/  
void xab(double *x,double *xb,int M)
{
int minin;
int maxin;
double vmin;
double vmax;  
//int M=5;
int N=1024;
int n,m,p;
double B[64];
double xpb[64];
Set1D (B, M, 5.1);
for (n=M-1; n<(N-1); n++)
{
  p=n-M+1;
  Add1D (&x[p], B, M, xpb);  //扁平结构B[n]=B[n-p]
  MaxMin1D (&x[p], M, &vmax, &maxin, &vmin, &minin);
  xb[n-M+1]=(vmax+vmin)*0.5;
}
}
/* (x-B)(n)  x[]输入数据,2048个。xb[]输出数据,(2048-M)。扁平结构,M=6个,幅值0.1.*/
void xsb(double *x,double *xb, int M)
{
int minin;
int maxin;
double vmin;
double vmax;  
//int M=5;
int N=1024;
int n,m,p;
double B[64];
double xpb[64];
Set1D (B, M, 5.1);
for (m=0; m<(N-M); m++)
{
  p=m+0;
  Sub1D (&x[p], B, M, xpb);
  MaxMin1D (&x[p], M, &vmax, &maxin, &vmin, &minin);
  xb[m]=vmin;
}
}
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)     
  return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "041452.uir", PANEL)) < 0)
  return -1;
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
int CVICALLBACK OkCallback (int panel, int control, int event,
  void *callbackData, int eventData1, int eventData2)
{   double ph=90.0;
double vl=100.0;
int ss;
int mm;
int hh;
int k;
double ok[2048];
double NOI[2048];
double COS[2048];
int minin;
int maxin;
double vmin;
double vmax;  
int i;
switch (event)
  {
  case EVENT_COMMIT:
    SineWave (128*8, 100.0, 7.8125e-3, &ph, COS);
    WhiteNoise (1024, 4.0, 1, NOI);
    Add1D (COS, NOI, 1024, ok);
    SineWave (128*8, 3.0, 3.0/128, &ph, COS);
    Add1D (COS, ok, 1024, ok);
    SineWave (128*8, 1.0, 5.0/128, &ph, COS);
    Add1D (COS, ok, 1024, ok);
    ok[27]=ok[27]-10.0;
    ok[28]=ok[28]-10.0;
    ok[29]=ok[29]-10.0;
    ok[30]=ok[30]-10.0;
    for (i=0; i<128; i++)
    {
     ok[i+600]=0.0;
     ok[i+102]=ok[i+102]*0.8;
     ok[i+360]=ok[i+360]*1.2;         
    }
    SineWave (64, 10.0, 30*7.8125e-3, &ph, NOI);
    Add1D (&ok[920], NOI, 30, &ok[920]);
    SetCtrlAttribute (panelHandle, PANEL_GRAPH_2, ATTR_XUSE_LABEL_STRINGS, 1);
   
    InsertAxisItem (panelHandle, PANEL_GRAPH_2, VAL_BOTTOM_XAXIS, -1, "Thd", -1.0);
    PlotWaveform (panelHandle, PANEL_GRAPH_2, ok, 1024, VAL_DOUBLE, 1.0, 0.0, 0.0, 20.0/128.0,
         VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_BLUE);
       GetSystemTime (&hh, &mm, &ss);
    SetCtrlVal (panelHandle, PANEL_NUMERIC, ss);
    SetCtrlVal (panelHandle, PANEL_NUMERIC_3, mm);
    for(k=0;k<1600;k++)
    {
     vl=10;
     detp(ok,vl,NOI,2048);  
/*    xab(ok,ok,2);
//    xsb(ok,ok,5);
//    PlotWaveform (panelHandle, PANEL_GRAPH_3, ok, 1014, VAL_DOUBLE, 1.0, 0.0, 5*20.0/128.0,
//         20.0/128.0, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
//
    Sub1D (&ok[1], ok, 1017, NOI);
    Abs1D (ok, 1024, ok);
    PlotWaveform (panelHandle, PANEL_GRAPH, ok, 1024, VAL_DOUBLE, 1.0, 0.0, 0.0, 20.0/128.0,
         VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_BLUE);
    for(i=0;i<1013;i++)
    {
     MaxMin1D (&NOI, 4, &vmax, &maxin, &vmin, &minin);
//     NOI=(vmax+vmin)-2*NOI;
     NOI=(vmax-vmin);
     if(NOI<8.6) NOI=0.0;
    }  
*/    }
    GetSystemTime (&hh, &mm, &ss);
    SetCtrlVal (panelHandle, PANEL_NUMERIC_2, ss);
    SetCtrlVal (panelHandle, PANEL_NUMERIC_4, mm);
   
/*    xab(NOI,COS,4);
    xsb(NOI,NOI,4);
    Sub1D (COS, NOI, 1015, NOI);
    for(i=0;i<1015;i++)  if(NOI<10.0) NOI=0.0;*/   
    PlotWaveform (panelHandle, PANEL_GRAPH_3, NOI, 1015, VAL_DOUBLE, 1.0, 0.0, 10*20.0/128.0,
         20.0/128.0, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_DK_RED);  
/*    xsb(ok,ok,6);
    xab(ok,ok,6);  */
    for(i=0;i<1012;i++)
    {
     MaxMin1D (&ok, 5, &vmax, &maxin, &vmin, &minin);
     ok=(vmax+vmin)/2.0;
    }  
    xab(ok,ok,64);
    PlotWaveform (panelHandle, PANEL_GRAPH_3, ok, 960, VAL_DOUBLE, 1.0, 0.0, 42*20.0/128.0,
         20.0/128.0, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_BLUE);
   break;
  }
return 0;
}
int CVICALLBACK QuitCallback (int panel, int control, int event,
  void *callbackData, int eventData1, int eventData2)
{
switch (event)
  {
  case EVENT_COMMIT:
   QuitUserInterface (0);
   break;
  }
return 0;
}
int detp(double *data,double vdmax,double *out,int l)
{
int i,sig;
int maxin,minin;
double vmax,vmin,vmax2,vmin2;
Sub1D (&data[2], data, l-2, out);
/* for (i=0; i<(l-2); i++)
  {
   out=out*0.5;
  } */
/* for (i=0; i<(l-1); i++)
  {
//   MaxMin1D (&data, 2, &vmax, &maxin, &vmin, &minin);
   out=(data+data[i+1])*0.5;
  }
Sub1D (&out[1], out, l-2, out);  */
for(i=0;i<l-6;i++)
  {
   MaxMin1D (&out, 5, &vmax, &maxin, &vmin, &minin);
//   MaxMin1D (&out[i+3], 4, &vmax2, &maxin, &vmin2, &minin);
   out=(vmax-vmin)*0.5;
   if(out<vdmax) out=0.0;
   else sig=1;
  }
return sig;
}



但是有错误,高手能帮看看嘛,或者能帮改一下的直接发在我邮箱吧 leexwd@163.com  不甚感激啊~~~~~谢谢~~~
发表于 2009-5-25 08:37:30 | 显示全部楼层
你最好把整个工程文件上传,这样调试起来比较容易!
像你这样上传的代码,看起来太累!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-4-21 03:06 , Processed in 1.149204 second(s), 7 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表