资源描述
DSP28335基于MATLAB-FIR低通滤波器的实现
1. 任务目标:
滤波器的截止频率为500HZ,采样频率为128000HZ,采样的点数为256,滤波器的阶数为32,输入信号如下:
Sample[i]=511*(sin(2*pi*5*i/(a-1))+sin(2*pi*i*5*3/(a-1))/3+sin(2*pi*i*5*5/(a-1))/5)+512
2. 实现过程:
由MAtlab的FDATOOL计算出滤波器的阶数,再由DSP程序进行卷积运算,最后由CCSV5的Graph功能进行输入前后的波形分析。
3. FIR(Finite Impulse Response)滤波器:
有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件, 它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。 因此,FIR 滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。
4. 算法原理:
离散信号序列通过一个离散滤波系统,得到离散输出信号,如果
滤波系统的单位脉冲响应为 h(n),信号序列为 x(n),输出信号为 y(n),则使用运
算关系式表达他们之间的关系如下:
5.MATLAB---FDATOOL参数设置:
然后在FILE-EXPORT-ASCII输出文件打开就有滤波器系数了。
6.各种情况下输出的波形图
图一:matlab滤波器截止频率Fc设置为5000HZ得到的波形
图二:程序自带滤波器参数得到的波形
图三:截止频率设置为2000HZ得到的输出波形
图四:Fc=1200HZ时的波形
图五:Fc=600HZ时的波形
图六:FC=2700HZ
图七:FC=6000H
图八:FC=3500Hz
FC=4000hz
FC=4500HZ
卷积算法如下:
void LinearConvolution(Uint16 xn,Uint16 hn,float *x,float *h,float *y)
{
Uint16 i,j,k,l;
Uint16 yn; //输出序列y的长度
yn=xn+hn-1;
for(i=0;i<yn;i++) y[i]=0; //输出数组初始化
k=yn-1;
for(i=hn-1;i>0;i--) //将*h作为被乘数
{
l=k;
for(j=xn-1;j>0;j--) //数组x[n]的1~(xn-1)与h[i]逐一相乘
{
y[l]+=h[i]*x[j];
l--;
}
y[l]+=x[0]*h[i];
k--;
}
l=k;
for(j=xn-1;j>0;j--)
{
y[l]+=h[0]*x[j];
l--;
}
y[l]+=x[0]*h[0];
}
void main(void)
{
Uint16 i;
InitSysCtrl();
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
for(i=0;i<a;i++) //产生一个a点的三次谐波叠加而成的方波
{
Sample[i]=511*(sin(2*pi*5*i/(a-1))+sin(2*pi*i*5*3/(a-1))/3+sin(2*pi*i*5*5/(a-1))/5)+512;//三个正弦波由5个15个25个包含在256个点的时间中
// DELAY_US(10);+sin(2*pi*i*5*5/(a-1)) +sin(2*pi*i*5*3/(a-1))/4 sin(2*pi*5*i/(a-1))/100+
}
LinearConvolution(a,b,Sample,h,y1);//线性卷积
while(1)
{
// sample=sin(2*pi*5*n/(N-1))+sin(2*pi*15*n/(N-1))/3+sin(2*pi*25*n/(N-1))/5;
/* dly[0]=sample;
yn=0;
for(i=0;i<N;i++) yn+=h[i]*dly[i];
for(i=N-1;i>0;i--) dly[i]=dly[i-1];
output[n]=yn;
if(n==(N-1)) n=0;
else n++;*/
}
}
展开阅读全文