Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【STM32F407的DSP教程】第31章 STM32F407实数浮点FFT(支持单精度和双精度)

【STM32F407的DSP教程】第31章 STM32F407实数浮点FFT(支持单精度和双精度)

作者头像
Simon223
发布于 2021-06-17 10:24:06
发布于 2021-06-17 10:24:06
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547

第31章 STM32F407实数浮点FFT(支持单精度和双精度)

本章主要讲解实数浮点FTT,支持单精度和双精度。

31.1 初学者重要提示

31.2 实数浮点FFT 说明

31.3 单精度函数arm_rfft_fast_f32的使用(含幅频和相频)

31.4 双精度函数arm_rfft_ fast_f64的使用(含幅频和相频)

31.5 实验例程说明(MDK)

31.6 实验例程说明(IAR)

31.7 总结

31.1 初学者重要提示

  1. 与上一章节的复数FFT相比,实数FFT仅需用户输入实部即可。输出结果根据FFT的对称性,也仅输出一半的频谱。

31.2 实数浮点FFT说明

CMSIS DSP库里面包含一个专门用于计算实数序列的FFT库,很多情况下,用户只需要计算实数序列即可。计算同样点数FFT的实数序列要比计算同样点数的虚数序列有速度上的优势。

快速的rfft算法是基于混合基cfft算法实现的。

一个N点的实数序列FFT正变换采用下面的步骤实现:

由上面的框图可以看出,实数序列的FFT是先计算N/2个实数的CFFT,然后再重塑数据进行处理从而获得半个FFT频谱即可(利用了FFT变换后频谱的对称性)。

一个N点的实数序列FFT逆变换采用下面的步骤实现:

实数FFT支持浮点,Q31和Q15三种数据类型。

31.3 单精度函数arm_rfft_fast_f32的使用(含幅频和相频)

31.3.1 函数说明

函数原型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void arm_rfft_fast_f32(
  const arm_rfft_fast_instance_f32 * S,
  float32_t * p,
  float32_t * pOut,
  uint8_t ifftFlag)

函数描述:

这个函数用于单精度浮点实数FFT。

函数参数:

1、 第1个参数是封装好的浮点FFT例化,需要用户先调用函数arm_rfft_fast_init_f32初始化,然后供此函数arm_rfft_fast_f32调用。支持32, 64, 128, 256, 512, 1024, 2048, 4096点FFT。

比如做1024点FFT,代码如下:

arm_rfft_fast_instance_f32 S;

arm_rfft_fast_init_f32(&S, 1024);

arm_rfft_fast_f32(&S, testInput_f32, testOutput_f32, ifftFlag);

2、 第2个参数是实数地址,比如我们要做1024点实数FFT,要保证有1024个缓冲。

3、 第3个参数是FFT转换结果,转换结果不是实数了,而是复数,按照实部,虚拟,实部,虚部,依次排列。比如做1024点FFT,这里的输出也会有1024个数据,即512个复位。

4、 第4个参数用于设置正变换和逆变换,ifftFlag=0表示正变换,ifftFlag=1表示逆变换。

31.3.2 使用举例并和Matlab比较

下面通过在开发板上运行这个函数并计算幅频相应,然后再与Matlab计算的结果做对比。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
*********************************************************************************************************
*    函 数 名: arm_rfft_f32_app
*    功能说明: 调用函数arm_rfft_fast_f32计算幅频和相频
*    形    参:无
*    返 回 值: 无
*********************************************************************************************************
*/
static void arm_rfft_f32_app(void)
{
    uint16_t i;
    arm_rfft_fast_instance_f32 S;
    
    
    /* 正变换 */
    ifftFlag = 0; 
    
    /* 初始化结构体S中的参数 */
     arm_rfft_fast_init_f32(&S, TEST_LENGTH_SAMPLES);
    
    for(i=0; i<1024; i++)
    {
        /* 波形是由直流分量,50Hz正弦波组成,波形采样率1024,初始相位60° */
        testInput_f32[i] = 1 + cos(2*3.1415926f*50*i/1024 + 3.1415926f/3);
    }
    
    /* 1024点实序列快速FFT */ 
    arm_rfft_fast_f32(&S, testInput_f32, testOutput_f32, ifftFlag);
    
    /* 为了方便跟函数arm_cfft_f32计算的结果做对比,这里求解了1024组模值,实际函数arm_rfft_fast_f32
       只求解出了512组  
    */ 
     arm_cmplx_mag_f32(testOutput_f32, testOutputMag_f32, TEST_LENGTH_SAMPLES);
    
    
    printf("=========================================\r\n");    
    
    /* 求相频 */
    PowerPhaseRadians_f32(testOutput_f32, Phase_f32, TEST_LENGTH_SAMPLES, 0.5f);
    
    
    /* 串口打印幅值和相频 */
    for(i=0; i<TEST_LENGTH_SAMPLES; i++)
    {
        printf("%f, %f\r\n", testOutputMag_f32[i], Phase_f32[i]);
    }
}

运行函数arm_rfft_f32_app可以通过串口打印出计算的模值和相角,下面我们就通过Matlab计算的模值和相角跟arm_rfft_fast_f32计算的做对比。

对比前需要先将串口打印出的数据加载到Matlab中,并给这个数组起名sampledata,加载方法在前面的教程的第13章13.6小结已经讲解,这里不做赘述了。Matlab中运行的代码如下::

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Fs = 1024;               % 采样率
N  = 1024;               % 采样点数
n  = 0:N-1;              % 采样序列
t  = 0:1/Fs:1-1/Fs;      % 时间序列
f = n * Fs / N;          %真实的频率

%波形是由直流分量,50Hz正弦波正弦波组成
x = 1 + cos(2*pi*50*t + pi/3)   ;  
y = fft(x, N);               %对原始信号做FFT变换
Mag = abs(y);

subplot(2,2,1);
plot(f, Mag); 
title('Matlab计算幅频响应');
xlabel('频率');
ylabel('赋值');

subplot(2,2,2);
realvalue = real(y);
imagvalue = imag(y);
plot(f, atan2(imagvalue, realvalue)*180/pi.*(Mag>=200)); 
title('Matlab计算相频响应');
xlabel('频率');
ylabel('相角');

subplot(2,2,3);
plot(f, sampledata1);  %绘制STM32计算的幅频相应
title('STM32计算幅频响应');
xlabel('频率');
ylabel('赋值');

subplot(2,2,4);
plot(f, sampledata2);   %绘制STM32计算的相频相应
title('STM32计算相频响应');
xlabel('频率');
ylabel('相角');

运行Matlab后的输出结果如下:

从上面的对比结果中可以看出,从上面的前512点对比中,我们可以看出两者的计算结果是相符的Matlab和函数arm_rfft_fast_f32计算的结果基本是一直的。幅频响应求出的幅值和相频响应中的求出的初始相角都是没问题的。

31.4 双精度函数arm_rfft_fast_f64的使用(含幅频和相频)

31.4.1 函数说明

函数原型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void arm_rfft_fast_f64(
  arm_rfft_fast_instance_f64 * S,
  float64_t * p,
  float64_t * pOut,
  uint8_t ifftFlag)

函数描述:

这个函数用于双精度浮点实数FFT。

函数参数:

1、 第1个参数是封装好的浮点FFT例化,需要用户先调用函数arm_rfft_fast_init_f64初始化,然后供此函数arm_rfft_fast_f64调用。支持32, 64, 128, 256, 512, 1024, 2048, 4096点FFT。

比如做1024点FFT,代码如下:

arm_rfft_fast_instance_f64 S;

arm_rfft_fast_init_f64(&S, 1024);

arm_rfft_fast_f64(&S, testInput_f64, testOutput_f64, ifftFlag);

2、 第2个参数是实数地址,比如我们要做1024点实数FFT,要保证有1024个缓冲。

3、 第3个参数是FFT转换结果,转换结果不是实数了,而是复数,按照实部,虚拟,实部,虚部,依次排列。比如做1024点FFT,这里的输出也会有1024个数据,即512个复位。

4、 第4个参数用于设置正变换和逆变换,ifftFlag=0表示正变换,ifftFlag=1表示逆变换

31.4.2 使用举例并和Matlab比较

下面通过在开发板上运行这个函数并计算幅频相应,然后再与Matlab计算的结果做对比。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
*********************************************************************************************************
*    函 数 名: arm_rfft_f64_app
*    功能说明: 调用函数arm_rfft_fast_f64计算幅频和相频
*    形    参:无
*    返 回 值: 无
*********************************************************************************************************
*/
static void arm_rfft_f64_app(void)
{
    uint16_t i;
    float64_t lX,lY;
    arm_rfft_fast_instance_f64 S;
    
    
    /* 正变换 */
    ifftFlag = 0; 
    
    /* 初始化结构体S中的参数 */
     arm_rfft_fast_init_f64(&S, TEST_LENGTH_SAMPLES);
    
    for(i=0; i<1024; i++)
    {
        /* 波形是由直流分量,50Hz正弦波组成,波形采样率1024,初始相位60° */
        testInput_f64[i] = 1 + cos(2*3.1415926*50*i/1024 + 3.1415926/3);
    }
    
    /* 1024点实序列快速FFT */ 
    arm_rfft_fast_f64(&S, testInput_f64, testOutput_f64, ifftFlag);
    
    /* 求解模值  */ 
    for (i =0; i < TEST_LENGTH_SAMPLES; i++)
    {
         lX = testOutput_f64[2*i];                    /* 实部*/
        lY = testOutput_f64[2*i+1];                   /* 虚部 */  
        testOutputMag_f64[i] = sqrt(lX*lX+ lY*lY);   /* 求模 */
    }
        
    
    printf("=========================================\r\n");    
    
    /* 求相频 */
    PowerPhaseRadians_f64(testOutput_f64, Phase_f64, TEST_LENGTH_SAMPLES, 0.5);
    

    /* 串口打印幅值和相频 */
    for(i=0; i<TEST_LENGTH_SAMPLES; i++)
    {
        printf("%.11f, %.11f\r\n", testOutputMag_f64[i], Phase_f64[i]);
    }    
            
}

运行函数arm_rfft_f64_app可以通过串口打印出计算的模值和相角,下面我们就通过Matlab计算的模值和相角跟arm_rfft_fast_f32计算的做对比。

对比前需要先将串口打印出的数据加载到Matlab中,并给这个数组起名sampledata,加载方法在前面的教程的第13章13.6小结已经讲解,这里不做赘述了。Matlab中运行的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Fs = 1024;               % 采样率
N  = 1024;               % 采样点数
n  = 0:N-1;              % 采样序列
t  = 0:1/Fs:1-1/Fs;      % 时间序列
f = n * Fs / N;          %真实的频率

%波形是由直流分量,50Hz正弦波正弦波组成
x = 1 + cos(2*pi*50*t + pi/3)   ;  
y = fft(x, N);               %对原始信号做FFT变换
Mag = abs(y);

subplot(2,2,1);
plot(f, Mag); 
title('Matlab计算幅频响应');
xlabel('频率');
ylabel('赋值');

subplot(2,2,2);
realvalue = real(y);
imagvalue = imag(y);
plot(f, atan2(imagvalue, realvalue)*180/pi.*(Mag>=200)); 
title('Matlab计算相频响应');
xlabel('频率');
ylabel('相角');

subplot(2,2,3);
plot(f, sampledata1);  %绘制STM32计算的幅频相应
title('STM32计算幅频响应');
xlabel('频率');
ylabel('赋值');

subplot(2,2,4);
plot(f, sampledata2);   %绘制STM32计算的相频相应
title('STM32计算相频响应');
xlabel('频率');
ylabel('相角');

运行Matlab后的输出结果如下:

从上面的对比结果中可以看出,从上面的前512点对比中,我们可以看出两者的计算结果是相符的Matlab和函数arm_rfft_fast_f64计算的结果基本是一直的。幅频响应求出的幅值和相频响应中的求出的初始相角都是没问题的。

31.5 实验例程说明(MDK)

配套例子:

V5-221_实数浮点FTT(支持单精度和双精度)

实验目的:

  1. 学习实数浮点FFT,支持单精度浮点和双精度浮点

实验内容:

  1. 启动一个自动重装软件定时器,每100ms翻转一次LED2。
  2. 按下按键K1,串口打印1024点实数单精度FFT的幅频响应和相频响应。
  3. 按下按键K2,串口打印1024点实数双精度FFT的幅频响应和相频响应。

使用AC6注意事项

特别注意附件章节C的问题

上电后串口打印的信息:

波特率 115200,数据位 8,奇偶校验位无,停止位 1。

RTT方式打印信息:

程序设计:

系统栈大小分配:

硬件外设初始化

硬件外设的初始化是在 bsp.c 文件实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
*********************************************************************************************************
*    函 数 名: bsp_Init
*    功能说明: 初始化所有的硬件设备。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。只需要调用一次
*    形    参:无
*    返 回 值: 无
*********************************************************************************************************
*/
void bsp_Init(void)
{
    /* 
       STM32F407 HAL 库初始化,此时系统用的还是F407自带的16MHz,HSI时钟:
       - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。
       - 设置NVIC优先级分组为4。
     */
    HAL_Init();

    /* 
       配置系统时钟到168MHz
       - 切换使用HSE。
       - 此函数会更新全局变量SystemCoreClock,并重新配置HAL_InitTick。
    */
    SystemClock_Config();

    /* 
       Event Recorder:
       - 可用于代码执行时间测量,MDK5.25及其以上版本才支持,IAR不支持。
       - 默认不开启,如果要使能此选项,务必看V5开发板用户手册第8章
    */    
#if Enable_EventRecorder == 1  
    /* 初始化EventRecorder并开启 */
    EventRecorderInitialize(EventRecordAll, 1U);
    EventRecorderStart();
#endif
    
    bsp_InitKey();        /* 按键初始化,要放在滴答定时器之前,因为按钮检测是通过滴答定时器扫描 */
    bsp_InitTimer();      /* 初始化滴答定时器 */
    bsp_InitUart();    /* 初始化串口 */
    bsp_InitLed();        /* 初始化LED */        
}

主功能:

主程序实现如下操作:

  • 启动一个自动重装软件定时器,每100ms翻转一次LED2。
  • 按下按键K1,串口打印1024点实数单精度FFT的幅频响应和相频响应。
  • 按下按键K2,串口打印1024点实数双精度FFT的幅频响应和相频响应。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
*********************************************************************************************************
*    函 数 名: main
*    功能说明: c程序入口
*    形    参: 无
*    返 回 值: 错误代码(无需处理)
*********************************************************************************************************
*/
int main(void)
{
    uint8_t ucKeyCode;        /* 按键代码 */
    

    bsp_Init();        /* 硬件初始化 */
    PrintfLogo();    /* 打印例程信息到串口1 */

    PrintfHelp();    /* 打印操作提示信息 */
    

    bsp_StartAutoTimer(0, 100);    /* 启动1个100ms的自动重装的定时器 */

    /* 进入主程序循环体 */
    while (1)
    {
        bsp_Idle();        /* 这个函数在bsp.c文件。用户可以修改这个函数实现CPU休眠和喂狗 */
        

        if (bsp_CheckTimer(0))    /* 判断定时器超时时间 */
        {
            /* 每隔100ms 进来一次 */
            bsp_LedToggle(4);    /* 翻转LED2的状态 */   
        }
        
        ucKeyCode = bsp_GetKey();    /* 读取键值, 无键按下时返回 KEY_NONE = 0 */
        if (ucKeyCode != KEY_NONE)
        {
            switch (ucKeyCode)
            {
                case KEY_DOWN_K1:            /* K1键按下 */
                    arm_rfft_f32_app();
                    break;
                
                case KEY_DOWN_K2:            /* K2键按下 */
                    arm_rfft_f64_app();
                    break;
                
                    
                default:
                    /* 其它的键值不处理 */
                    break;
            }
        }

    }
}

31.6 实验例程说明(IAR)

配套例子:

V5-221_实数浮点FTT(支持单精度和双精度)

实验目的:

  1. 学习实数浮点FFT,支持单精度浮点和双精度浮点

实验内容:

  1. 启动一个自动重装软件定时器,每100ms翻转一次LED2。
  2. 按下按键K1,串口打印1024点实数单精度FFT的幅频响应和相频响应。
  3. 按下按键K2,串口打印1024点实数双精度FFT的幅频响应和相频响应。

上电后串口打印的信息:

波特率 115200,数据位 8,奇偶校验位无,停止位 1。

RTT方式打印信息:

程序设计:

系统栈大小分配:

硬件外设初始化

硬件外设的初始化是在 bsp.c 文件实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
*********************************************************************************************************
*    函 数 名: bsp_Init
*    功能说明: 初始化所有的硬件设备。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。只需要调用一次
*    形    参:无
*    返 回 值: 无
*********************************************************************************************************
*/
void bsp_Init(void)
{
    /* 
       STM32F407 HAL 库初始化,此时系统用的还是F407自带的16MHz,HSI时钟:
       - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。
       - 设置NVIC优先级分组为4。
     */
    HAL_Init();

    /* 
       配置系统时钟到168MHz
       - 切换使用HSE。
       - 此函数会更新全局变量SystemCoreClock,并重新配置HAL_InitTick。
    */
    SystemClock_Config();

    /* 
       Event Recorder:
       - 可用于代码执行时间测量,MDK5.25及其以上版本才支持,IAR不支持。
       - 默认不开启,如果要使能此选项,务必看V5开发板用户手册第8章
    */    
#if Enable_EventRecorder == 1  
    /* 初始化EventRecorder并开启 */
    EventRecorderInitialize(EventRecordAll, 1U);
    EventRecorderStart();
#endif
    
    bsp_InitKey();        /* 按键初始化,要放在滴答定时器之前,因为按钮检测是通过滴答定时器扫描 */
    bsp_InitTimer();      /* 初始化滴答定时器 */
    bsp_InitUart();    /* 初始化串口 */
    bsp_InitLed();        /* 初始化LED */        
}

主功能:

主程序实现如下操作:

  • 启动一个自动重装软件定时器,每100ms翻转一次LED2。
  • 按下按键K1,串口打印1024点实数单精度FFT的幅频响应和相频响应。
  • 按下按键K2,串口打印1024点实数双精度FFT的幅频响应和相频响应。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
*********************************************************************************************************
*    函 数 名: main
*    功能说明: c程序入口
*    形    参: 无
*    返 回 值: 错误代码(无需处理)
*********************************************************************************************************
*/
int main(void)
{
    uint8_t ucKeyCode;        /* 按键代码 */
    

    bsp_Init();        /* 硬件初始化 */
    PrintfLogo();    /* 打印例程信息到串口1 */

    PrintfHelp();    /* 打印操作提示信息 */
    

    bsp_StartAutoTimer(0, 100);    /* 启动1个100ms的自动重装的定时器 */

    /* 进入主程序循环体 */
    while (1)
    {
        bsp_Idle();        /* 这个函数在bsp.c文件。用户可以修改这个函数实现CPU休眠和喂狗 */
        

        if (bsp_CheckTimer(0))    /* 判断定时器超时时间 */
        {
            /* 每隔100ms 进来一次 */
            bsp_LedToggle(4);    /* 翻转LED2的状态 */   
        }
        
        ucKeyCode = bsp_GetKey();    /* 读取键值, 无键按下时返回 KEY_NONE = 0 */
        if (ucKeyCode != KEY_NONE)
        {
            switch (ucKeyCode)
            {
                case KEY_DOWN_K1:            /* K1键按下 */
                    arm_rfft_f32_app();
                    break;
                
                case KEY_DOWN_K2:            /* K2键按下 */
                    arm_rfft_f64_app();
                    break;
                
                    
                default:
                    /* 其它的键值不处理 */
                    break;
            }
        }

    }
}

31.7 总结

本章节设计到实数FFT实现,有兴趣的可以深入了解源码的实现。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【STM32H7的DSP教程】第31章 STM32H7实数浮点FFT(支持单精度和双精度)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第31章 STM32H7实数浮点FFT(支持单精度和双精
Simon223
2021/06/17
1.2K0
【STM32H7的DSP教程】第31章       STM32H7实数浮点FFT(支持单精度和双精度)
【STM32F407的DSP教程】第30章 STM32F407复数浮点FFT(支持单精度和双精度)
当前复数FFT函数支持三种数据类型,分别是浮点,定点Q31和Q15。这些FFT函数有一个共同的特点,就是用于输入信号的缓冲,在转化结束后用来存储输出结果。这样做的好处是节省了RAM空间,不需要为输入和输出结果分别设置缓存。由于是复数FFT,所以输入和输出缓存要存储实部和虚部。存储顺序如下:{real[0], imag[0], real[1], imag[1],………………} ,在使用中切记不要搞错。
Simon223
2021/06/17
1.7K0
【STM32F407的DSP教程】第30章       STM32F407复数浮点FFT(支持单精度和双精度)
【STM32F407的DSP教程】第45章 STM32F407的IIR高通滤波器实现(支持逐个数据的实时滤波)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第45章 STM32F407的IIR高通滤波器实现(支持
Simon223
2021/09/06
2.1K0
【STM32F407的DSP教程】第32章 STM32F407的实数FFT的逆变换(支持单精度和双精度)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第32章 STM32F407的实数FFT的逆变换(支持单
Simon223
2021/06/17
7990
【STM32F407的DSP教程】第32章       STM32F407的实数FFT的逆变换(支持单精度和双精度)
【STM32H7的DSP教程】第30章 STM32H7复数浮点FFT(支持单精度和双精度)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第30章 STM32H7复数浮点FFT(支持单精度和双精
Simon223
2021/06/17
1.2K0
【STM32H7的DSP教程】第30章       STM32H7复数浮点FFT(支持单精度和双精度)
【STM32F429的DSP教程】第33章 STM32F429不限制点数FFT实现
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第33章 STM32F429不限制点数FFT实现 本章主
Simon223
2021/07/08
7190
【STM32F407的DSP教程】第33章 STM32F407不限制点数FFT实现
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第33章 STM32F407不限制点数FFT实现 本章主
Simon223
2021/07/08
7320
【STM32H7的DSP教程】第38章 STM32H7的FIR高通滤波器实现(支持逐个数据的实时滤波)
1、 本章节提供的高通滤波器支持实时滤波,每次可以滤波一个数据,也可以多个数据,不限制大小。但要注意以下两点:
Simon223
2021/08/06
9840
【STM32F407的DSP教程】第44章 STM32F407的IIR低通滤波器实现(支持逐个数据的实时滤波)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第44章 STM32F407的IIR低通滤波器实现(支持
Simon223
2021/08/30
7720
【STM32F407的DSP教程】第44章       STM32F407的IIR低通滤波器实现(支持逐个数据的实时滤波)
【STM32H7的DSP教程】第32章 STM32H7的实数FFT的逆变换(支持单精度和双精度)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第32章 STM32H7的实数FFT的逆变换(支持单精度
Simon223
2021/06/17
8350
【STM32H7的DSP教程】第32章       STM32H7的实数FFT的逆变换(支持单精度和双精度)
【STM32F407的DSP教程】第46章 STM32F407的IIR带通滤波器实现(支持逐个数据的实时滤波)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第46章 STM32F407的IIR带通滤波器实现(支持
Simon223
2021/09/06
1.2K0
【STM32H7的DSP教程】第33章 STM32H7不限制点数FFT实现
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第33章 STM32H7不限制点数FFT实现 本章主要讲
Simon223
2021/07/08
9050
【STM32F407的DSP教程】第49章 STM32F407的自适应滤波器实现,无需Matlab生成系数(支持实时滤波)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第49章 STM32F407的自适应滤波器实现,无需Ma
Simon223
2021/09/26
7250
【STM32F407的DSP教程】第49章       STM32F407的自适应滤波器实现,无需Matlab生成系数(支持实时滤波)
【STM32F407的DSP教程】第47章 STM32F407的IIR带阻滤波器实现(支持逐个数据的实时滤波)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第47章 STM32F407的IIR带阻滤波器实现(支持
Simon223
2021/09/06
7670
【STM32H7的DSP教程】第29章 STM32H7移植汇编定点FFT库(64点,256点和1024点)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第29章 STM32H7移植汇编定点FFT库(64点,2
Simon223
2021/06/17
1.2K0
【STM32H7的DSP教程】第29章       STM32H7移植汇编定点FFT库(64点,256点和1024点)
【STM32F407的DSP教程】第38章 STM32F407的FIR高通滤波器实现(支持逐个数据的实时滤波)
1 本章节提供的高通滤波器支持实时滤波,每次可以滤波一个数据,也可以多个数据,不限制大小。但要注意以下两点:
Simon223
2021/08/06
7110
【STM32F407的DSP教程】第37章 STM32F407的FIR低通滤波器实现(支持逐个数据的实时滤波)
1、 本章节提供的低通滤波器支持实时滤波,每次可以滤波一个数据,也可以多个数据,不限制大小。但要注意以下两点:
Simon223
2021/08/06
1.1K0
【STM32H7的DSP教程】第37章 STM32H7的FIR低通滤波器实现(支持逐个数据的实时滤波)
1、 本章节提供的低通滤波器支持实时滤波,每次可以滤波一个数据,也可以多个数据,不限制大小。但要注意以下两点:
Simon223
2021/08/06
1K0
【STM32F429的DSP教程】第29章 STM32F429移植汇编定点FFT库(64点,256点和1024点)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第29章 STM32F429移植汇编定点FFT库(64点
Simon223
2021/06/17
7050
【STM32F429的DSP教程】第29章       STM32F429移植汇编定点FFT库(64点,256点和1024点)
【STM32F407的DSP教程】第28章 FFT和IFFT的Matlab实现(幅频响应和相频响应)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第28章 FFT和IFFT的Matlab实现(幅频响应和
Simon223
2021/04/30
2.2K0
【STM32F407的DSP教程】第28章       FFT和IFFT的Matlab实现(幅频响应和相频响应)
推荐阅读
【STM32H7的DSP教程】第31章 STM32H7实数浮点FFT(支持单精度和双精度)
1.2K0
【STM32F407的DSP教程】第30章 STM32F407复数浮点FFT(支持单精度和双精度)
1.7K0
【STM32F407的DSP教程】第45章 STM32F407的IIR高通滤波器实现(支持逐个数据的实时滤波)
2.1K0
【STM32F407的DSP教程】第32章 STM32F407的实数FFT的逆变换(支持单精度和双精度)
7990
【STM32H7的DSP教程】第30章 STM32H7复数浮点FFT(支持单精度和双精度)
1.2K0
【STM32F429的DSP教程】第33章 STM32F429不限制点数FFT实现
7190
【STM32F407的DSP教程】第33章 STM32F407不限制点数FFT实现
7320
【STM32H7的DSP教程】第38章 STM32H7的FIR高通滤波器实现(支持逐个数据的实时滤波)
9840
【STM32F407的DSP教程】第44章 STM32F407的IIR低通滤波器实现(支持逐个数据的实时滤波)
7720
【STM32H7的DSP教程】第32章 STM32H7的实数FFT的逆变换(支持单精度和双精度)
8350
【STM32F407的DSP教程】第46章 STM32F407的IIR带通滤波器实现(支持逐个数据的实时滤波)
1.2K0
【STM32H7的DSP教程】第33章 STM32H7不限制点数FFT实现
9050
【STM32F407的DSP教程】第49章 STM32F407的自适应滤波器实现,无需Matlab生成系数(支持实时滤波)
7250
【STM32F407的DSP教程】第47章 STM32F407的IIR带阻滤波器实现(支持逐个数据的实时滤波)
7670
【STM32H7的DSP教程】第29章 STM32H7移植汇编定点FFT库(64点,256点和1024点)
1.2K0
【STM32F407的DSP教程】第38章 STM32F407的FIR高通滤波器实现(支持逐个数据的实时滤波)
7110
【STM32F407的DSP教程】第37章 STM32F407的FIR低通滤波器实现(支持逐个数据的实时滤波)
1.1K0
【STM32H7的DSP教程】第37章 STM32H7的FIR低通滤波器实现(支持逐个数据的实时滤波)
1K0
【STM32F429的DSP教程】第29章 STM32F429移植汇编定点FFT库(64点,256点和1024点)
7050
【STM32F407的DSP教程】第28章 FFT和IFFT的Matlab实现(幅频响应和相频响应)
2.2K0
相关推荐
【STM32H7的DSP教程】第31章 STM32H7实数浮点FFT(支持单精度和双精度)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验