内容简介
这是一本针对数字信号处理的专业指导书籍。本书由该领域的多位专家学者撰写,涵盖了当今嵌入式实时系统的大部分DSP优化,以全方位视角解析相关技术。在进行理论讲解之后,还有精选案例分析,帮助读者形象地理解相关知识。从常见技术到前沿科技,从理论深度的探讨到实践经验的传播,本书意在呈现一本丰富而实用的DSP专业参考书籍。
目录
目 录
译者序
前言
作者简介
第1章 数字信号处理简介 1
1.1 何谓数字信号处理 1
1.2?DSP的优势 2
1.3 DSP系统 2
1.3.1 模数转换 3
1.3.2?奈奎斯特准则 4
1.3.3 数模转换 6
1.4 DSP的应用 6
1.5 低功耗DSP应用 8
1.6 总结 9
第2章 实时系统与嵌入式系统概述 11
2.1 实时系统 11
2.1.1 软实时和硬实时系统 11
2.1.2 实时系统和分时系统的区别 11
2.1.3 DSP系统是硬实时系统 12
2.1.4 实时事件特征 13
2.2 高效运行和运行环境 14
2.3 实时系统设计的挑战 14
2.3.1 响应时间 15
2.3.2 从故障中恢复 15
2.4 分布式和多处理器构架 16
2.4.1 系统初始化 16
2.4.2 处理器接口 16
2.4.3 负载分配 16
2.4.4 集中的资源分配和管理 16
2.5 嵌入式系统 17
2.6 总结 18
第3章 嵌入式DSP系统开发生命周期概述 20
3.1 嵌入式系统 20
3.2 嵌入式DSP系统的生命周期 20
3.2.1 步骤1:研究系统的整体需求 20
3.2.2 步骤2:选择系统所需的硬件组件 21
3.2.3 硬件门电路 22
3.2.4 软件可编程 22
3.2.5 通用处理器 22
3.2.6 微控制器 23
3.3 FPGA解决方案 23
3.4 一个通用的信号处理解决方案 27
3.5 DSP加速决策 28
3.6 DSP处理的模型 32
3.6.1 输入/输出选择 33
3.6.2 计算DSP性能 34
3.6.3 DSP软件 36
3.7 代码的调整和优化 37
3.8 典型的DSP开发流程 38
3.9 总结 43
第4章 可编程DSP体系结构 44
4.1 可编程DSP体系结构的共性 44
4.2 内存体系结构 48
4.2.1 内存访问宽度 49
4.2.2 对齐问题 49
4.3 数据操作 49
第5章 FPGA在无线通信中的应用 51
5.1 概述 51
5.1.1 空间复用的MIMO系统 52
5.1.2 Flex-Sphere 检测器 53
5.1.3 改良实数分解排序 55
5.1.4 软件无线电手机可配置检测器的FPGA设计 56
5.1.5 改良实值分解 58
5.1.6 MT=3的Xilinx FPGA实现结果 58
5.1.7 MT=4的Xilinx FPGA实现结果 59
5.1.8 仿真结果 59
5.2 针对WiMAX的波束成形 61
5.2.1 在宽带系统中的波束成形 61
5.2.2 波束成形系统的计算要求和性能 63
5.2.3 使用WARPLab的波束成形实验 65
5.2.4 实验设置及结果 67
5.3 总结 69
参考文献 69
第6章 DSP软硬件协同 72
6.1 概述 72
6.2 嵌入式设计中的FPGA 72
6.3 ASIC与FPGA 74
6.4 软件可编程数字信号处理 75
6.5 通用型嵌入式内核 76
6.6 总结 76
6.6.1 架构 76
6.6.2 以应用为导向的设计 77
参考文献 77
第7章 DSP算法概述 78
7.1 DSP应用 78
7.2 信号与系统 78
7.2.1 DSP系统 79
7.2.2 混叠 79
7.3 基本的DSP系统 80
7.4 频率分析 81
7.4.1 卷积 81
7.4.2 相关性 82
7.4.3 FIR滤波器设计 82
7.4.4 加窗 83
7.5 算法实现:DSP架构 85
7.5.1 数字格式 86
7.5.2 溢出和饱和 86
7.6 FIR滤波器的实现 86
7.6.1 利用片上RAM 88
7.6.2 特别的乘积累加指令 88
7.6.3 块滤波 88
7.6.4 分离的程序和数据总线 88
7.6.5 零开销循环 89
7.6.6 循环缓冲器 89
7.7 系统问题 90
7.8 总结 90
第8章 复杂DSP应用的高层次设计工具 91
8.1 高层次综合设计方法 91
8.2 高层次设计工具 92
8.3 Catapult C 92
8.3.1 PICO 94
8.3.2 System Generator 95
8.4 案例分析 96
8.5 使用PICO的LDPC译码器设计案例 96
8.6 使用Catapult C 的矩阵乘法器设计案例 99
8.7 使用System Generator的QR分解设计实例 101
8.8 总结 104
参考文献 104
第9章 DSP软件优化:DSP系统的基准测试和性能分析 107
9.1 概述 107
9.2 编写测试框架 107
9.3 隔离DSP内核函数 110
9.3.1 提防激进的编译工具 110
9.3.2 灵活放置代码 111
9.4 真实系统行为的建模 111
9.4.1 缓存带来的影响 111
9.4.2 内存延迟带来的影响 112
9.5 系统方面的影响 112
9.6 多核/多设备环境下的执行情况 112
9.7 分析测试方法带来的额外开销 113
9.7.1 排除无关事项 114
9.7.2 中断 114
9.7.3 基准测试中运行的库函数 114
9.7.4 使用仿真工具测试 114
9.7.5 基于硬件模块的测试 115
9.7.6 性能分析结果 116
9.7.7 如何解读获取的测试结果 116
第10章 DSP软件优化:高级语言和编程模型 117
10.1 汇编语言 117
10.2 带内联函数和编译指示的C编程语言 118
10.2.1 C语言编写的FIR滤波器 119
10.2.2 内联函数 119
10.2.3 编译指令 121
10.3 嵌入式C语言 122
10.4 C++语言在嵌入式系统中的应用 122
10.5 自动矢量化编译技术 123
10.5.1 MATLAB、Labview和类FFT-W的生成器套件 124
10.5.2 MATLAB和本地编译的代码 124
10.5.3 本地代码到MATLAB和硅片上的仿真 125
第11章 优化DSP软件:代码优化 126
11.1 优化过程 126
11.2 使用开发工具 126
11.2.1 编译器优化 126
11.2.2 编译器基本配置 127
11.2.3 启用优化 127
11.2.4 其他的优化配置 128
11.2.5 使用分析器 128
11.2.6 分析生成的汇编代码 129
11.3 背景知识:理解DSP架构 129
11.4 基本C语言优化技巧 130
11.5 用内联函数发挥DSP特性 131
11.6 指针和内存访问 135
11.6.1 确保对齐方式 135
11.6.2 restrict和指针别名 136
11.7 循环 137
11.8 硬件循环 138
11.9 其他的提示和技巧 139
11.9.1 内存争用 139
11.9.2 使用未对齐访问 139
11.9.3 访问缓存 139
11.9.4 嵌入小函数 139
11.9.5 使用供应商DSP库 139
11.10 一般的循环转换 139
11.11 循环展开 140
11.11.1 背景知识 140
11.11.2 实现 140
11.12 多重采样 140
11.12.1 背景知识 140
11.12.2 实现过程 141
11.12.3 实现 141
11.13 部分求和 141
11.13.1 背景知识 141
11.13.2 实现过程 142
11.13.3 实现 142
11.14 软件流水化 143
11.14.1 背景知识 143
11.14.2 实现 143
11.15 优化技巧的应用示例:互相关 144
11.15.1 创建 144
11.15.2 原始实现方案 144
11.15.3 步骤1:用内联函数执行小数计算并指定循环计数 145
11.15.4 步骤2:指定数据对齐方式并修改成多重采样 146
11.15.5 步骤3:汇编语言优化 148
第12章 DSP优化:内存优化 151
12.1 概述 151
12.2 代码量优化 151
12.2.1 编译器标记和标记挖掘 151
12.2.2 针对ISA的代码量与性能权衡 152
12.2.3 针对代码量优化调整ABI 153
12.2.4 告诫购买者:编译器优化与代码量互不相关 160
12.3 内存布局优化 161
12.3.1 内存优化概述 161
12.3.2 集中优化工作 162
12.3.3 向量化和动态代码计算比例 162
12.3.4 数据结构、数据结构数组及其混合 164
12.3.5 针对内存性能的循环优化 166
12.3.6 数据对齐方式的连锁效应 166
12.3.7 选择合适的数据类型会获得丰厚回报 166
第13章 针对功耗的软件优化 168
13.1 概述 168
13.2 了解功耗 168
13.3 测量功耗 171
13.3.1 使用电表测量功率 171
13.3.2 使用霍尔传感器型IC测量功率 171
13.3.3 稳压器模块电源IC 172
13.4 分析应用程序的功耗 173
13.5 降低功耗 174
13.6 时钟和电压控制 177
13.7 优化数据流 182
13.7.1 优化内存访问以降低功耗 182
13.7.2 DDR概述 183
13.7.3 通过优化DDR数据流来降低功率 185
13.8 外设/通信的使用 193
13.8.1 数据的DMA和CPU的对比 195
13.8.2 算法优化 197
13.8.3 递归消除 200
13.9 总结 202
参考文献 203
第14章 DSP操作系统 204
14.1 概述 204
14.2 DSP操作系统基础 204
14.3 实时性 205
14.4 多核 208
14.5 内存管理 213
14.5.1 内存分配 213
14.5.2 虚拟内存和内存保护 213
14.6 网络 214
14.6.1 处理器间通信 214
14.6.2 网络互联 216
14.7 调度 217
14.7.1 参考模型 217
14.7.2 抢占式调度与非抢占式调度 218
14.7.3 阻塞作业与非阻塞作业 218
14.7.4 协作式调度 218
14.7.5 调度类型 219
14.7.6 调度时的多核考虑 219
14.7.7 离线调度及其可能的实现 219
14.7.8 在线调度(基于优先级的调度) 224
14.7.9 静态优先级调度 224
14.7.10 动态优先级调度 226
14.7.11 离线调度与在线调度的比较 227
14.7.12 优先级反转 227
14.8 DSP OS辅助工具 229
14.9 总结 231
参考文献 232
第15章 DSP软件开发管理 234
15.1 概述 234
15.2 开发DSP应用面对的挑战 234
15.3 DSP开发流程 235
15.3.1 概念和规范定义阶段 235
15.3.2 DSP算法标准和指导原则 236
15.3.3 高级系统设计和工程性能 237
15.3.4 软件开发 238
15.3.5 系统创建、集成和测试 238
15.3.6 工厂和现场测试 238
15.4 DSP系统的设计挑战 238
15.5 DSP高级设计工具 239
15.6 DSP工具箱 239
15.7 DSP的主机开发工具 240
15.8 通用数据流实例 242
15.9 代码调整及优化 246
15.9.1 典型DSP开发流程 246
15.9.2 新手入门 248
15.10 总结 248
第16章 DSP多核软件开发 251
16.1 概述 251
16.2 多核编程模型 252
16.2.1 多个单核系统 252
16.2.2 真正的多核系统 254
16.3 移植向导 255
16.3.1 设计上的考虑 255
16.3.2 MJPEG案例分析 256
16.3.3 实现细节 259
16.4 总结 262
第17章 DSP应用程序的开发与调试 263
17.1 集成开发环境概述 263
17.2 新建项目 263
17.3 多核DSP环境下进行编译与链接 267
17.3.1 DSP SDOS操作系统 267
17.3.2 应用程序内存映射 268
17.3.3 应用程序的编译器配置 270
17.3.4 应用程序的链接器配置 274
17.4 在多核DSP上执行和调试应用程序 277
17.4.1 创建新连接 277
17.4.2 建立运行配置 279
17.4.3 调试器使用 280
17.5 使用软件和硬件专用资源跟踪与剖析多核应用程序 285
17.5.1 软件分析设置 286
17.5.2 跟踪 287
17.5.3 重要
前言/序言
前 言DSP嵌入式系统软件开发遵循标准的嵌入式系统软硬件协同设计模型,如图1所示。
图1 DSP软件开发遵循嵌入式软硬件协同设计模型这个开发过程可分为6个阶段;第1阶段:产品规格定义第2阶段:算法建模第3阶段:软硬件划分第4阶段:迭代与选择第5阶段:实时软件设计第6阶段:软硬件集成本书将涵盖以上每个DSP软件开发的重要阶段。
第1阶段:产品规格定义第1阶段是嵌入式和实时系统的概述,向读者介绍这一类型软件开发的独特方面。
我们需要先理解几个关于嵌入式系统的挑战,才可以基于数字信号处理展开讨论。这些挑战涉及非常复杂的环境,以及系统之间的交互,嵌入式组件内比重渐增加的软件,软件代码复用及快速再造工程的需求,快速创新和不断变化的市场需求推动下的产品发布周期,众多实时的要求和需求管理的需要,及对于质量和过程成熟度日益的关注。
第1章和第2章会提供DSP以及嵌入式系统的概述,简要说明一般嵌入式系统和DSP的主要区别。
第2阶段:算法建模第2阶段的重点在于对信号处理基本算法本质的理解。数字信号处理是使用数字或符号组成的序列来代表离散时间信号,并处理这些信号。DSP涉及音频和语音信号处理、声呐和雷达信号处理、统计信号处理、数字图像处理、通信、系统控制、生物医学信号处理等诸多领域。DSP算法用于处理这些数字信号。在信号处理中有一组基本算法,例如傅里叶变换、数字滤波器、卷积和相关性。第7章将会介绍和解释一些最重要和最基本的DSP算法,作为本书后面许多主题的基础。
第3阶段:软硬件划分系统的硬件和软件组件划分在任何嵌入式开发项目中都是重要的一步。
大部分DSP是可编程的。数字信号处理的可编程架构有多种形式,每个都对成本、功耗、性能和灵活性有所权衡。在谱系的一端,数字信号处理系统设计人员通过使用专有的汇编语言可以实现应用的高效率和高性能。在谱系的另一端,系统开发人员可以使用普遍的ANSI C或C++或其他领域特定的语言,并在商用台式电脑上执行所实现的算法,实现数字信号处理软件栈。第4章详述在一连续体不同的点上实现的权衡:一端的最大数字信号处理性能以及另一端由软件实现的灵活性和便携性。每个解决方案的权衡都一步步详细描述,以带领数字信号处理系统开发者找到满足他们特定用例需求的解决方案为目标。
DSP可采用现场可编程门阵列(Field Programmable Gate Array,FPGA)实现。作为一个例子,第5章讨论关于空间复用和不同增益架构上的挑战,并介绍FPGA的一些架构,报告使用FPGA实现这些系统的实验结果。第5章将介绍一个灵活的架构和空间复用MIMO检测器的实现、Flex-sphere及其FPGA实现。我们还介绍WiMAX系统中的波束形成硬件架构,作为给下一代无线系统增加多样性和提高性能的方法。
用于数字信号处理系统的硬件平台有很多种不同的设计,每个都有其固有可编程性、功耗和性能的权衡。适合一个系统设计师的可能不适合另一个。第6章详细描述多种数字信号处理平台以及相关系统的可配置性和可编程性设计。在谱系的一端,详细了解特定应用集成电路(Application Specific Integrated Circuit,ASIC)这种高性能、低可配置的解决方案。在谱系的另一端,作为高度可配置的解决方案介绍具有SIMD扩展的通用型嵌入式微处理器,这种解决方案支持强大的软件可编程性。不同的设计重点逐个介绍,如基于可重新配置的现场可编程门阵列解决方案,以及有不同程度软件可编程性的高性能特定应用集成处理器(Application Specific Integrated Processor,ASIP)。第6章将介绍每个系统的设计权衡,作为一种指导系统开发人员的方法,帮助他们选择适合当前和未来系统部署的数字信号处理硬件平台和组件。
DSP嵌入式实时系统权威指南 电子书 下载 mobi epub pdf txt