
概述
本文首先介紹數(shù)字信號(hào)處理(DSP),是指將連續(xù)的模擬信號(hào)轉(zhuǎn)換為不連續(xù)、離散的數(shù)字信號(hào)并進(jìn)行處理以提取所需的信號(hào)(信息)的過程。然后通過一個(gè)簡單的Lab來說明DSP庫文件的使用方法和功能實(shí)現(xiàn)。
DSP系統(tǒng)工程如下
將模擬(連續(xù))信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)。
通過專用DSP、MCU等對(duì)信號(hào)進(jìn)行處理(噪聲濾波、頻率分析等),并提取所需信號(hào)。
輸出處理后的信號(hào)。

過去,DSP系統(tǒng)需要多個(gè)芯片,例如MCU和專用DSP。而RX MCU使得在單芯片上配置DSP系統(tǒng)成為可能,并具有多種優(yōu)勢(shì)。

使用DSP庫,可以在RX系列MCU上輕松執(zhí)行FIR、IIR濾波器和FFT等數(shù)字信號(hào)處理。RX系列MCU支持執(zhí)行高速數(shù)字信號(hào)處理所需的乘法和累加運(yùn)算等DSP指令。
RX DSP庫的目標(biāo)設(shè)備有以下這些RX MCU


RX DSP庫版本5.0包含以下5個(gè)API,API為RX CPU的浮點(diǎn)和DSP指令運(yùn)算提供了高效的操作。
統(tǒng)計(jì)操作API
過濾操作API
線性變換API
復(fù)數(shù)運(yùn)算API
矩陣運(yùn)算API
如下表所示,RX DSP庫版本5.0由多個(gè)文檔、庫文件和示例項(xiàng)目組成。庫文件針對(duì)每個(gè)RXv1、RXv2和Xv3 CPU進(jìn)行了優(yōu)化,并且示例項(xiàng)目針對(duì)每個(gè)CPU進(jìn)行了配置。
表1 DSP庫的構(gòu)成

每個(gè)CPU的“dsplib-rxv*”文件夾中有8種類型的庫文件和8個(gè)頭文件。庫文件根據(jù)支持的FPU、字節(jié)序模式和錯(cuò)誤檢查進(jìn)行分類。頭文件分為API專用定義和通用定義。所有通用定義均在r_dsp_types.h中描述,該文件包含在每個(gè)API頭文件中。詳細(xì)信息請(qǐng)參閱“RX DSP Library APIs Version 5.0 User’s Manual: Software (R01UW0200)”。
目前最新版本為V.5.0,詳細(xì)信息可參考以下鏈接:
https://www.renesas.cn/cn/zh/software-tool/dsp-library-rx-family

下面通過一個(gè)簡單的Lab了解RX DSP庫和如何使用DSP庫實(shí)現(xiàn)對(duì)信號(hào)的低通濾波,使用RX23E-A(RXv2 CPU)為例。
本Lab主要介紹如何添加DSP庫,然后完成對(duì)采集到的信號(hào)進(jìn)行IIR濾波。由于本次實(shí)驗(yàn)中采集到的數(shù)據(jù)是溫度結(jié)果,所以使用IIR濾波的效果不明顯。這里用一組特定的數(shù)據(jù)為例,來展示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和新加文件夾的路徑。
鼠標(biāo)右鍵點(diǎn)擊工程名,選擇Properties。

選擇C/C++ Build→Settings→Compiler→Source,點(diǎn)擊右上角的
。

添加dsplib-rxv2文件夾的路徑。
Add directory path對(duì)話框中,點(diǎn)擊Workspace。

選擇dsplib-rxv2文件夾,點(diǎn)擊OK。

點(diǎn)擊OK,完成路路徑的添加。

用上面同樣的方式,添加r_dsp文件夾的路徑。

添加Library。
選擇Linkeryou6Input,點(diǎn)擊右上角的
。

Format選擇library,點(diǎn)擊Workspace。

選擇dsplib-rxv2文件夾中的RX_DSP_FPU_LE_Check.lib文件。

點(diǎn)擊OK。

●?打開rx23ea_local_board_lab.c文件,main()函數(shù)前添加以下頭文件、宏定義和變量。
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()函數(shù)中添加以下代碼
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]);? ?}}
●?對(duì)工程進(jìn)行編譯
和調(diào)試
。
●?打開Memory窗口,點(diǎn)擊
。

添加變量gs_sample_wave_data和gs_intermediate_buffer[1]。

點(diǎn)擊![]()

選擇Waveform,點(diǎn)擊Add Rendering(s)。

點(diǎn)擊Wave Properties。

設(shè)定屬性,Data Size選擇32bit,Buffer Size填寫2048,點(diǎn)擊OK。

并點(diǎn)擊
,進(jìn)行實(shí)時(shí)刷新。

兩個(gè)變量用同樣的方法進(jìn)行設(shè)置。
注? 意
如果找不到Memory窗口,可以使用下面的方法,其他窗口同理。
點(diǎn)擊Window→Show View→Other…

按分類查找,或者直接在上面的框中進(jìn)行關(guān)鍵字搜索。

●?運(yùn)行代碼
,需要點(diǎn)擊兩次,在Memory窗口觀察DSP結(jié)果。


可以把鼠標(biāo)放在波形上,按住Ctrl鍵通過滾動(dòng)鼠標(biāo)滾輪放大或者縮小波形。
●?按下斷開按鈕
,或者終止按鈕
。
如您在使用瑞薩MCU/MPU產(chǎn)品中有任何問題,可識(shí)別下方二維碼或復(fù)制網(wǎng)址到瀏覽器中打開,進(jìn)入瑞薩技術(shù)論壇尋找答案或獲取在線技術(shù)支持。
https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/
1
END
1
推薦閱讀
RX產(chǎn)品家族介紹手冊(cè) [4] RX700/RX600、RX200、RX100系列
研討會(huì)回放 | 集成24位ADC的RX23E-A MCU
RX231系列MCU舊工程打開編譯報(bào)錯(cuò)問題解決