当前位置:首页 » 编程语言 » fir滤波c语言

fir滤波c语言

发布时间: 2022-07-14 00:53:12

❶ 各位好心人帮帮忙,谁能给我段基于c语言fir滤波器设计的程序代码啊。急急急!!!!!

1 void fir(short x[], short h[], short y[]) { int i, j, sum; for (j = 0; j < 100; j++) { sum = 0; for (i = 0; i < 32; i++) sum += x[i+j] * h[i]; y[j] = sum >> 15; } } 2 void fir(short x[], short h[], short y[]) { int i, j, sum0, sum1; short x0,x1,h0,h1; for (j = 0; j < 100; j+=2) { sum0 = 0; sum1 = 0; x0 = x[j]; for (i = 0; i < 32; i+=2){ x1 = x[j+i+1]; h0 = h[i]; sum0 += x0 * h0; sum1 += x1 * h0; x0 = x[j+i+2]; h1 = h[i+1]; sum0 += x1 * h1; sum1 += x0 * h1; } y[j] = sum0 >> 15; y[j+1] = sum1 >> 15; } } 3 void fir(short x[], short h[], short y[]) { int i, j, sum0, sum1; short x0,x1,x2,x3,x4,x5,x6,x7,h0,h1,h2,h3,h4,h5,h6,h7; for (j = 0; j < 100; j+=2) { sum0 = 0; sum1 = 0; x0 = x[j]; for (i = 0; i < 32; i+=8){ x1 = x[j+i+1]; h0 = h[i]; sum0 += x0 * h0; sum1 += x1 * h0; x2 = x[j+i+2]; h1 = h[i+1]; sum0 += x1 * h1; sum1 += x2 * h1; x3 = x[j+i+3]; h2 = h[i+2]; sum0 += x2 * h2; sum1 += x3 * h2; x4 = x[j+i+4]; h3 = h[i+3]; sum0 += x3 * h3; sum1 += x4 * h3; x5 = x[j+i+5]; h4 = h[i+4]; sum0 += x4 * h4; sum1 += x5 * h4; x6 = x[j+i+6]; h5 = h[i+5]; sum0 += x5 * h5; sum1 += x6 * h5; x7 = x[j+i+7]; h6 = h[i+6]; sum0 += x6 * h6; sum1 += x7 * h6; x0 = x[j+i+8]; h7 = h[i+7]; sum0 += x7 * h7; sum1 += x0 * h7; } y[j] = sum0 >> 15; y[j+1] = sum1 >> 15; } }

❷ FIR滤波器的C语言程序

length==256

❸ 求:一个关于FIR带通滤波器的C语言设计程序 代码

这兄弟可以用matlab做吗?如果可以我给你写代码,很荣幸为您解答难题,竭诚为您服务,祝您开心,生活加油~~~

❹ C语言实现fir1函数

C语言实现FIR滤波,与Matlab结果一致,https://blog.csdn.net/weixin_43216875/article/details/10337

❺ 430单片机C语言实现的FIR滤波器

去tichinese的网站看看有没有吧

❻ 求用C语言实现一个FIR数字低通滤波

没有定义这个函数,此函数为
function hd=ideal_lp(wc,M);
%Ideal Lowpass filter computation
%------------------------------------
%[hd]=ideal_lp(wc,M)
% hd=ideal impulse response between 0 to M-1
% wc=cutoff frequency in radians
% M=length of the ideal filter
%
alpha=(M-1)/2;
n=[0:1:(M-1)];
m=n-alpha+eps;
hd=sin(wc*m)./(pi*m);
点击file中的new中M-file,新建上面的函数,保存后就可以运行了
另外,团IDC网上有许多产品团购,便宜有口碑

❼ 帮帮忙,能不能给我 基于C语言的FIR滤波器设计的程序代码(包括CMD,C,ASM),谢谢了 真的很急!!!

#include"math.h"
void firwin(n,band,fln,fhn,wn,h)
int n,band,wn;
double fln,fhn,h[];
{int i,n2,mid;
double s,pi,wc1,wc2,beta,delay;
double window();
beta=0.0;
if(wn==7)
{printf("input beta parameter of Kaiser window(2<beta<10)\n");
scanf("%1f",&beta);
}
pi=4.0*atan(1.0);
if((n%2)==0)/*如果n是偶数*/
{n2=n/2+1;/*这行什么意思*/
mid=1;
}
else
{n2=n/2;
mid=0;
}
delay=n/2.0;
wc1=2.0*pi*fln;
if(band>=3) wc2=2.0*pi*fhn;/*先判断用户输入的数据,如果band参数大于3*/
switch(band)
{case 1:
{for(i=0;i<=n2;i++)
{s=i-delay;
h[i]=(sin(wc1*s)/(pi*s))*window(wn,n+1,i,beta);
h[n-i]=h[i];
}
if(mid==1) h[n/2]=wc1/pi;
break;
}
case 2:
{for(i=0;i<=n2;i++)
{s=i-delay;
h[i]=(sin(pi*s)-sin(wc1*s))/(pi*s);
h[i]=h[i]*window(wn,n+1,i,beta);
h[n-i]=h[i];
}
if(mid==1) h[n/2]=1.0-wc1/pi;
break;
}
case 3:
{for(i=0;i<n2;i++)
{s=i-delay;
h[i]=(sin(wc2*s)-sin(wc1*s))/(pi*s);
h[i]=h[i]*window(wn,n+1,i,beta);
h[n-i]=h[i];
}
if(mid==1)h[n/2]=(wc2-wc1)/pi;
break;
}
case 4:
{for(i=0;i<=n2;i++)
{s=i-delay;
h[i]=(sin(wc1*s)+sin(pi*s)-sin(wc2*s))/(pi*s);
h[i]=h[i]*window(wn,n+1,i,beta);
h[n-i]=h[i];
}
if(mid==1)h[n/2]=(wc1+pi-wc2)/pi;
break;
}
}
}
static double window(type,n,i,beta)
int i,n,type;
double beta;
{int k;
double pi,w;
double kaiser();
pi=4.0*atan(1.0);
w=1.0;
switch(type)
{case 1:
{w=1.0;
break;
}
case 2:
{k=(n-2)/10;
if(i<=k)
w=0.5*(1.0-cos(i*pi/(k+1)));
break;
}
case 3:
{w=1.0-fabs(1.0-2*i/(n-1.0));
break;
}
case 4:
{w=0.5*(1.0-cos(2*i*pi/(n-1)));
break;
}
case 5:
{w=0.54-0.46*cos(2*i*pi/(n-1));
break;
}
case 6:
{w=0.42-0.5*cos(2*i*pi/(n-1))+0.08*cos(4*i*pi/(n-1));
break;
}
case 7:
{w=kaiser(i,n,beta);
break;
}
}
return(w);
}
static double kaiser(i,n,beta)
int i,n;
double beta;
{
double a,w,a2,b1,b2,beta1;
double bessel0();
b1=bessel0(beta);
a=2.0*i/(double)(n-1)-1.0;
a2=a*a;
beta1=beta*sqrt(1.0-a2);
b2=bessel0(beta1);
w=b2/b1;
return(w);
}
static double bessel0(x)
double x;
{int i;
double d,y,d2,sum;
y=x/2.0;
d=1.0;
sum=1.0;
for(i=1;i<=25;i++)
{d=d*y/i;
d2=d*d;
sum=sum+d2;
if(d2<sum*(1.0e-8)) break;
}
return(sum);
}
这是窗函数法的,当然还有其他的比如切比雪夫,零相位滤波什么的,我也在研究,不是很懂哈

❽ 用C语言(!!!不移位方式)实现FIR滤波器 程序尽量简单,还有正确性

short h[], short y[])
{
int i, j, sum; for (j = 0; j < 100; j++) {
sum = 0;
for (i = 0; i < 32; i++)
sum += x[i+j] * h[i];
y[j] = sum >> 15;
}
}

2

void fir(short x[], short h[], short y[])
{
int i, j, sum0, sum1;
short x0,x1,h0,h1; for (j = 0; j < 100; j+=2) {
sum0 = 0;
sum1 = 0;
x0 = x[j];
for (i = 0; i < 32; i+=2){
x1 = x[j+i+1];
h0 = h[i];
sum0 += x0 * h0;
sum1 += x1 * h0;
x0 = x[j+i+2];
h1 = h[i+1];
sum0 += x1 * h1;
sum1 += x0 * h1;
}
y[j] = sum0 >> 15;
y[j+1] = sum1 >> 15;
}
}

3

void fir(short x[], short h[], short y[])
{
int i, j, sum0, sum1;
short x0,x1,x2,x3,x4,x5,x6,x7,h0,h1,h2,h3,h4,h5,h6,h7; for (j = 0; j < 100; j+=2) {
sum0 = 0;
sum1 = 0;
x0 = x[j];
for (i = 0; i < 32; i+=8){
x1 = x[j+i+1];
h0 = h[i];
sum0 += x0 * h0;
sum1 += x1 * h0;
x2 = x[j+i+2];
h1 = h[i+1];
sum0 += x1 * h1;
sum1 += x2 * h1;
x3 = x[j+i+3];
h2 = h[i+2];
sum0 += x2 * h2;
sum1 += x3 * h2;
x4 = x[j+i+4];
h3 = h[i+3];
sum0 += x3 * h3;
sum1 += x4 * h3;
x5 = x[j+i+5];
h4 = h[i+4];
sum0 += x4 * h4;
sum1 += x5 * h4;
x6 = x[j+i+6];
h5 = h[i+5];
sum0 += x5 * h5;
sum1 += x6 * h5;
x7 = x[j+i+7];
h6 = h[i+6];
sum0 += x6 * h6;
sum1 += x7 * h6;
x0 = x[j+i+8];
h7 = h[i+7];
sum0 += x7 * h7;
sum1 += x0 * h7;
}
y[j] = sum0 >> 15;
y[j+1] = sum1 >> 15;
}
}

❾ 求IIR及FIR数字滤波器的C语言实现。(VC++)

这个问题比较复杂,最近本人也在研究数字滤波,

结合图片说一下

第一个图是fir的流程图,其中Z-1是延迟,是单个采样时间1/fs

n阶的fir滤波器就是选取最近的n+1个样本,然后使他们各自乘以自己的滤波器系数即图中的F(n),[一般其他书的表示是h(n)]

然后相加得到输出的y(n)就是一个输出点

,其中F(n)的得出需要根据采样频率和滤波器的通带和阻带来决定

其中为了改善旁瓣的幅值,一般在采样后给样本或者h(n)加窗,当然可以用“最佳方法”来做

得出h(n)大致方法是先将矩形窗进行DFT,得出h(n),然后对h(n)进行加窗得出h(k),然后将∑h(k)×x(n)=y(n),假如阶数较多可以用傅里叶变换使时域变频域后再将卷积相加,可以利用FFT来改进实时性,提升速度

上面就是fir滤波器的简述

第二个图片上传不了,直接给链接

http://image..com/i?ct=503316480&z=0&tn=imagedetail&word=%D2%BB%BD%D7iir%C2%CB%B2%A8%C6%F7&in=12708&cl=2&cm=1&sc=0&lm=-1&pn=0&rn=1&di=2607528304&ln=1054&fr=

图中的Z-1是延时,iir滤波器也叫无限冲击响应滤波器,是有反馈的,

图中的是一阶的,相对fir滤波器来说,iir滤波器可以用较低的阶数来获得较好的滤波特效。但是其相位特性较差。

鉴于实用性,还是建议楼主去图书馆借书看,网络不可能得到确实的方案,

楼主可以去借“数字信号处理”的书,国外的中译本就有详细介绍fir和iir以及fft还有其他变换,国内的dsp大都几乎是dsp用户手册的中译本,对上述问题都是很简陋地带过,不予置评。

本人推荐一本书在www.ouravr.com上面的dsp专栏有下载,40多M,叫DSP算法、应用和设计,本人有这本实体书,写的较好

❿ 在设计FIR数字低通滤波器器时,用MATLAB生成了C语言头文件,在编写单片机程序时该怎样利用那个头文件

再将matlab里边的卷积函数转成C,直接调用就行了~~~~

或者你直接用C语言使用for写个卷积函数,将B和信号做卷积。

real64_T是double,写函数的时候注意点~

热点内容
小数如何存储 发布:2024-05-16 19:53:52 浏览:214
html页面缓存设置 发布:2024-05-16 19:33:29 浏览:142
云服务器为什么安装不上补丁 发布:2024-05-16 19:27:18 浏览:340
新加坡幸运28规律算法 发布:2024-05-16 19:27:12 浏览:597
安卓菜鸟裹裹怎么标记已取件 发布:2024-05-16 18:59:36 浏览:544
安卓手机可以在哪个平台直播 发布:2024-05-16 18:59:14 浏览:549
小红书上传不动 发布:2024-05-16 18:50:46 浏览:39
为什么安卓手机双清不卡顿 发布:2024-05-16 18:49:51 浏览:104
会推广源码 发布:2024-05-16 18:36:19 浏览:343
台式电脑相片存储 发布:2024-05-16 18:31:16 浏览:989