嗷嗷嗷电赛终于结束了!/2023电赛K题反思

事后诸葛一把,这个题再给我两天,应该能更完美😂(画外音:你就是菜,还嘴硬)
分享记录一下,一点个人的小看法,不一定准确,希望以后复刻这个项目的后人,记得我栽下的树doge:
1.首先,我觉得使用MDK官方提供的CMISS-DSP中的FFT函数取峰值基频处理,方向是很正确的;
世界上没有两片相同的树叶,即便两个一模一样的空杯子也是如此——它们固有的基频往往存在细微差异。
但少数极端相似的杯子是存在的,并且可能频率多为固定的5、6种情况,会有几个杯子一个频率。
这个我们只能多买一些杯子筛选。有条件的话,使用大存储的单片机,上更多点的FFT。或许,还可以在滤波、数据处理的方向考虑下。
2.然后,AD采样-FFT计算-显示结果,这个过程建议采用麦克风主导的外部触发,以确保信号被准确及时的捕获;(否则可能像我一样,要靠近使劲敲,让它响的时间更长。演示中这是难看的。)
3.最重要的,敲击分析到的频率,和后来测得的频率,很可能不同。
例如,装置学习记录的特征频率是1800Hz,
而后来敲,频率是在1800和1818Hz之间跳动。
那么,演示时数字也可能会跳变,
这是很尴尬的——在1800时,杯号正确;突然,频率跳成1818,装置不认了,杯号被归零😂
我反思,应该记录一段时间所有出现次数多的数据,作为记录的特征;
识别时也间隔敲多次(题目规定不能抖着敲,但敲多次是被允许的),
分析时间段与时间段之间,数据的相似程度,再判定给出的号码结果。
(欢迎留言交流,共同学习,共同进步)
PS:
折腾的过程复盘(大佬不要看、不要拍砖23333)
萌新人生的第一次电赛,比较慌张。拿到赛题,就赶紧用之前做的FreeRTOS模板工程+CMISS-DSP开整了。
结果发现很慢,慢得出奇!效果很不对头(取64点时都没人家做的OLED音乐频谱快)。
后来发现,自己作为外行、比赛跑系统是相当愚蠢的,
这个FFT的项目、不知道是优先级问题还是内存不够还是CPU性能负担重,反正就是不能搞复杂、去掉FreeRTOS以后就正常了
(PS:上系统是玩ESP32的习惯,事实上我对CMISS封装后的系统抛开CubeMX后怎么用,也没吃明白。对比那些大佬,我是稚嫩的、并不懂RTOS,,)
后来,又发现256点的FFT精度似乎还是不太好,于是加到了512。
遗憾的是,我的F103C6T6,加上精简字库后的U8G2空间却还是不够用了。
担心赛区不让用大开发板(多亏别人提醒),于是夜里翻箱倒柜(学校买的全是正点原子的大板子),
终于找到个VET6核心板,就用上了。
这次把点数提高到1024,麦克风是AD 8K采样。1024点是F103VET6的极限,尝试过2048点,空间是不够的。或许可以试试ZET6,那个空间好像还更大。
最后,比赛的过程紧张充实难忘,我享受这个过程,无论结果如何、都是值得纪念的。