亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial Internet of Things >> 嵌入式

在 LPC55S69 MCU 上计算快速傅立叶变换

本文研究了变换引擎,PowerQuad 的另一部分,它使 LPC55S69 MCU 能够计算快速傅立叶变换 (FFT)。

NXP 的 LPC55S69 微控制器包含许多特性,使其适用于各种应用。 LPC55S69 MCU 及其 PowerQuad 单元包括独特的组件 — Biquad 和转换引擎 — 用于完成各种任务,让主 CPU 内核空闲用于其他事情。

上一篇文章“使用嵌入式微控制器了解数字滤波”探讨了各种广泛使用的时域数据样本滤波和处理方法。为此,它利用了 LPC55S69 的 PowerQuad 单元的 Biquad 引擎。

本文研究了 PowerQuad 的另一部分变换引擎,它使 LPC55S69 MCU 能够计算快速傅立叶变换 (FFT)。

了解离散傅立叶变换

在处理诸如长度和温度之类的日常测量时,存在一组工具来确定被测量的特定物体的大小和温度。对于时域信号,测量工具的选择可能不是那么明显。考虑以下图 1 中给出的信号示例。

图 1。 以恒定间隔采样的输入信号。

如何测量、理解和描述这种信号?可能的选择可以是幅度、频率或使用统计方法计算的多个值。一种开始方法是根据已知的余弦波测量感兴趣的信号,如图 2 所示。

图 2. 余弦规信号旁边的输入信号。两者都有相同数量的样本。

由于余弦波的幅度和频率可以很容易地固定和识别,因此可以将余弦波与输入信号进行比较。如果操作正确,输入信号和余弦波之间的点积的结果值将量化输入信号与仪表的相关程度。为此,将输入和规范信号视为相同长度的离散输入数组是合理的,并且计算点积变得容易。

结果是一个标量,其幅度与输入信号与余弦规范信号的相关程度成正比。点积运算归结为许多乘法和加法运算 — 理解嵌入式微控制器的数字滤波中讨论的相同操作。

这种方法很快就产生了良好的结果。但是,有一种特殊情况在应用此方法时不起作用。如果输入信号是一个余弦波,其频率与仪表相同,但其相移相对于仪表 90 度,则上述方法的输出将为零。通过目视检查,仪表和输入信号之间似乎仍然存在相关性,但我们需要考虑一些细节。

图 3。 与旧的信号相比,新的规范信号相移了 90 度。

这种行为可以比作测量薄纸条的“长度”。使用尺子确定纸条一侧的长度时,纸可能长 10 英寸,宽 1 英寸。两个数字都是正确的,但标尺必须旋转 90 度才能获得两个测量值。从技术上讲,这两个数字都是正确的,我们可以将它们一起使用以获得纸的真实“尺寸”(长度和宽度)。为了克服我们输入信号方面的这个问题,可以使用第二个仪表,如图 4 所示。

图 4。 两种仪表信号均可用于更好地量化输入信号。

两个仪表(以紫色和绿色显示)之间的唯一区别是 90 度相移。在前面的类比中,这相当于旋转尺子。在输入信号和每个仪表之间计算点积以获得最终输出。这产生了两个值 A 和 B 的结果,每个值都包含输入与其中一个仪表的相关程度。通常,它们被视为单个复数:

输出 =B + i * A

下一步是将输入信号与一系列不同频率的仪表进行比较(图 5)。

图 5。 也可以应用多个仪表。与紫色相比,绿色的偏移了 90 度。

如图所示,最终结果包含了几个不同的仪表。与绿色信号(实部)相比,虚部(以紫色显示)相移了 90 度,就像上面显示的双量规示例一样。不同仪表的数量没有限制。

使用这种称为离散傅立叶变换 (DFT) 的技术可以在问题的所有感兴趣频率上生成输出频谱。可以用数学方式表述该技术如下:

等式 1。 DFT 的数学描述。

其中 N 是输入信号中的样本数,k 是(余)正弦参考量规的频率。

快速傅里叶变换 (FFT) 限制

