⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 c5402的几个小程序dsp开发板。学校实验室的程序
💻 C
字号:
#include "distortion.h"
#include "function.h"
#include <stdio.h>
#include <math.h>
#include "numden.h"
#include "vect.c"

main()

{
for(;;)
  {
    int k;   
    
    k=0;    
    c54init();  
    
    f=1500.0;
  
     TCR=0x0114;
     PRD=331;

     fs=1000.0*1000.0/((PRD+1)*5)*100.0;////主频是100MHz 
     //采样频率设置为60.240KHz 
    
     TCR=0x0124; 
     input_data();         
     iir_filter();   //滤波器 
     
       k++;
  }
}

void input_data()               /* 采样子程序 */
{
  int i;                        //定义变量
  p_x=x;                        //定义指针数组
  asm(" RSBX INTM");
  IFR=0x0008;                   //开定时器中断
  IMR=0x0008;                   //屏蔽定时器以外的中断    
  
  asm(" pshm ar0");             //保护ar0值
  asm(" pshm ar1");             //保护ar1值
  asm(" stm #008Ah,ar0");       //采样138点 
  asm(" mvdm _p_x,ar1");        //采样数据写到数组里
    
  asm("qaz: idle 1");	        //等待,直到产生中断
                                //如果intm=0,响应中断服务程序 
                                //如果intm=1,直接执行下面程序,不进入中断服务程序

  asm(" portr 0008h,*ar1+");    //读取I/O地址AD:0008h的数据
    
  asm(" stm #0ffffh,IFR");      //清除所有中断
  asm(" banz qaz,*ar0-");	    //采样点数未到设定值,跳转继续采样
  asm(" popm ar1");		        //恢复AR1值
  asm(" popm ar0");             //恢复AR0值   
 
  asm(" ssbx intm");
          
  IMR=IMR&0xfff7;               //屏蔽定时器0中断
    
  for(i=0;i<N+10;i++)
    x[i]=x[i+10]&0x00ff;       //摒除采样的前10个数据,同时取采样数据低8位有效
  
  for(i=0;i<N+mm;i++)
    xin[i]=(float)x[i]-76.0;  
} 


void iir_filter()                        //IIR数字滤波    
{
   unsigned int k;
   w[0]=0;
   w[1]=0;
   v[0]=0;
   v[1]=0;
   z[0]=0;
   z[1]=0;
   y[0]=0;
   y[1]=0;
   
   for(k=mm;k<N+mm;k++)
   {
     w[k]=(-(a[0][1]*w[k-1] +a[0][2]*w[k-2])+b[0][0]*xin[k]+b[0][1]*xin[k-1]+b[0][2]*xin[k-2])/a[0][0];
     xin[k-2]=xin[k-1];
     xin[k-1]=xin[k];
     
     v[k]=(-(a[1][1]*v[k-1] +a[1][2]*v[k-2])+b[1][0]*w[k]+b[1][1]*w[k-1]+b[1][2]*w[k-2])/a[1][0];
     w[k-2]=w[k-1];
     w[k-1]=w[k];
     
     z[k]=(-(a[2][1]*z[k-1] +a[2][2]*z[k-2])+b[2][0]*v[k]+b[2][1]*v[k-1]+b[2][2]*v[k-2])/a[2][0];
     v[k-2]=v[k-1];
     v[k-1]=v[k];
     
     y[k]=g*(-(a[3][1]*y[k-1] +a[3][2]*y[k-2])+b[3][0]*z[k]+b[3][1]*z[k-1]+b[3][2]*z[k-2])/a[3][0];
     z[k-2]=z[k-1];
     z[k-1]=z[k];
     
     y[k-2]=y[k-1];
     y[k-1]=y[k];
    }   
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -