#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define N 1000
struct complex {float real,imag;}; /*定义一个复数结构*/
void fft(complex*x,int n);
void ifft(complex *x,int n);
void hilbert(float *x,int n,float *y) /*输入信号为x,输出信号为y,信号长度为n*/
{
struct compx *z;
int i,k;
float temp;
z=(struct compx *)malloc(sizeof(struct compx)*n);
for(i=0;i<n;i++)
{
z[i].real=x[i];
z[i].imag=0;
}
fft(z,n);
k=n/2;
z[0].real=0;
z[0].imag=0;
z[k].real=0;
z[k].imag=0;
for(i=1;i<k;i++) /*进行加权*/
{
temp=z[i].real;
z[i].real=-z[i].imag;
z[i].imag=temp;
}
for(i=k+1;i<n;i++) /*进行加权*/
{
temp=-z[i].real;
z[i].real=z[i].imag;
z[i].imag=temp;
}
ifft(z,n);
for(i=0;i<n;i++)
x[i]=z[i].real;
free(z);
}
void fft(){
int i=0,j=0,k=0,l=0;
complex up,down,product;
change();
for(i=0;i< log(size_x)/log(2) ;i++){ /*一级蝶形运算*/
l=1<<i;
for(j=0;j<size_x;j+= 2*l ){ /*一组蝶形运算*/
for(k=0;k<l;k++){ /*一个蝶形运算*/
mul(x[j+k+l],W[size_x*k/2/l],&product);
add(x[j+k],product,&up);
sub(x[j+k],product,&down);
x[j+k]=up;
x[j+k+l]=down;
}
}
}
}
/*快速傅里叶逆变换*/
void ifft(){
int i=0,j=0,k=0,l=size_x;
complex up,down;
for(i=0;i< (int)( log(size_x)/log(2) );i++){ /*一级蝶形运算*/
l/=2;
for(j=0;j<size_x;j+= 2*l ){ /*一组蝶形运算*/
for(k=0;k<l;k++){ /*一个蝶形运算*/
add(x[j+k],x[j+k+l],&up);
up.real/=2;up.img/=2;
sub(x[j+k],x[j+k+l],&down);
down.real/=2;down.img/=2;
divi(down,W[size_x*k/2/l],&down);
x[j+k]=up;
x[j+k+l]=down;
}
}
}
change();
}
Hilbert-c.rar_Hilbert DSP实现_Hilbert变换C_c++ Hilbert_dsp hilbert_h
版权申诉
5星 · 超过95%的资源 68 浏览量
2022-07-14
01:14:28
上传
评论 2
收藏 790B RAR 举报
小贝德罗
- 粉丝: 69
- 资源: 1万+
最新资源
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论2