第Ⅰ部分:理论基础 3
第1章 本书介绍与组织 3
1.1 为什么您需要这本书? 3
1.1.1 其他DSP书籍 3
1.1.2 演示与DSP硬件 4
1.1.3 本书的哲学 4
1.2 实时DSP 5
1.3 如何使用本书 5
1.3.1 支持的电路板 6
1.3.2 主机到DSP电路板通信 9
1.3.3 过渡到实时 11
1.3.4 章节涵盖内容 12
1.3.5 硬件与软件安装 13
1.3.6 阅读程序清单 14
1.4 准备开始 14
1.5 问题 15
第2章 采样和重构 16
2.1 理论 16
2.1.1 选择采样频率 16
2.1.2 输入/输出问题:样本或者帧? 16
2.1.3 Talk-Through概念 17
2.2 winDSK演示 17
2.2.1 启动winDSK 17
2.2.2 Talk-Thru应用 18
2.3 使用Windows实现Talk-Through 20
2.4 使用MATLAB和Windows实现Talk-Through 23
2.4.1 只使用MATLAB实现Talk-Through 26
2.4.2 使用MATLAB和DSK实现Talk-Through 29
2.5 使用C语言实现DSK 30
2.6 后继挑战 31
2.7 问题 32
第3章 FIR数字滤波器 33
3.1 理论 33
3.1.1 传统标记法 33
3.1.2 FIR滤波器与IIR滤波器的比较 34
3.1.3 计算滤波器输出 34
3.2 winDSK演示 36
3.2.1 图形均衡器应用 36
3.2.2 陷波滤波器应用 37
3.2.3 音频效果应用 39
3.3 MATLAB实现 40
3.3.1 内置方法 40
3.3.2 创建您自己的滤波器算法 44
3.4 使用C语言的DSK实现 46
3.4.1 采用C语言的暴力FIR滤波:第一部分 46
3.4.2 采用C语言的暴力FIR滤波:第二部分 49
3.4.3 环形缓冲FIR滤波 52
3.5 后继挑战 53
3.6 问题 54
第4章 IIR数字滤波器 55
4.1 理论 55
4.2 winDSK演示:陷波滤波器应用 58
4.3 MATLAB实现 60
4.3.1 滤波器设计与分析 60
4.3.2 IIR滤波器标记法 69
4.3.3 框图 70
4.3.4 内置方法 77
4.3.5 创建您自己的滤波器算法 77
4.4 使用C语言的DSK实现 79
4.4.1 暴力FIR滤波 79
4.4.2 更高效的IIR滤波 80
4.5 后继挑战 80
4.6 问题 81
第5章 周期信号的生成 82
5.1 理论 82
5.1.1 DSP中的周期信号 82
5.1.2 信号生成 84
5.2 winDSK演示 90
5.2.1 任意波形 90
5.2.2 双音多频(DTMF) 91
5.3 MATLAB实现 93
5.3.1 直接数字合成器技术 93
5.3.2 表查找技术 94
5.4 使用C语言的DSK实现 95
5.4.1 直接数字合成器技术 95
5.4.2 表查找技术 97
5.4.3 带表创建的表查找技术 98
5.4.4 数字谐振器技术 100
5.5 伪噪声序列 101
5.5.1 理论 102
5.5.2 winDSK演示 107
5.5.3 MATLAB实现 107
5.5.4 使用C语言的DSK实现 113
5.6 后继挑战 119
5.7 问题 119
第6章 基于帧的DSP 120
6.1 理论 120
6.1.1 基于样本的DSP的缺点 120
6.1.2 什么是帧? 121
6.2 winDSK演示 123
6.3 MATLAB实现 124
6.4 使用C语言的DSK实现 125
6.4.1 三重缓冲 125
6.4.2 一个基于帧的DSP例子 126
6.4.3 使用直接存储器存取(DMA) 131
6.5 基于帧处理的总结 140
6.6 后继挑战 141
6.7 问题 141
第7章 使用帧的数字滤波器 142
7.1 理论 142
7.2 winDSK演示 142
7.3 MATLAB实现 142
7.4 使用C语言的DSK实现 142
7.4.1 理解针对帧的FIR过程 143
7.4.2 如何避免“边缘”问题 144
7.4.3 C语言代码解释 144
7.5 后继挑战 146
7.6 问题 147
第8章 快速傅里叶变换 148
8.1 理论 148
8.1.1 定义FFT 148
8.1.2 旋转因子 149
8.1.3 FFT处理 149
8.1.4 位反转寻址 152
8.1.5 使用FFT进行滤波 152
8.1.6 避免循环卷积 153
8.1.7 实时快速卷积 155
8.2 winDSK演示 158
8.3 MATLAB实现 158
8.4 使用C语言实现 158
8.5 后继挑战 162
8.6 问题 162
第9章 频谱分析与窗口化 164
9.1 理论 164
9.1.1 信号的功率谱 164
9.1.2 窗口化需要 166
9.1.3 窗口特征 168
9.2 winDSK演示 171
9.3 MATLAB实现 173
9.4 使用C语言的DSK实现 175
9.5 结论 175
9.6 后继挑战 176
9.7 问题 176
第Ⅱ部分:项目实践 181
第10章 项目1:吉他特效 181
10.1 项目介绍 181
10.2 理论 181
10.2.1 背景 181
10.2.2 效果如何工作 182
10.3 winDSK演示 193
10.4 MATLAB实现 194
10.4.1 FIR梳状滤波器 194
10.4.2 IIR梳状滤波器 195
10.4.3 陷波滤波器 198
10.4.4 镶边器 199
10.4.5 颤音 200
10.5 使用C语言的DSK实现 201
10.5.1 实时的梳状滤波器 201
10.5.2 其他实时特效 204
10.6 后继挑战 204
第11章 项目2:图形均衡器 206
11.1 理论 206
11.2 winDSK演示 207
11.2.1 图形均衡器应用 207
11.2.2 图形均衡器效果 208
11.3 MATLAB实现 209
11.4 使用C语言的DSK实现 211
11.4.1 将增益应用于滤波器频带 211
11.4.2 GEL文件滑块控件 213
11.5 后继挑战 214
第12章 项目3:二阶节 215
12.1 理论 215
12.2 winDSK演示:陷波滤波器应用 219
12.3 MATLAB实现 219
12.4 使用C语言的DSK实现 222
12.4.1 示例SOS代码 222
12.5 思考要点 223
12.6 后继挑战 223
第13章 项目4:峰值音量表 224
13.1 理论 224
13.2 winDSK演示:commDSK 224
13.3 MATLAB实现 225
13.4 使用C语言的DSK实现 226
13.4.1 示例PPM代码 226
13.4.2 DSK的LED控制 228
13.4.3 另一个PPM代码版本 228
13.5 后继挑战 230
第14章 项目5:自适应滤波器 231
14.1 理论 231
14.1.1 自适应滤波器解决的问题 232
14.1.2 LMS自适应滤波器 233
14.2 winDSK8演示 234
14.3 MATLAB实现 234
14.4 使用C语言的DSK实现 237
14.5 后继挑战 239
第15章 项目6:AM发射器 240
15.1 理论 240
15.2 winDSK演示 242
15.3 MATLAB实现 242
15.4 使用C语言的DSK实现 245
15.5 后继挑战 247
第16章 项目7:AM接收器 248
16.1 理论 248
16.1.1 包络检波器 249
16.1.2 基于希尔伯特(Hilbert)的AM接收器 255
16.2 winDSK演示 258
16.3 MATLAB实现 258
16.4 使用C语言的DSK实现 260
16.5 后继挑战 262
第17章 项目8:锁相环 263
17.1 理论 263
17.2 winDSK演示 264
17.3 MATLAB实现 264
17.3.1 PLL仿真 264
17.3.2 对MATLAB实现的一些更新 270
17.4 使用C语言的DSK实现 272
17.4.1 PLL的组件 272
17.4.2 系统测试 275
17.5 后继挑战 277
第18章 项目9:BPSK数字发射器 278
18.1 理论 278
18.1.1 随机数据和符号生成 278
18.1.2 使用对拓矩形位的BPSK 279
18.1.3 使用脉冲调制(IM)升余弦形位的BPSK 280
18.2 winDSK演示 281
18.2.1 commDSK:未滤波的BPSK 282
18.2.2 commDSK:升余弦滤波的BPSK 283
18.3 MATLAB实现 286
18.3.1 矩形BPSK信号发生器 286
18.3.2 脉冲调制的升余弦BPSK信号发生器 288
18.4 使用C语言的DSK实现 291
18.4.1 一个矩形脉冲形BPSK发射器 292
18.4.2 一个升余弦脉冲形BPSK发射器 293
18.4.3 实时代码总结 295
18.5 后继挑战 295
第19章 项目10:BPSK数字接收器 296
19.1 理论 296
19.1.1 匹配滤波器的输出 298
19.1.2 眼图 299
19.1.3 最大似然定时恢复 300
19.2 winDSK演示 302
19.3 MATLAB实现 302
19.4 使用C语言的DSK实现 307
19.4.1 数字接收器的组件 307
19.4.2 系统测试 312
19.5 后继挑战 314
第20章 项目11:MPSK与QAM数字发射器 315
20.1 理论 315
20.1.1 基于I和Q的发射器 315
20.1.2 一些星座图 317
20.2 winDSK演示 320
20.2.1 commDSK:根升余弦滤波的QPSK 320
20.3 MATLAB实现 323
20.3.1 脉冲调制根升余弦QPSK信号发生器 323
20.4 使用C语言的DSK实现 327
20.4.1 一个根升余弦脉冲形QPSK发射器 327
20.4.2 一个更高效的RRC脉冲形QPSK发射器 330
20.4.3 实时代码总结 332
20.5 高阶调制方案 333
20.6 后继挑战 333
第21章 项目12:QPSK数字接收器 334
21.1 理论 334
21.2 winDSK8演示 337
21.3 MATLAB实现 337
21.3.1 通过AGC仿真 337
21.3.2 一个完整的QPSK接收器 341
21.4 使用C语言的DSK实现 346
21.4.1 通过AGC实现 346
21.4.2 一个完整的QPSK接收器 350
21.4.3 系统测试 357
21.5 后继挑战 359
第Ⅲ部分:附录 363
附录A Code Composer Studio:概述 363
A.1 介绍 363
A.2 启动Code Composer Studio 363
A.3 结论 364
附录B DSP/BIOS 366
B.1 介绍 366
B.1.1 DSP/BIOS的主要特性 366
B.1.2 DSP/BIOS线程 366
B.2 DSP/BIOS示例项目 367
附录C 数值表示 368
C.1 字节序 368
C.2 整数表示 369
C.3 整数除法和舍入 370
C.4 浮点表示 371
C.5 定点表示 374
C.6 数值表示总结 375
附录D TMS320C6x架构 377
D.1 计算机体系结构基础 377
D.1.1 指令集架构 378
D.1.2 寄存器架构 378
D.1.3 存储器架构 379
D.1.4 获取-执行模型 380
D.1.5 流水线 380
D.1.6 单发射与多发射 383
D.1.7 调度 383
D.2 TMS320C671x架构 384
D.2.1 存储器系统 385
D.2.2 流水线与调度 386
D.2.3 外围设备 387
D.2.4 主机端口接口 387
D.3 TMS320C674x架构 388
附录E DSK相关工具 389
E.1 介绍 389
E.2 Windows控件应用程序 389
E.2.1 示例Windows控件应用程序 390
E.3 MATLAB导出 390
E.3.1 导出直接Ⅱ型实现 390
E.3.2 导出二阶节实现 391
E.4 MATLAB实时接口 392
附录F 与MATLAB一起使用代码生成器 393
F.1 介绍 393
F.2 一个FIR滤波器例子 393
F.2.1 使用MATLAB Coder之前 393
F.2.2 使用MATLAB Coder 395
F.2.3 转移到CCS项目 401
F.2.4 观察 401
F.3 结论 401
附录G DSP电路板的电池电源 402
G.1 介绍 402
G.2 方法 402
G.3 测试 403
G.3.1 初始测试 403
G.3.2 最终测试 403
G.4 结论 404
附录H 编程难点与陷阱 405
H.1 调试构建与发布构建 405
H.2 易变性(volatile)关键字 405
H.3 函数原型和返回类型 406
H.4 算术问题 407
H.5 控制内存中的变量位置 409
H.6 实时计划失败 409
H.7 变量初始化 410
H.8 整型数据大小 411
附录I DSP电路板比较 413
I.1 介绍 413
I.2 三种电路板 413
I.3 结论 416
附录J 缩写、首字母缩略词和符号 417
参考文献 424