第1章 OMAP-L138开发系统 1
1.1 引 言 1
1.2 硬件和软件工具 3
1.2.1 Zoom OMAP-L138 eXperimenter实验板 5
1.2.2 C6748处理器 5
1.2.3 CCS IDE 6
1.2.4 安装CCSv4软件和相关的支持文件 6
1.3 使用书中提供的代码对eXperimenter实验板进行初步测试 7
1.4 测试实验板的例程 11
例1.1 产生由48个点组成的正弦信号,并在数据缓存区存储输出数据用于CCS软件和MATLAB绘图(L138 sine48 buf intr) 12
例1.2 两个数组的点积运算(L138 dotp4) 23
1.5 支持文件 28
1.5.1 初始化配置文件(L138 aic3106 init.c) 28
1.5.2 头文件(L138 aic3106 init.h) 28
1.5.3 向量文件(vectors intr.asm和vector po11.asm) 28
1.5.4 链接命令文件(linker dsp.cmd) 32
练 习 33
参考文献 33
第2章 使用OMAP-L138实验板的模拟输入和模拟输出 35
2.1 引 言 35
2.2 用于模拟输入和输出的板载立体声编解码器TLV320AIC-3106(AIC3106) 36
2.3 C语言的编程实例 37
2.3.1 基于轮询、中断和直接存储器访问的实时I/O方法 38
例2.1 基于轮询的基本输入/输出(L138_loop_po11) 38
例2.2 基于中断的基本输入/输出(L138_loop_intr) 43
例2.3 基于DMA的基本输入/输出(L138_loop_edma) 46
例2.4 修改程序L138_loop_intr.c产生延时效果(L138_delay_intr) 50
例2.5 修改程序L138_loop_intr.c产生回声(L138_echo_intr) 52
例2.6 修改程序L138_loop_intr.c产生翻边效应(L138_flanger_intr) 53
例2.7 输入数据保存在缓存器中的循环程序(L138_loop_buf_intr) 57
2.3.2 实时的正弦波发生器 61
例2.8 基于查表方法的正弦波发生器(L138_sine48_intr) 62
例2.9 基于调用函数sin()的正弦波发生器(L138_sine_intr) 63
例2.1 0 用DIP开关控制正弦信号发生器输出的幅度和频率(L138_sine_DIP_intr) 66
例2.1 1 用含有8000个采样点数据的查找表产生正弦扫频效果(L138_sweep_po11) 68
例2.1 2 使用查表方法产生双音多频(DTMF)音调(L138_sineDTMF_intr) 70
例2.1 3 信号重构、混叠及编解码器AIC3106的属性(L138_sine_intr.c) 72
例2.1 4 基于查表的方波发生器(L138_squarewave_intr) 73
例2.1 5 AIC3106 DAC重构滤波器的脉冲响应(L138_dimpulse_intr) 74
例2.1 6 输入为伪随机二进制序列的DAC重构滤波器的频率响应(L138_prbs_intr) 74
例2.1 7 输入为伪随机噪声的DAC重构滤波器的频率响应(L138_prandom_intr) 83
例2.1 8 编解码器AIC3106中抗混叠滤波器的阶跃响应(L138_loop_buf_intr) 83
例2.1 9 编解码器AIC3106抗混叠滤波器的演示(L138_sine48_loop_intr) 85
例2.2 0 混叠的演示(L138_aliasing_intr) 87
例2.2 1 使用自适应滤波器识别编解码器AIC3106的带宽(L138_sysid_intr) 87
例2.2 2 用两块eXperimenter实验板辨识AIC3106编解码器的带宽 91
例2.2 3 斜坡发生器(L138_ramp_intr) 94
例2.2 4 调幅(L138_am_poll) 95
例2.2 5 使用外部存储器记录音乐(L138_record_poll) 97
参考文献 99
第3章 有限脉冲响应滤波器 101
3.1 数字滤波器概述 101
3.1.1 FIR滤波器 101
3.1.2 z变换介绍 103
例3.1 指数函数x(n)=enk的z变换 103
例3.2 阶跃函数x(n)=1的z变换 103
例3.3 正弦函数x(n)=sin(nωT)的z变换 104
3.1.3 z变换的基本性质 104
3.1.4 z传递函数 106
3.1.5 从s平面到z平面的映射 106
3.1.6 差分方程 107
3.1.7 频率响应和z变换 108
3.1.8 理想滤波器响应的分类:LP、HP、BP和BS 108
3.1.9 滤波器设计的窗函数方法 108
3.1.1 0 窗函数 109
例3.4 用窗函数的方法设计理想低通FIR滤波器 110
3.1.1 1 用频移的方法设计带通和高通滤波器 114
3.2 C语言和汇编语言的编程实例 117
例3.5 滑动平均滤波器(L138_average_intr) 117
例3.6 输入为内部产生的伪随机噪声的滑动平均滤波器(L138_average_prn_intr) 119
例3.7 用两块eXperimenter实验板识别滑动平均滤波器的频率响应(L138_sysid_intr) 121
例3.8 用一块eXperimenter实验板识别滑动平均滤波器的频率响应(L138_sysid_average_intr) 123
例3.9 具有滑动平均、低通、带阻和带通特性的FIR滤波器的滤波系数文件(L138_fir_intr) 127
例3.1 0 输入为伪随机噪声序列的FIR滤波器(L138_firprn_intr) 131
例3.1 1 输入为内部产生的伪随机噪声并把输出存在存储器上的FIR滤波器(L138_firprn_intr) 134
例3.1 2 3个FIR低通滤波器对声音信号的影响(L138_fir31p_intr) 138
例3.1 3 实现4种不同的滤波器:低通、高通、带通和带阻滤波器(L138_fir4types_intr) 139
例3.1 4 用两个陷波滤波器恢复损坏的语音记录(L138_notch2_intr) 141
例3.1 5 使用滤波和调制实现语音扰频 143
例3.1 6 用基于DMA的I/O实现FIR滤波器(L138_fir_edma) 145
例3.1 7 用DSPLIB库函数实现FIR滤波器(L138_fir_dsplib_edma) 147
例3.1 8 在C语言程序中调用ASM函数实现(L138_FIRcasm_intr.c) 150
例3.1 9 C语言程序调用一个更快的ASM函数实现FIR(FIRcasmfast) 152
参考文献 153
第4章 无限脉冲响应滤波器 155
4.1 引 言 155
4.2 IIR滤波器的结构 156
4.2.1 直接Ⅰ型 156
4.2.2 直接Ⅱ型 157
4.2.3 转置直接Ⅱ型 158
4.2.4 级联型 159
4.2.5 并联型 160
4.3 脉冲响应不变法 160
4.4 双线性变换法 161
4.5 C语言和汇编语言的编程实例 163
4.5.1 简单IIR低通滤波器的设计 163
例4.1 实现一个用级联直接Ⅱ型二阶滤波器组成的IIR滤波器(L138_iirsos_intr) 165
例4.2 实现一个用级联转置直接Ⅱ型2阶滤波器组成的IIR滤波器(L138_iirsostr_intr) 168
例4.3 用伪随机噪声作为输入来分析IIR滤波器的频率响应(L138_iirsosprn_intr) 169
例4.4 用一个脉冲序列作为输入来分析IIR滤波器的频率响应(L138_iirsosdelta_intr) 169
例4.5 用MATLAB工具fdatool设计4阶椭圆低通IIR滤波器 178
例4.6 用fdatool设计带通滤波器 182
例4.7 用DSPLIB库函数DSPF sp biquad()实现IIR滤波器(L138_iirsos_DSPLIB_edma) 184
例4.8 用定点运算实现IIR滤波器(L138_iir_intr) 188
例4.9 用编解码器AIC3106的数字滤波器实现4阶IIR滤波器(L138_sysid_biquad_intr) 189
例4.1 0 用差分方程产生一个正弦波(L138_sinegenDE_intr) 197
例4.1 1 用差分方程实现一个双音多频(DTFM)信号(L138_sinegenDTMF_intr) 199
例4.1 2 用差分方程实现正弦扫频信号(L138_sweepDE_intr) 202
例4.1 3 在C语言程序中调用汇编函数实现的基于差分方程的正弦波发生器(L138_sinegencasm_intr) 203
第5章 快速傅里叶变换 207
5.1 引 言 207
5.2 基2的FFT算法的推导 208
5.3 按频率抽取的基2的FFT算法 209
5.4 按时间抽取的基2的FFT算法 211
5.5 按频率抽取的基4的FFT算法 214
5.6 快速傅里叶逆变换 215
5.7 C语言的编程实例 216
例5.1 一个实数序列的离散傅里叶变换,用CCS软件的图形显示窗口MATLAB观察输出(L138_dft) 216
例5.2 估计DFT和FFT函数的执行时间(L138_dft、L138_dftw、L138_fft、L138_fft_dsplibr2) 225
5.7.1 基于帧的数据处理 229
例5.3 基于EDMA3的内存移动(L138_mem_edma) 235
例5.4 用DFT函数和预先计算的旋转因子进行实时DFT信号处理(L138_dft_128_edma) 242
例5.5 用C语言编写的FFT函数实现实时输入信号的FFT(L138_fft128_edma.c) 249
例5.6 用TI可被C程序调用的优化基2的FFT函数实现实时输入信号的FFT(L138_fft128_dsplibr2_edma) 253
例5.7 用TI可被C程序调用的优化DSPLIB FFT函数实现一个正弦输入信号的FFT(L138_fft_sinetable_edma) 253
5.7.2 快速卷积运算 256
例5.8 快速卷积的演示(L138_fastconv_demo) 257
例5.9 实时快速卷积(L138_fastconv_edma) 265
例5.1 0 图形均衡器(L138_graphicEQ_DSPLIB_edma) 268
参考文献 275
第6章 自适应滤波器 277
6.1 引 言 277
6.2 自适应滤波器的配置结构 278
6.2.1 自适应预测 278
6.2.2 系统辨识或直接建模 278
6.2.3 噪声消除 279
6.2.4 均 衡 280
6.3 性能函数 280
6.4 寻找最小值 282
6.5 最小均方算法 283
6.6 C语言的编程实例 284
例6.1 用C语言编写的自适应滤波器(L138_adaptc) 284
例6.2 用于正弦噪声消除的自适应滤波器(L138_adaptnoise_intr) 287
例6.3 用外部输入测试用于噪声消除的自适应FIR滤波器(L138_adaptnoise_2IN_iir_intr) 289
例6.4 用于系统辨识的自适应FIR滤波器,用已知FIR滤波器当作未知系统进行测试(L138_adaptIDFIR_intr) 292
例6.5 用于系统辨识的自适应FIR滤波器,未知系统为一个FIR滤波器,自适应FIR滤波器被初始化为一个FIR带通滤波器(L138_adaptIDFIR_init_intr) 296
例6.6 用于系统辨识的自适应FIR滤波器,未知系统为一个IIR滤波器(L138_iirsosadapt_intr) 298
例6.7 用于系统辨识的自适应FIR滤波器,未知系统为eXperimenter板外系统(L138_sysid_intr) 299
例6.8 用于系统辨识的自适应FIR滤波器,未知系统为eXperimenter板外系统,自适应滤波器为DSPLIB函数DSPF_sP_fir_gen()(L138_sysid_DSPLIB_edma) 302
第7章 DSP/BIOS和平台支持包 305
7.1 引 言 305
7.1.1 DSP/BIOS线程 305
7.1.2 DSP/BIOS配置工具 306
7.1.3 DSP/BIOS的启动顺序 307
7.1.4 硬件中断 307
例7.1 用DSP/BIOS硬件中断实现的正弦波发生器(L138_bios_sine48_intr_HWI) 307
7.1.5 软件中断 316
例7.2 用DSP/BIOS硬件中断HWI和软件中断SWI实现的FIR滤波器(L138_bios_firprn_intr_SWI) 317
7.1.6 任务和空闲函数 319
例7.3 基于DMA的I/O的系统辨识,用信号量机制给出传输完成信号(L138_bios_sysid_edma_TSK.c) 319
例7.4 基于DMA的I/O的系统辨识,用信号量机制给出传输完成信号(L138_bios_sysid_edma_IDL) 324
7.1.7 周期性函数 325
例7.5 用DSP/BIOS的PRD控制LED以不同的速率闪烁(L138_bios_LED_PRD) 325
7.1.8 DSP/BIOS实时分析 327
7.2 DSP/BIOS平台支持包 328
例7.6 基本的输入和输出(L138_psp_loop.c) 329
例7.7 生成随机噪声(L138_psp_prbs.c) 330
例7.8 用随机噪声作为输入的FIR滤波器(L138_psp_firprn_DSPLIB) 330
参考文献 332