概述
本文首先介绍数字信号处理(DSP),是指将连续的模拟信号转换为不连续、离散的数字信号并进行处理以提取所需的信号(信息)的过程。然后通过一个简单的Lab来说明DSP库文件的使用方法和功能实现。
DSP系统工程如下
将模拟(连续)信号转换为数字信号。
通过专用DSP、MCU等对信号进行处理(噪声滤波、频率分析等),并提取所需信号。
输出处理后的信号。
过去,DSP系统需要多个芯片,例如MCU和专用DSP。而RX MCU使得在单芯片上配置DSP系统成为可能,并具有多种优势。
使用DSP库,可以在RX系列MCU上轻松执行FIR、IIR滤波器和FFT等数字信号处理。RX系列MCU支持执行高速数字信号处理所需的乘法和累加运算等DSP指令。
RX DSP库的目标设备有以下这些RX MCU
RX DSP库版本5.0包含以下5个API,API为RX CPU的浮点和DSP指令运算提供了高效的操作。
统计操作API
过滤操作API
线性变换API
复数运算API
矩阵运算API
如下表所示,RX DSP库版本5.0由多个文档、库文件和示例项目组成。库文件针对每个RXv1、RXv2和Xv3 CPU进行了优化,并且示例项目针对每个CPU进行了配置。
表1 DSP库的构成
每个CPU的“dsplib-rxv*”文件夹中有8种类型的库文件和8个头文件。库文件根据支持的FPU、字节序模式和错误检查进行分类。头文件分为API专用定义和通用定义。所有通用定义均在r_dsp_types.h中描述,该文件包含在每个API头文件中。详细信息请参阅“RX DSP Library APIs Version 5.0 User’s Manual: Software (R01UW0200)”。
目前最新版本为V.5.0,详细信息可参考以下链接:
https://www.renesas.cn/cn/zh/software-tool/dsp-library-rx-family
下面通过一个简单的Lab了解RX DSP库和如何使用DSP库实现对信号的低通滤波,使用RX23E-A(RXv2 CPU)为例。
本Lab主要介绍如何添加DSP库,然后完成对采集到的信号进行IIR滤波。由于本次实验中采集到的数据是温度结果,所以使用IIR滤波的效果不明显。这里用一组特定的数据为例,来展示IIR滤波的效果。
步骤
● 解压缩an-r01an4359ej0100-rx-dsplib.zip文件,将其中的dsplib-rxv2文件夹拷贝到工程中。
● 在src文件夹中新建r_dsp文件夹。解压缩r01an4431xx0160-rx-apl.zip文件,workspace_dsp_example→dsp_demo_rx231_tb→src→r_dsp文件夹中的r_dsp_iirbiquad.h、r_dsp_iirbiquad.c、wave_sample1.h、wave_sample2.h拷贝到新建的r_dsp文件夹中。
● 在工程属性中添加DSP Lib和新加文件夹的路径。
鼠标右键点击工程名,选择Properties。
选择C/C++ Build→Settings→Compiler→Source,点击右上角的。
添加dsplib-rxv2文件夹的路径。
Add directory path对话框中,点击Workspace。
选择dsplib-rxv2文件夹,点击OK。
点击OK,完成路路径的添加。
用上面同样的方式,添加r_dsp文件夹的路径。
添加Library。
选择Linkeryou6Input,点击右上角的。
Format选择library,点击Workspace。
选择dsplib-rxv2文件夹中的RX_DSP_FPU_LE_Check.lib文件。
点击OK。
● 打开rx23ea_local_board_lab.c文件,main()函数前添加以下头文件、宏定义和变量。
bool timer_flag = false;
static volatile int32_t s_dsad0_value; /** DSAD0 24bit A/D value storage variable */
static volatile float s_temp = 0; /** Measurement temperature storage variable */
/* Filter Characteristic definition */
static volatile int32_t gs_intermediate_buffer[2][1024]; /* buffer to interface DSP module */
static volatile int32_t gs_output_buffer[1024/2]; /* Output Buffer for DSP to store the result */
static uint8_t gs_coef_select; /* Number of filter Characteristic */
static const int32_t gs_sample_wave_data[1024] =
{
#include "wave_sample2.h"
};
● 在main()函数中添加以下代码
uint32_t dsad0_reg; /** DSAD0.DR register storage variable */
float rtd_temp = 0; /** Measurement temperature */
memset((void *)gs_intermediate_buffer, 0, sizeof(gs_intermediate_buffer)); /* Clears Intermediate Buffer to zero */
memset((void *)gs_output_buffer, 0, sizeof(gs_output_buffer)); /* Clears Output Buffer to zero */
/*** Initializes IIR filter & FFT processing ***/
gs_coef_select = IIRBIQUAD_COEF_HPF;
R_DSP_IIRBiquad_Init();
R_DSP_IIRBiquad_UpdateCoef(gs_coef_select);
R_Config_TMR0_TMR1_Start();
while(1)中最后加入DSP处理部分代码
/* Executes IIRbiquad processing */
R_DSP_IIRBiquad_Operation((int32_t *)gs_sample_wave_data,
(int32_t *)gs_intermediate_buffer[1]);
}
}
while(1)中最后加入DSP处理部分代码
/* Executes IIRbiquad processing */
R_DSP_IIRBiquad_Operation((int32_t *)gs_sample_wave_data,
(int32_t *)gs_intermediate_buffer[1]);
}
}
● 对工程进行编译和调试。
● 打开Memory窗口,点击。
添加变量gs_sample_wave_data和gs_intermediate_buffer[1]。
点击
选择Waveform,点击Add Rendering(s)。
点击Wave Properties。
设定属性,Data Size选择32bit,Buffer Size填写2048,点击OK。
并点击,进行实时刷新。
两个变量用同样的方法进行设置。
注 意
如果找不到Memory窗口,可以使用下面的方法,其他窗口同理。
点击Window→Show View→Other…
按分类查找,或者直接在上面的框中进行关键字搜索。
● 运行代码,需要点击两次,在Memory窗口观察DSP结果。
可以把鼠标放在波形上,按住Ctrl键通过滚动鼠标滚轮放大或者缩小波形。
● 按下断开按钮,或者终止按钮。
如您在使用瑞萨MCU/MPU产品中有任何问题,可识别下方二维码或复制网址到浏览器中打开,进入瑞萨技术论坛寻找答案或获取在线技术支持。
https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/
1
END
1
推荐阅读
RX产品家族介绍手册 [4] RX700/RX600、RX200、RX100系列
研讨会回放 | 集成24位ADC的RX23E-A MCU
RX231系列MCU旧工程打开编译报错问题解决