加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

最近在看單片機(jī)....

2021/06/02
339
閱讀需 4 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

最近在看單片機(jī),需要用一個(gè)1塊錢不到的51單片機(jī),做一個(gè)簡化版FFT程序。而且,這個(gè)單片機(jī)也不支持小數(shù),也不支持乘法。

腦袋里真的有兩個(gè)小人,在那吵:

一個(gè)說,別看了,和你專業(yè)又沒關(guān)系,和領(lǐng)導(dǎo)說,就說你干不了

另一個(gè)說,再堅(jiān)持堅(jiān)持,萬事開頭難,撐過去了,又是一遍天。

對(duì)于單片機(jī)熟手來說,單片機(jī)太簡單了;

對(duì)于算法熟手來說,F(xiàn)FT太簡單了;

對(duì)于C語言高手來說,C語言太簡單了;

可是對(duì)于我一個(gè)純硬件人員,這三個(gè)真的是太難了。

啃了一個(gè)禮拜,終于用matlab把FFT算法給整出來了。雖然計(jì)算結(jié)果和matlab內(nèi)置FFT算法一致,但是耗時(shí)比它長不少。

看matlab的help文件,順藤摸瓜,發(fā)現(xiàn)一個(gè)網(wǎng)站,上面竟然整理了三十多年各個(gè)作者的FFT算法程序,還針對(duì)這些算法,分析了不同系統(tǒng)下,運(yùn)行精度和速度。

找了上面運(yùn)行速度最快的看了一下,發(fā)現(xiàn)自己實(shí)在是看不懂。就對(duì)自己說,算了算了,自己啥也不會(huì),還是老老實(shí)實(shí)先從最基本的教科書開始吧。等運(yùn)算速度確實(shí)達(dá)不到要求的時(shí)候,再研究這些。

所以就按照書上的基-2蝶形運(yùn)算,在matlab上一級(jí)一級(jí)地算,做了個(gè)128點(diǎn)的FFT運(yùn)算。

在matlab上驗(yàn)證完,想搬到單片機(jī)上時(shí),傻眼了。

在matlab上用的是定點(diǎn)小數(shù)的運(yùn)算,可是單片機(jī)不支持小數(shù),只支持整數(shù)。

也就是說,我得存在單片機(jī)上一個(gè)數(shù)。這個(gè)數(shù)呢,我心里知道是個(gè)小數(shù),但是單片機(jī)看著是個(gè)整數(shù)。就這點(diǎn),就把我繞的夠嗆,到今天為止,還沒繞明白。

先說說,我對(duì)這些有多不敏感吧。

我家老二老三,因?yàn)榭瓷先ズ苄≈?,所以我?jīng)常會(huì)抱著她們稱體重。以前,在北京的時(shí)候,朋友送了個(gè)嬰兒稱,直接放上就行,不用我計(jì)算。

現(xiàn)在,因?yàn)榘峒遥枰問|西,就把那個(gè)稱留在北京了。現(xiàn)在稱,需要大人先上去稱一下凈重,然后大人抱小孩上去稱個(gè)總重,兩者相減一下。

對(duì)我來說,純靠腦袋記這兩個(gè)數(shù)字都有困難,需要借助紙或者其他人。然后心算這倆數(shù)字的減法,我挑戰(zhàn)過一次,就放棄了,改用手機(jī)上的計(jì)算器。

所以,單片機(jī)看是個(gè)整數(shù),但是我得把它看成小數(shù),還要在這種情況下,用移位相加方法來實(shí)現(xiàn)小數(shù)乘法,真的是挑戰(zhàn)我的記憶力和邏輯能力啊。

如果你問我為啥我要這么虐自己呢,直接和領(lǐng)導(dǎo)說,不干自己專業(yè)外的事情就行了唄。

那是因?yàn)槲矣幸活w上進(jìn)的心哪?。。?/p>

還有,作為一名干了十年的硬件人員,真的是很羨慕做軟件的人啊!動(dòng)動(dòng)鍵盤,就能改變世界!

參考文獻(xiàn):http://www.fftw.org/benchfft

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

公眾號(hào)加油射頻工程師,分享工作和學(xué)習(xí)中,對(duì)射頻知識(shí)的理解和感悟。