📄 fft.cpp
字号:
#include<iostream.h>
#include<math.h>
#include"fft.h"
#define P 3.1416
Sigproc::Sigproc(float *signal1 = NULL,float *signal2 = NULL,int N = 0)
{
signalX = new float[N];
signalX = signal1;
signalY = new float[N];
signalY = signal2;
signalN = N;
}
Sigproc::~Sigproc()
{
delete []signalX;
delete []signalY;
}
// bit reverse:
void Sigproc::bitrev()
{
int i,j,s,M;
float a;
M = signalN/2;
i = 0;
for(j = 1;j < signalN;j++)
{
s = M;
while(i >= s)
{
i = i-s;
s /= 2;
}
i = i + s;
if(j < i)
{
a = signalX[j];
signalX[j] = signalX[i];
signalX[i] = a;
}
}
// return 0;
}
// fft:
void Sigproc::fft(int l = 0)
{
int i,j,r,m1,m2,m3,m4,N,k1,k2;
float u,v;
N = int(pow(2,l));
for(i = 1;i < l+1;i++)
{
m1 = int(pow(2,i-1));
m2 = 2*m1;
m3 = N/m2;
for(j = 0;j< m3;j++)
{
m4 = j*m2;
for(r = 0;r < m1;r++)
{
k1 = m4 + r;
k2 = k1 + m1;
u = float(signalX[k2] * cos(2*P*r/m2) + signalY[k2] * sin(2*P*r/m2));
v = float(signalY[k2] * cos(2*P*r/m2) - signalX[k2] * sin(2*P*r/m2));
signalX[k2] = signalX[k1] - u;
signalY[k2] = signalY[k1] - v;
signalX[k1] = signalX[k1] + u;
signalY[k1] = signalY[k1] + v;
}
}
}
}
// am:
void Sigproc::signalM()
{
am = new float[signalN];
for(int i = 0;i < signalN;i++)
{
am[i] = float(sqrt(signalX[i] * signalX[i] + signalY[i] * signalY[i]));
}
}
/*void Sigproc::show()
{
int k = 0;
for(int i = 0;i < signalN;i++)
{
cout<<"("<<signalX[i]<<","<<signalY[i]<<")";
k++;
if(k % 4 == 0)
cout<<endl;
}
cout<<"it is over!"<<endl;
k = 0;
for(i = 0;i < signalN;i++)
{
cout<<am[i]<<",";
k++;
if(k % 6 == 0)
cout<<endl;
}
cout<<"the am is over!"<<endl;
}*/
complex::complex(double r,double i)
{
real=r;
imag=i;
}
complex operator*(complex a,complex b)
{
complex temp;
temp.real=a.real*b.real-a.imag*b.imag;
temp.imag=a.real*b.imag+a.imag*b.real;
return temp;
}
/*int main()
{
int s;
cout<<"input the serial:";
cin>>s;
int N = int(pow(2,s));
float *x = new float[N];
float *y = new float[N];
for(int i = 0;i < N;i++)
{
x[i] = float(cos(P*i*i/N));
y[i] = float(sin(P*i*i/N));
}
Sigproc sig(x,y,N);
sig.bitrev();
sig.fft(s);
sig.signalM();
sig.show();
delete []x;
delete []y;
return 0;
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -