?? function.c
字號:
/* filename:function.c */
#include "var.h"
#include "codec.h"
#include "dma54xx.h"
#include "tms5416.h"
#include "mcbsp54.h"
volatile struct compx {float real,imag;};
volatile int row,size;
/*聲明外部變量*/
//extern int row,size;
volatile struct compx a[8192];
/*-----延時程序-----*/
/*
void delay(int time)
{
int i,j;
for(i=0;i<time;i++)
for( j=10000; j--;)
asm(" nop");
}
*/
/*-----DSP系統初始化-----*/
/*void init_board(void)
{
*ST0=0x1800;
*ST1=0x691f;
//調節PLL倍頻數 14倍頻:114.7M
*CLKMD=0x9004;
asm(" nop");
asm(" nop");
*CLKMD=CLKMD_VAL;
asm(" nop");
asm(" nop");
*CLKMD=(CLKMD_VAL|7);
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
*ST0=0x1800;
*ST1=0x691f;
*PMST=PMST_VAL;
*SWWSR=SWWSR_VAL;
*SWCR=SWCR_VAL;
*BSCR=BSCR_VAL;
*IFR=0xffff;
*IMR=0x0000;
asm(" rsbx frct");
asm(" SSBX SXM");
asm(" SSBX INTM");
}
void startfre(void)
{
row=0;
*IFR|=0x0001;
*IMR|=0x0001;
*TCR&=0xffef;
}
void stopfre(void)
{
*IMR&=0xFFFE;
*TCR|=0x10;
}
*/
/*--------開始采樣,設置采樣參數--------------*/
/*void setfrequency(int f)
{
*TCR=0x0010;
*PRD=0x1dff;//0xEFF;
*TCR=0x03ff;
}*/
/*---------------timer ISR---------------------*/
interrupt void intc_INT0(void)
{int temp;
*IFR|=0xFFFF;
if(row<size)
{temp=port0001<<2;
*(sam+row)=temp;
row++;
}
}
/*-----數字下變頻-----*/
/*void tran_freq(struct compx *xin,int N)
{int n,i;float sum=0.0;
asm(" rsbx frct");
asm(" SSBX SXM");
n=N-2;
for(i=0;i<n;i++)
sum=sum+xin[i].real+xin[i].imag;
sum=sum*0.50/n;
n=N;
for(i=0;i<n;i++)
{xin[i].real=xin[i].real-sum;
xin[i].imag=xin[i].imag-sum;
}
sum=0.0;
for(i=0;i<n;i++)
{xin[i].real=xin[i].real*xin[i].real;
xin[i].imag=xin[i].imag*xin[i].imag;
sum=sum+xin[i].real+xin[i].imag;
}
sum=0.5*sum/n;//0.4992*sum/n;
for(i=0;i<n;i++)
{xin[i].real=xin[i].real-sum;
xin[i].imag=xin[i].imag-sum;
}
}*/
/*-----復數乘法-----*/
struct compx EE(struct compx b1,struct compx b2)
{struct compx b3;
b3.real=b1.real*b2.real-b1.imag*b2.imag;
b3.imag=b1.real*b2.imag+b1.imag*b2.real;
return(b3);
}
/*-----復數傅里葉變換-----*/
void FFT(struct compx *xin,int N)
{int f,m,nv2,nm1,i,k,j=0,l,le=1,lei,ip;
float pi=3.141592;
struct compx v,w,t;
asm(" rsbx frct");
asm(" SSBX SXM");
nv2=N/2;
f=N;
for(m=1;(f=f/2)!=1;m++){;}
nm1=N-1;
/*變址運算*/
for(i=0;i<nm1;i++)
{if(i<j) {t=xin[j];xin[j]=xin[i];xin[i]=t;}
k=nv2;
while(k<=j) {j=j-k;k>>=1;}
j=j+k;
}
/*fft*/
for(l=1;l<=m;l++)
{lei=le;
le=le+le;
v.real=1.0;v.imag=0.0;
w.real=cos(pi/lei);w.imag=-sin(pi/lei);
for(j=0;j<lei;j++)
{for(i=j;i<N;i=i+le)
{ip=i+lei;
t=EE(xin[ip],v);
xin[ip].real=xin[i].real-t.real;
xin[ip].imag=xin[i].imag-t.imag;
xin[i].real=xin[i].real+t.real;
xin[i].imag=xin[i].imag+t.imag;
}
v=EE(v,w);
}
}
}
/*---------unpack---------*/
void unpack(struct compx *xin,int N)
{struct compx P,Q,t,v,w; int i;
float pi=3.141592,max=0.0;
asm(" rsbx frct");
asm(" SSBX SXM");
v.real=1.0;v.imag=0.0;
w.real=cos(pi/N);w.imag=-sin(pi/N);
for(i=1;i<=480;i++)
{P.real=0.5*(xin[i].real+xin[N-i].real);
P.imag=0.5*(xin[i].imag-xin[N-i].imag);
Q.real=0.5*(xin[i].imag+xin[N-i].imag);
Q.imag=0.5*(xin[N-i].real-xin[i].real);
v=EE(w,v);t=EE(Q,v);
Q.real=P.real+t.real;
Q.imag=P.imag+t.imag;
xin[i].real=sqrt(Q.real*Q.real+Q.imag*Q.imag);
}
for(i=481;i<1628;i++)
v=EE(w,v);
for(i=1628;i<=1648;i++)
{P.real=0.5*(xin[i].real+xin[N-i].real);
P.imag=0.5*(xin[i].imag-xin[N-i].imag);
Q.real=0.5*(xin[i].imag+xin[N-i].imag);
Q.imag=0.5*(xin[N-i].real-xin[i].real);
v=EE(w,v);t=EE(Q,v);
Q.real=P.real+t.real;
Q.imag=P.imag+t.imag;
xin[i].real=sqrt(Q.real*Q.real+Q.imag*Q.imag);
if(max<xin[i].real)
max=xin[i].real;
}
xin[0].real=max/250.0;
}
/*-----自動增益控制-----*/
/*void AGC(struct compx *xin)
{int i,x,j,y;float max=0.0,sum=0.0,max2=0.0,temp=0.0;
asm(" rsbx frct");
asm(" SSBX SXM");
for(i=0;i<480;i++)
{if(max<xin[i].real)
max=xin[i].real;
sum=sum+xin[i].real;
}
sum=sum/480.0;
for(i=360;i<=410;i++)
if(max2<xin[i].real)
{max2=xin[i].real;
x=i;
}
x=410-x;x=4*x;
if(x<13)
j=3;
else
j=x-10;y=x;
max2=0.0;
for(i=j;i<x+10;i++)
if(max2<xin[i].real)
{max2=xin[i].real;
y=i;
}
temp=max2/xin[0].real;
temp=temp*temp*100.0/y+0.50;
max2=max2/sum;
*sn=(int)max2;
*credit=(int)(100*max2/(0.5*x+16));
*x_p=y;
*credit2=(int)temp;
for(i=0;i<480;i++)
{xin[i].real=ampl*xin[i].real/max+0.5;
*(display+i)=(int)xin[i].real;
}
}*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -