tag 标签: 算法

相关帖子
相关博文
  • 热度 1
    2023-9-20 10:57
    195 次阅读|
    0 个评论
    一、实验目的 了解FFT的作用,掌握FFT 算法的算法原理、计算量和算法特点,实现FFT算法并通过CCS图形窗口查看结果。 官方网站:www.tronlongtech.com 二、实验原理1、傅里叶变换 傅里叶变换可以将一个信号从时域变换到频域。时域信号在经过傅立叶变换的分解之后,变为了不同正弦波信号的叠加,我们再去分析这些正弦波的频率,可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这就是很多信号分析采用FFT变换的原因。 2、离散傅里叶变换 离散傅里叶变换作为信号处理中最基本和最常用的运算,在信号处理领域占有基础性的地位,如果直接按照离散傅里叶变换的公式进行计算,求出N点X(k)需要N^2次复数运算、N(N-1)次复数加法,当N很大时,运算量是非常大的,这对于实时处理是无法接受的。 3、FFT算法 傅里叶快速算法的提出,使傅里叶变换成为一种真正实用的算法。根据傅立叶变换的对称性和周期性,我们可以将DFT运算中有些项合并。 在计算机上进行的DFT,使用的输入值是时域的信号值,输入采样点的数量决定了转换的计算规模。变换后的频谱输出包含同样数量的采样点,但是其中有一半的值是冗余的,通常不会显示在频谱中,所以真正有用的信息是N/2+1个点。FFT算法的原理是通过许多小的更加容易进行的变换去实现大规模的变换,降低了运算要求,提高了与运算速度。FFT不是DFT的近似运算,它们完全是等效的,FFT的过程大大简化了在计算机中进行DFT的过程。 4、程序流程 程序流程设计中首先产生测试信号,接着确定FFT基和旋转因子,然后进行FFT和FFT逆变换运算,最后输出FFT结果 5、数字信号处理库 本实验中的FFT算法是基于TI提供的数字信号处理库完成的。 DSPLIB 包含优化的、C语言可调用的通用信号处理例程,用于计算密集型实时应用程序。 调用这些例程的运行速度比直接用C语言编写的等效代码快得多,可以缩短应用程序开发时间。实验中使用的是 dsplib_c674x_3_4_0_0 。 6、dsplib_c674x_3_4_0_0 在CCS5.5 的安装路径安装DSPLIB后,会有相应的文件夹出现,包含组件库、头文件、测试示例和源码等。 7、函数源码FFT运算函数 程序使用DSPLIB 的库来进行FFT运算,调用的程序源码和使用说明可以安装DSPLIB后 查看。 调用的FFT函数中: 第一个参数是样本中FFT 的长度; 第二个参数是指向数据输入的指针; 第三个参数是指向复杂旋转因子的指针; 第四个参数是指向复杂输出数据的指针; 第五个参数是指向包含64 个条目的位反转表的指针。如果样本的FFT长度可以表示为 4 的幂; 第六个参数是4,否则 第六个参数是 2 ; 第五个参数是从主FFT开始的样本中的子 FFT偏移索引 。; 第六个参数是样本中主FFT的大小。 FFT逆变换函数 程序使用DSPLIB 的库来进行FFT逆变换,调用的程序源码和使用说明可以安装DSPLIB后查看。 调用的IFFT函数中: 第一个参数是样本中FFT 的长度; 第二个参数是指向数据输入的指针; 第三个参数是指向复杂旋转因子的指针; 第四个参数是指向复杂输出数据的指针; 第五个参数是指向包含64 个条目的位反转表的指针 ; 如果样本的FFT长度可以表示为 4 的幂,第六个参数是4,否则第六个参数是2 ; 第七个参数是从主FFT开始的复杂样本中的子FFT偏移索引 ; 第八个参数是样本中主FFT的大小。 8、二进制位翻转 FFT和FFT 逆变换函数中的第五个参数brev是指向包含64个表项的位反转表的指针,因此程序中需要提供64个表项,程序中的位反向表是计算出来的,可以通过代码提前转换的。 采用位反转的原因是因为FFT算法的蝶形内部两点交叉使数据以反转的方式输出而不是数字反转顺序。 二进制位翻转表的原理 首先确认二进制数的位数,64个数只需要有6位的二进制位数; 接着将二进制数分成两部分,前五位一部分,最后一位一部分; 最后进行二进制翻转,把最后一位放到最高位,剩下的五位进行翻转依次放入。 数组内存放的依次是0~63的二进制翻转结果,我们可以来看一个例子, (点击鼠标)以数字5为例,(点击鼠标)转换为二进制数是000101 (点击鼠标)接着进行二进制翻转,将“00010”看为一个部分,“1”看为一个部分,那么将“1”放到第一位,然后将后面的数据翻转过来进行放置即可 (点击鼠标)最后进行十六进制转换得到0x28,所以在数组的第6个数字为0x28。 三、操作现象 导入工程,选择Demo文件夹下的对应工程 编译工程,生成可执行文件 将CCS连接实验箱并加载程序 程序加载完成后点击运行程序 运行程序后,程序执行完成后会在断点处停下。 Single Time"选择单时域信号图,在弹出的界面设置相关参数,可查看DSP计算的FFT结果。 FFT Magnitude",在弹出的界面设置相关参数,可查看CCS计算的FFT结果。 对比后,可发现CCS和DSP计算的FFT结果相同, 实验结束后,点击红色按钮退出CCS与实验箱的连接,最后实验箱断电即可。
  • 热度 2
    2023-7-1 11:32
    136 次阅读|
    0 个评论
    浅析汽车芯片信息安全之安全启动
    一、汽车芯片信息安全发展现状 汽车的安全机制实际上主要包括功能安全(Safety)和信息安全(Security)两个方面。功能安全是涉及人身安全的保护机制,而信息安全则是保护我们的汽车系统里的信息不被恶意窃取和破坏。 早期的汽车芯片和软件系统设计中,由于汽车较少与外界有网络互联,所以并未考虑过多的信息安全性。随着科技的发展、汽车行业的发展,汽车也加入了万物互联的行列。由于汽车的智能化、网联化的提升,信息安全正在占据着越来越重要的地位。 信息安全不仅关系着用户的隐私,更关系着人的生命安全。一旦系统被非法入侵,汽车系统可能被恶意操控,从而可能造成汽车被盗取甚至车辆事故。 目前世界各国已经开始制定相关法规来保障汽车的信息安全。2021年初,联合国世界车辆法规协调论坛(简称UN/WP.29)发布了两个信息安全相关的重要法规R155/R156,即信息安全(Cybersecurity)/软件升级(Software updates)。 据悉,中国也在制定相应的信息安全法规《汽车整车信息安全技术要求》(中国版R155),《汽车软件升级通用技术要求》(中国版R156)。同年8月,国际标准组织ISO也公布了汽车网络安全标准ISO/SAE21434,规定了汽车系统、子系统和零部件应具备更强的安全性能以抵御网络攻击。 由此可见,汽车芯片作为汽车零部件里最核心的关键组件,其信息安全已成为汽车芯片设计的必备要素和重要考量。 二、安全启动的重要性 安全启动是典型的芯片信息安全方案中的一环,也是信息安全认证的重要一环。通过信息安全认证也会给产品带来更多的竞争力。 目前市面上考虑到安全的芯片基本都会选择支持安全启动功能。安全启动是通过启动时对镜像进行验证来保证启动时的软件是合法且未经篡改的,是在启动阶段保证信息安全的一种方式。 三、安全启动信任根 首先,安全启动需要一个信任根。信任根是密码系统中始终可以相信的来源。我们都知道ROM存储是只读的,基于此特性,我们可以将程序的第一段代码固化在ROM里作为安全启动的起点。这段代码无法被轻易替换,从而可保证每次启动第一段代码的可信性。 四、安全启动信任链 安全启动会对每一级镜像进行逐级验证,以保证下一级的镜像的合法性。镜像验证必须保证其连续性,否则则无法保证其验证的可信性。 像汽车芯片这种大型的SoC一般是多核系统,多核系统的启动可由BootROM校验下一级bootloader并由该bootloader加载不同核的一级bootloader,再由一级bootloader开始连续校验下面的镜像内容。 由于不同的SoC的设计不同,这里只是为了举例表明安全启动的信任链,每级镜像的名字可由开发者自己定义,其框图如下图所示: 五、安全启动实现 加密算法 在安全领域,使用加密算法来对通信过程进行加密是一种常见的安全手段。通过加密算法可实现对数据的保护以防止数据被泄露,同时也可防止数据被篡改。常用的加密算法一般分为对称加密算法和非对称加密算法。对称加密算法的加密和解密使用同一个密钥,而非对称算法则使用公钥和私钥两种密钥来进行加解密。公钥私钥成对存在,如用公钥加密需用私钥解密,反之亦然。 AES是最常用的对称加密算法,其拥有运算速度快,内存需求低,分组长度和密钥长度设计灵活等优点。对于非对称加密算法来说,典型的有RSA和ECC两种加密算法。RSA加密算法常被选择用于镜像的签名与验签。 签名与验签 由于非对称加密的速度远低于对称加密,故非对称加密算法不适用于数据量大的场景。我们一般使用SHA-1/SHA-2等算法计算得到Hash值以用来校验的数据完整性,并基于其进行加密计算得到镜像的签名。 RSA算法用来签名与验签是业界常见的做法。一般采用私钥加密得到签名,公钥解密来验证签名以保证信息来源的可信性。与此同时,也会采用填充技术来增加加密算法的破解难度。常见的RSA填充算法有PCK1.5填充,OAEP填充,PSS填充等。 对称加密的应用 签名与验签的过程保证了镜像内容的完整性与来源的可信性,但数据仍处于明文状态。若黑客可以读到数据的存储空间,仍面临信息泄露的危险。为了解决这个问题,我们可以通过使用对称加密算法来对数据进行加密。如此一来,就算数据被读走,没有正确的密钥也是无法解析其信息。 密钥的分配与保护 密钥的保护也是信息安全中的一个议题。如果密钥被窃取,一样会面临信息被泄露与篡改的危险。所以在芯片设计的过程中,如何生成、保存、载入密钥是一个要认真考虑的问题。 对于验签过程而言,必须保护好RSA算法的公钥以防止黑客将其替换伪造签名。由于RSA加密算法的公钥比较长,可选择将其Hash值固化在ROM里或者写在efuse上,在安全启动的过程中对公钥的Hash进行比对以保证公钥来源的可信性。 对于对称加密而言,必须保护好用于加解密的秘钥。可将其写在OTP或者efuse里,也可采用多级加密的方式来保护密钥以防止被入侵者窃取。 六、结语 本文简单介绍了一下汽车芯片安全启动的关键技术及其实现,简而言之,就是要保证启动镜像的可信性和完整性,以及尽量增加黑客窃取破坏的难度。 对于汽车芯片的信息安全而言,安全启动只是其中的第一步。我们还需要将严密的信息安全考量贯彻整个芯片的设计过程,以满足全球汽车市场对信息安全日益严格的需求。 关注公众号“优特美尔商城”,获取更多电子元器件知识、电路讲解、型号资料、电子资讯,欢迎留言讨论。
  • 热度 3
    2022-5-10 20:25
    1494 次阅读|
    1 个评论
    工程中经常会用到的控制算法想必就是PID了,现代控制理论为何陷入了迷思呢? 不去尝试,永远不知道新理论和算法能不能用。本文希望能给出一些控制算法研究中的工程哲学供大家参考。 先进控制算法为何给大家感觉不如PID呢? 一种可能,别人用上了,效果好,自己用不上,乃至说不知道怎么用,只能用PID,这说明自己落后。 另外一种可能,有很多所谓先进的理论和算法确实很难在实际中用,根本就是为了发论文而做的。 还有一种可能,大家都在用PID,但控制效果远不能令人满足,只是暂时找不到/发现不了更好的方法。 另外有个值得注意的,底层是PID,看中上层是不是PID。即虽然是PID,但是是结合比如自适应、模糊、容错等等。而且PID的调参是否用了比如频域分析、鲁棒等等。 如何区分这几者,是很重要的。 控制算法要能处理known known,known unknown,unknown known,unknown unknown。 只此一件的控制系统,在较为确定的环境里工作,参数可以专门针对硬件,调到很好。但也会跟温室一样,系统乃至环境的很多东西有明确的规定,甚至细到某个螺丝要拧几圈半,外界的干扰要可忽略,等等。如此的系统,有时可以应用上较为复杂的控制算法,也就没有什么好稀奇的:known known知道,unknown known能通过对系统不断加深理解变成known known,known unknown、unknown unknown则可以通过对系统和环境的控制减少到可忽略。 但商业化产品中的控制系统,上量之后件件之间有差距,加上使用环境不确定的话,known unknown、unknown unknown都会大,而控制算法要能鲁棒(不仅限于传统鲁棒控制中的鲁棒)到可以处理到这些,即使known known、unknown known处理到最好。 比如一个信号,近似等于个高斯白噪声,用过去数据,估算出均值与方差,是known known。但肯定不准的,因为现实中就不存在标准的高斯白噪声,于是做出一个误差区间,有各种做法,算是known unknown。但known known跟known unknown加起来,也还是与实际有差距,是unknown unknown,是there is nothing you can do about it的了。但常被忽视的是unknown known,比如这个信号里面,可以分离出一个周期信号(不一定是正弦),是一个干扰。知道之后,unknown known变成known known。如此等等。前面说了,可以从不同层面考虑,比如信号分成确定部分和随机部分,确定部分是known known。但确定部分与实际的确定部分有差别,是unknown known。随机部分,知道分布的话,是known unknown。随机部分也与实际的随机部分有差别,是unknown unknown。如是如是,不一而足。从这个层面分析,不如上一段中的分析对实际有指导意义。 当然还有系统。比如一个系统,有输入输出数据,建模、辨识出一个LTI模型,有参数,是known known。但这个模型肯定不是完全吻合数据,所以要给一定的不确定性,比如在参数上,可能有个区间,是known unknown。即使加上这个区间,也还是与实际有差别,是谓unknown unknown。但如果一分析,发现这个模型其实可以分离成一个LTI模型,加上一个比如Wiener模型,就是unknown known被发现了。 当然也可以在不同的层面分析。参数很多,花时间调,总能调出个鼻子乱舞的大象,特别是在仿真中更是如此。但物理学的历史告诉我们,这个时候,应该是存在更有结构化的理论框架。当然,这样的理论框架,如PID,如Kalman滤波,等等,也还是留有一定的参数让在实际中调,因为known unknown与unknown unknown,是另一个层面的问题了。
  • 热度 10
    2021-11-20 10:07
    839 次阅读|
    0 个评论
    哥伦比亚大学瓦格洛斯医学院的研究人员开发了一种算法,可以自动搜索病人的电子医疗记录中的血液和尿液测试结果,并使用既定的方程式和机器学习的混合方法处理数据,可以提醒医生处于慢性肾脏病最早期阶段的病人。 慢性肾病的诊断往往未被发现,直到它造成不可逆转的损害。新算法旨在确保在最早阶段检测到慢性肾病。 早期检测是关键 研究人员说,慢性肾脏病(CKD)代表了一种缓慢进展的疾病,通常在晚期之前是无声无息的,但早期干预可以大大延迟其进展。 "早期识别肾脏疾病是最重要的,因为我们有治疗方法,可以在损害变得不可逆转之前减缓疾病的发展。 慢性肾脏病可能导致多种严重问题,包括心脏病、贫血或骨病,并可能导致早期死亡,但其早期阶段经常没有得到充分认识和治疗,"研究负责人、哥伦比亚大学瓦格洛斯内外科医学院副教授Krzysztof Kiryluk博士说。 这项研究的题目是 "基于医疗记录的慢性肾脏病表型的临床护理和'大数据'观察遗传研究",于2021年4月发布。 该算法如何工作 该算法自动拖曳电子医疗记录。它像一个有经验的肾病医生一样工作。当使用451名患者的电子医疗记录进行测试时,该算法在两名有经验的肾脏病专家确定的95%的肾脏病患者中正确诊断了肾脏病,在97%的健康对照组中正确排除了肾脏病。 该算法可用于不同类型的电子健康记录系统,包括数以百万计的患者,并可轻松纳入临床决策支持系统,通过建议适当的特定阶段的药物来协助医生。如果将来诊断肾脏疾病的标准发生变化,该算法可以很容易更新,并免费提供给其他机构使用。 然而,研究人员说,该算法的一个缺点是,它取决于医疗记录中是否有相关的血液和尿液测试。血液检验是相当常规的,但尿液检验在临床实践中没有得到充分利用。 Kiryluk说,尽管有这些限制,但算法诊断可以提高人们对肾脏疾病的认识,通过早期治疗,可减少失去肾功能的人数。 研究结果所附的一份声明解释说,诊断不足的原因很复杂。这是因为处于慢性肾脏病早期的人通常没有症状,而初级保健医生可能会优先考虑病人诉求。此外,需要两种测试,一种是测量血液中的肾脏过滤代谢物,另一种是测量尿液中的蛋白质渗漏,以检测无症状的肾脏疾病。 "这些测试的解释并不总是简单明了的。 许多病人的特征,包括年龄、性别、体重或营养状况,都需要考虑 ,而这一点经常未被初级保健医生所重视,"Kiryluk说。 问题的普遍性 据估计,每八个美国成年人中约有一人被认为患有慢性肾脏疾病。然而,在该疾病的早期阶段,只有10%的人知道自己的病情。在那些已经有严重的肾功能减退的人中,只有40%的人知道他们的诊断。 中国成人总体患病率约为10.8%。在中国,CKD1-2期患者占据总CKD患者的大多数,为76.59%。终末期肾脏病患者的占比最小,为1.4%。CKD患者的住院死亡率为2.63%,远高于非CKD患者(0.81%)。 高血压和糖尿病是造成CKD的主要原因。几乎一半的CKD患者同时患有糖尿病或心血管疾病(CVD)。此外,有超过661,000名美国人患有肾衰竭。 美 国家糖尿病和消化道疾病研究所说,其中46.8万人正在接受透析治疗,大约有19.3万人接受了有效的肾脏移植。 根据中国肾脏病网络调研结果显示,在CKD住院患者中,糖尿病肾病占26.96%、高血压肾病占20.78%,其次为梗阻性肾病(15.59%)和肾小球肾炎(15.07%)。同时CKD会诱发多种合并症,CKD引发的心血管并发症死亡率是普通人群的5倍。冠心病是慢性肾脏病住院患者最常见的合并心血管疾病类型(18.82%),其次为心力衰竭(16.02%)和中风(12.88%)。
  • 热度 4
    2021-5-12 17:52
    1433 次阅读|
    4 个评论
    点击这里,一键报名 举办时间 5/18 10:00 研讨会介绍 鉴于计划外停机的成本可能占总制造成本的近四分之一,所以采用预测性维护有望大幅节省成本并提高生产力。在本次研讨会中,我们将介绍ADI新推出的状态监控平台,该平台旨在帮助加快状态监控硬件、软件和算法的开发。CN0549平台是一个完整的开发平台,针对机械固定的宽带宽传感器数据进行可靠的高保真数据采集。开源嵌入式软件直接将数据流传输至基于MATLAB和Python的数据分析工具,以便实时处理,并开发可用于预测性维护服务的机器学习算法。借助此平台的灵活性,各个学科的工程师能够快速启动CbM应用开发,并将产品更快推向市场。
相关资源