c语言生成正弦波,方波等mif

这段代码演示了如何用C语言生成一个名为'sin.mif'的文件,该文件包含了正弦、三角、锯齿和方波的仿真数据。程序定义了数据深度、宽度和模式,并根据所选模式计算并输出相应的波形数据到MIF文件中,用于数字信号处理或硬件仿真。
摘要由CSDN通过智能技术生成

代码如下:

/**************************************************
 
        mif 文件生成
 
 ***************************************************/
  
  #include <stdio.h>
  #include <math.h>
  
 /*-------------------------参数区------------------------*/
 
 #define DEPTH 128     /* 数据深度,即存储单元的个数*/
 #define WIDTH 8       /* 存储单元的宽度 */
 #define MODE 1        /* 1:正弦波   2:三角波   3:锯齿波   4:方波 */
 #define maxwords 255
 /*-------------------------参数区------------------------*/
 
 
 #define PI 3.141592
 
 int main(void)
 {
     int i,temp=0;
 
     FILE *fp;
     fp = fopen("sin.mif","w");   /*可更改,但扩展名必须为.mif*/
     if(NULL == fp)
         printf("Can not creat file!\r\n");
     else
     {
         printf("File created successfully!\n");
         /*
         *    生成文件头:注意不要忘了“;”
         */
         fprintf (fp, "DEPTH = %d;\n",1920);
         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 = 0; i < 15*DEPTH; i++)
         {
             switch(MODE)
             {
                 case 1 ://sine
                 {
                     temp = (int)( (maxwords/2-1)*sin(2*PI*i/DEPTH)+maxwords/2) ;
                     break;
                 }
                 case 2 ://triangle
                 {
                 	int k=2*maxwords/DEPTH;
                     if((i%DEPTH)<DEPTH/2)
                     {
                     	temp+=k;
                     }
                     else temp-=k;
                     if(temp>maxwords) temp=maxwords-1;
                     break;
                }
                 case 3 ://sawtooth
                { int k=(maxwords-1)/(DEPTH-1);
                	temp+=k;
                   	if (temp>=maxwords) temp-=maxwords;  
                     break;
                 }
                 case 4 ://square
                {
                     if ((i % DEPTH )<=(DEPTH/2))
                         temp = 0;
                     else
                        temp = maxwords;
                     break;
                 }
                 default:
                 {
                     break;
                 }
             }
             fprintf (fp, "%x \t : \t %x;\n", i, temp);
         }//end for
 
         fprintf (fp, "END;\n");
         fclose (fp);
     }
 }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值