正弦内插值算法c语言,正弦内插算法.c

#define pi 3.141593

#define f 3 //原正弦波频率

#define cx pi/3 //原正弦波初相,每次采样的时候是随机的

double out[10000]; //存插值后各点值用的,大点好

double in[10000]; //采样值缓存,大点好

//使用Kaiser窗截断,并使用参数9

//num:采样点数

//insert_num:每2个采样点插入的点数

//T:周期数

//start_phase:生成的正弦波的起始相位

//a:生成正弦波的a系数

//b:生成正弦波的b系数

void test_sinc(int sample_num, int insert_num, double T, double start_phase, double a, double b)

{

insert_num ++;

for(int m = 0;m < sample_num;m++){//采样

in[m] = a*sin( (2*pi*m*T)/(sample_num) + start_phase) + b;

}

for(int u = 0, i =0;u< sample_num;u++){

out[i++] = in[u];

for(int k = 1;k < insert_num;k++){

double sum = 0;

double t = (double)u + (double)k/((double)insert_num);

for(int m = 0;m < sample_num;m++){

double tmp = pi*(t -(double)m);

sum += in[m]*sin(tmp)/tmp;

}

out[i++] = sum;

}

}

}

//生成hn系数数组的算法,len是数组总长度,insert_num是插入点数

void SincHn(double *data, int len, int insert_num)

{

int end = len /2;

const int start = -end;

if(len%2 != 0)

end++;

insert_num ++;

for(int i = start; i < end; i++){

if(i == 0){

*data++ = 1;

continue;

}

double tmp = pi * (double)i/ (double)insert_num;

*data++ = sin(tmp)/tmp;

}

}

unsigned long Fact(unsigned long k)

{

unsigned long sum = 1;

for(unsigned long i = 1; i <= k; i++)

sum *= i;

return sum;

}

double besseli_0(double x, int len)

{

double sum = 0;

for(int i = 0; i < len; i++){

sum += std::pow(-1, i) * std::pow(x/2, 2*i)/(Fact((unsigned long)i) * Fact((unsigned long)i+1));

}

return sum;

}

void Kaiser(double *data, int N, double beta)

{

double theta;

for( int n = 0; n < N; n++){

theta = beta * std::sqrt( 1 - std::pow( ( (2 * (double)n/(N -1)) - 1),2 ) );

double res = besseli_0(theta, 10) / besseli_0(beta, 10);

if(res < 0)

res = 0;

*data++ = res;

}

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值