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.

[参考译文] CCS/MSP-EXP430FR5994:BOOSTXL-AUIDIO示例FFT

Guru**** 2608595 points
Other Parts Discussed in Thread: MSP430FR5994

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/640470/ccs-msp-exp430fr5994-boostxl-auidio-example-fft

部件号:MSP-EXP430FR5994
主题中讨论的其他部件:MSP430FR5994MSP430WARE

工具/软件:Code Composer Studio

大家好。

我与msp430fr5994一起玩了2个月。 我还在学习C,如果我的问题很明显,我很抱歉。

首先,我对ADC数据非常困惑。 值为-3.1472万和2.2992万之间的(对于Expample)。 n´t ADC为12位,我就不能再看了。

第二个是变量状态,它是RETURN Ffrom de FFT函数。 我不能将它放在手表窗口上,为什么?

最后一个是关于LEA内存。 在.map中显示长度,对于LEARAM,为0x0万ec8,83784字节,为什么不是4096? 什么是LEASTCK? 如果可用的实际内存小于4KB,则可能的最大FFT是多少?

谢谢你。

Marcos。

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

    Marcos,您好!  

    首先,我对ADC数据非常困惑。 值为-3.1472万和2.2992万之间的(对于Expample)。 n´t ADC为12位,我就不能再看了。[/QUOT]

    请务必注意,在此示例中,ADC设置为以两种补码格式存储结果。  这在AUDIO_COLLECG.c文件中大约第127行完成。 因此,理论上,当ADC输入电压为-Vref时,结果为0x8000,这是两个补码表示法-3.2768万。 同样,当ADC输入电压为+Vref时,结果为0x7FF0,即+3.2752万。 因此,当您考虑到音频信号是正弦波时,您将看到ADC输入端的电压会周期性地降低“负”,然后返回到正。 您可以在此处了解有关数字补码表示的更多信息:  

    第二个是变量状态,即RETURN Ffrom de FFT函数。 我不能将其放在监视窗口上,为什么?[/QUOT]

    编译器最有可能以不再使用或定义"status"变量的方式优化代码。 如果完全关闭优化,您将能够在"表达式"窗口中查看此变量。  

    最后一个是LEA内存。 在.map中显示长度,对于LEARAM,为0x0万ec8,83784字节,为什么不是4096? 什么是LEASTCK?[/QUOT]

    LEA RAM的长度为4 KB。 在查看.map文件时,您已经注意到某些内存已分配给LEA堆栈。 实际上,LEA模块是独立于MSP430 CPU的CPU。 它执行操作,需要使用堆栈,就像MSP430 CPU一样,以便能够成功调用函数并返回。 您可以在此处阅读有关计算中堆栈用途的更多信息:  

    Marcos Llorente 说:
    如果实际可用内存小于4KB,则最大FFT可能是多少?[/QUOT]

    这取决于将数据与LEA内存中的相应边框对齐的能力。 例如,MSP_FIXED_FFT_Q15函数要求将输入数据与2*(输入数据长度)边界对齐。 这意味着512点FFT必须与1024的倍数的内存边界对齐。 同样,LEA支持的最大FFT是2048点FFT,因为它必须与4096的倍数的内存边界对齐。 大于此值的任何内容在LEA RAM中都没有有效的内存边界。 例如,4096点FFT需要与8192的倍数的内存位置对齐,但LEA RAM (0x2C00-0x3BFF)中没有符合此要求的内存位置。

    幸运的是,这不是您需要手动完成的事情。 TI提供 了预定义的带有DSPLIB的宏,这些宏将为您执行数据对齐,并让您知道在编译时数据是否适合LEA RAM。 您可以在 DSPLIB用户指南中了解有关数据对齐,使用LEA时的注意事项以及LEA支持的其他功能的更多信息。  

    希望这对我有帮助,如果您有任何后续问题,请告诉我。  

    此致,  
    Caleb Overbay

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


    我仍然对FFT有疑问。要运行MSP_FIXED_FFT_Q15函数,需要将输入数据与2*(输入数据长度)边界对齐。 所以如果我选择2048点FFT,我需要4096字节,LEA RAM由于LEASTCK而没有得到。 因此,对于使用MSP_FIXED_FFT_Q15函数的FFT,最大大小为1024点。

    为了检查它,我下载了transform_ex1_FFT_fixed_q15示例以修改它并尝试不同的大小。 很遗憾,这个例子不起作用。 当我尝试调试代码并暂停调试时,代码始终位于同一行:

    案例MSP_LEA_INCORRY_REVISION:
    /* LEA修订不正确,永久循环。 */
    while (true)__no_operation();

    为什么? 我尚未修改代码。

    我还尝试在FFT.h中更改bootxl-audio示例代码#define vector_size,以尝试更大的FFT。 结果为STATUS=MSP_LEA_OUT或范围。

    能否检查transform_ex1_FFT_fixed_Q15示例是否正常?

    如果您能提供一个使用1024点的MSP_FIXED_FFT_Q15的代码,我将不胜感激。


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

    Marcos,您好!  

    so如果我选择2048点FFT,我需要4096字节,LEA RAM由于LEASTCK而没有得到。 因此,对于使用MSP_FIXED_FFT_Q15函数

    的FFT,最大大小为1024点

    我认为您的数据对齐与所需的内存量混淆不清。 将数据与4096边界对齐并不意味着数据必须消耗4096字节。它仅意味着该数据的起始地址必须平均可被4096整除。  

    Case MSP_LEA_INCORRY_REVISION:
    /* LEA修订不正确,永久循环。 */
    while (true)__no_operation();

    这似乎您可能拥有DPSLib或DRIVERLIB的过时版本。 您能否确保已下载并安装最新的CCS和MSP430Ware版本?

    此致,  
    Caleb Overbay

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

    你(们)好

    我已经检查了版本,并且有最新版本。 我也尝试了CCS云中的代码,结果相同。

    您可以检查一下吗?

    此致。

    Marcos。

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

    Marcos,您好!

    您可能有一个芯片版本,它要求您在编译器选项中添加预定义符号。 在编译器选项下,选择预定义符号并将以下内容添加到预定义名称列表中:

    MSP_LEA_REVISION = 0 

    默认情况下,如果在编译器选项中未明确定义MSP_LEA_REVISION,则DSPLIB将设置MSP_LEA_REVISION =1,该版本适用于Rev. B芯片。 必须为正确的修订版本构建源代码,以便为在修订版本之间更改的LEA函数提供变通办法。 如果LEA版本与构建库时所依据的版本不匹 配,您可能会得到意外的结果,这就是为什么代码返回MSP_LEA_INCORRY_REVISION状态和TRAPS执行。

    《DSPLIB用户指南》的LEA部分提供了更多信息和示例代码,可用于检查修订版本(链接)。

    此致,

    布伦特

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

    我已经解决了这个问题,我不知道具体的方法,但是它已经解决了。 现在,我能够调试和分析MSP_FFT_FIXED_Q15返回的内容。 我发现状态变量在被认为是MSP_SUCCESS时为MSP_SIZE _ERROR。 为什么? FFT结果如何受到影响?

    我非常感谢你的帮助。

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

    您收到的错误表示您已将错误的大小传递给MSP_FFT_FIXED_Q15函数。 您是否对示例项目进行了任何更改? 如果您使用语法荧光笔发布您的代码,这样我就可以仔细检查是否存在任何错误,这可能会很有帮助。

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

    这是原始代码

    //************************************************************************************************
    //具有固定缩放的真实FFT。
    ////
    Brent Peterson,Jeremy Friesenhahn
    //德州仪器(TI)
    // 2016年4月
    //************************************************************************************************************************
    #include "MSP4S.h"
    #include <mathing.h>
    #include <stdint.h>
    
    #include "DSPLIB.h"
    /*输入信号参数*/
    #define fs 8192
    #define samples 256
    #define signal_FREQUENCY1200
    #define signal_Amplitude1 0.6
    #define signal_FREQUENCY22100
    #define signal_AMPLITUDE2 0.15
    /* Hamming Window parameters */
    #define haming_alpha
    0.5.3836万 #define hamming_beta
    0.4.6164万 /*常量*/
    #define pi
    3.1415926536 /*生成的Hamming Window函数*/
    DSPLIB_DATA(window,4)
    _Q15 Window[samples];
    /*输入信号和FFT结果*/
    DSPLIB_DATA(input,MSP_align_FFT_Q15(samples))
    _Q15 input[samples];/*
    处理的临时数据数*/ DSPLIB_DATA_DATA(input_exvoid_FF_data;*3*/void/invoid;invoid;invoid/invoid
    
    *3
    
    
    
    
    
    void main (void)
    {
    MSP_STATUS状态;
    mspump_q15_params mpyParams;
    MSP_FFT_Q15_params fftParams;
    /*禁用WDT */
    WDTCTL = WDTPW + WDTHOLD;
    
    /*初始化输入信号和Hamming窗口*/
    initSignal();
    initHamming();
    /*将输入信号乘以生成的Hamming窗口*/
    mpyParams.length =样本;
    状态= MSP_Pumped_Q15 (&mpyParams,输入,窗口,输入);
    MSP_checkStatus (状态);
    /*初始化FFT参数结构。 */
    fftParams.length =样本;
    fftParams.bitReverse =真;
    fftParams.twiddleTable = MSP_cmplx_twidle_table_256_Q15;
    /*执行固定缩放的实际FFT */
    msm_benchmarkStart(MSP_benchmark_base, 16);
    状态= MSP_FFT_FIXED_Q15 (&fftParams,输入);
    cycleCount = MSP_benchmarkStop(MSP_benchmark_base);
    MSP_checkStatus (状态);
    
    /*程序结束。 */
    __no_operation();
    }
    void initSignal(void){
    
    MSP_STATUS状态;
    msp_add_q15_params addParams;
    msp_sinusoid Q15_params sinParams;
    /*生成Q15输入信号1*/
    sinParams.length =样本;
    sinParams.振 幅=_Q15 (signal_Amplitude1);
    sinParams.cosOmega =_Q15(cosf(2*PI*SIGNAL_FREQUENCY1/FS));
    sinParams.sinOmega =_Q15(sinf (2*PI*SIGNAL_FREQUENCY1/FS));
    状态= MSP_sinusoid Q15 (&sinParams,输入);
    MSP_checkStatus (状态);
    /*生成Q15输入信号2到临时数组*/
    sinParams.length =样本;
    sinParams.振 幅=_Q15 (SIGNAL_AMPLIMUDE2);
    sinParams.cosOmega =_Q15(cosf(2*PI*SIGNAL_FREQUENCY2/FS));
    sinParams.sinOmega =_Q15(sinf (2*PI*SIGNAL_FREQUENCY2/FS));
    状态= MSP_sinusoid Q15 (&sinParams,temp);
    MSP_checkStatus (状态);
    /*添加输入信号*/
    addParams.length =样本;
    状态= MSP_ADD_Q15(&addParams, input, temp, input);
    msm_checkStatus(status);
    }
    void initHamming(void){
    
    MSP_STATUS状态;
    msp_sub_q15_params子参数;
    msp_copy_q15_params copyParams;
    msp_fill Q15_params filParams;
    msp_sinusoid Q15_params sinParams;
    /*为余弦函数生成正弦曲线*/
    sinParams.length =3*samples/2;
    sinParams.振 幅=_Q15 (hamming_beta);
    sinParams.cosOmega =_Q15(cosf(2*pi/(samples-1));
    sinParams.sinOmega =_Q15 (sinf (2*pi/(samples-1)));
    状态= MSP_sinusoid Q15 (&sinParams,temp);
    MSP_checkStatus (状态);
    /*通过PI/2移动正弦曲线以创建余弦函数*/
    copyParams.length =样本;
    状态= MSP_COPY_Q15 (&copyParams,&temp[samples/4],&temp[0]);
    MSP_checkStatus (状态);
    /*使用alpha常量*/填充临时数组
    FillParams.length =样本;
    FillParams.value =_Q15 (haming_alpha);
    状态= MSP_Fill _Q15 (&filParams,窗口);
    MSP_checkStatus (状态);
    /*从alpha常量减去生成的余弦以生成最终窗口*/
    SubParams.length =样本;
    状态= msp_sub_q15 (&subParams,Window,temp,Window);
    msm_checkStatus(status);
    } 

    但也有一些修改

    #include "MSP4S.h"
    
    #include <mathing.h>
    #include <stdint.h>
    
    
    #include "DSPLIB.h"
    
    /*输入信号参数*/
    #define fs 3000
    #定义样品 1024
    #define signal_FREQUENCY1 90
    #define signal_Amplitude1 0.6
    #define signal_FREQUENCY22100
    #define signal_AMPLIMITUDE2 0.15
    
    /* Hamming Window parameters */
    #define haming_alpha
    0.5.3836万 #define hamming_beta
    
    0.4.6164万 /*常量*/
    #define pi
    
    3.1415926536 //*生成的Hamming Window函数*//DSPLIB_DATA(window,4)//_Q15
    
    Window[Samples];
    
    /*输入信号和FFT结果*/
    DSPLIB_DATA(input,MSP_align_FFT_Q15(samples)
    _Q15 input[samples];/*
    
    处理*/////exterp_data的临时数据数*/voidvid;
    
    
    
    
    
    
    void *32*invoid/invoid signat;invoid_invoid_inch_invoidn*3
    
    
    
    void main (void)
    {
    
    /*检查是否定义了正确的版本。 */
    如果(MSP_Lea_getRevision()!= MSP_LEA_REVISION){
    // MSP_LEA_REVISION的定义值与LEA版本不匹配。
    __no_operation();
    }
    
    MSP_STATUS状态;
    mspump_q15_params mpyParams;
    MSP_FFT_Q15_params fftParams;
    
    /*禁用WDT */
    WDTCTL = WDTPW + WDTHOLD;
    
    /*初始化输入信号和Hamming窗口*/
    initSignal();
    // initHamming();
    
    //*输入信号乘以生成的Hamming窗口*//mpyParams.length
    =样本;
    // status = mspump_q15 (&mpyParams,输入,窗口,输入);
    // mspcheckStatus (状态);
    
    /*初始化FFT参数结构。 */
    fftParams.length =样本;
    fftParams.bitReverse =真;
    fftParams.twiddleTable = MSP_cmplx_twidle_table_256_Q15;
    
    /*执行固定缩放的实际FFT */
    msm_benchmarkStart(MSP_benchmark_base, 16);
    状态= MSP_FFT_FIXED_Q15 (&fftParams,输入);
    cycleCount = MSP_benchmarkStop(MSP_benchmark_base);
    MSP_checkStatus (状态);
    
    //检查状态标志。
    IF (status == MSP_SUCCESS)
    {
    //错误!
    __no_operation();
    }
    否则,如果(status == msm_size_error)
    {
    //错误!
    __no_operation();
    }
    否则,如果(status == msm_shift_size_error)
    {
    //错误!
    __no_operation();
    }
    否则,如果(status == msm_table_size_error)
    {
    //错误!
    __no_operation();
    }
    否则,如果(状态== MSP_LEA_BUSY)
    {
    //错误!
    __no_operation();
    }
    否则,如果(状态== MSP_LEA_INVALID_ADDRESS)
    {
    //错误!
    __no_operation();
    }
    否则,如果(状态== MSP_LEA_OUT,of_range)
    {
    //错误!
    __no_operation();
    }
    否则,如果(status == MSP_LEA_scalar_inconsistence)
    {
    //错误!
    __no_operation();
    }
    否则,如果(状态== MSP_LEA_COMMAND_OVERFLOW)
    {
    //错误!
    __no_operation();
    }
    否则,如果(状态== MSP_LEA_INCORRY_REVISION)
    {
    //错误!
    __no_operation();
    }
    否则
    {
    __no_operation();
    }
    
    /*程序结束。 */
    __no_operation();
    }
    
    void initSignal(void){
    
    MSP_STATUS状态;
    msp_add_q15_params addParams;
    msp_sinusoid Q15_params sinParams;
    
    /*生成Q15输入信号1*/
    sinParams.length =样本;
    sinParams.振 幅=_Q15 (signal_Amplitude1);
    sinParams.cosOmega =_Q15(cosf(2*PI*SIGNAL_FREQUENCY1/FS));
    sinParams.sinOmega =_Q15(sinf (2*PI*SIGNAL_FREQUENCY1/FS));
    状态= MSP_sinusoid Q15 (&sinParams,输入);
    msp_checkStatus (状态);
    
    //生成Q15输入信号2到临时数组*//sinParams.length
    =样本;
    // sinParams.riams =_Q15 (signal_AMPLITUDE2);
    // sinParams.cosOmega =_Q15 (cosf (2*PI*signal_parens_2/fs)=_Q15
    
    
    
    
    
    )状态/ms_psnf/状态= ms_psan= ms_quat/ms_ps/ ps=状态
    // status = msm_add_q15 (&addParams,input,temp,input);
    // msp_checkStatus (status);
    }
    
    //void initHamming (void)
    //{
    // msp_status;
    // msp_sub_q15_params subParams;
    // msp_copy_q15_params copyParams;
    // msp_fill _q15_parfilams Params;
    // msp_sinusoid_q15_params sinParams;
    //
    ////生成余弦函数的正弦曲线*//sinParams.length
    =3*samples/2;//
    sinParams.amplitude =_Q15(haming_beta);
    // sinParams.cosOmega =_Q15(cosf(2*pi/samples-1));
    // sinparams.s.sinoslosloslums/params.statuspi=_15*params/
    s/snis/params*15
    
    
    
    
    // status = msp_copy_Q15 (&copyParams,&temp[samples/4],&temp[0]);
    // msp_checkStatus (status);
    /////*
    使用alpha常量*
    // filmParams.length =样本;
    // Params.value =_Q15 (haming_alpha);
    // status = msp_parming = ms_windowsfill
    
    //
    ///////*从alpha常量减去生成的余弦以生成最终窗口*//
    subParams.length =样本;
    // status = msp_sub_q15 (&subParams,Window,temp,Window);
    // msp_checkStatus (status);
    //} 

    两者的状态值相同。

    最佳。

    Marcos。

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

    我测试了您在上面提供的两套代码,没有发现您遇到的问题。 您能否提供您正在处理的DPSLib版本,CCS版本和MSP430FR5994硅片版本,以便我尝试重现该问题?

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

    您好,Caleb,

    版本:

    代码编辑器工作室 版本:7.2 .0.0.0013万  
    DSPLIB_1_20_03_01

    我再次检查了它,我注意到在窗口表达式中状态变量的值是MSP_SUCCESS。 在发布的代码中,有一些IFS检查状态值,并且状态== MSP_SIZE _ERROR为TRUE,而状态== MSP_SUCCESS为FALSE。

    我不能不明白为什么。

    最佳,

    Marcos Llorente Ortega。

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

    Marcos,您好!

    我相信编译器可能会使实际工作正常的事情“看起来”失败。 由于所有的IF语句都会导致相同的代码__NO_OPESTUTE(),因此编译器很可能会将其中的多个语句组合在一起。 如果您在项目设置中关闭优化,我希望代码的行为符合您的预期。

    此致,  

    Caleb Overbay

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

    这是关键,如果我关闭所有的优化功能,就像我预期的那样。

    最后我还获得了1024点FFT。

    还有一件事,我不知道这是不是正确的论坛,但我想用电容器消除信号中的不正之风。 我知道我应该考虑ADC的阻抗。  我搜索了文档中的值,但找不到该值。 我正在使用P 3.3 输入。

    谢谢你。

    此致。

    Marcos Llorente Ortega。

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

    我想指出的是,在启用优化后,代码仍能正常工作。 只有if-else语句由于编译器对它们进行了优化而表现异常。

    而且,我不明白你说“我想用电容器消除信号中的不礼貌”的意思。 您能否更详细地解释您正在尝试做什么?

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

    由于不活动,我将关闭此线程。 如果您有任何其他问题,请随时发布到此主题,它将自动重新打开。

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

    您好,Caleb,

    首先,新年快乐!!

    我有最后一个问题。 我使用LEA来解决1024点FFT。 在您的帮助下,我解决  了数据对齐问题。  现在LEA RAM内存具有以下分布:

    从0x0.0002万c00到0x0.3万 ->空(1024字节)

    从0x0.3万到 0x0.38万 -> My_var_FFT

    从 0x0.38万  到 0x0.0003万ac8 ->空(712字节)

    现在我想给LEA RAM添加一个新变量。使用这个

    #pragma data_section(my_var2,".leaRAM")

    _Q15 my_var[512];

    CCS返回错误1.001万和1.0099万-D  

    我也尝试过:

     DSPLIB_DATA (my_var,MSP_align_FFT_Q15 (512));

    _Q15 my_var[512];

    并出现相同的错误。

    这些错误与内存问题有关,当my_var位于LEA RAM中的第一个空位时。

    如何将my_var2存储在LEA RAM中?

    此致。

    Marcos。

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

    祝你新年快乐!

    我建议您在LEA RAM中放置变量时使用DSPLIB_DATA()宏。 这样可以确保满足正确的对齐要求。

    我尝试将my_var[512]变量添加到transform_ex1_FFT_fixed_q15.c示例代码中,但没有看到您遇到的错误。 您是否可以发布更新的代码,让我在设置中试用?

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

    我使用了DSPLIB_DATA(),这是代码。

    #include "MSP4S.h"
    
    #include <mathing.h>
    #include <stdint.h>
    
    
    #include "DSPLIB.h"
    
    /*输入信号参数*/
    #define fs 3000
    #定义样品 1024
    
    
    
    Int16_t i,pos;
    Int16_t avg,sum;
    
    
    
    DSPLIB_DATA (MY 2512)
    //#pragma data_section(MY_var2,".leaRAM")
    _Q15 my_var2[512];
    
    
    /*输入信号和_FFT结果*/
    DSPLIB_DATA (my_var_var2,".leaRAM")_Q15_25.4224万,var_2515-242[2524, var_2542,2524 var_2542, var_2524,2542 var_2524,</s>2524
    
    
    
    -2.5616万,-2.592万,-2.5504万,-2.592万,-2.5616万,-2.5648万,-2.4848万,-2.4624万,
    -2.4544万,-2.5424万,-2.5296万,-2.5216万,-2.5504万,-2.5616万,-2.544万,-2.5312万,
    -2.5504万,-2.568万,-2.5616万,-2.5456万,-2.5312万,-2.5376万,-2.5328万,-2.5296万,
    -2.5584万,-2.5376万,-2.5664万,-2.5424万,-2.5488万,-2.5808万,-2.56万,-2.5568万,
    -2.5776万,-2.5568万,-2.5872万,-2.5552万,-2.592万,-2.5232万,-2.4992万,-2.44万,
    -2.472万,-2.5456万,-2.544万,-2.5248万,-2.5104万,-2.5664万,-2.5664万,-2.5648万,
    -2.544万,-2.5296万,-2.5216万,-2.552万,-2.5296万,-2.5504万,-2.5072万,-2.5568万,
    -2.5264万,-2.5552万,-2.552万,-2.536万,-2.568万,-2.56万,-2.5536万,-2.5856万,
    -2.5328万,-2.5776万,-2.5536万,-2.5968万,-2.5408万,-2.5824万,-2.5008万,-2.44万,
    -2.4688万,-2.5232万,-2.5488万,-2.5328万,-2.5248万,-2.5104万,-2.5488万,-2.5664万,
    -2.5392万,-2.5312万,-2.5552万,-2.5264万,-2.552万,-2.504万,-2.5488万,-2.5072万,
    -2.5392万,-2.5488万,-2.5104万,-2.5776万,-2.5472万,-2.5456万,-2.5744万,-2.5168万,
    -2.5696万,-2.5408万,-2.5696万,-2.5648万,-2.5456万,-2.5712万,-2.5408万,-2.464万,
    -2.4336万,-2.4944万,-2.5408万,-2.5328万,-2.5328万,-2.5104万,-2.5488万,-2.552万,
    -2.5408万,-2.5728万,-2.528万,-2.5568万,-2.5312万,-2.544万,-2.504万,-2.5216万,
    -2.5536万,-2.5424万,-2.5376万,-2.552万,-2.536万,-2.584万,-2.5424万,-2.5744万,
    -2.5408万,-2.5552万,-2.5568万,-2.5536万,-2.5648万,-2.5696万,-2.568万,-2.4864万,
    -2.4528万,-2.4576万,-2.5264万,-2.5392万,-2.5376万,-2.5136万,-2.5376万,-2.5344万,
    -2.5584万,-2.5408万,-2.5616万,-2.5296万,-2.56万,-2.5248万,-2.5168万,-2.544万,
    -2.5152万,-2.5328万,-2.5456万,-2.5296万,-2.5552万,-2.5472万,-2.552万,-2.568万,
    -2.5408万,-2.5504万,-2.576万,-2.576万,-2.5488万,-2.5488万,-2.552万,-2.5184万,
    -2.4736万,-2.4448万,-2.4912万,-2.5408万,-2.5328万,-2.5264万,-2.536万,-2.5456万,
    -2.536万,-2.568万,-2.5232万,-2.5568万,-2.5488万,-2.512万,-2.5488万,-2.528万,
    -2.5424万,-2.5392万,-2.5328万,-2.5456万,-2.5488万,-2.536万,-2.5744万,-2.576万,
    -2.5424万,-2.5408万,-2.5664万,-2.5696万,-2.5712万,-2.5488万,-2.5552万,-2.5328万,
    -2.4848万,-2.4528万,-2.4832万,-2.5376万,-2.5168万,-2.5488万,-2.5168万,-2.536万,
    -2.5696万,-2.5328万,-2.544万,-2.5552万,-2.5104万,-2.5648万,-2.5104万,-2.5488万,
    -2.5344万,-2.568万,-2.5104万,-2.5664万,-2.5328万,-2.5424万,-2.5584万,-2.584万,
    -2.552万,-2.5568万,-2.5504万,-2.5568万,-2.592万,-2.5568万,-2.5456万,-2.568万,
    -2.528万,-2.4608万,-2.48万,-2.4944万,-2.5472万,-2.5424万,-2.5136万,-2.5456万,
    -2.5424万,-2.5408万,-2.576万,-2.5424万,-2.5744万,-2.528万,-2.5568万,-2.5696万,
    -2.5328万,-2.528万,-2.552万,-2.5856万,-2.544万,-2.5456万,-2.5456万,-2.5664万,
    -2.5904万,-2.5872万,-2.5296万,-2.5424万,-2.5776万,-2.4816万,-2.5648万,-2.5568万,
    -2.5648万,-2.56万,-2.5296万,-2.5504万,-2.6万,-2.6192万,-2.5536万,-2.5904万,
    -2.5904万,-2.576万,-2.6128万,-2.52万,-2.5616万,-2.6144万,-2.5952万,-2.616万,
    -2.5952万,-2.6224万,-2.5584万,-2.6496万,-2.5552万,-2.6064万,-2.6512万,-2.6万,
    -2.6352万,-2.5984万,-2.6496万,-2.5664万,-2.464万,-2.5536万,-2.5136万,-2.576万,
    -2.4416万,-2.6064万,-2.5168万,-2.512万,-2.624万,-2.5648万,-2.6416万,-2.5488万,
    -2.5824万,-2.6208万,-2.5456万,-2.5536万,-2.5632万,-2.5984万,-2.5728万,-2.584万,
    -2.5936万,-2.5776万,-2.6256万,-2.5872万,-2.592万,-2.616万,-2.5888万,-2.6096万,
    -2.6064万,-2.6万,-2.6048万,-2.6032万,-2.4992万,-2.5408万,-2.5264万,-2.5296万,
    -2.5744万,-2.5856万,-2.5696万,-2.5664万,-2.552万,-2.5872万,-2.6128万,-2.592万,
    -2.5712万,-2.6096万,-2.5952万,-2.5536万,-2.576万,-2.5584万,-2.5872万,-2.592万,
    -2.5728万,-2.576万,-2.5872万,-2.5888万,-2.6352万,-2.5648万,-2.5888万,-2.5728万,
    -2.6128万,-2.5904万,-2.6288万,-2.5696万,-2.5232万,-2.52万,-2.536万,-2.5424万,
    -2.544万,-2.5616万,-2.5664万,-2.5728万,-2.568万,-2.5664万,-2.584万,-2.5952万,
    -2.568万,-2.6万,-2.5504万,-2.5632万,-2.544万,-2.5792万,-2.5856万,-2.5744万,
    -2.5904万,-2.5792万,-2.5552万,-2.608万,-2.5712万,-2.6384万,-2.5696万,-2.6万,
    -2.5984万,-2.6144万,-2.6304万,-2.5856万,-2.4928万,-2.5024万,-2.544万,-2.568万,
    -2.5504万,-2.552万,-2.5424万,-2.5792万,-2.584万,-2.5632万,-2.6064万,-2.56万,
    -2.5904万,-2.5696万,-2.5728万,-2.5552万,-2.5552万,-2.5904万,-2.5552万,-2.6064万,
    -2.5776万,-2.5648万,-2.6224万,-2.5648万,-2.6016万,-2.5744万,-2.5824万,-2.592万,
    -2.5776万,-2.592万,-2.6272万,-2.592万,-2.5168万,-2.48万,-2.4976万,-2.5552万,
    -2.5648万,-2.5488万,-2.5328万,-2.5808万,-2.5712万,-2.5776万,-2.5792万,-2.5728万,
    -2.5552万,-2.5872万,-2.5696万,-2.5536万,-2.5584万,-2.5312万,-2.5904万,-2.5728万,
    -2.5552万,-2.5808万,-2.5824万,-2.584万,-2.5872万,-2.5744万,-2.5968万,-2.6112万,
    -2.584万,-2.576万,-2.5904万,-2.5952万,-2.5328万,-2.4848万,-2.4832万,-2.552万,
    -2.5744万,-2.5456万,-2.5376万,-2.5616万,-2.5744万,-2.5776万,-2.5856万,-2.5504万,
    -2.584万,-2.568万,-2.5616万,-2.5744万,-2.5408万,-2.5728万,-2.576万,-2.5728万,
    -2.5856万,-2.5616万,-2.5792万,-2.6万,-2.5712万,-2.552万,-2.6032万,-2.5952万,
    -2.5952万,-2.5872万,-2.5792万,-2.5872万,-2.5504万,-2.4864万,-2.5024万,-2.5536万,
    -2.5536万,-2.5504万,-2.5568万,-2.552万,-2.5744万,-2.5872万,-2.568万,-2.5808万,
    -2.5888万,-2.5472万,-2.5856万,-2.5456万,-2.552万,-2.5712万,-2.5824万,-2.5584万,
    -2.5792万,-2.52万,-2.5888万,-2.5936万,-2.5696万,-2.5584万,-2.568万,-2.592万,
    -2.6048万,-2.6032万,-2.5824万,-2.5664万,-2.536万,-2.4832万,-2.512万,-2.5552万,
    -2.5456万,-2.5536万,-2.5504万,-2.5424万,-2.5856万,-2.5616万,-2.568万,-2.5872万,
    -2.5456万,-2.5744万,-2.5616万,-2.56万,-2.5456万,-2.5568万,-2.5472万,-2.5984万,
    -2.5504万,-2.5568万,-2.5584万,-2.6032万,-2.5888万,-2.5696万,-2.5568万,-2.5872万,
    -2.5936万,-2.6112万,-2.584万,-2.576万,-2.5104万,-2.488万,-2.5296万,-2.5296万,
    -2.5584万,-2.5664万,-2.5232万,-2.5712万,-2.5744万,-2.5552万,-2.584万,-2.552万,
    -2.5872万,-2.5568万,-2.576万,-2.5392万,-2.5728万,-2.5536万,-2.568万,-2.5856万,
    -2.5616万,-2.56万,-2.5568万,-2.576万,-2.5856万,-2.5936万,-2.5648万,-2.5712万,
    -2.6048万,-2.592万,-2.5904万,-2.5872万,-2.4976万,-2.5136万,-2.5184万,-2.5264万,
    -2.5856万,-2.5408万,-2.5328万,-2.5712万,-2.5488万,-2.5888万,-2.5568万,-2.584万,
    -2.5504万,-2.5808万,-2.5392万,-2.5664万,-2.5536万,-2.5504万,-2.5648万,-2.5776万,
    -2.5696万,-2.5712万,-2.5696万,-2.5696万,-2.5904万,-2.6016万,-2.5792万,-2.5904万,
    -2.6万,-2.5904万,-2.6048万,-2.5552万,-2.5296万,-2.5104万,-2.5008万,-2.5648万,
    -2.5632万,-2.5584万,-2.5744万,-2.5488万,-2.584万,-2.5488万,-2.6032万,-2.5616万,
    -2.608万,-2.56万,-2.5392万,-2.5696万,-2.5808万,-2.5744万,-2.5552万,-2.5776万,
    -2.5856万,-2.5792万,-2.56万,-2.5632万,-2.5984万,-2.5824万,-2.5776万,-2.6224万,
    -2.5664万,-2.6112万,-2.592万,-2.5712万,-2.536万,-2.4864万,-2.528万,-2.576万,
    -2.5408万,-2.5792万,-2.5488万,-2.5808万,-2.552万,-2.5968万,-2.552万,-2.5936万,
    -2.5856万,-2.552万,-2.5488万,-2.5664万,-2.5728万,-2.5744万,-2.5632万,-2.544万,
    -2.5712万,-2.5856万,-2.5648万,-2.568万,-2.6096万,-2.568万,-2.6万,-2.5712万,
    -2.5968万,-2.5872万,-2.5984万,-2.5936万,-2.5072万,-2.496万,-2.536万,-2.5312万,
    -2.5984万,-2.5232万,-2.5792万,-2.536万,-2.5776万,-2.5792万,-2.552万,-2.5728万,
    -2.5936万,-2.552万,-2.552万,-2.5536万,-2.5648万,-2.5792万,-2.5904万,-2.5552万,
    -2.5696万,-2.5824万,-2.56万,-2.5936万,-2.5696万,-2.6032万,-2.5568万,-2.6万,
    -2.5968万,-2.5856万,-2.616万,-2.5648万,-2.4944万,-2.5232万,-2.5216万,-2.5664万,
    -2.5552万,-2.5712万,-2.5376万,-2.5584万,-2.576万,-2.5792万,-2.5584万,-2.5472万,
    -2.5728万,-2.5776万,-2.5552万,-2.5552万,-2.5456万,-2.5824万,-2.5888万,-2.5536万,
    -2.56万,-2.56万,-2.6万,-2.5584万,-2.5968万,-2.5696万,-2.584万,-2.6万,
    -2.5584万,-2.616万,-2.5904万,-2.5216万,-2.52万,-2.5056万,-2.5616万,-2.5504万,
    -2.552万,-2.5664万,-2.5472万,-2.5456万,-2.592万,-2.5856万,-2.5664万,-2.5472万,
    -2.5472万,-2.5712万,-2.5792万,-2.5488万,-2.5424万,-2.5856万,-2.56万,-2.568万,
    -2.5536万,-2.5744万,-2.5648万,-2.6096万,-2.5552万,-2.5744万,-2.5888万,-2.5696万,
    -2.6048万,-2.608万,-2.5856万,-2.5344万,-2.4976万,-2.5648万,-2.5616万,-2.5328万,
    -2.536万,-2.5648万,-2.5632万,-2.5424万,-2.5744万,-2.5088万,-2.5456万,-2.5792万,
    -2.536万,-2.6048万,-2.5296万,-2.5504万,-2.4864万,-2.456万,-2.5696万,-2.472万,
    -2.5872万,-2.5264万,-2.5872万,-2.5104万,-2.5168万,-2.6064万,-2.5088万,-2.5648万,
    -2.528万,-2.5632万,-2.6万,-2.504万,-2.5488万,-2.5296万,-2.5952万,-2.536万,
    -2.5408万,-2.5904万,-2.5408万,-2.584万,-2.5024万,-2.5872万,-2.5776万,-2.5056万,
    -2.6032万,-2.5264万,-2.5808万,-2.5536万,-2.4864万,-2.504万,-2.5008万,-2.5456万,
    -2.5088万,-2.5344万,-2.5344万,-2.5216万,-2.5456万,-2.5712万,-2.552万,-2.5408万,
    -2.5232万,-2.5472万,-2.5584万,-2.5552万,-2.512万,-2.5328万,-2.5664万,-2.5232万,
    -2.5456万,-2.5328万,-2.5664万,-2.5456万,-2.552万,-2.56万,-2.5248万,-2.5568万,
    -2.5728万,-2.5504万,-2.592万,-2.5168万,-2.5312万,-2.4656万,-2.5216万,-2.5136万,
    -2.5376万,-2.5488万,-2.528万,-2.5184万,-2.5424万,-2.552万,-2.5568万,-2.5504万,
    -2.5328万,-2.5312万,-2.5584万,-2.528万,-2.5312万,-2.5552万,-2.5456万,-2.5648万,
    -2.5312万,-2.5504万,-2.5168万,-2.552万,-2.5632万,-2.5392万,-2.5536万,-2.5744万,
    -2.5392万,-2.5712万,-2.5552万,-2.5696万,-2.4912万,-2.5136万,-2.496万,-2.5264万,
    -2.5296万,-2.5504万,-2.552万,-2.5216万,-2.528万,-2.5296万,-2.56万,-2.5504万,
    -2.5344万,-2.5344万,-2.5392万,-2.5184万,-2.5456万,-2.5264万,-2.5616万,-2.528万,
    -2.552万,-2.5328万,-2.536万,-2.5808万,-2.5392万,-2.5536万,-2.568万,-2.5216万,
    -2.5728万,-2.5344万,-2.5648万,-2.5648万,-2.4976万,-2.9648万,-2.5168万,-2.528万,
    -2.5024万,-2.536万,-2.5424万,-2.5248万,-2.5296万,-2.5264万,-2.5424万,-2.544万,
    -2.5264万,-2.5456万,-2.5312万,-2.536万,-2.5296万,-2.5472万,-2.5136万,-2.5632万,
    -2.5552万,-2.5184万,-2.552万,-2.5296万,-2.568万,-2.5616万,-2.5456万,-2.5456万,
    -2.5552万,-2.5536万,-2.5872万,-2.568万,-2.512万,-2.4976万,-2.5024万,-2.528万,
    -2.5456万,-2.536万,-2.5248万,-2.5376万,-2.5488万,-2.5264万,-2.5472万,-2.5584万,
    -2.5264万,-2.5504万,-2.5152万,-2.5376万,-2.5296万,-2.5568万,-2.5392万,
    -2.5376万,-2.5616万,-2.5296万,-2.5744万,-2.5264万,-2.5632万,-2.5248万,-2.5584万,
    -2.5456万,-2.5456万,-2.5664万,-2.5856万,-2.5424万,-2.4832万,-2.4784万,-2.5104万,
    -2.552万,-2.544万,-2.5232万,-2.5296万,-2.5424万,-2.5168万,-2.5536万,-2.5136万,
    -2.5552万,-2.5248万,-2.5344万,-2.5392万,-2.5168万,-2.5488万,-2.536万,-2.5312万,
    -2.5552万,-2.5152万,-2.5632万,-2.5488万,-2.5648万,-2.536万,-2.5376万,-2.5584万,
    -2.5648万,-2.5456万,-2.56万,-2.5712万,-2.552万,-2.5264万,-2.488万,-2.488万};
    
    
    
    
    
    /*基准周期计数*/
    挥发性UINT32_t cycleCount;
    
    
    
    void main (void)
    {
    
    /*检查是否定义了正确的版本。 */
    如果(MSP_Lea_getRevision()!= MSP_LEA_REVISION){
    // MSP_LEA_REVISION的定义值与LEA版本不匹配。
    __no_operation();
    }
    
    MSP_STATUS状态;
    MSP_FFT_Q15_params fftParams;
    
    /*禁用WDT */
    WDTCTL = WDTPW + WDTHOLD;
    
    
    
    /*初始化FFT参数结构。 */
    fftParams.length =样本;
    fftParams.bitReverse =真;
    fftParams.twiddleTable = MSP_cmplx_twidle_table_1024_Q15;
    
    
    /*执行固定缩放的实际FFT */
    msm_benchmarkStart(MSP_benchmark_base, 16);
    状态= MSP_FFT_FIXED_Q15 (&fftParams,my_var_FFT);
    
    
    
    位置=0;
    //计算正频域的量值
    对于(i = 0;i < 1024;I=I+2)
    {
    my_var2[pos]=sqrt(pow(my_var_FFT[i],2)+pow(my_var_FFT[i+1],2));
    POS++;
    }
    对于(i=0;i<20;i++){
    my_var2[i]=0;
    }
    
    平均值= 0;
    总和=0;
    (i = 0;i < 512;I++)
    {
    SUM += my_var2[i];
    }
    平均=(总和)/512;
    
    对于(i=0;i<512;i++){
    my_var2[i]=my_var2[i]-avg;
    }
    
    
    
    cycleCount = MSP_benchmarkStop(MSP_benchmark_base);
    MSP_checkStatus (状态);
    
    /*添加输入信号*/
    msp_add_q15_params addParams;
    addParams.length = 512;
    状态= MSP_ADD_Q15 (&addParams,my_var2,my_var2,my_var2);
    msm_checkStatus(status);
    
    
    
    }
    

    此致,

    Marcos。

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

    感谢您提供代码。 我注意到您发布的代码中有一个错误。 DSPLIB_DATA(my_AC2)实际上应为2512。 原稿试图将其设置为512字节对齐,但由于my_var2仅用于矢量添加,因此它只需要4字节对齐。

    但是,即使修复了错误,我也能够重现您遇到的问题。 很遗憾,我无法解释这种行为。 正如您所指出的,在LEA RAM中有足够的空间来容纳数据。 我已经开始与我们的MSP430编译器团队就此进行内部对话。 我会随时向您通报最新进展。 感谢您的耐心等待。

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

    有新消息吗? 我需要这个空间来存储更多变量。

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

    Marcos,您好!

    此问题很可能需要一些时间才能解决,因为它现在似乎是编译器错误。 同时,如果您按以下方式声明变量,则编译器似乎会在LEA RAM中正确分配变量:

    DSPLIB_DATA(my_var2,4)
    //#pragma data_section(my_var2,".leaRAM")
    _Q15 my_var2[512];/*
    
    输入信号和FFT结果*/
    DSPLIB_data(My_var_FFT,MSP_align_FFT_Q15(samples/2)
    _FFT_my_采样; 

    我想强调的是,这不是典型的设置方法,而是在问题解决之前的临时解决方法。  

    此致,  
    Caleb Overbay