📄 myfirmain.c
字号:
/*将两个不同频率叠加的正弦余弦信号进行FIR滤波,得到频率较低的正弦信号*/
/*滤波器系数用matlab计算 */
#include "stdio.h"
#include "math.h"
static void dataIO(); /*提供软件中断*/
void FIR(float input[],float output[],int SIZE);/*滤波核心函数*/
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
};/*滤波器系数*/
float input[256];/*输入数据,使用库函数计算正余弦叠加信号*/
float output[256];/*经过fir滤波的输出数据*/
main()
{
int i;
/*计算输入信号*/
/*正弦频率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(); /*此处加入软件中断,用以观察图形*/
}
}
/*函数:FIR
作用:将输入滤波写入到输出信号中
输入:输入信号,输出信号,变量维数
返回:无*/
/*滤波公式:y(n)=coff[0]*x(n-0)+coff[1]*x(n-1)+.....+coff[N]*x(n-N)*/
/*此时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 ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -