您的位置:首页 > 编程语言 > C语言/C++

直接型FIR滤波器的C语言实现

2016-07-12 15:07 405 查看
直接型FIR滤波器的C语言实现   

设输入数据x
,输出数据y
,滤波器系数h

1.直接法(由y(m)=h(0)*x(m)+h(1)*x(m-1)+...+h(N-1)*x(m-n-1));

[cpp]
view plain
copy

print?

void fir(short x[], short h[], short y[])  
{  
  int i,j;  
  long long sum;    
   
  for (j = 0; j < N; j++)  
  {  
    sum = 0;  
    for (i = 0; i < n; i++)  
      sum += x[j-i] * h[i];  
    y[j] = sum >> 15;  
  }  
}  



void fir(short x[], short h[], short y[])
{
int i,j;
long long sum;

for (j = 0; j < N; j++)
{
sum = 0;
for (i = 0; i < n; i++)
sum += x[j-i] * h[i];
y[j] = sum >> 15;
}
}
乘法器使用次数:N*n

 

2.逆推法:

[cpp]
view plain
copy

print?

void fir(short x[], short h[], short y[])  
{  
  int i,j;  
  long sum;    
   
  for (j = 0; j < n; j++)  
  {  
    for (i = 0; i < N; i++)  
    {  
      sum = 0;  
      sum = h[j] * x[i]  
      y[i] += sum >> 15;  
    }  
  }  
}  



void fir(short x[], short h[], short y[])
{
int i,j;
long sum;

for (j = 0; j < n; j++)
{
for (i = 0; i < N; i++)
{
sum = 0;
sum = h[j] * x[i]
y[i] += sum >> 15;
}
}
}
乘法器使用次数:N*n

 

3.倒序法:(输入输出可以是同一量)

[cpp]
view plain
copy

print?

void fir(short x[], short h[], short y[])  
{  
  int i,j;  
  long long sum;    
   
  for (j = N; j > 0; j--)  
  {  
    sum = 0;  
    for (i = n; i > 0; i--)  
      sum += x[j-i] * h[i];  
    y[j] = sum >> 15;  
  }  
}  



void fir(short x[], short h[], short y[])
{
int i,j;
long long sum;

for (j = N; j > 0; j--)
{
sum = 0;
for (i = n; i > 0; i--)
sum += x[j-i] * h[i];
y[j] = sum >
4000
> 15;
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: