fir滤波 c语言,分享MSP430单片机实现的FIR滤波器C语言程序

分享MSP430单片机实现的FIR滤波器C语言程序

[复制链接]

#include

#define FRAME        180

short int h[19] = {

399,-296,-945,-1555,

-1503,-285,2112,5061,

7503,8450,7503,5061,

2112,-285,-1503,-1555,

-945,-296,399

};

static short int nBuff[FRAME + 20];

void LowpassFilter(short int nIn[],short int nOut[],int nLen,short int h[]);

void main()

{

FILE *m_pInput;

FILE *m_pOutput;

short int input[FRAME];

short int output[FRAME];

int count;

// 打开输入文件

if((m_pInput = fopen("input.wav", "rb")) == NULL)

{

return;

}

//打开输出文件

if((m_pOutput = fopen("output.wav", "wb")) == NULL)

{

return;

}

count = 0;

while( fread(&input[0], sizeof(short int), FRAME, m_pInput) == FRAME)

{

printf("Frame =%d\r", count++);

//滤波处理

LowpassFilter(input,output,19,h);

//将滤波后的数据写到文件里

fwrite(output, sizeof(short int), FRAME, m_pOutput);

}

fclose(m_pOutput);

fclose(m_pInput);

}

void LowpassFilter(short int nIn[],short int nOut[],int nLen,short int h[])

{

short int i,j;

int sum;

//缓冲区的内容更新

for(i = 0;i < FRAME;i++)

{

nBuff[i + nLen -1] = nIn[i];

}

//FIR滤波处理

for(i = 0;i < FRAME;i++)

{

sum = 0;

for(j = 0;j < nLen;j++)

{

sum += h[j] * nBuff[i - j + nLen -1];

}

nOut[i] = sum >> 15;

}

//更新缓冲区的内容

for(i = 0;i < nLen - 1;i++)

{

nBuff[nLen - i - 2] = nIn[FRAME - i - 1];

}

}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值