FFT 是一种计算 DFT 的数值有效方法,与上述方法相比,它需要更少的乘法和加法运算。但是,输入有一些限制:

  1. 输入的长度必须是 2 的幂。
  2. 不允许在输出中使用任意输入长度和频率间隔。输出 bin 的间隔为输入信号的采样率除以输入中的样本数。例如,如果输入是以 48 kHz 采样的 256 点信号,则输出阵列对应于间隔为 187 Hz(48.000 除以 256)的频率。
  3. 当输入由实数组成时(例如,从 ADC 获得的样本),输出是对称的。例如,如果输入包含 64 个样本,则 FFT 结果也将包含 64 个复数。但是,输出数组的后半部分包含前半部分的复共轭。

使用 PowerQuad FFT 引擎

DFT/FFT 运算背后的数学运算可以通过简单的乘法和加法运算来执行,这非常适合将数学运算外包给专用协处理器,例如 LPC55S69 MCU 上的 PowerQuad。因此,主 CPU 内核可以自由地处理其他任务。

使用PowerQuad FFT引擎是一个简单的过程,官方SDK自带的示例项目演示了协处理功能。特别是一个名为 powerquad_transform 的示例,演示了 FFT 计算过程。

powerquad_transform.c 文件包含几个测试不同 FFT 引擎模式的函数。其中之一是 PQ_RFFTFixed16Example 函数。此示例初始化 PowerQuad 以接受 16 位整数数据。浮点数据必须事先转换为定点值,因为 PowerQuad 转换引擎只支持整数。

FILTER_INPUT_LEN 定义输入样本的数量。输出数组的长度是它的两倍,因为它需要存储结果值的实部和虚部。

图 6. 这部分代码定义了测试数据和预期结果。

最后一个数组包含用于验证结果的测试数据。请注意数组的后半部分如何包含上述复共轭。此外,共轭不相等(例如对 76,-50 和 77,49)。无论如何,一旦数据被初始化,以下数据结构用于配置PowerQuad:

图 7。 示例程序的这部分配置和初始化 PowerQuad 单元。

有必要缩小输入以防止算法溢出。这个过程发生在上图中的第二行。 FILTER_INPUTA_PRESCALER 设置为 5,因为有 32 个(2 的 5 次方)样本。预缩放是 PowerQuad 的另一个硬件特性,这很可能是预期测试结果中观察到的不精确的原因。

一切设置好后,输入和输出区域的位置将传递给 PowerQuad 单元,这发生在 PQ_transformRFFT 函数中。此方法设置一些配置寄存器并通过写入控制寄存器来启动 PowerQuad。在本例中,CPU 等待 PowerQuad 完成。等待并不总是必要的,PowerQuad 可以在 CPU 执行其他任务的同时异步执行计算。

利用 PowerQuad 进行数学运算

PowerQuad 是用于复杂数学运算的协处理器,可用于 LPC5500 MCU 系列的各种设备。它包括一个用于高效计算 FFT 的特殊引擎,该引擎可以独立于主 CPU 内核完成。 LPC55S69 MCU 的 SDK 包含如何设置和使用 PowerQuad 的示例。

NXP 的社区页面包含以 LPC55S69 MCU 为中心的大量信息、讨论和文章。

行业文章是一种内容形式,允许行业合作伙伴以编辑内容不太适合的方式与 All About Circuits 读者分享有用的新闻、消息和技术。所有行业文章都遵循严格的编辑指南,旨在为读者提供有用的新闻、技术专长或故事。行业文章中表达的观点和意见是合作伙伴的观点和意见,不一定是All About Circuits或其作者的观点和意见。


嵌入式

  1. 了解云计算与虚拟化之间的关系
  2. 最好的云计算课程是什么?
  3. 更广泛采用无服务器的最大障碍
  4. 云计算基础设施;了解基础知识
  5. 大胜:游戏中的云计算
  6. 为什么要迁移到云端?云计算的 10 大优势
  7. 英国排名前 10 的云计算工作
  8. 为 AI 计算的神经形态芯片提供理由
  9. 研华通过 NVIDIA
  10. 引领边缘计算革命的 6 种组织类型
  11. 物联网与边缘计算的关系
  12. 边缘计算和 5G 扩展企业