TA的每日心情 | 怒 2013-5-17 10:39 |
---|
签到天数: 2 天 连续签到: 1 天 [LV.1]初来乍到
|
刚开始学ISE中嵌入microblaze,对其编程不了解。是不是和标准的C编程一样,还是数据类型等有些差异?苦于没人指导,天天自己瞎琢磨。现在写了个程序,我估计肯定错误很多,求大神指导下。。。
程序是:设计滤波器。fir_filter是fir滤波器。Window_Filter是用来得出滤波器的系数。最后是把滤波后的数据out用串口输出。
#include "xparameters.h"
#include "stdio.h"
#include "xutil.h"
#include "xgpio.h"
#include "math.h"
#define PI 3.1415926
#define N 32768
//====================================================
void Delay(int Delay)
{
int i;
for(i=0;i<Delay;i=i+1);
}
void fir_filter(long out[],long in[],long b[],unsigned int lenfilter,unsigned int length)
{
for(int i=0;i<length;i++)out[i]=0.0;
for(int i=0;i<length;i++){
for(int k=0;k<lenfilter;k++){
if (i+1-k>0) out[i]+=b[k]*in[i-k];
}
}
}
void Window_Filter(long out[],long in[],unsigned long f1,unsigned long f2,unsigned long FS){
unsigned int p=100;//p=M/2 M=200
//unsigned int MM=201//MM=M+1;
long H_R[201]={0};
long HAN[201]={0};
long H_HAN[201]={0};
for(int i=0;i<=200;i++){
if(i!=p){
H_R[i]=(sin(2*PI*f2*(1.0/FS)*(i-p))-sin(2*PI*f1*(1.0/FS)*(i-p)))/(PI*(i-p));
}
else{
H_R[i]=2*(f2-f1)*(1.0/FS);
}
HAN[i]=0.5*(1-cos(2*PI*i/M));
H_HAN[i]=H_R[i]*HAN[i];
}
fir_filter(out,in,H_HAN,201,N);
}
int main (void) {
unsigned long f1=5000000;
unsigned long f2=6000000;
unsigned long FS=56000000;
long out[32768]={0.0};
long in[32768]={0.0};
in[0]=1.0;
Window_Filter(out,in,f1,f2,FS);
XUartLite_Initialize (&RS232, XPAR_RS232_DEVICE_ID);
for(int i=0;i<200;i++){
XUartLite_Send (&RS232, &out[i], 201);
Delay(1000);
}
return 0;
}
疑问:1.MB编程中是否支持double型和float型?2.sin函数的实现,直接加math.h能否实现? 3.对于自己写的程序是否正确在MB平台怎么仿真验证?4.求大神推荐学习MB的资料或书籍 5。MB编程和标准的C有哪些区别呢?6.串口是8位的,out是long int型的,XUartLite_Send (&RS232, &out[i], 201),这样写可以吗?应该怎么弄呢?
求给路大神给予指导,小弟不胜感激!!!
|
|