清各位帮我看下,为什么槽函数
void Ddy1::show_ddy1()没有调用自定义的函数float AVG(comb *a,comb *b),好像AVG这个函数根本没有运行。各位能看出我哪里错了么?
代码如下:
#include "ddy1.h"
//
Ddy1::Ddy1( QWidget * parent)
: QDialog(parent)
{
setupUi(this);
connect(ddy1_pushButton, SIGNAL( clicked() ),this,SLOT(show_ddy1() ) );
}
# include <stdlib.h>
# include <stdio.h>
# include <string.h>
# include <math.h>
# define suijixuliechangdu 4096
# define M 4096
# define P 36
# define pi 3.1415926
# define umin 0.5
typedef struct {
float real;
float imag;
}comb;
void fft(comb *x,int m);
void ifft(comb *x,int m);
float numb;
comb *inverse(comb *a,comb *b,int n)
{
comb *huju;
huju=b;
int j;
for(j=0;j<M;j++,b++,a++)
{
(*b).real=(*a).real*cos(n*2*pi*umin*sin(pi/numb))+(*a).imag*sin(n*2*pi*umin*sin(pi/numb));
(*b).imag=(*a).imag*cos(n*2*pi*umin*sin(pi/numb))-(*a).real*sin(n*2*pi*umin*sin(pi/numb));
}
return huju;
}
comb *expand(comb *a,comb *b)
{
comb *huju,*hj;
huju=a;
hj=b;
int i;
for(i=0;i<M;i++,a++,b++)
{
(*b).real=(*a).real;
(*b).imag=(*a).imag;
}
a--;
for(i=M;i<2*M-1;i++,a--,b++)
{
(*b).real=(*a).real;
(*b).imag=-(*a).imag;
}
return hj;
}
void revers(comb *a,comb *A)
{
comb *temp1,*temp2;
temp1=a;
temp2=A;
int i;
fft(a,12);
(*A).real=0;
(*A).imag=0;
a++;
A++;
for(i=1;i<M/2;i++,a++,A++)
{
(*A).real=(*a).imag;
(*A).imag=-(*a).real;
}
(*A).real=0;
(*A).imag=0;
a++;
A++;
for(i=(M+2)/2;i<M;i++,a++,A++)
{
(*A).real=-(*a).imag;
(*A).imag=(*a).real;
}
a=temp1;
A=temp2;
ifft(A,12);
ifft(a,12);
}
void fft(comb *x,int m)
{
static comb *w;
static int mstore=0;
static int n=1;
comb u,temp,tm;
comb *xi,*xip,*xj,*wptr;
int i,j,k,l,le,windex;
double arg,w_real,w_imag,wrecur_real,wrecur_imag,wtemp_real;
if(m!=mstore)
{
if(mstore!=0)
free(w);
mstore=m;
if(m==0) return;
n=1<<m;
le=n/2;
/* allocate the storage for w */
w=(comb *)calloc(le-1,sizeof(comb));
if(! w)
{
printf("\nUnable to allocate comb w array\n");
exit(1);
}
/* calculate the w values recursively */
arg=4.0*atan(1.0)/le;
wrecur_real=w_real=cos(arg);
wrecur_imag=w_imag=-sin(arg);
xj=w;
for(j=1;j<le;j++)
{
xj->real=(float)wrecur_real;
xj->imag=(float)wrecur_imag;
xj++;
wtemp_real=wrecur_real*w_real-wrecur_imag*w_imag;
wrecur_imag=wrecur_real*w_imag+wrecur_imag*w_real;
wrecur_real=wtemp_real;
}
}
/* start fft */
le=n;
windex=1;
for(l=0;l<m;l++)
{
le=le/2;
/* first iteration with no multiplies */
for(i=0;i<n;i=i+2*le)
{
xi=x+i;
xip=xi+le;
temp.real=(xi->real+xip->real);
temp.imag=(xi->imag+xip->imag);
xip->real=(xi->real-xip->real);
xip->imag=(xi->imag-xip->imag);
*xi=temp;
}
/* remaining iterations use stored w */
wptr=w+windex-1;
for(j=1;j<le;j++)
{
u=*wptr;
for(i=j;i<n;i=i+2*le)
{
xi=x+i;
xip=xi+le;
temp.real=(xi->real+xip->real);
temp.imag=(xi->imag+xip->imag);
tm.real=xi->real-xip->real;
tm.imag=xi->imag-xip->imag;
xip->real=(tm.real*u.real-tm.imag*u.imag);
xip->imag=(tm.real*u.imag+tm.imag*u.real);
*xi=temp;
}
wptr=wptr+windex;
}
windex=2*windex;
}
/* rearrang data by bit reversing */
for(i=0;i<n;++i)
{
j=0;
for(k=0;k<m;++k)
j=(j<<1)|(1&(i>>k));
if(i<j)
{
xi=x+i;
xj=x+j;
temp=*xj;
*xj=*xi;
*xi=temp;
}
}
}
void ifft(comb *x,int m) //IFFT
{
static comb *w;
static int mstore=0;
static int n=1;
comb u,temp,tm;
comb *xi,*xip,*xj,*wptr;
int i,j,k,l,le,windex;
float scale;
double arg,w_real,w_imag,wrecur_real,wrecur_imag,wtemp_real;
if(m!=mstore)
{
/* free previously allocated storage and set new m */
if(mstore!=0)free(w);
mstore=m;
if(m==0)return; /* if m=0 then done */
/* n=2**m=fft length */
n=1<<m;
le=n/2;
/* allocate the storage for w */
w=(comb*)calloc(le-1,sizeof(comb));
if(!w)
{
printf("\nUnable to allocate comb w array\n");
exit(1);
}
/* calculate the w values recursively */
arg=4.0*atan(1.0)/le;
wrecur_real=w_real=cos(arg);
wrecur_imag=w_imag=sin(arg);
xj=w;
for(j=1;j<le;j++)
{
xj->real=(float)wrecur_real;
xj->imag=(float)wrecur_imag;
xj++;
wtemp_real=wrecur_real*w_real-wrecur_imag*w_imag;
wrecur_imag=wrecur_real*w_imag+wrecur_imag*w_real;
wrecur_real=wtemp_real;
}
}
/* start ifft */
le=n;
windex=1;
for(l=0;l<m;l++)
{
le=le/2;
/* first iteration with no multiplies */
for(i=0;i<n;i=i+2*le)
{
xi=x+i;
xip=xi+le;
temp.real=(xi->real+xip->real);
temp.imag=(xi->imag+xip->imag);
xip->real=(xi->real-xip->real);
xip->imag=(xi->imag-xip->imag);
*xi=temp;
}
/* remaining iterations use stored w */
wptr=w+windex-1;
for(j=1;j<le;j++)
{
u=*wptr;
for(i=j;i<n;i=i+2*le)
{
xi=x+i;
xip=xi+le;
temp.real=(xi->real+xip->real);
temp.imag=(xi->imag+xip->imag);
tm.real=xi->real-xip->real;
tm.imag=xi->imag-xip->imag;
xip->real=(tm.real*u.real-tm.imag*u.imag);
xip->imag=(tm.real*u.imag+tm.imag*u.real);
*xi=temp;
}
wptr=wptr+windex;
}
windex=2*windex;
}
/* rearrang data by bit reversing */
for(i=0;i<n;++i)
{
j=0;
for(k=0;k<m;++k)
j=(j<<1)|(1&(i>>k));
if(i<j)
{
xi=x+i;
xj=x+j;
temp=*xj;
*xj=*xi;
*xi=temp;
}
}
/* scale all results by 1/n */
scale=(float)(1.0/n);
for(i=0;i<n;i++)
{
x.real=scale*x.real;
x.imag=scale*x.imag;
}
}
float AVG(comb *a,comb *b)
{
float sum=0,i;
comb *temp1,*temp2;
temp1=a;
temp2=b;
for(i=0;i<M;i++,a++,b++)
{
sum+=(*a).real*(*b).real;
}
a=temp1;
b=temp2;
return sum/M;
printf("11111");
printf("%f",sum/M);
printf("\n");
}
void Ddy1::show_ddy1()
{
float numb = this->numb_lineEdit->text().toFloat();
float sigma = this->lineEdit_112->text().toFloat();
printf("%f\n%f\n",numb,sigma);
float AVG(comb *a,comb *b);
int i;
double x1[suijixuliechangdu],x2[suijixuliechangdu],y[suijixuliechangdu],z[suijixuliechangdu];
for(i=0;i<suijixuliechangdu;i++)
{
x1=double(rand())/RAND_MAX;
x2=double(rand())/RAND_MAX;
y=sqrt(-2*log(x1))*sin(2*pi*x2);
z=y*sigma;
//printf("%f",z);
//printf("\n");
}
comb a0[M],*pa0; //
pa0=a0;
for(i=0;i<suijixuliechangdu;i++) //ǰsuijixuliechangdu