DSP综合设计-IIR滤波器综合设计 浙江大学宁波理工学院DSP课程大

来源:网络收集 时间:2025-04-26 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xuecool-com或QQ:370150219 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

kk++; } } }

char ConvertScanToChar(unsigned char cScanCode) {

unsigned int cReturn;

cReturn=0;

switch ( cScanCode ) {

case SCANCODE_0: cReturn=0; break; case SCANCODE_1: cReturn=1; break; case SCANCODE_2: cReturn=2; break; case SCANCODE_3: cReturn=3; break; case SCANCODE_4: cReturn=4; break; case SCANCODE_5: cReturn=5; break; case SCANCODE_6: cReturn=6; break; case SCANCODE_7: cReturn=7; break; case SCANCODE_8: cReturn=8; break; case SCANCODE_9: cReturn=9; break;

case SCANCODE_Enter: cReturn=0x11;break; default:cReturn=10;break; }

return cReturn; }

void interrupt xint2(void) // XINT2中断服务程序 {

LcdDelay(16);

nCount++; nCount%=256; // 中断计数 if ( nCount%2==1 ) {

nScanCode=port8001; nScanCode&=0x0ff;

cKey=ConvertScanToChar(nScanCode); if (( cKey==1)) {

state=1; display=1;

}

else if ( cKey==2 ) {

state=2; display=1; }

else if ( cKey==3 ) {

state=3; display=1; }

else if((cKey==0x11 )) {

state=0; display=1; } } }

void Delay(unsigned int nDelay) {

int ii,jj,kk=0;

for ( ii=0;ii

for ( jj=0;jj<1000;jj++ ) {

kk++; } } }

