本文共 1896 字,大约阅读时间需要 6 分钟。
# include
# include
# include
# include
# define PI 3.14
/* 函数定义区 */
void f(float *r, int Fm, int L, float dt);
float * h_Ip(float *pRaa1, int leng_1, float *pRaa2, int leng_2);
void main()
{
float R[71]; //用是存放生成的数据
float E[71];
int i, j;//用来循环的量
int L = 71; //子波长度
float dt = 0.001;//采样间隔
int Fm = 25;//子波的中心频率
FILE * fp; //定义一个文件类指针
float thrash[256] = {0};
float *pRaa = NULL;
f(R, Fm, L, dt); //调用雷克函数
// ------------------------------------------------------------
for(i=35,j=0; i<=70,j<=35; i++,j++) // 12 3 45 , 01 2 34
{
E[i] = R[j];
}
for(i=0,j=35; i<=35,j>=0; i++,j--)
{
E[i] = R[j];
}
// -------------------------------------------------------------
//thrash[242] = 1.0; // 128, 31, 242
//thrash[31] = 1.0;
//thrash[128] = 1.0;
pRaa = h_Ip(thrash, 256, E, 71);
/* 打开文件并判断 */
if((fp=fopen("Palace","w")) == NULL)
{
perror("data");
exit(1);
}
/* 向文件输出 */
for(i=0; i<71; i++) //326
{
fprintf(fp, "%f\n", E[i]);
}
fclose(fp); //关闭文件
free(pRaa);
}
void f(float *r, int Fm, int L, float dt) //雷克子函数
{
int *I; //I是时间间隔点
float *t;
int i;
/* 动态分配内存 */
t = (float *)malloc(sizeof(float) * L);
I = (int *)malloc(sizeof(int) * L);
/* 为时间间隔点赋值 从0~70 */
for(i=0; i
{
I[i] = i;
}
/* 通过t = i * dt的公式计算 */
for(i=0; i
{
t[i] = dt * I[i];
}
/* 通过计算r(t)的公式计算 并将值保存在R[]中 */
for(i=0; i
{
r[i] = (exp(-1*pow(PI*Fm*t[i], 2))) * (1 - 2*pow(PI*Fm*t[i], 2));
}
/* 释放内存 */
free(t);
free(I);
}
/* 一维离散卷积公式 */
/* 用于计算(pRaa1[leng_1] * pRaa2[leng_2])[leng_3] */
float * h_Ip(float *pRaa1, int leng_1, float *pRaa2, int leng_2) //leng_1是1数组的长度,leng_2是2数组的长度,*pRaa3用来储存卷积后的数据
{
float *pRaa3;
int n, m;
int leng_3; //leng_3是存放卷积完的长度
float k=0; //k用来临时存放数据
pRaa3 = (float *)malloc(sizeof(float)*(leng_1+leng_2-1));//动态分配内存,!没有销毁
leng_3 = leng_1+leng_2-1;
/* 通过离散卷积公式计算 */
for(n=0; n
{
for(m=0; m
{
if((n-m)>=0 && (n-m)
{
k += pRaa1[m] * pRaa2[n-m];
}
}
pRaa3[n] = k;
k = 0;
}
return pRaa3;
}
一键复制
编辑
Web IDE
原始数据
按行查看
历史
转载地址:http://hujkl.baihongyu.com/