?? myfirmain.c
字號(hào):
/*將兩個(gè)不同頻率疊加的正弦余弦信號(hào)進(jìn)行FIR濾波,得到頻率較低的正弦信號(hào)*/
/*濾波器系數(shù)用matlab計(jì)算 */
#include "stdio.h"
#include "math.h"
static void dataIO(); /*提供軟件中斷*/
void FIR(float input[],float output[],int SIZE);/*濾波核心函數(shù)*/
float coffi[21]={
0.000478595791017,0.000726931684122,-0.003065643310532,
-0.005972516207952,0.009162581410507,0.024305842109567,
-0.018305853075952,-0.076072756598977,0.026970528950393,
0.306965272918299,0.469427460783227,0.306965272918299,
0.026970528950393,-0.076072756598977,-0.018305853075952,
0.024305842109567,0.009162581410507,-0.005972516207952,
-0.0030656643310532,0.000726931864122,0.000478595791017
};/*濾波器系數(shù)*/
float input[256];/*輸入數(shù)據(jù),使用庫(kù)函數(shù)計(jì)算正余弦疊加信號(hào)*/
float output[256];/*經(jīng)過(guò)fir濾波的輸出數(shù)據(jù)*/
main()
{
int i;
/*計(jì)算輸入信號(hào)*/
/*正弦頻率1000,余弦頻率2500*/
for(i = 0;i <= 255;i ++)
{
input[i]=(sin(2*3.14159235*i*1000/8000)+cos(2*3.14159265*i*2500/8000))/4;
output[i]=0;
}
FIR(input,output,256); /*濾波*/
while(1)
{
dataIO(); /*此處加入軟件中斷,用以觀察圖形*/
}
}
/*函數(shù):FIR
作用:將輸入濾波寫入到輸出信號(hào)中
輸入:輸入信號(hào),輸出信號(hào),變量維數(shù)
返回:無(wú)*/
/*濾波公式:y(n)=coff[0]*x(n-0)+coff[1]*x(n-1)+.....+coff[N]*x(n-N)*/
/*此時(shí)N為20,n為255*/
void FIR(float input[],float output[],int SIZE)
{
int i,j;
for(i=0;i<SIZE;i++)
for(j=0;j<21;j++)
output[i]+=coffi[j]*input[i-j];
puts("FIR end!\n");
}
static void dataIO()
{
return ;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -