当前位置:首页 » 编程语言 » c语言实现低通滤波器
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言实现低通滤波器

发布时间: 2022-06-01 05:54:23

Ⅰ 如何用c语言实现截止频率为200hz的巴特沃斯低通滤波器

/* 6th Order Low Pass Butterworth */
/* Bilinear Transformation with Prewarping */
/* Sample Frequency = 100.0 Hz */
/* Standard Form */
/* Arithmetic Precision = 4 Digits */
/* */
/* Pass Band Frequency = 35.00 Hz */
/* */
/******************************************************************************/
/* */
/* Input Variable Definitions: */
/* Inputs: */
/* invar float The input to the filter */
/* initvar float The initial value of the filter */
/* setic int 1 to initialize the filter to the value of initvar */
/* */
/* There is no requirement to ever initialize the filter. */
/* The default initialization is zero when the filter is first called */
float DigFil(invar, initval, setic)
float invar, initval; int setic;

{
float sumnum, sumden; int i;
static float delay[7] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0};
static float znum[7] = {
.1477,
.8864,
2.216,
2.955,
2.216,
.8864,
.1477
};
static float zden[6] = {
2.183e-02,
.2099,
.8779,
2.055,
2.91,
2.38
};
if (setic==1){
for (i=0;i<=6;i++) delay[i] = .1058*initval;
return initval;
}
else{
sumden=0.0;
sumnum=0.0;
for (i=0;i<=5;i++){
delay[i] = delay[i+1];
sumden += delay[i]*zden[i];
sumnum += delay[i]*znum[i];
}
delay[6] = invar-sumden;
sumnum += delay[6]*znum[6];
return sumnum;
}
}

Ⅱ 求:c语言数字滤波器;要求:1Khz低通;20个数x0,x1,x2----x19;结果y0---y19

1,低通滤波器传函k*f^2/(s^2+s*f/Q+f^2),确定你的电压增压k和品质因数,还有截止频率f。我就以f=1k,q=0.707,k=1为例。
2,进行离散化。离散化方法以双线性变换为例。。。。然后得到Transfer function:
1.039e-005 z + 6.53e-006
------------------------
z^2 - 1.243 z + 0.2431

Sampling time: 0.001
3,然后就改写成差分方程。。。。把z^(-n)中的(-n)写成(k-n)即可。自己移相试试 就知道了。

Ⅲ 求用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语言实现低通滤波器

