⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lp_filter.c

📁 基于CCS开发的低通滤波器
💻 C
字号:
#include<stdio.h>
#include<math.h>
static double pi;
static int n;
double windows(int winnum,int wn);
int main()
{
	int n1,i,j,factor,winnum;
	double fl,fs,wc,a,s;
	double h[2000];
	unsigned short int hh[1000];
	char fname[40];
	FILE *fp;
	printf ("\t\t矩形窗设计低通滤波器求任意阶抽头系数软件——Tornado\n");
	printf ("\n请输入低通滤波器的阶数N:");
	scanf ("%d",&n);
	printf ("\n请输入低通滤波器的截至频率:");
	scanf ("%lf",&fl);
    printf ("\n请输入低通滤波器的采样频率:");
	scanf ("%lf",&fs);
    printf ("\n1--矩形窗    2--三角窗    3--汉宁窗    4--海明窗    5--布拉克曼窗\n");
    printf ("\n请选择窗口函数:");
	scanf ("%d",&winnum);	
	(n%2)==0 ? (n1=n/2-1) : (n1=n/2);
	pi=4.0*atan(1.0);
	wc=(2*pi*fl)/fs;
	a=(n-1)/2.0;
    for(i=0;i<=n1;i++)
    {
        s=i-a;
        if(s!=0)
            h[i]=(sin(wc*s)/(pi*s));
        else
            h[i]=wc/pi;
        h[i]=h[i]*windows(winnum,i);
        h[n-i-1]=h[i];
	}
	//printf ("\n请输入保存输出数据的文件名:");
	//scanf ("%s",fname);
	if((fp=fopen("h(n).txt","w"))==NULL)
	{
		printf ("\n打开文件错误\n");
		exit(1);
	}
	for(i=0;i<=n1;i++)
	{
		j=n-i-1;
		fprintf(fp,"h(%2d)=%12.8lf=h(%2d)\n",i,h[i],j);
	}
	printf ("\n请输入影响因子:");
	scanf ("%d",&factor);
	for(i=0;i<=n1;i++)
	{       
        hh[i]=h[i]*factor;
		j=n-i-1;
		//fprintf(fp,"h(%2d)=%4x=h(%2d)\n",i,hh[i],j);
	}
	fprintf(fp,"\n%d阶抽头系数h(n):\n",n);
	for(i=0;i<=n1;i++) 
        fprintf(fp,"0x%x,",hh[i]);
    (n%2==0) ? (i=n1) : (i=n1-1);
	for(;i>=1;i--) 
        fprintf(fp,"0x%x,",hh[i]);
    fprintf(fp,"0x%x",hh[i]);
    printf ("\n计算完毕,");
    system("pause");
    return 0;
}
double windows(int winnum,int wn)
{
    double w;
    switch(winnum)
    {
        case 1: w=1;
            break;
        case 2:
            wn<=(n-1)/2 ? (w=2*wn/(double)(n-1)) : (w=2-2*wn/(double)(n-1));
            break;  
        case 3:
            w=0.5*(1.0-cos(2*wn*pi/(n-1)));
            break;      
        case 4:
            w=0.54-0.46*cos(2*wn*pi/(n-1));
            break;
        case 5:
            w=0.42-0.5*cos(2*wn*pi/(n-1))+0.08*cos(4*wn*pi/(n-1));
            break;
    }
    return w;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -