1:正弦波
用函数 sin (x * π/180°)
/************************************************** 正弦波 mif 生成 ***************************************************/
#include <stdio.h>
#include <math.h> #define DEPTH 128 /*数据深度,即存储单元的个数,可更改*/
#define WIDTH 8 /*存储单元的宽度,可更改*/
#define PI 3.141592 int main(void)
{
int i,temp;
float s; FILE *fp;
fp = fopen("SinPro.mif","w"); /*可更改,但扩展名必须为.mif*/
if(NULL == fp)
printf("Can not creat file!\r\n");
else
{
printf("File created successfully!\n");
/*
* 生成文件头:注意不要忘了“;”
*/
fprintf (fp, "DEPTH = %d;\n",DEPTH);
fprintf (fp, "WIDTH = %d;\n",WIDTH);
fprintf (fp, "ADDRESS_RADIX = HEX;\n");
fprintf (fp, "DATA_RADIX = HEX;\n");
fprintf (fp, "CONTENT\n");
fprintf (fp, "BEGIN\n"); /*
* 以十六进制输出地址和数据
*/
for(i = ; i < DEPTH; i++)
{
/*周期为128个点的正弦波*/
s = sin( PI * i * / DEPTH); // sin (x * π/180°) 取值范围-1至1,注意 sin() 函数是 double 类型 /*将-1~1之间的正弦波的值扩展到0-255之间*/
temp = (int)( (s+) * pow(, WIDTH - ) ); //正弦值扩展到 0 至 2 的 WIDTH次幂,注意 pow() 函数是 double 类型 /*以十六进制输出地址和数据*/
fprintf (fp, "%x \t : \t %x;\n", i, temp);
}//end for fprintf (fp, "END;\n");
fclose (fp);
}
}
sin_pro.c
2:三角波
用斜率计算
/************************************************** 三角波 mif 生成 ***************************************************/
#include <stdio.h>
#include <math.h> #define DEPTH 128 /*数据深度,即存储单元的个数,可更改*/
#define WIDTH 8 /*存储单元的宽度,可更改*/ int main(void)
{
int i,temp = ; FILE *fp;
fp = fopen("TrianglePro.mif","w"); /*可更改,但扩展名必须为.mif*/
if(NULL == fp)
printf("Can not creat file!\r\n");
else
{
printf("File created successfully!\n");
/*
* 生成文件头:注意不要忘了“;”
*/
fprintf (fp, "DEPTH = %d;\n",DEPTH);
fprintf (fp, "WIDTH = %d;\n",WIDTH);
fprintf (fp, "ADDRESS_RADIX = HEX;\n");
fprintf (fp, "DATA_RADIX = HEX;\n");
fprintf (fp, "CONTENT\n");
fprintf (fp, "BEGIN\n"); /*
* 以十六进制输出地址和数据
*/
for(i = ; i < DEPTH; i++)
{
if (i <= DEPTH / )
//temp = (int)(i * (pow (2, WIDTH) - 1) * 2 / DEPTH);
temp = (int)(((pow (, WIDTH) - ) * / DEPTH) * i); //斜率 * i
else
//temp = (int)(temp - (pow (2, WIDTH) - 1) * 2 / DEPTH);
temp = (int)(((pow (, WIDTH) - ) * / DEPTH) * (DEPTH - - i)); //斜率 * (depth-1 - i)
fprintf (fp, "%x \t : \t %x;\n", i, temp);
}//end for fprintf (fp, "END;\n");
fclose (fp);
}
}
triangle_pro.c
3:锯齿波
用斜率计算
/************************************************** 锯齿波 mif 生成 ***************************************************/
#include <stdio.h>
#include <math.h> #define DEPTH 128 /*数据深度,即存储单元的个数,可更改*/
#define WIDTH 8 /*存储单元的宽度,可更改*/ int main(void)
{
int i,temp = ; FILE *fp;
fp = fopen("SawtoothPro.mif","w"); /*可更改,但扩展名必须为.mif*/
if(NULL == fp)
printf("Can not creat file!\r\n");
else
{
printf("File created successfully!\n");
/*
* 生成文件头:注意不要忘了“;”
*/
fprintf (fp, "DEPTH = %d;\n",DEPTH);
fprintf (fp, "WIDTH = %d;\n",WIDTH);
fprintf (fp, "ADDRESS_RADIX = HEX;\n");
fprintf (fp, "DATA_RADIX = HEX;\n");
fprintf (fp, "CONTENT\n");
fprintf (fp, "BEGIN\n"); /*
* 以十六进制输出地址和数据
*/
for(i = ; i < DEPTH; i++)
{
temp = (int)(((pow (, WIDTH) - ) / (DEPTH - )) * i); //斜率 * i
fprintf (fp, "%x \t : \t %x;\n", i, temp);
}//end for fprintf (fp, "END;\n");
fclose (fp);
}
}
sawtooth_pro.c
4:方波
/************************************************** 方波 mif 生成 ***************************************************/
#include <stdio.h>
#include <math.h> #define DEPTH 128 /*数据深度,即存储单元的个数,可更改*/
#define WIDTH 8 /*存储单元的宽度,可更改*/ int main(void)
{
int i,temp; FILE *fp;
fp = fopen("SquarePro.mif","w"); /*可更改,但扩展名必须为.mif*/
if(NULL == fp)
printf("Can not creat file!\r\n");
else
{
printf("File created successfully!\n");
/*
* 生成文件头:注意不要忘了“;”
*/
fprintf (fp, "DEPTH = %d;\n",DEPTH);
fprintf (fp, "WIDTH = %d;\n",WIDTH);
fprintf (fp, "ADDRESS_RADIX = HEX;\n");
fprintf (fp, "DATA_RADIX = HEX;\n");
fprintf (fp, "CONTENT\n");
fprintf (fp, "BEGIN\n"); /*
* 以十六进制输出地址和数据
*/
for(i = ; i < DEPTH; i++)
{
if (i < DEPTH / )
temp = ;
else
temp = (int)(pow (, WIDTH) - );
fprintf (fp, "%x \t : \t %x;\n", i, temp);
}//end for fprintf (fp, "END;\n");
fclose (fp);
}
}
square_pro.c
整合到一个函数里
/************************************************** mif 文件生成 ***************************************************/ #include <stdio.h>
#include <math.h> /*-------------------------参数区------------------------*/ #define DEPTH 128 /* 数据深度,即存储单元的个数*/
#define WIDTH 8 /* 存储单元的宽度 */
#define MODE 4 /* 1:正弦波 2:三角波 3:锯齿波 4:方波 */ /*-------------------------参数区------------------------*/ #define PI 3.141592 int main(void)
{
int i,temp; FILE *fp;
fp = fopen("yl.mif","w"); /*可更改,但扩展名必须为.mif*/
if(NULL == fp)
printf("Can not creat file!\r\n");
else
{
printf("File created successfully!\n");
/*
* 生成文件头:注意不要忘了“;”
*/
fprintf (fp, "DEPTH = %d;\n",DEPTH);
fprintf (fp, "WIDTH = %d;\n",WIDTH);
fprintf (fp, "ADDRESS_RADIX = HEX;\n");
fprintf (fp, "DATA_RADIX = HEX;\n");
fprintf (fp, "CONTENT\n");
fprintf (fp, "BEGIN\n"); /*
* 以十六进制输出地址和数据
*/ for(i = ; i < DEPTH; i++)
{
switch(MODE)
{
case ://sine
{
temp = (int)( (sin( PI * i * / DEPTH) + ) * pow(, WIDTH - ) );
break;
}
case ://triangle
{
if (i <= DEPTH / )
temp = (int)(((pow (, WIDTH) - ) * / DEPTH) * i); //斜率 * i
else
temp = (int)(((pow (, WIDTH) - ) * / DEPTH) * (DEPTH - - i));
break;
}
case ://sawtooth
{
temp = (int)(((pow (, WIDTH) - ) / (DEPTH - )) * i);
break;
}
case ://square
{
if (i < DEPTH / )
temp = ;
else
temp = (int)(pow (, WIDTH) - );
break;
}
default:
{
break;
}
}
fprintf (fp, "%x \t : \t %x;\n", i, temp);
}//end for fprintf (fp, "END;\n");
fclose (fp);
}
}
如有错误还请指出,如有侵权还请告知,如需转载请注明出处!