问题得到嵌入式ARM CMSIS-DSP Codegen生成代码

5视图(30天)
我测试了”验证冷杉过滤手臂Cortex-M处理器在MATLAB”例子,工作正常并生成CMSIS-DSP函数调用所以我非常确定所有的依赖包是正确安装:https://uk.mathworks.com/help/supportpkg/armcortexm/ref/Verify-FIR-Filter-on-ARM-Cortex-M-Processor-in-MATLAB-example.html金宝app
我修改它使用256点FFT,使用DSP.fft()和abs(),我希望来生成代码调用arm_rfft_fast_f32()和arm_abs_f32 ()。
我观察两个问题,编译后的代码,我一直在兜圈子试图解决,好几天。
1 / arm_rfft_fast_f32()和arm_abs_f32不被称为()。
2 /返回数组(X)被声明为最大堆栈分配大小(65536),即使我使用0()或预先声明它coder.nullcopy(),所以吃了太多内存:
无效ec_fft (const双x[256],双x [65536])
{
静态creal_T Y0 [65536];
下面列出的测试代码。它很短但在附件完整的源代码。
任何帮助将不胜感激。
非常感谢,
约翰
FFT函数(ec_fft.m):
函数[X] = ec_fft (X)% # codegen
% X = 0 (256);
持续的英国《金融时报》;
如果isempty(英尺)
英国《金融时报》= dsp.FFT (“FFTLengthSource”,“属性”,“FFTLength”,256);
结束
X = abs(英国《金融时报》(X));
结束
测试应用程序(ec_fft_test.m):
Fs = 1000;
L = 256;
t = (0: l - 1) / Fs;
x = cos(2 *π* 250 * t);
X = coder.nullcopy (X);
X = ec_fft (X);
情节(Fs / 2 * linspace (0, 1128), X (1:128))
标题(“单面噪声信号的振幅谱y (t) ')
包含(的频率(赫兹));ylabel (“X (f) | |”)
脚本用于创建库(run_codegen_arm.m):
ec_fft_test
cfgEx = coder.config (“自由”);
cfgEx。CodeReplacementLibrary =“胳膊Cortex-M”;
cfgEx.HardwareImplementation。ProdHWDeviceType =“胳膊兼容- >手臂Cortex-M”;
cfgEx。GenCodeOnly = true;
codegen- d ec_fft_lib ec_fft。m报告-rowmajor配置cfgEx args {0 (1256)}
1评论
约翰•爱德华兹
约翰•爱德华兹 2022年7月1日
附加,版本解决了输出数组大小申报问题。
解决方案:使用方法:
类型= coder.getArgTypes (“ec_fft_test”,“ec_fft”);
和:
参数类型
还使用单精度,精密codegen / CMSIS-DSP支持。金宝app
只需要得到DSP.fft()处理codegen: -)
最好的,
约翰

登录置评。

接受的答案

约翰•爱德华兹
约翰•爱德华兹 2022年7月8日
多亏了优秀,Mathworks支持,我有一个解决方案。金宝app
从本质上讲,DSP.fft()只支持复杂的输入数据,不是金宝app真实的。
供参考,以下是CRL dsp.FFT条件:
输入规格:
  1. 复杂的值
  2. 数据类型:单
  3. 单通道(输入应该列向量)
  4. 输入长度必须等于FFT长度(根据dsp。FFT属性值的需求)
dsp的属性值要求。FFT来代替:
  1. FFTImplementation:  Radix-2 
  2.  正常化:  假 
  3. FFTLength:  16, 64、256、1024 
  4. FFTLengthSource :   “财产”
  5. WrapInput :  真正  或  假 。值并不重要,因为输入长度必须等于FFT长度
如果有人需要这样做将来的项目文件用这个邮件与文件名project_files.zip相连。
最好的问候,
约翰

更多的答案(0)

下载188bet金宝搏


释放

R2022a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!