📄 process.cpp
字号:
#include "stdafx.h"
#include <math.h>
#include "stdio.h"
#include <ctype.h>
#include <iostream.h>
#include <string.h>
#include <malloc.h>
#define pi 3.14159265359
FILE *fp,*fp1,*fp2;
int n=16,m=3,i,j,ii;
float *b,*c;
float cc,bb;
char Str1[6];
//定义复数结构
typedef struct
{
float re;
float im;
}COMPLEX;
COMPLEX Add(COMPLEX c1, COMPLEX c2)
{
COMPLEX c;
c.re=c1.re+c2.re;
c.im=c1.im+c2.im;
return c;
}
COMPLEX Sub(COMPLEX c1, COMPLEX c2)
{
COMPLEX c;
c.re=c1.re-c2.re;
c.im=c1.im-c2.im;
return c;
}
COMPLEX Mul(COMPLEX c1, COMPLEX c2)
{
COMPLEX c;
c.re=c1.re*c2.re-c1.im*c2.im;
c.im=c1.re*c2.im+c2.re*c1.im;
return c;
}
COMPLEX *x,*h,*y;
//////////Fourier变换子程序
void FFT(COMPLEX * TD, COMPLEX * FD, int power)
{
FILE *fp1,*fp2;
int count;
int i,j,k,bfsize,p;
float angle;
COMPLEX *W,*X1,*X2,*X;
count=1<<power;
W=(COMPLEX *)malloc(sizeof(COMPLEX)*count/2);
X1=(COMPLEX *)malloc(sizeof(COMPLEX)*count);
X2=(COMPLEX *)malloc(sizeof(COMPLEX)*count);
for(i=0;i<count/2;i++)
{
angle=-i*pi*2/count;
W[i].re=cos(angle);
W[i].im=sin(angle);
}
memcpy(X1,TD,sizeof(COMPLEX)*count);
for(k=0;k<power;k++)
{
for(j=0;j<1<<k;j++)
{
bfsize=1<<(power-k);
for(i=0;i<bfsize/2;i++)
{
p=j*bfsize;
X2[i+p]=Add(X1[i+p],X1[i+p+bfsize/2]);
X2[i+p+bfsize/2]=Mul(Sub(X1[i+p],X1[i+p+bfsize/2]),W[i*(1<<k)]);
}
}
X=X1;
X1=X2;
X2=X;
}
for(j=0;j<count;j++)
{
p=0;
for(i=0;i<power;i++)
{
if (j&(1<<i)) p+=1<<(power-i-1);
}
FD[j]=X1[p];
printf("\n !!!!!!fd[%d]==%f+j(%f)",j,FD[j].re,FD[j].im);
}
if((fp1=fopen("test1.txt","w"))==NULL)
{
printf("can not open!!!!");
}
if((fp2=fopen("test2.txt","w"))==NULL)
{
printf("can not open!!!!");
}
for(i=0;i<count;i++)
{
fprintf(fp1,"%3.1f ",FD[i].re);
fprintf(fp2,"%3.1f ",FD[i].im);
}
fclose(fp1);
fclose(fp2);
free(W);
free(X1);
free(X2);
}
////////////////////////////////////////
/*
int main(int argc, char* argv[])
{
int n,m,i;
COMPLEX *x,*h,*y;
float *b,*c;
float cc,bb;
FILE *fp,*fp1,*fp2;
printf("请输入m的值:");
scanf("%d",&m);
n=1<<m;
//分配内存
x=(COMPLEX *)malloc(sizeof(COMPLEX)*n);
h=(COMPLEX *)malloc(sizeof(COMPLEX)*n);
y=(COMPLEX *)malloc(sizeof(COMPLEX)*n);
b=(float *)malloc(sizeof(float)*n);
c=(float *)malloc(sizeof(float)*n);
//从文件中读入数据
if((fp=fopen("test.txt","r"))==NULL)
{
printf("can not open!!!!");
}
for(i=0;i<n;i++)
{
fscanf(fp,"%f",&b[i]);
x[i].re=b[i];
h[i].re=b[i];
x[i].im=0.0;
h[i].im=0.0;
printf("\n x[%d]==%f",i,x[i].re);
}
fclose(fp);
FFT(x,h,m);
//从文件中读出变换后的实部
if((fp1=fopen("test1.txt","r"))==NULL)
{
printf("can not open!!!!");
}
for(i=0;i<n;i++)
{
fscanf(fp1,"%f",&bb);
x[i].re=bb;
h[i].re=bb;
printf("\n x[%d]=%f",i,x[i].re);
}
fclose(fp1);
//从文件中读出变换后的虚部
if((fp2=fopen("test2.txt","r"))==NULL)
{
printf("can not open!!!!");
}
for(i=0;i<n;i++)
{
fscanf(fp2,"%f",&cc);
x[i].im=cc;
h[i].im=cc;
}
fclose(fp2);
//求y(k)=x(k)*h(k)及y(k)的共轭
for(i=0;i<n;i++)
{
y[i]= Mul(x[i],h[i]);
y[i].im=-1*y[i].im;
}
FFT(y,h,m);
if((fp1=fopen("test1.txt","r"))==NULL)
{
printf("can not open!!!!");
}
if((fp2=fopen("test2.txt","r"))==NULL)
{
printf("can not open!!!!");
}
for(i=0;i<n;i++)
{
fscanf(fp1,"%f",&b[i]);
fscanf(fp2,"%f",&c[i]);
y[i].re=b[i];
y[i].im=c[i];
}
fclose(fp1);
fclose(fp2);
//求最终卷积的结果
for(i=0;i<n;i++)
{
y[i].re=y[i].re/n;
y[i].im=-1*y[i].im/n;
}
//输出到文件!!!
if((fp1=fopen("test3.txt","w"))==NULL)
{
printf("can not open!!!!");
}
if((fp2=fopen("test4.txt","w"))==NULL)
{
printf("can not open!!!!");
}
for(i=0;i<n;i++)
{
fprintf(fp1,"%3.1f ",y[i].re);
//fprintf(fp1,"\n");
fprintf(fp2,"%3.1f ",y[i].im);
}
fclose(fp1);
fclose(fp2);
free(x);
free(h);
free(y);
free(b);
free(c);
return 0;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -