當前位置:首頁 » 編程語言 » 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)都是向量

詳細代碼很簡單,自己來吧。