當前位置:首頁 » 編程語言 » 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-19 09:31:30 瀏覽:94
php獲取子節點 發布:2024-05-19 09:21:18 瀏覽:160
php生成html 發布:2024-05-19 09:20:24 瀏覽:795
keil編譯步驟 發布:2024-05-19 08:58:12 瀏覽:702
ipad有哪些好用的c語言編譯器 發布:2024-05-19 08:41:56 瀏覽:767
征途手游版腳本 發布:2024-05-19 08:38:11 瀏覽:165
安卓咪咕音樂怎麼錄制視頻 發布:2024-05-19 07:56:06 瀏覽:838
如何搞出超大聲的聽聲辨位安卓版 發布:2024-05-19 07:46:21 瀏覽:927
linux安全模式 發布:2024-05-19 07:27:25 瀏覽:176
為什麼安卓手機安裝不了cpk 發布:2024-05-19 07:22:21 瀏覽:313