查看: 2860|回复: 0

[分享] LPC55S69 + PowerQuad第4部分:矩阵和矢量处理

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3305

    主题

    6553

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32097
    最后登录
    2024-5-8
    发表于 2020-8-18 10:35:48 | 显示全部楼层 |阅读模式
    LPC55S69 + PowerQuad第4部分:矩阵和矢量处理
    翻译自:Eli Hughes

    在我以前关于PowerQuad的一些文章中,我们研究了一些常见的信号处理操作(IIR BiQuad和快速傅立叶变换),然后展示了如何使用PowerQuad DSP引擎来加速计算。 PowerQuad中的矩阵引擎可用于执行常见的矩阵和矢量运算,以释放M33 CPU来并行执行其他任务。 通常,矩阵引擎的最大大小限制为16x16(或256个操作)。
    1.png

    图1:PowerQuad矩阵运算的最大大小



    Hadamard Product

    Hadamard(元素)产品是处理管道中常见的一种简单但有用的操作。 可以将其视为两个信号相乘。 假设我们有两个大小为1x32的输入向量/信号:

    2.png

    图2. Hadamard产品



    快速说明:由于Hadamard乘积仅需要来自每个输入的信号元素来产生输出中的每个元素,因此矩阵/矢量的实际形状无关紧要。例如,如果输入数据在存储器中的组织方式相同,则16x16矩阵和1x256向量将产生相同的结果。

    图2中的卡通插图说明了Hadamard产品的常见应用:时域信号的窗口化。在上一篇文章中,我们研究了如何从基本数学运算构造离散傅立叶变换。对于我们与余弦/正弦基准进行比较的信号的性质,我有一个假设。考虑图3中的卡通。
    3.png

    图3:“默认”矩形窗口。



    假设我们通过模数转换器(ADC)捕获了32个信号样本。在“真实”世界中,该信号存在于32点“窗口”之前和之后。这是要考虑的哲学问题:

    我们的32个样本与无限长输入乘以感兴趣区域周围1的“矩形”窗口之间是否有区别?

    其实没有! “抓取” 32个样本的简单动作为我们提供了一个数学实体,它是一些无限长的输入信号的“乘积”,并且在信号周围有一个1(零个零)的32点矩形。当我们考虑离散傅里叶变换等操作时,我们要变换的是输入信号乘以窗函数。利用傅立叶变换的数学特性,可以证明,时域中的这种乘法是窗口的傅立叶变换在频域中的“偏移”。有很多理论可用来解释这种效果,但最重要的是,通过捕获有限数量的样本这一简单动作就可以存在矩形窗口。我最讨厌的事情之一就是看到有关“窗口式转换与非窗口式转换”的文献。拉什(Rush)的歌曲“自由意志”(Free Will)带有令人难忘的歌词:

    “如果您选择不做决定,您仍然可以做出选择”

    通过不执行任何操作,我们选择了一个矩形窗口(在频点周围显示为sin(x)/ x伪像)。尽管我们无法消除窗口的影响,但我们确实在如何调整窗口伪像的形状方面有一些选择。通过将输入信号乘以已知形状,我们可以控制由窗口引起的频域中的伪像。图2显示了一个称为“ Hanning”窗口的通用窗口。

    在LPC55S69和PowerQuad的情况下,矩阵引擎可用于施加不同的“窗口”输入信号。由于在计算快速傅立叶变换之前应用窗口是常见的操作,因此请考虑使用PowerQuad中的Hadamard产品来完成工作。

    矢量点积

    在上一篇文章中,我证明了离散傅立叶变换是信号与应用于许多不同频率仓的余弦/正弦参考之间的点积。我想在此指出这一点,因为PowerQuad矩阵引擎可以计算点积。尽管FFT无疑是频域处理的“主力军”,但对于某些应用而言,它始终不是最佳选择。在某些用例中,您可能只需要在单个或(仅几个)频率段上执行频域分析。在这种情况下,通过点积直接计算变换可能是更好的选择。

    使用FFT的一个限制是,所得频谱的二进制位在整个样本数量上作为样本速率间隔开。这意味着垃圾箱可能未对准对您的应用重要的频率。您唯一需要调整的旋钮是采样率和采样数(必须为2的幂)。在某些情况下,您可能需要将分析调整为一个准确的数字,而该数字可能与您的采样率没有方便的关系。在这种情况下,您可以使用感兴趣的确切频率进行点积运算。我已经在需要频率对数间隔的应用程序上工作。在这些情况下,直接计算DFT是获得所需结果的最佳方法。

    FFT对于许多应用程序无疑具有计算优势,但它并不是唯一的频域分析方法。速度并非始终是某些应用程序的主要要求,因此不要自动认为您需要FFT来解决问题。我想在矩阵处理的上下文中指出这一点,因为PowerQuad仍可以在这些情况下用于完成工作并保持主CPU的空闲以便进行通用操作。

    另外,我想提一提的是,在这些特殊情况下,除了使用点积直接计算DFT之外,还有其他方法,例如Goerztel的方法。即使在这些情况下,您也可以使用PowerQuad中的功能来计算结果。如果采用Goerztel的方法,IIR BiQuad引擎将非常适合。

    矩阵乘法

    从字面上看,有数百个应用程序需要高效地执行矩阵乘法,缩放,求逆等。请记住,如果矩阵尺寸为16x16或更小(对于求逆,则为9x9),PowerQuad可以高效地完成此工作。想到的一种可能的应用是面向领域的控制(FOC)。 FOC应用程序使用特殊的矩阵变换来简化分析并将电动机电流变换为直接/正交参考系:
    4.png

    图4:DQZ转换

    另一个简洁的应用程序将是加速嵌入式图形应用程序。我以为PowerQuad矩阵引擎可以处理2D和3D坐标转换,这可以构成“迷你”矢量图形和多边形渲染功能的基础。当我开始计算时,视频游戏引起了我对“事物如何运作”的兴趣。我记得第一次见到可以旋转屏幕形状的游戏时感到的敬畏。当我找到显示此矩阵方程的计算机图形文字时,它“连接”了:
    5.png

    图5:2D矢量旋转矩阵。


    这使我对许多其他应用打开了视野,因为现在我可以使用该魔术了。也许我只是在做梦,但是拥有像PowerQuad这样的硬件协处理器会产生一些有趣的工作!

    PowerQuad Matrix Math入门

    LPC55S69的SDK内置了许多PowerQuad示例。 “ powerquad_matrix”有许多使用PowerQuad矩阵引擎的示例。

    6.png

    图6:SDK中的PowerQuad矩阵示例。


    让我们快速看一下矢量点积示例:
    7.png

    图7:PowerQuad矢量点积。


    如您所见,矩阵/矢量计算实际上几乎不需要设置PowerQuad。 AHB总线上的寄存器很少,需要配置,然后PowerQuad才能完成工作。 我希望本文能使您想到LPC55S69和PowerQuad的一些巧妙应用。 下次,我们将以简洁的应用程序演示总结PowerQuad文章。 之后,我们将使用LPC55S69看一些有趣的图形和物联网应用。 敬请关注!

    同时,这里是我以前所有LPC55的文章,以防万一您错过它们。

    LPC55S69 + PowerQuad第1部分:工业物联网和智能计量的出色解决方案
    LPC55S69 + PowerQuad第2部分:数字IIR滤波
    LPC55S69 +功率四核第3部分:快速傅立叶变换-标尺,量规和量角器

    翻译有问题的地方还请小伙伴们指出,谢谢!
    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-5-9 07:15 , Processed in 0.122838 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表