回顧模電數(shù)電單片機(jī)MATLAB,用Python打開新思路
掃描二維碼
隨時(shí)隨地手機(jī)看文章
做FPGA開發(fā)或者是嵌入式開發(fā),數(shù)字圖像處理是一個(gè)很大的領(lǐng)域,回顧下大學(xué)里學(xué)的模電,數(shù)電,單片機(jī)原理,數(shù)字圖像處理,通信理論,MATLAB,目前比較前沿的PythON等知識(shí)聯(lián)系起來,能更好的指明人生規(guī)劃的方向。
1. 模擬電路
都記得我們大學(xué)學(xué)習(xí)的一門課程,模擬電路嗎?難,枯燥,又感覺沒有鬼用。但其實(shí)它是模擬世界到數(shù)字世界的一道橋梁,模擬信號(hào)到數(shù)字信號(hào)01。我們現(xiàn)在想想,數(shù)字圖像是怎么通過模擬轉(zhuǎn)為數(shù)字的?
光有強(qiáng)有弱,呈現(xiàn)在我們眼睛里就是一副灰度圖像(紅外圖像),再加上顏色區(qū)分就是彩色圖像(RGB圖像),再加上多個(gè)截面的圖像就是3D圖像(人臉識(shí)別的圖像)。光信號(hào)的強(qiáng)度大小需要經(jīng)過量化后變?yōu)閿?shù)字信號(hào),即ADC轉(zhuǎn)換。對,就是模擬電路里面的模數(shù)轉(zhuǎn)換,例如用8位ADC將光信號(hào)量化位0~255的數(shù)字量就是灰度值,同時(shí)ADC轉(zhuǎn)化時(shí)需要配合一些運(yùn)放組成的模擬電路,ADC和運(yùn)放就是模擬電路。
光信號(hào)通過一路ADC和運(yùn)放組成的模擬電路將光信號(hào)轉(zhuǎn)化為數(shù)字電信號(hào)得到矩陣灰度值就是灰度圖像;那彩色圖像怎么來的了?我們知道任何顏色都是有RGB三色組合而來,那我們可以用R的濾光片將R色過濾出來給一路ADC和運(yùn)放組成的模擬電路轉(zhuǎn)化為R矩陣值,同樣得到G矩陣值和B矩陣值;最后得到的就是RGB的彩色圖像;采集多個(gè)截面的圖像對應(yīng)的RGB值就得到3D圖像了。
下面是通過python獲取一幅RGB圖片的信息,是一個(gè)矩陣9664*1728*3*8bits數(shù)據(jù),其中第一個(gè)像素的值就是(227,232,236),它正是由3路ADC采集加運(yùn)放處理得到的數(shù)字量。
2. 數(shù)字電路和單片機(jī)原理
還記得數(shù)字電路上對應(yīng)的實(shí)驗(yàn)都是VHDL的實(shí)驗(yàn)嗎?數(shù)字電路告訴我們各種數(shù)字邏輯:非或與異。這些邏輯讓我們能夠通過底層的邏輯來實(shí)現(xiàn)各種復(fù)雜的處理邏輯。還記得當(dāng)時(shí)的數(shù)字電路實(shí)驗(yàn)嗎?先是通過最簡單的各種門電路芯片(7系列數(shù)字芯片)來搭建數(shù)字交通燈等,接著是通過FPGA來搭建數(shù)字交通燈,還有用單片機(jī)來搭建數(shù)字交通燈,為什么同樣的實(shí)驗(yàn)要來來回回做了?老師從來沒有告訴過我們,我們也從來沒有想過為什么:
門電路搭建交通燈,是為了讓我們深刻理解數(shù)字電路的底層邏輯,這也是為什么很多做了很久FPGA的人還入不了門,搞不清FPGA的編程思想,把HDL當(dāng)成C來使用,有點(diǎn)我們從事FPGA開發(fā)的要明白,F(xiàn)PGA里面的最小單元是LUT+REG,而不是大學(xué)學(xué)的各種門 ;
FPGA來搭建交通燈,書本中用的是VHDL而不是Verilog,因?yàn)閂HDL更接近底層,通過HDL編程來讓我們明白硬件描述語言這個(gè)強(qiáng)大的工具,能不能弄透HDL決定你是否完全入門FPGA;
接著是使用單片機(jī)來實(shí)現(xiàn)交通燈,這個(gè)時(shí)候我們用的是匯編或者C來實(shí)現(xiàn)的,其實(shí)最好的過程還是先匯編后C來實(shí)現(xiàn),因?yàn)檫@門課程是單片機(jī)原理,目的是讓大家學(xué)習(xí)后懂了單片機(jī)原理。
而現(xiàn)在的FPGA應(yīng)用中不光是HDL的開發(fā),而是HDL+CPU開發(fā),已經(jīng)越來越是嵌入式的集合體,所以我們思路更需要打開:
現(xiàn)在回想起來,大學(xué)里面學(xué)的數(shù)字電路都是重要的基礎(chǔ)理論知識(shí),懂得數(shù)字電路和單片機(jī)原理,才能更好的用來學(xué)習(xí)FPGA、單片機(jī)、DSP等。但是從來沒有老師告訴我們交叉學(xué)習(xí)這些理論的重要性,而只是玩玩混混實(shí)驗(yàn)。[!--empirenews.page--]
3. 數(shù)字信號(hào)處理、通信理論等
還記得數(shù)字信號(hào)處理一開始接介紹了ADC,接著就是各種看不懂而沒意思的公式,卷積、傅里葉等等。那時(shí)候,唯一的有點(diǎn)實(shí)踐的操作就是MATLAB上機(jī)實(shí)驗(yàn),但大多是抄抄抄。更不用說通信理論了,那東西更是空空空,感覺一輩子也不會(huì)用上。
但是,我們發(fā)現(xiàn)隨著工作年限和能力的提升,我們也后悔當(dāng)初沒學(xué)好這些理論知識(shí),工程實(shí)踐沒了這些理論知識(shí),身價(jià)掉好多,F(xiàn)PGA做算法的待遇你懂的,但是要做好需要很強(qiáng)的數(shù)學(xué)等理論功底。
比如:下面的FFT的IP核使用,IP核例化使用沒什么難的,但是對應(yīng)的原理和如何進(jìn)行信號(hào)處理的話,就需要我們?nèi)パa(bǔ)補(bǔ)相關(guān)的理論:
同樣,H.264視頻壓縮相關(guān)的概念也和信息論理論有很大的關(guān)系,雖然說我會(huì)用就行了,不一定要懂的理論知識(shí),但是玩的轉(zhuǎn)的大牛都是對理論理解很徹底的。
4. MATLAB和PYTHON
MATLAB是之前我們做嵌入式常用的高級語言驗(yàn)證工具,用來學(xué)習(xí)理解線性函數(shù)等數(shù)學(xué)原理,驗(yàn)證算法,生成ROM的參數(shù)表等?,F(xiàn)在比較火的Python也是一個(gè)不錯(cuò)的選擇,而且還非常容易上手,可以用它做一些簡單的操作來加速工程開發(fā),下面是通過Python的PIL庫做的一些簡單圖像處理的效果圖,有興趣的話,大家可以去做更深入的研究:
RGB轉(zhuǎn)灰度圖效果:
邊緣檢測效果:
直方圖均衡效果:
5. 個(gè)人感觸
回顧大學(xué)數(shù)模電,覺得以前沒用的東西,現(xiàn)在很有用而不得不得去重弄。所以,不管你現(xiàn)在在做什么,做的并不是感覺上的毫無用處,指不定未來就靠它來改變你的命運(yùn),為了以后的自己,做最好的現(xiàn)在。
如果你很幸運(yùn),還在上大學(xué),就應(yīng)該把大學(xué)所學(xué)的東西當(dāng)成一個(gè)整體,學(xué)以致用,比同齡人再走遠(yuǎn)一步。