.实验目
1.熟悉适应滤波器基概念掌握LMS算法基原理
2.掌握LMS算法DSP实现方法
3 熟悉适应方法进行系统辨识原理方法
4 学采虚拟仪器记录分析信号方法
二.实验设备
PC兼容机台操作系统Windows2000安装Code Composer Studio 42软件
C55x DSP实验箱
三.实验原理
1.适应滤波器基概念LMS算法
基LMS算法适应滤波器结构见图
中分称滤波器输入信号(参考输入信号参考信号)期信号称滤波器误差信号称滤波器控制输出信号输出信号
称控制滤波器滤波器控制滤波器权值系数L滤波器阶数
定义滤波器输入信号量滤波器系数量分
(11)
(12)
滤波器输出信号表达
(13a)
(13b)
误差信号表达
(14)
适应滤波器目迭代方式逐步调整滤波器系数误差信号量(幅度)断减趋优值
LMS算法中定义性函数采梯度法进行寻优导出滤波器系数更新公式:
(15)
中收敛子取值合适太收敛速度慢太会导致系统会稳定
2.适应系统辨识基原理
基LMS算法适应系统辨识原理见图中辨识系统白噪声信号发生器发出辨识噪声方面注入辨识系统方面作适应滤波器参考输入信号算法收敛适应滤波器系数取辨识系统击响应
3 实验硬件结构
辨识系统结构见图中白噪声信号VC5509A部产生AIC23B路DAC输出注入图中示某未知电路模块该未知电路模块输出信号作AIC23B路输入信号ADC时分作适应滤波器参考输入信号期输入信号适应滤波器涉计算VC5509A完成
该系统辨识结果信号开始间包括子系统未知电路模块外包括AIC23BDACADC部分
4.实验源程序
(1)lab6c程序首先完成系统初始化变量初始化然通查询定时器中断服务程序实现采样时间控制采样时间调次适应系统辨识模块完成次适应滤波滤波次数达规定次数时停止辨识进入循环等状态
(2)processc适应系统辨识模块次适应系统辨识程中完成操作:1)产生白噪声数方面作滤波器参考输入x(n)方面JP5引脚LOUT0输出辨识系统输入端口2)JP5引脚LIN0读入辨识系统输出端口信号作滤波器期信号d(n)3)滤波器采前系数w(n)参考输入信号进行FIR滤波控制输出信号y(n)4)期信号控制输出信号相减误差信号e(n)误差信号JP5引脚LOUT1输出便采虚拟信号分析仪记录误差信号观察适应滤波程5)采LMS算法滤波器进行系数更新
(3)lab5cmd命令文件
(4)模块:sdram_initcaic23ci2ccutilcvectorsasm
(5)关头文件:5509hc55xxdefshutilh
四.实验步骤
1. 预:
(1)认真阅读实验指导书第三部分熟悉适应滤波适应辨识基原理方法
(2)认真阅读实验指导书第七部分理解程序processc模块涉相关模块作
2 实验准备:
双击桌面图标启动Code Composer Studio选择工作目录
3.建立工程lab6
4 工程lab6中加载文件:lab6clab5cmdsdram_initcaic23ci2ccutilcvectorsasm5509hc55xxdefshutilh
5.建立配置文件lab6ccxml(选择VC5509A Emulater模式仿真器选择XDS100V2)
6 导线连接JP5引脚LOUT0LIN0虚拟仪器信号输入端接JP5引脚LOUT1
7.编译链接工程载程序开虚拟仪器记录窗口开始记录波形
8 运行程序数秒钟停止执行程序停止虚拟仪器记录1)采CCS观察波形开图形观察窗口观察滤波器系数波形观察相关信号2)观察虚拟仪器记录误差信号波形
9 修改相关参数(滤波器长度收敛步长辨识次数等)重复述第78步操作直误差信号期输入信号(控制输出信号)相足够时取滤波器系数作辨识结果
10.退出CCS
五.实验结果
六.思考题
(1)实验辨识系统包括环节?
(2)选做:导线VC5509A板JP5LOUT0引脚连接实验箱功率放器扬声器麦克连接实验箱信号调理板Mic信号输入端信号调理板信号输出端连接VC5509A板JP5LIN0引脚重复实验时辨识系统包括环节?时系统击响应原实验相什特点?
七.附录
(1)程序
* 实验vc5509A板右角JP5接线排座
* 左边起JP5引脚分AIC23B0LLINE(标记LIN0)RLINE(标记RIN0)NC
* LOUT(标记LOUT0)ROUT (标记ROUT0)
*
#include 5509h
#include utilh
#include mathh
*********************************************************************************
int timer_flag 户定义定时器中断标志定时器isr中改变程序中查询复位
int N_iden 辨识次数
int n_iden 辨识进程计数器该值等N_iden时结束辨识程
float WhiteNoise 白噪声信号前值
float ErrorSignal 误差噪声信号前值
float DesiredSignal期信号前值
float w[L]x[L] 滤波器系数量前参考输入信号量L滤波器阶数utilh中定义修改
float d[L]e[L]y[L] 期误差控制输出等信号量调试程序时观察信号波形
void INTR_init() 中断初始化模块
void TIMER_init() 定时器初始化子程序
void wait(unsigned int cycles) 时延子程序
int i
float Mu005 适应滤波器收敛子信号处理模块processc中
float alpha Mu*e(n)信号处理模块processc中
void main()
{
*系统部件初始化 *
PLL_Init(144) 调锁相环初始化子程序CPU时钟频率144MHz该模块代码定义utilc中
wait(29) 调时延子程序CPU时延29周期 该模块代码定义main函数
SDRAM_init() 调SDRAM初始化子程序 该模块代码定义sdram_initc中
AIC23_Init() 调AIC23初始化子程序 该模块代码定义aic23c中
INTR_init() 调中断初始化子程序该模块代码定义main函数
TIMER_init() 调定时器初始化子程序该模块代码定义main函数
*变量初始化 *
for(i0i
w[i]00 初始化滤波器系数量
x[i]00 初始化参考输入信号量
d[i]00
e[i]00
y[i]00
}
ErrorSignal0
DesiredSignal0
timer_flag0
n_iden0
N_iden16000
*辨识程循环 *
while(n_iden
if(timer_flag1) 程序中清timer_flag0定时器isr中置timer_flag1
{ 果timer_flag0继续查询1调LMS_Filter进行次辨识程
timer_flag0
LMS_Filter()
n_iden++
}
}
*辨识程结束进入等 *
while (1){}
}
*****************************
void interrupt Timer()
{
timer_flag1
}
******************************
void wait(unsigned int cycles)
{
int i
for ( i 0 i < cycles i++ ){}
}
void INTR_init( void )
{
PC55XX_MMR pMMR (PC55XX_MMR)C55XX_MMR_ADDR
Write(pMMR>ivpd0xd0)
Write(pMMR>ivph0xd0)
Write(pMMR>ier00x10)
Write(pMMR>dbier00x10)
Write(pMMR>ifr00xffff)
asm( BCLR INTM)
}
void TIMER_init(void)
{
PC55XX_TIMER pTIMER (PC55XX_TIMER)C55XX_TIM0_ADDR4K
Write(pTIMER>tim0) Timer register
Write(pTIMER>prd0x8CA0) Timer period register
Write(pTIMER>tcr0x00E0) Timer control register
Write(pTIMER>prsc0) Timer prescaler register
}}
(2)适应辨识子程序
#include 5509h
#include utilh
#include extaddrh
#include mathh
extern float ErrorSignal
extern float DesiredSignal
extern float WhiteNoise
extern float PuMualpha
extern float w[L]x[L]
extern float d[L]e[L]y[L]
void LMS_Filter()
{
int i
int outputTempinputTemp
PC55XX_MCSP pMCBSP0 (PC55XX_MCSP)C55XX_MSP0_ADDR
while (ReadMask(pMCBSP0 > spcr2 SPCR2_XRDY)) 等McBSP0准备
* 获期信号*
inputTemp Read(pMCBSP0>ddr1) 读取McBSP0数该数AIC23采集辨识系统输出信号
inputTemp Read(pMCBSP0>ddr2)
DesiredSignal(float)inputTemp
* 生成辨识白噪声信号输出*
WhiteNoiserand()0x4000 产生辨识白噪声信号浮点数
outputTemp(int)WhiteNoise 转化整数
Write(pMCBSP0>dxr1outputTemp) 数送McBSP0AIC23转换成模拟信号输出作辨识系统输入信号
Write(pMCBSP0>dxr2outputTemp)
* 更新参考输入信号量*
for(iL1i>0i)
{
x[i]x[i1]
}
x[0]WhiteNoise32768
* 更新期输入信号量*
for(iL1i>0i)
{
d[i]d[i1]
}
d[0]DesiredSignal32768
* 计算滤波器输出*
y[0]00
for(i0i
y[0]y[0]+w[i]*x[i]
}
* 更新误差信号量*
for(iL1i>0i)
{
e[i]e[i1]
}
* 计算误差信号*
e[0]d[0]y[0]
* 更新滤波器系数*
alphaMu*e[0]
for(i0i
w[i]w[i]+alpha*x[i]
}
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档