void Display1(void) {// LcdCls();

/*DisplayDigital(0, 0, 0, DigitalArray, 0, 0);//I DisplayDigital(0, 0, 8, DigitalArray, 2, 0);//I DisplayDigital(0, 0, 16, DigitalArray, 4, 0);//R

DisplayChineseChar(0, 0, 24, ChineseArray, 60, 0);//清空 DisplayChineseChar(0, 0, 32, ChineseArray, 0, 0);//滤 DisplayChineseChar(0, 0, 48, ChineseArray, 2, 0);//波 DisplayChineseChar(0, 0, 0, ChineseArray, 4, 1);//测 DisplayChineseChar(0, 0, 16, ChineseArray, 6, 1);//试 DisplayChineseChar(0, 0, 32, ChineseArray, 8, 1);//系 DisplayChineseChar(0, 0, 48, ChineseArray, 10, 1);//统

DisplayChineseChar(0, 2, 0, ChineseArray, 12, 0);//按

DisplayChineseChar(0, 2,16, ChineseArray, 14, 0);//键 DisplayDigital(0, 2, 32, DigitalArray, 6, 0);//1 DisplayDigital(0, 2, 40, DigitalArray, 10, 0);//: DisplayChineseChar(0, 2, 0, ChineseArray, 18, 1);//低 DisplayChineseChar(0, 2, 16, ChineseArray, 20, 1);//通 DisplayChineseChar(0, 2, 32, ChineseArray, 0, 1);//滤 DisplayChineseChar(0, 2, 48, ChineseArray, 2, 1);//波

DisplayChineseChar(0, 4, 0, ChineseArray, 12, 0);//按 DisplayChineseChar(0, 4,16, ChineseArray, 14, 0);//键 DisplayDigital(0, 4, 32, DigitalArray, 8, 0);//2 DisplayDigital(0, 4, 40, DigitalArray, 10, 0);//: DisplayChineseChar(0, 4, 0, ChineseArray, 16, 1);//高 DisplayChineseChar(0, 4, 16, ChineseArray, 20, 1);//通 DisplayChineseChar(0, 4, 32, ChineseArray, 0, 1);//滤 DisplayChineseChar(0, 4, 48, ChineseArray, 2, 1);//波*/

DisplayChineseChar(0, 6, 0, ChineseArray, 30, 0);//正 DisplayChineseChar(0, 6, 16, ChineseArray, 32, 0);//在 DisplayChineseChar(0, 6, 32, ChineseArray, 34, 0);//进 DisplayChineseChar(0, 6, 48, ChineseArray, 36, 0);//行 DisplayChineseChar(0, 6, 0, ChineseArray, 18, 1);//低 DisplayChineseChar(0, 6, 16, ChineseArray, 20, 1);//通 DisplayChineseChar(0, 6, 32, ChineseArray, 0, 1);//滤 DisplayChineseChar(0, 6, 48, ChineseArray, 2, 1);//波 state=1; }

void Display2(void) {//LcdCls();

DisplayChineseChar(0, 6, 0, ChineseArray, 30, 0);//正 DisplayChineseChar(0, 6, 16, ChineseArray, 32, 0);//在 DisplayChineseChar(0, 6, 32, ChineseArray, 34, 0);//进 DisplayChineseChar(0, 6, 48, ChineseArray, 36, 0);//行 DisplayChineseChar(0, 6, 0, ChineseArray, 16, 1);//高 DisplayChineseChar(0, 6, 16, ChineseArray, 20, 1);//通 DisplayChineseChar(0, 6, 32, ChineseArray, 0, 1);//滤 DisplayChineseChar(0, 6, 48, ChineseArray, 2, 1);//波 state=2; }

void Display3(void) { //LcdCls();

DisplayChineseChar(0, 0, 0, ChineseArray, 38, 0);//. DisplayChineseChar(0,0, 16, ChineseArray, 40, 0);//.

DisplayChineseChar(0,0, 32, ChineseArray, 42, 0);//. DisplayChineseChar(0, 0, 48, ChineseArray, 84, 0);//清空

DisplayChineseChar(0, 0, 0, ChineseArray, 44, 1);//0 DisplayChineseChar(0, 0, 16, ChineseArray, 46, 1);//. DisplayChineseChar(0,0, 32, ChineseArray, 48, 1);//. DisplayChineseChar(0, 0, 48, ChineseArray, 84, 1);//清空

DisplayChineseChar(0, 2, 0, ChineseArray, 50, 0);// . DisplayChineseChar(0, 2, 16, ChineseArray, 52, 0);//. DisplayChineseChar(0, 2, 32, ChineseArray, 54, 0);//. DisplayChineseChar(0, 2, 48, ChineseArray, 84, 0);//清空

DisplayChineseChar(0, 2, 0, ChineseArray, 56, 1);//0 DisplayChineseChar(0, 2, 16, ChineseArray, 58, 1);//. DisplayChineseChar(0,2, 32, ChineseArray, 60, 1);//. DisplayChineseChar(0, 2, 48, ChineseArray, 84, 1);//清空

DisplayChineseChar(0, 4, 0, ChineseArray, 62, 0);//. DisplayChineseChar(0, 4, 16, ChineseArray, 84, 0);//清空 DisplayChineseChar(0, 4, 32, ChineseArray, 64, 0);//. DisplayChineseChar(0, 4, 48, ChineseArray, 84, 0);//清空

DisplayChineseChar(0, 4, 0, ChineseArray, 66, 1);//0 DisplayChineseChar(0, 4, 16, ChineseArray, 68, 1);//. DisplayChineseChar(0,4, 32, ChineseArray, 70, 1);//. DisplayChineseChar(0, 4, 48, ChineseArray, 84, 1);//清空

DisplayChineseChar(0, 6, 0, ChineseArray, 72, 0);// . DisplayChineseChar(0, 6, 16, ChineseArray, 74, 0);//.. DisplayChineseChar(0, 6, 32, ChineseArray, 76, 0);//.. DisplayChineseChar(0, 6, 48, ChineseArray, 84, 0);//清空

DisplayChineseChar(0, 6, 0, ChineseArray, 78, 1);//0 DisplayChineseChar(0, 6, 16, ChineseArray, 80, 1);//. DisplayChineseChar(0,6, 32, ChineseArray, 82, 1);//. DisplayChineseChar(0, 6, 48, ChineseArray, 84, 1);//清空 state=3; }

void Display4(void) {

DisplayChineseChar(0, 6, 0, ChineseArray, 60, 1);// DisplayChineseChar(0, DisplayEnterSystem(); }

清空

6, 48, ChineseArray, 60, 1);//清空

宁波理工学院

I I R滤波器设计

题 目 IIR滤波器综合设计 姓 名

学 号

专业班级

指导教师 学 院

完成日期

一、实验目的

1、熟悉CCS集成开发环境的基本操作及相关功能。 2、学会LCD模块的运用方法。 3、掌握字模提取软件。

4、掌握按键以及子模在DSP中读取及显示的方法。

5、在CCS集成环境中对输入信号进行滤波,并观察输入波形。

二、实验任务

在DSP实验箱上完成下列功能:

2?3?7??(1) 通过键盘控制:按键1:对输入信号x?n??sin(n??)?cos?n?进

585?8?行低通IIR滤波,采用窗函数滤波,参数:通带范围(0,0.6?),阻带最小衰减40dB。按键2:对输入信号x?n??2?3?7??sin(n??)?cos?n?进行5858??高通IIR滤波,采用窗函数滤波,参数:通带范围(0.5?,?),阻带最小衰减40dB。按回车键:退出。按键3:显示组员姓名及学号 (2) 在LCD上显示下列功能:

1、运行程序:显示选项菜单

2、按下按键1:显示正在进行低通滤波 3、按下按键2:显示正在进行高通滤波 4、按下按键3:显示组员姓名及学号

三、流程图

开始 调试 观察LCD屏幕 按下 1 键进 判断按下按键 行低通滤波 的键值 按下2键进行高通滤波 按下3键显示组员和学号 按下Enter键 按下Enter键 按下Enter键

四、巴特沃斯IIR滤波器 (1)滤波器的设计

IIR滤波器系统函数为:

结束 b0?b1z?1?b2z?2?...?bMz?MH(z)? ?1?2?N1?a1z?a2z?...?aNz因此:IIR滤波器主要参数是a,b参数提取。

常用IIR滤波器有巴特沃思IIR滤波器及切比雪夫等滤波器等。本实验主要设计巴特沃思IIR滤波器。

MATLAB中提取巴特沃思IIR滤波器参数的指令如图1所示。

图一、MATLAB指令输入

在MATLAB左上角找到H数组,打开,可以得到IIR低通滤波器的模型数组

fH1[N]={ 1.0000,1.0000,1.0000,1.0000,1.0000,1.0000,1.0000,1.0000,1.0000,1.0000,1.0000,0.9999,0.9996,0.9990,0.9972,0.9924,0.9801,0.9493, 0.8785,0.7425,0.5496,0.3569 , 0.2107,0.1161,0.0601,0.0290,0.0127, 0.0049,0.0015,0.0004,0.0000 ,0.0000};

在CCS上信号通过IIR巴特沃斯低通滤波器后,信号变成如下图所示fOut的图形,f In为输入波形的频域表示图。

图三、滤波器,信号,通过滤波器的信号

同样的方法可以得到IIR巴特沃斯高通滤波器的模型以及信号通过IIR巴特沃斯高通滤波器后的信号。

图四、高通滤波器以及输出信号

五、字模提取模块

2、提取字模

…………….

/*-- 数字: 0 --*/

{0x00,0x00,0xE0,0xF0,0xF0,0x18,0x08,0x08,0x08,0x08,0x08,0x38,0xF0,0xE0,0xC0,0x00},//56

{0x00,0x01,0x0F,0x1F,0x1F,0x30,0x20,0x20,0x20,0x20,0x20,0x38,0x1F,0x0F,0x07,0x00},

六、LCD显示模块

1、LCD上显示设置,用自己的姓名做例子说明:

DisplayChineseChar(0, 2, 0, ChineseArray, 50, 0);//

{

port8004=0;

LcdDelay(LCDDELAY); port8002=0;

LcdDelay(LCDDELAY); } } }

void TurnLcdOff() {

port8001 = LCDCMDTURNOFF; LcdDelay(LCDDELAY);

port8002 = 0;

LcdDelay(LCDDELAY); }

void TurnLcdOn() {

port8001 = LCDCMDTURNON;//设置打开LCD命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字

LcdDelay(1024);//延迟,等待打开LCD

port8001 = LCDCMDSTARTLINE;//设置起始行命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟

port8001 = LCDCMDPAGE;//设置当前操作页 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟

port8001 = LCDCMDSTARTCOLUMN;//设置起始列命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟 }

void DisplayChineseChar(int nStartLine, int nPage, int nStartColumn, unsigned char Array[][16], int nCharIndex, int nBufferIndex) {

int i;

port8001 = LCDCMDSTARTLINE + nStartLine; LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟

port8001 = LCDCMDPAGE + nPage;//设置当前操作页 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟

port8001 = LCDCMDSTARTCOLUMN + nStartColumn;//设置起始列命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字

LcdDelay(LCDDELAY);//延迟

//左上角

for (i = 0; i < 16; i ++) {

if (nBufferIndex == 0) {

port8003 = Array[nCharIndex][i]; LcdDelay(LCDDELAY); port8002 = 0;

LcdDelay(LCDDELAY); } else {

port8004 = Array[nCharIndex][i]; LcdDelay(LCDDELAY); port8002 = 0;

LcdDelay(LCDDELAY); } }

port8001 = LCDCMDPAGE + nPage + 1;//设置起始行命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟

port8001 = LCDCMDSTARTCOLUMN + nStartColumn;//设置起始列命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字

LcdDelay(LCDDELAY);//延迟

for (i = 0; i < 16; i ++) {

if (nBufferIndex == 0) {

port8003 = Array[nCharIndex + 1][i]; LcdDelay(LCDDELAY); port8002 = 0;

LcdDelay(LCDDELAY); } else {

port8004 = Array[nCharIndex + 1][i]; LcdDelay(LCDDELAY); port8002 = 0;

LcdDelay(LCDDELAY); } } }

void DisplayEnterSystem() {

DisplayDigital(0, 0, 0, DigitalArray, 0, 0);//I DisplayDigital(0, 0, 8, DigitalArray, 2, 0);//I DisplayDigital(0, 0, 16, DigitalArray, 4, 0);//R

DisplayChineseChar(0, 0, 32, ChineseArray, 0, 0);//滤 DisplayChineseChar(0, 0, 48, ChineseArray, 2, 0);//波 DisplayChineseChar(0, 0, 0, ChineseArray, 4, 1);//测 DisplayChineseChar(0, 0, 16, ChineseArray, 6, 1);//试 DisplayChineseChar(0, 0, 32, ChineseArray, 8, 1);//系 DisplayChineseChar(0, 0, 48, ChineseArray, 10, 1);//统

DisplayChineseChar(0, 2, 0, ChineseArray, 12, 0);//按 DisplayChineseChar(0, 2,16, ChineseArray, 14, 0);//键 DisplayDigital(0, 2, 32, DigitalArray, 6, 0);//1 DisplayDigital(0, 2, 40, DigitalArray, 10, 0);//: DisplayChineseChar(0, 2, 0, ChineseArray, 18, 1);//低 DisplayChineseChar(0, 2, 16, ChineseArray, 20, 1);//通 DisplayChineseChar(0, 2, 32, ChineseArray, 0, 1);//滤 DisplayChineseChar(0, 2, 48, ChineseArray, 2, 1);//波

DisplayChineseChar(0, 4, 0, ChineseArray, 12, 0);//按 DisplayChineseChar(0, 4,16, ChineseArray, 14, 0);//键 DisplayDigital(0, 4, 32, DigitalArray, 8, 0);//2

DisplayDigital(0, 4, 40, DigitalArray, 10, 0);//: DisplayChineseChar(0, 4, 0, ChineseArray, 16, 1);//高 DisplayChineseChar(0, 4, 16, ChineseArray, 20, 1);//通 DisplayChineseChar(0, 4, 32, ChineseArray, 0, 1);//滤 DisplayChineseChar(0, 4, 48, ChineseArray, 2, 1);//波

DisplayChineseChar(0, 6, 0, ChineseArray, 12, 0);//按 DisplayChineseChar(0, 6, 16, ChineseArray, 22, 0);//回 DisplayChineseChar(0, 6, 32, ChineseArray, 24, 0);//车 DisplayChineseChar(0, 6, 48, ChineseArray, 14, 0);//键 DisplayChineseChar(0, 6, 16, ChineseArray, 26, 1);//退 DisplayChineseChar(0, 6, 32, ChineseArray, 28, 1);//出 }

void DisplayDigital(int nStartLine, int nPage, int nStartColumn, unsigned char Array[][8], int nCharIndex, int nBufferIndex) {

int i;

port8001 = LCDCMDSTARTLINE + nStartLine; LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟

port8001 = LCDCMDPAGE + nPage;//设置当前操作页 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟

port8001 = LCDCMDSTARTCOLUMN + nStartColumn;//设置起始列命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字

LcdDelay(LCDDELAY);//延迟

//左上角

for (i = 0; i < 8; i ++) {

if (nBufferIndex == 0) {

port8003 = Array[nCharIndex][i]; LcdDelay(LCDDELAY); port8002 = 0;

LcdDelay(LCDDELAY); }

else {

port8004 = Array[nCharIndex][i]; LcdDelay(LCDDELAY); port8002 = 0;

LcdDelay(LCDDELAY); } }

port8001 = LCDCMDPAGE + nPage + 1;//设置起始行命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟

port8001 = LCDCMDSTARTCOLUMN + nStartColumn;//设置起始列命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字

LcdDelay(LCDDELAY);//延迟

for (i = 0; i < 8; i ++) {

if (nBufferIndex == 0) {

port8003 = Array[nCharIndex + 1][i]; LcdDelay(LCDDELAY); port8002 = 0;

LcdDelay(LCDDELAY); } else {

port8004 = Array[nCharIndex + 1][i]; LcdDelay(LCDDELAY); port8002 = 0;

LcdDelay(LCDDELAY); } } }

void LcdDelay(unsigned int nDelay) {

int ii,jj,kk=0;

for ( ii=0;ii

for ( jj=0;jj

0.8785,0.7425,0.5496,0.3569 , 0.2107,0.1161,0.0601,0.0290,0.0127, 0.0049,0.0015,0.0004,0.0000 ,0.0000};

float fA1[IIRNUMBER]={1.0000,0.9853,0.9738,0.3864,0.1112,0.0113}; float fB1[IIRNUMBER]={0.1084,0.5419,1.0837,1.0837,0.5419,0.1084};

fH2[N]={ 0,0.0000,0.0000,0.0001,0.0003,0.0010,0.0026,0.0059,0.0122,0.0237,0.0436,0.0771,

0.1320,0.2189,0.3489,0.5218,0.7071,0.8531,0.9372,0.9757,0.9912,0.9970,0.9990,0.9997,

0.9999,1.0000 ,1.0000,1.0000,1.0000,1.0000,1.0000,1.0000};

float fA2[IIRNUMBER]={1.0000,-0.0000,0.6334,-0.0000,0.0557,-0.0000}; float fB2[IIRNUMBER]={0.0528,-0.2639,0.5279,-0.5279,0.2639,-0.0528}; float fXn[IIRNUMBER]={ 0.0 }; float fYn[IIRNUMBER]={ 0.0 }; float fInput,fOutput; float fSignal1,fSignal2;

float fStepSignal1,fStepSignal2; float f2PI; int i;

float fIn[256],fOut[256],fAn[6],fBn[6]; int nIn,nOut,display=0;

char ConvertScanToChar(unsigned char cScanCode); //16*8 digital array

unsigned char DigitalArray[14][8]=

{ {0x00,0x00,0x08,0xF8,0xF8,0x08,0x08,0x00},{0x00,0x20,0x20,0x3F,0x3F,0x20,0x20,0x00}, //I

{0x00,0x00,0x08,0xF8,0xF8,0x08,0x08,0x00},{0x00,0x20,0x20,0x3F,0x3F,0x20,0x20,0x00}, //I

{0x00,0xF8,0xF8,0x08,0x08,0x88,0xF8,0x60},{0x20,0x3F,0x3F,0x21,0x03,0x1F,0x38,0x20}, //R

{0x00,0x00,0x10,0xF0,0xF8,0x00,0x00,0x00},{0x00,0x00,0x20,0x3F,0x3F,0x20,0x20,0x00}, //1

{0x00,0x70,0x78,0x08,0x08,0xD8,0xF0,0x20},{0x00,0x30,0x38,0x34,0x33,0x31,0x38,0x08},//2

{0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x80},{0x00,0x00,0x00,0x00,0x31,0x7B,0x7B,0x31},//:

{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0} //清空 };

//16*16 Chinese character Array

unsigned char ChineseArray[86][16]=

{

{0x20,0xC2,0x0C,0x40,0xF8,0x48,0x48,0x48,0xFF,0x2A,0x2A,0x2B,0x8A,0x28,0x18,0x00},

{0x04,0xFC,0x82,0x61,0x1F,0x10,0x08,0x3C,0x40,0x45,0x59,0x41,0x71,0x08,0x30,0x00}, //滤

{0x20,0x42,0x04,0x0C,0x80,0xF8,0x88,0x88,0x88,0xFF,0x88,0x88,0xA8,0x18,0x00,0x00},

{0x04,0x04,0xFE,0x41,0x30,0x8F,0x40,0x22,0x14,0x08,0x14,0x22,0x41,0xC0,0x40,0x00},//波

{0x10,0x22,0x6C,0x00,0x80,0xFC,0x04,0xF4,0x04,0xFE,0x04,0xF8,0x00,0xFE,0x00,0x00},

{0x04,0x04,0xFE,0x01,0x40,0x27,0x10,0x0F,0x10,0x67,0x00,0x47,0x80,0x7F,0x00,0x00},//测

{0x40,0x42,0xCC,0x00,0x10,0x90,0x90,0x90,0x90,0x90,0xFF,0x10,0x12,0x14,0x10,0x00},

{0x00,0x00,0x7F,0x20,0x10,0x20,0x60,0x3F,0x10,0x10,0x01,0x3E,0x40,0x80,0x70,0x00},//试

{0x00,0x02,0x22,0x22,0x32,0x2E,0xA2,0x62, 0x22,0x22,0x91,0x09,0x01,0x00,0x00,0x00},

{0x00,0x00,0x42,0x22,0x1A,0x43,0x82,0x7E,0x02,0x02,0x0A,0x13,0x66,0x00,0x00,0x00}, //系

{0x20,0x30,0xAC,0x63,0x30,0x88,0xC8,0xA8, 0x99,0x8E,0x88,0xA8,0xCC,0x88,0x00,0x00}, {0x22,0x67,0x22,0x12,0x92,0x40,0x30,0x0F,

0x00,0x00,0x3F,0x40,0x40,0x41,0x70,0x00}, //统

{0x10,0x10,0x90,0xFF,0x90,0xA0,0x98,0x88,0x88,0xE9,0x8A,0x88,0x88,0xA8,0x98,0x00},

{0x01,0x41,0x80,0x7F,0x00,0x00,0x80,0x84,0x4B,0x30,0x10,0x28,0x47,0xC0,0x00,0x00},//按

{0x10,0x28,0xE7,0x24,0x24,0xC2,0xB2,0x8E,0x10,0x54,0x54,0xFF,0x54,0x7C,0x10,0x00},

{0x01,0x01,0x7F,0x21,0x51,0x24,0x18,0x27,0x48,0x89,0x89,0xFF,0x89,0xCD,0x48,0x00},//键

{0x04,0x04,0x04,0xF4,0x94,0x94,0x95,0x96,0x94,0x94,0x94,0xF4,0x04,0x06,0x04,0x00},//高

{0x00,0xFE,0x02,0x02,0x7A,0x4A,0x4A,0x4A,0x4A,0x4A,0x7A,0x02,0x82,0xFF,0x02,0x00},

{0x40,0x20,0xF8,0x07,0x00,0xFC,0x84,0x84,0x84,0xFC,0x82,0x82,0x83,0xC2,0x80,0x00},

{0x00,0x00,0xFF,0x00,0x00,0x7F,0x20,0x10,0x08,0x20,0x47,0x18,0x60,0x80,0x70,0x00}, //低

{0x40,0x42,0x44,0xCC,0x00,0x00,0xF1,0x91,0x95,0xF9,0x95,0x93,0xF9,0x10,0x00,0x00},

{0x00,0x40,0x20,0x1F,0x20,0x40,0xBF,0x84,0x84,0xBF,0x94,0xA4,0x9F,0xC0,0x40,0x00},//通

{0x00,0xFC,0x04,0x04,0x04,0xE4,0x24,0x24,0x24,0xF4,0x24,0x04,0x04,0xFE,0x04,0x00},

{0x00,0x7F,0x20,0x20,0x20,0x2F,0x24,0x24,0x24,0x2F,0x20,0x20,0x20,0x7F,0x00,0x00}, //回

{0x00,0x04,0xC4,0xA4,0x94,0x8C,0x87,0xF4,0x84,0x84,0xC4,0x84,0x06,0x04,0x00,0x00},

{0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00},//车

{0x40,0x42,0x44,0xCC,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0xFF,0x40,0x00,0x00},

{0x00,0x40,0x20,0x1F,0x20,0x40,0x9F,0x88,0x85,0x81,0x82,0x85,0x88,0xD8,0x40,0x00},//退

{0x00,0x00,0xFC,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0xFC,0x00,0x00,0x00},

{0x00,0xFE,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0xFE,0x00,0x00},//出

{0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0xC2,0x83,0x02,0x00,0x00},

{0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00},//正

{0x08,0x08,0x08,0x08,0xC8,0x38,0x0F,0x08,0x08,0xE8,0x08,0x88,0x08,0x0C,0x08,0x00},

{0x08,0x04,0x02,0xFF,0x00,0x40,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x60,0x40,0x00},//在

{0x40,0x42,0xCC,0x00,0x08,0x08,0xFF,0x08,0x08,0x08,0xFF,0x08,0x8C,0x08,0x00,0x00},

{0x40,0x20,0x1F,0x20,0x41,0x51,0x4F,0x41,0x41,0x41,0x7F,0x41,0x41,0x61,0x20,0x00},//进

{0x00,0x10,0x88,0xC4,0x23,0x40,0x42,0x42,0x42,0x42,0x42,0xC2,0x43,0x62,0x40,0x00},

{0x02,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00},//行

{0x00,0x02,0x82,0x82,0xF2,0x4A,0x26,0x80,0x60,0x00,0xFF,0x20,0x40,0x80,0x00,0x00},///38 ……………………..

{0x40,0x44,0x44,0x44,0xC4,0xFE,0x42,0x63,0x42,0x00,0xF8,0x00,0x00,0xFF,0x00,0x00},//40 …………………..

{0x10,0x10,0xD0,0xFF,0x50,0x90,0x08,0x88,0x78,0x0F,0xC8,0x08,0x0C,0x88,0x00,0x00},//42 ……………………..

/*-- 文字: 0 --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

{0x00,0x00,0xE0,0xF0,0xF0,0x18,0x08,0x08,0x08,0x08,0x08,0x38,0xF0,0xE0,0xC0,0x00},//44

{0x00,0x01,0x0F,0x1F,0x1F,0x30,0x20,0x20,0x20,0x20,0x20,0x38,0x1F,0x0F,0x07,0x00},

/*-- 文字: --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

{0x00,0x00,0x30,0x30,0x38,0x08,0x88,0x88,0x88,0x88,0xD8,0xF8,0x70,0x20,0x00,0x00},//46

{0x00,0x00,0x18,0x18,0x38,0x20,0x21,0x21,0x21,0x21,0x21,0x3B,0x1E,0x1E,0x04,0x00},

/*-- 文字: 2 --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

{0x00,0x00,0x20,0x70,0x78,0x08,0x08,0x08,0x08,0x08,0x88,0xF8,0xF8,0x70,0x00,0x00},//48

{0x00,0x00,0x30,0x30,0x38,0x3C,0x34,0x36,0x32,0x33,0x31,0x31,0x30,0x38,0x08,0x00},

{0x80,0x84,0x44,0x44,0x24,0x14,0x04,0xFF,0x04,0x14,0x24,0x24,0x46,0xC4,0x40,0x00},//.//50 …………………..

…………………….//52

{0x80,0x80,0x40,0x40,0x20,0x11,0x0A,0x04,0x0A,0x11,0x10,0x20,0x40,0xC

0,0x40,0x00},

…………………………….

{0x20,0x10,0x0D,0x02,0x05,0x18,0x40,0x7F,0x40,0x3F,0x22,0x07,0x38,0x40,0xE0,0x00},

/*-- 文字: . --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

{0x00,0x00,0xE0,0xF0,0xF0,0x18,0x08,0x08,0x08,0x08,0x08,0x38,0xF0,0xE0,0xC0,0x00},//56

{0x00,0x01,0x0F,0x1F,0x1F,0x30,0x20,0x20,0x20,0x20,0x20,0x38,0x1F,0x0F,0x07,0x00},

/*-- 文字: . --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

{0x00,0x00,0x20,0x70,0x78,0x08,0x08,0x08,0x08,0x08,0x88,0xF8,0xF8,0x70,0x00,0x00},//58

{0x00,0x00,0x30,0x30,0x38,0x3C,0x34,0x36,0x32,0x33,0x31,0x31,0x30,0x38,0x08,0x00},

/*-- 文字: . --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

{0x00,0x00,0x00,0xF8,0xF8,0x88,0x88,0x88,0xC8,0xC8,0x88,0x88,0x88,0x08,0x00,0x00},//60

{0x00,0x00,0x18,0x1D,0x39,0x20,0x20,0x20,0x20,0x20,0x20,0x3B,0x1F,0x0F,0x06,0x00},

/*-- 文字: . --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ ……………………

/*-- 文字: . --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ …………………

/*-- 文字: . --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

{0x00,0x00,0xE0,0xF0,0xF0,0x18,0x08,0x08,0x08,0x08,0x08,0x38,0xF0,0xE

0,0xC0,0x00},//66

{0x00,0x01,0x0F,0x1F,0x1F,0x30,0x20,0x20,0x20,0x20,0x20,0x38,0x1F,0x0F,0x07,0x00},

/*-- 文字: . --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

{0x00,0x00,0x30,0x30,0x38,0x08,0x88,0x88,0x88,0x88,0xD8,0xF8,0x70,0x20,0x00,0x00},//68

{0x00,0x00,0x18,0x18,0x38,0x20,0x21,0x21,0x21,0x21,0x21,0x3B,0x1E,0x1E,0x04,0x00},

/*-- 文字: . --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

{0x00,0x00,0x70,0xF0,0xD8,0xC8,0x88,0x88,0x88,0x88,0x88,0x88,0xF8,0x70,0x20,0x00},//70

{0x00,0x08,0x1E,0x1E,0x33,0x21,0x21,0x21,0x21,0x21,0x23,0x23,0x1E,0x1E,0x0C,0x00},

/*-- 文字: . --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

{0x00,0x80,0xC0,0xBC,0x84,0x84,0x84,0xF4,0x82,0x82,0x83,0x82,0x80,0xC0,0x80,0x00},//72 .

/*-- 文字:.--*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

{0x10,0x10,0xD0,0xFF,0x90,0x10,0xFC,0x84,0x84,0x84,0xF4,0x82,0x83,0xC2,0x80,0x00},//74 {.

/*-- 文字: . --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

{0x04,0x84,0xE4,0x9C,0x86,0xC4,0x80,0xFC,0x84,0x84,0xF4,0x82,0x83,0xC2,0x80,0x00},//76 .

/*-- 文字: . --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

{0x00,0x00,0xE0,0xF0,0xF0,0x18,0x08,0x08,0x08,0x08,0x08,0x38,0xF0,0xE0,0xC0,0x00},//78

{0x00,0x01,0x0F,0x1F,0x1F,0x30,0x20,0x20,0x20,0x20,0x20,0x38,0x1F,0x0F,0x07,0x00},

/*-- 文字: . --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

{0x00,0x00,0x20,0x70,0x78,0x08,0x08,0x08,0x08,0x08,0x88,0xF8,0xF8,0x70,0x00,0x00},//80

{0x00,0x00,0x30,0x30,0x38,0x3C,0x34,0x36,0x32,0x33,0x31,0x31,0x30,0x38,0x08,0x00},

/*-- 文字: . --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

{0x00,0x00,0x00,0x00,0x80,0x80,0x40,0x60,0x30,0xF0,0xF8,0xF8,0x00,0x00,0x00,0x00},//82

{0x00,0x00,0x06,0x07,0x05,0x04,0x24,0x24,0x24,0x3F,0x3F,0x3F,0x24,0x24,0x24,0x00},

{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //84

{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0} //清空 };

unsigned int uWork;

int nCount,nCursorCount;

unsigned int nScanCode,nKeyCode,state; unsigned int cKey,tKey; main() {

nIn=0; nOut=0; fInput=fOutput=0; f2PI=2*PI;

fSignal1=PI*0.6; fSignal2=0.0;

fStepSignal1=2*PI/16; fStepSignal2=7*PI/8; state=4; tKey=0; cKey=tKey;

REGISTERCLKMD=0;

CTRGR=0; // 初始化ICETEK-CTR CTRGR=0x80; CTRGR=0;

CTRLR=0; // 关闭东西方向的交通灯 CTRLR=0x40; // 关闭南北方向的交通灯 TurnLcdOn(); // 打开显示 LcdCls(); // 清除显示内存

CTRLCDCMDR=LCDCMDSTARTLINE; // 设置显示起始行 CTRLCDCR=0;

tKey=port8002; // 清键盘缓冲区

//REGISTERCLKMD=0x1007; // 设DSP主频改为两倍PLL时钟=32MHz asm(\ssbx INTM\// 关中断,进行关键设置时不许打扰 port3004=0; // 使能XINT2

uWork=PMST; // 设置PMST寄存器 PMST =uWork&0xff; // 中断向量表起始地址=80H IMR = 4; // 使能XINT2 IFR = 4; // 清中断标志位 asm(\rsbx INTM\// 开中断 DisplayEnterSystem(); for (;;) {

switch(state) {

case 0:

if(display){ display=0; LcdCls(); }

break;

case 1:

if(display){ display=0; Display1(); }

fInput=InputWave(); fIn[nIn]=fInput; nIn++; nIn%=256;

fOutput=IIR(fH1,fA1,fB1); fOut[nOut]=fOutput;

nOut++; /* break point */ if ( nOut>=256 ) {

nOut=0; }

break;

case 2:

if(display){

display=0; Display2(); }

fInput=InputWave(); fIn[nIn]=fInput; nIn++; nIn%=256;

fOutput=IIR(fH2,fA2,fB2); fOut[nOut]=fOutput; nOut++; nOut%=256; /* break point */ break; case 3:

if(display){

display=0; Display3(); } break;

default:break; } }

}

float InputWave() {

for ( i=IIRNUMBER-1;i>0;i-- ) {

fXn[i]=fXn[i-1];

fYn[i]=fYn[i-1]; //输出也参加移位 }

fXn[0]=2*sin((double)fSignal1)/5+cos((double)fSignal2); fYn[0]=0.0;

fSignal1+=fStepSignal1;

if ( fSignal1>=f2PI ) fSignal1-=f2PI; fSignal2+=fStepSignal2;

if ( fSignal2>=f2PI ) fSignal2-=f2PI; return(fXn[0]); }

float IIR(float fHn[],float fAn[],float fBn[])

{

float fSum; fSum=0;

for(i=0;i

fSum+=(fXn[i]*fBn[i]); fSum+=(fYn[i]*fAn[i]); }

return(fSum); }

void LcdCls() {

int i,j;

port8001=LCDCMDSTARTLINE; LcdDelay(LCDDELAY); port8002=0;

LcdDelay(LCDDELAY); for ( i=0;i<8;i++ ) {

port8001=LCDCMDPAGE+i; LcdDelay(LCDDELAY); port8002=0;

LcdDelay(LCDDELAY);

port8001=LCDCMDSTARTCOLUMN; LcdDelay(LCDDELAY); port8002=0;

LcdDelay(LCDDELAY); for ( j=0;j<64;j++ ) {

port8003=0;

LcdDelay(LCDDELAY); port8002=0;

LcdDelay(LCDDELAY); }

port8001=LCDCMDPAGE+i; LcdDelay(LCDDELAY); port8002=0;

LcdDelay(LCDDELAY);

port8001=LCDCMDSTARTCOLUMN; LcdDelay(LCDDELAY); port8002=0;

LcdDelay(LCDDELAY); for ( j=0;j<64;j++ )

百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库DSP综合设计-IIR滤波器综合设计 浙江大学宁波理工学院DSP课程大在线全文阅读。

DSP综合设计-IIR滤波器综合设计 浙江大学宁波理工学院DSP课程大.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.70edu.com/wenku/181880.html(转载请注明文章来源)
Copyright © 2020-2025 70教育网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:370150219 邮箱:370150219@qq.com
苏ICP备16052595号-17
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:7 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219