资源简介

本代码是用c语言编写的实现butterworth滤波器,可以对低通,高通,带通,带阻四类滤波器进行设计。

资源截图

代码片段和文件信息

/*滤波器设计说明:
截止频率设计在omegac=10附近
巴特沃斯幅频是任意阶数
巴特沃斯相频只做了2阶
切比雪夫幅频做的是4阶
切比雪夫相频做的是2阶
低通 高通 带通带阻 通过参数函数原型采用参数替换全部实现
典型参数设置:
巴特沃斯低通 高通:f1=5N=6;
贝特沃斯带通 带阻:f1=5f2=10N=6;
切比雪夫低通 高通:f1=5
切比雪夫带通 带阻:f1=5*/
#include “conio.h“
#include “dos.h“
#include “stdio.h“
#include “graphics.h“
#include “math.h“
#define UP      0x48
#define DOWN    0x50                                            
#define ENTER   0x0D
#define ESC     0x1B
#define LU      ‘\xda‘          /*制表符,LU就是leftup*/
#define RU      ‘\xbf‘
#define H       ‘\xc4‘
#define V       ‘\xb3‘
#define LD      ‘\xc0‘
#define RD      ‘\xd9‘

/*以下是两种滤波器的幅频和相频曲线函数共2*2*4=16个*/
void low_pass_1(float afloat bfloat c);                   /*巴特沃斯幅频*/
void low_pass_12(float afloat b);                          /*巴特沃斯相频*/
void low_pass_2(float afloat b);                        /*切比雪夫幅频*/
void low_pass_22(float afloat b );                         /*切比雪夫相频*/
 

float input(int x int y char* title);
                        /*输入一个浮点数,(xy)是输入框显示的位置,title是标题*/
void frame(int x1int y1int x2int y2int colorchar* title);
                        /*画一个带边框的窗口,并且把光标放在边框里面第一个*/
void moveCursorToEnd(); /*将光标移动到最后*/

int waveFilter = 1;     /*滤波器编号,有2个滤波器可供选择*/
int mode = 1;           /*模式,每个滤波器有低通 高通 带通 带阻4种模式*/
float arg1= 0;         /*f1*/
float arg2 = 0;        /*f2,并不是每个滤波器都要输入*/
float arg3 = 0;     /*滤波器阶数*/

int graphdriver=DETECT;
int graphmodexy;

int selWaveFilter();    /*1.选择滤波器*/
int selMode();          /*2.选择模式*/
void inputArgs();       /*3.输入参数*/
int checkArgs();        /*4.检查输入的参数是否合法,如果合法,返回1*/
void drawGraph();       /*5.画图*/


void main()
{             registerbgidriver(EGAVGA_driver); 
    while(1)
    {
        frame(118025GREEN“Simulated Wave Filter“);
        waveFilter = selWaveFilter();
        if(waveFilter == 3)     /*用户选择了Exit*/
            return;
        mode = selMode();
        if(mode == 5)           /*用户选择模式时按下了ESC*/
            continue;
        do
        {
            inputArgs();
        }while(checkArgs() != 1);
        drawGraph();
    }
}

int selWaveFilter()
{
    char    item[3][32]={“Butterworth““ Chebyshev““   Exit“};
    int     chiselected=0;
    frame   (302446GREEN““);
    while(1)
    {

    for(i=0;i<3;i++)
    {
        window(31i+343i+3);
        if(selected==i)
        {
            textbackground(LIGHTGRAY);
            textcolor(YELLOW);
        }
        else
        {
            textbackground(GREEN);
            textcolor(WHITE);
        }
        clrscr();
        gotoxy(21);
        cprintf(“%s“item[i]);
    }
    moveCursorToEnd();
    if((ch=getch())==0)
        ch=getch();
    if(ch==UP)
    {
        selected--;
        if(selected==-1)
        selected=2;
    }
    if(ch==DOWN)
    {
        selected++;
        if(selected==3)
        selected=0;
    }
    if(ch==ENTER)
        return selected + 1;
    }
}

int selMode() 

评论

共有 条评论