This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F2.8075万:关于在CLA中实施的TMS320F2.8075万数字滤波器

Guru**** 2539500 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1100104/tms320f28075-about-the-tms320f28075-digital-filters-implement-in-cla

部件号:TMS320F2.8075万

大家好:

  一 个星期以来,我一直困扰着我,我想在 CLA,中实施一个切换滤波器,控制频率为20kHz。

转换函数为 g=(z *^2- 0.5391   * z + 0.6536 )/(z^2- 0.7166 0.5391   * z + 0.3702 )。F=20Khz

哪一个dcgain是1,但 我是在CLA中实现的,当输入信号为50Hz时,增益是关于1.5,我在MATLAB函数中实现了,它工作得很好,增益是1.it是如此奇怪,

代码低于:

CLAVAR.f32 InvCntlVoutL1TempOlder=  CLAVar.f32 InvCntlVoutL1TempOld;
CLAVAR.f32 InvCntlVoutL1TempOld =CLAVar.f32 InvCntlVoutL1Temp
 
CLAVAR.f32InvCntlVoutL1OLder =CLAVar.f32InvCntlVoutL1Old
CLAVAR.f32InvCntlVoutL1Old =  CLAVar.f32InvCntlVoutL1;
 
CLAVAR.f32InvCntlVoutL1 = (CLAVAR.f32InvCntlVoutL1Old* 0.5391) 0.3702 0.7166)-(CLAVAR.F32OlCntlVoutL1Cnar*L(0.5391) 0.6536  
红色信号是输入 CLAVar.f32InvCntlVoutL1Temp,蓝色信号是输出 CLAVar.f32InvCntlVoutL1。
谁能帮助我解决这个问题,我现在已经绝望了。
编译器设置为"低"。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    切槽频率约为3.7Khz,我在MATLAB,函数中发现了它。它运行良好,但在CLA,它似乎是错误的,我不知道问题是什么

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我查看过论坛,可能是由于浮点错误导致的,当出现上述代码时,我该怎么办?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好,有人能帮我吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,James:  

    您是以COFF还是ELF格式构建代码? 如果为ELF格式,请在每个常量之后添加f,以强制常量为浮点而不是双精度值。 这是因为默认情况下,带有小数点的EFL常量假定为双精度而不是浮点。 COFF格式没有此行为,即使没有后缀ff.,也将被视为浮点

    示例: CLAVar.f32InvCntlVoutL1OLD*0.5391f

    重新分级代码,这是来自TI提供的一些示例,还是这是您自己的代码? 因此,我将与其他专家联系。

    谢谢!
    Ashwini

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ashwini:你好

         非常感谢,我用了COFF,代码是我自己的代码,我已经在Matlab的函数中测试过,它工作正常,但在CLA中工作很奇怪

    如果您和您的团队可以帮助我,非常感谢您的帮助,非常感谢。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,James:

    您是否尝试过设置断点,然后单步执行代码以查看计算不正确的位置,这可能会提供一些线索。

    我在这里查看C代码:

    CLAVar.f32cnvoutL1 =110.0104万 = (2.8075万(CLAVar.f32lv1cander*12.8075万CLAVar.f32lv1cander*1 0.3702) 0.7166 (0.5391 0.5391)(CLavl0) 0.6536  

    而且不清楚这如何映射到传输功能,因此逐步浏览代码是一个好方法。

    [quote userid="49.1935万" url="~/support/mspectors/c2000-mspicros/group/sc2000/f/c2mspurer-forum/1100104/tms320f28075-about-The-tms320f28075-digit-filers-imple-in-CLA"<xmt-block0>2000 0.7166110.0104万 0.7166</xmt-block>2.8075万 *z2.8075万 *z^7166^    2 - 0.5391 0.3702 *z + 0.6536 )/(z^2 - 0.5391   z/Khz=20f)  

    以下是一些有关调试的提示:

    https://software-dl.ti.com/C2000/docs/cla_software_dev_guide/debugging.html?highlight=debug

    要考虑的另一点是CLAVAR结构是如何定义的-它是否在C28和CLA之间共享,以及它是否有任何"int"成员,因为在C28和CLA上int的大小不同。 下面是一些附加信息。

    https://software-dl.ti.com/C2000/docs/cla_software_dev_guide/faq.html?highlight=data%20type#how-are-data-types-different-on-c28x-and-cla

    谢谢!
    Ashwini

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    James,

    以下所有内容看起来都正确,并且与缺口过滤器的传输功能一致。 我要问的问题是,在历史样本更新和输出计算之间,您是否有更新当前输入样本的内容(例如,从输入缓冲区读取)。 我相信你会这样做。

    CLAVAR.f32 InvCntlVoutL1TempOlder=  CLAVar.f32 InvCntlVoutL1TempOld;
    CLAVAR.f32 InvCntlVoutL1TempOld =CLAVar.f32 InvCntlVoutL1Temp
     
    CLAVAR.f32InvCntlVoutL1OLder =CLAVar.f32InvCntlVoutL1Old
    CLAVAR.f32InvCntlVoutL1Old =  CLAVar.f32InvCntlVoutL1;
    <current input sample CLAVar.f32InvCntlVoutL1Temp updated here?(当前输入示例CLAVar.f32InvCntlVoutL1Temp是否 >
     
    CLAVAR.f32InvCntlVoutL1 = (CLAVAR.f32InvCntlVoutL1Old* 0.5391) 0.3702 0.7166)-(CLAVAR.F32OlCntlVoutL1Cnar*L(0.5391) 0.6536  
    谢谢!
    Sira
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,最后更新了VoutL1,我看了很多篇文章, 量化误差似乎是主要问题,你对 量化误差有什么想法吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    转接功能正常,Clavar没问题

    我看过很多篇文章, 似乎量化误差是主要问题,你对 量化误差有什么想法?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是否可以将 CLAVar.f32InvCntlVoutL1声明为双精度浮点值,并查看是否有任何改进?

    对于fp_mode和fp_reassoc,编译器优化设置为什么?

    谢谢!

    Sira

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,我们尝试  了双精度浮点,但它不起作用。因为CLA不支持双精度。

    和  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    James,

    Ashwini今天不在办公室。  请最迟于19日星期四回复。

    最佳,

    Matthew

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    James,

    很抱歉,我忘记了该部件。

    1. fp_mode和fp_reassoc如何?

    2.您使用的优化级别是什么? 如果您更改优化级别,您是否注意到任何变化?

    3.在其他频率下,滤波器的性能如何? 您是否在20kHz时获得了所需的缺口行为?

    4.您是否尝试过Ashwini的建议,即单步执行,检查计算值并与预期值进行比较? 您甚至可以使用临时变量将C代码分解为多个步骤(而不是包含多个乘法和增减法的一个步骤)。 并关闭优化功能。

    谢谢!

    Sira