floatmiddle_filter(floatmiddle_value[],intcount)
{
floatsample_value,data;
inti,j;
for(i=1;ifor(j=count-1;j>=i,--j){
if(middle_value[j-1]=middle_value[j]{
data=middle_value[j-1];
middle_value[j-1]=middle_value[j]
middle_value[j]=data;
}
}
sample_value=middle_value(count-1)/2];
return(sample_value);
}

Ⅳ c语言设计巴特沃斯低通滤波器fp=9khz,fs=15khz,ap=1dB,as=70dB

能实行,c语言不能显示图像,但是你要懂得如何用c调用matlab,过程比较复杂,这个程序任何参数都可以用,不限制

#include<engine.h>

#include<math.h>

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

doublecalcN(doublefp,doubleap,doublefs,doubleas)

{

doublei=pow(10,(as/10))-1;

doubletmp=ap/10;

doublej=pow(10,tmp)-1;

doublek=log10((i/j));

doublet=log10(fs/fp);

doubleN=0.5*k/t+1;

returnN;

};

intmain(void)

{

intfp,ap,fs,as;

printf("请输入fp:");

scanf("%d",&fp);

printf("请输入ap:");

scanf("%d",&ap);

printf("请输入fs:");

scanf("%d",&fs);

printf("请输入as:");

scanf("%d",&as);

intf=calcN(fp,ap,fs,as);

printf("N=%d ",f);

charlin[40];

char*str="N=";

lin[0]='';

charin[4];

itoa(f,in,10);

strcat(lin,str);

strcat(lin,in);

strcat(lin,";");

///////////////////////////////////////////////////////////

Engine*ep;

if(!(ep=engOpen(NULL)))

{

printf("openfailed!pleasetryagain ");

}

engSetVisible(ep,0);

//mxArray*xx=mxCreateDoubleMatrix(1,N,mxREAL);

//mxArray*yy=mxCreateDoubleMatrix(1,N,mxREAL);

//memcpy(mxGetPr(xx),N*sizeof(double));

//memcpy(mxGetPr(yy),N*sizeof(double));

//engPutVariable(ep,"xx",xx);

//engPutVariable(ep,"yy",yy);

engEvalString(ep,"n=0:0.01:2;");

engEvalString(ep,lin);

engEvalString(ep,"[z,p,k]=buttap(N);");

engEvalString(ep,"[b,a]=zp2tf(z,p,k);");

engEvalString(ep,"[H,w]=freqs(b,a,n);");

engEvalString(ep,"magH=(abs(H)).^2;");

engEvalString(ep,"plot(w,magH);");

engEvalString(ep,"axis([0201])");

engEvalString(ep,"xlabel('w/wc');");

engEvalString(ep,"ylabel('|H(jw)|^2');");

engEvalString(ep,"title('');");

engEvalString(ep,"grid;");

getchar();

//mxDestroyArray(xx);

//mxDestroyArray(yy);

//engClose(ep);

return0;

}

Ⅵ 我想做一个数字图像处理的小程序实现图像低通滤波,维纳滤波等功能,用c语言可以吗

可以,建议去查查VC++数字图像处理的书,一般直接由源码,如果你有编程基础,直接查着些滤波的理论原理就行了

Ⅶ Re:请问如何用C语言实现低通滤波器

做这种东西建议用MATLAB,直接调用函数,比较方便,而且MATLAB就专门干这个的,合理利用是必要的
这个估计需要详细的说明才弄的了去硬之城看看吧或许有人会。

Ⅷ 怎样用C语言设计低通滤波器

所谓低通就是小于多少的能通过,所以你可以设计一个判断如果相应的数大于多少就赋值成0,要是小于那个数就不作处理!

Ⅸ 一段matlab低通滤波器程序,求改编成C语言。

这个我刚好做过一个滤波器,事实上对时域信号做FFT,截取一定点数再做逆FFT相当于理想滤波。设计滤波器代码如下:
f1=100;f2=200;%待滤波正弦信号频率
fs=2000;%采样频率
m=(0.3*f1)/(fs/2);%定义过度带宽
M=round(8/m);%定义窗函数的长度
N=M-1;%定义滤波器的阶数
b=fir1(N,f2/fs);%使用fir1函数设计滤波器
%输入的参数分别是滤波器的阶数和截止频率
figure(1)
[h,f]=freqz(b,1,512);%滤波器的幅频特性图
%[H,W]=freqz(B,A,N)当N是一个整数时函数返回N点的频率向量和幅频响应向量
plot(f*fs/(2*pi),20*log10(abs(h)))%参数分别是频率与幅值
xlabel('频率/赫兹');ylabel('增益/分贝');title('滤波器的增益响应');
figure(2)
subplot(211)
t=0:1/fs:0.5;%定义时间范围和步长
s=sin(2*pi*f1*t)+sin(2*pi*f2*t);%滤波前信号
plot(t,s);%滤波前的信号图像
xlabel('时间/秒');ylabel('幅度');title('信号滤波前时域图');
subplot(212)
Fs=fft(s,512);%将信号变换到频域
AFs=abs(Fs);%信号频域图的幅值
f=(0:255)*fs/512;%频率采样
plot(f,AFs(1:256));%滤波前的信号频域图
xlabel('频率/赫兹');ylabel('幅度');title('信号滤波前频域图');
figure(3)
sf=filter(b,1,s);%使用filter函数对信号进行滤波
%参数分别为滤波器系统函数的分子和分母多项式系数向量和待滤波信号输入
subplot(211)
plot(t,sf)%滤波后的信号图像
xlabel('时间/秒');ylabel('幅度');title('信号滤波后时域图');
axis([0.2 0.5 -2 2]);%限定图像坐标范围
subplot(212)
Fsf=fft(sf,512);%滤波后的信号频域图
AFsf=abs(Fsf);%信号频域图的幅值
f=(0:255)*fs/512;%频率采样
plot(f,AFsf(1:256))%滤波后的信号频域图
xlabel('频率/赫兹');ylabel('幅度');title('信号滤波后频域图');

Ⅹ 给定一个信号s,包括高频、低频成份,现在做一个低通滤波器对信号进行滤波,求c语言程序,急急急!

教你实现方法吧:

第一步:你需要采用MATLAB 设计滤波器的脉冲响应序列,如记为h(n) = [ h1,h2,... hN]

第二步:c 语言实现的是 y(n) = h(n) 卷积x(n) 其中h(n)和x(n)都是向量

详细代码很简单,自己来吧。