⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨


官方(fāng)論壇
官方(fāng)淘寶(bǎo)
官方(fāng)博客
微信(xìn)公衆号(hào)
點(diǎn)擊聯系(xì)吴工 點(diǎn)擊聯系(xì)周老(lǎo)师(shī)
您的(de)當前(qián)位置:主(zhǔ)页(yè) > FPGA行業資訊 >

FPGA实时(shí)光(guāng)谱儀|光(guāng)谱儀設計(jì)-明(míng)德揚科教(minyingyiyuan.com)

發(fà)布(bù)时(shí)間(jiān):2019-12-10   作者(zhě):admin 浏覽量(liàng):

FPGA实时(shí)光(guāng)谱儀

 

实时(shí)頻谱图(tú)項目可(kě)以(yǐ)在(zài)标(biāo)準VGA監視器上(shàng)計(jì)算和(hé)顯示音(yīn)頻信(xìn)号(hào)的(de)頻谱。

該系(xì)統使用(yòng)包(bāo)含Altera Cyclone II FPGA 的(de)Altera DE2原型開(kāi)發(fà)板。使用(yòng)8 kHz的(de)板载模數轉(zhuǎn)換器对(duì)音(yīn)頻進(jìn)行采樣(yàng)。頻谱以(yǐ)32 Hz頻率區(qū)間(jiān)的(de)分(fēn)辨率線(xiàn)性(xìng)分(fēn)布(bù),從0 Hz到(dào)4 kHz。使用(yòng)32个(gè)带(dài)通(tòng)濾波(bō)器計(jì)算頻谱,并以(yǐ)640 x 480分(fēn)辨率輸出(chū)到(dào)全(quán)彩色(sè)VGA顯示器。界面(miàn)由(yóu)滾動(dòng)頻谱图(tú)和(hé)实时(shí)幅度(dù)条(tiáo)形图(tú)組成(chéng)。

該項目是(shì)在(zài)5周設計(jì)实验(yàn)室(shì)ECE 576在(zài)康奈爾大学

Tim Schofieldtjs49
Adrian Wongaw259

高(gāo)級設計(jì)

傅里(lǐ)葉(yè)變(biàn)換 | 離散(sàn)傅里(lǐ)葉(yè)變(biàn)換 | 快(kuài)速傅里(lǐ)葉(yè)變(biàn)換 | VGA顯示器 | HSL顔色(sè)

可(kě)以(yǐ)使用(yòng)两(liǎng)種(zhǒng)不(bù)同(tóng)的(de)方(fāng)法来(lái)計(jì)算頻谱图(tú)上(shàng)顯示的(de)頻率內(nèi)容。第(dì)一(yī)个(gè)使用(yòng)傅里(lǐ)葉(yè)變(biàn)換,第(dì)二(èr)个(gè)使用(yòng)一(yī)組带(dài)通(tòng)濾波(bō)器。在(zài)这(zhè)个(gè)項目中(zhōng)嘗試了(le)这(zhè)两(liǎng)種(zhǒng)技術(shù)。

傅里(lǐ)葉(yè)變(biàn)換

傅里(lǐ)葉(yè)變(biàn)換将信(xìn)号(hào)從时(shí)域映射到(dào)頻域。得到(dào)的(de)頻谱顯示原始信(xìn)号(hào)的(de)頻率成(chéng)分(fēn)。傅里(lǐ)葉(yè)變(biàn)換基于(yú)将信(xìn)号(hào)分(fēn)解(jiě)为(wèi)由(yóu)傅里(lǐ)葉(yè)級數形成(chéng)的(de)无限正(zhèng)交基函(hán)數集。傅立葉(yè)變(biàn)換的(de)具體(tǐ)數学细(xì)节(jié)可(kě)以(yǐ)在(zài)任何數量(liàng)的(de)在(zài)線(xiàn)參考文(wén)獻中(zhōng)找(zhǎo)到(dào)(例如(rú)Mathworld)。

離散(sàn)傅立葉(yè)變(biàn)換

快(kuài)速傅里(lǐ)葉(yè)變(biàn)換利用(yòng)稱为(wèi)離散(sàn)傅里(lǐ)葉(yè)變(biàn)換(DFT)的(de)離散(sàn)时(shí)間(jiān)有(yǒu)限域傅立葉(yè)變(biàn)換。

離散(sàn)傅立葉(yè)變(biàn)換用(yòng)于(yú)輸入(rù)信(xìn)号(hào),其在(zài)时(shí)間(jiān)上(shàng)是(shì)離散(sàn)的(de)并且具有(yǒu)有(yǒu)限的(de)持(chí)續时(shí)間(jiān)(有(yǒu)限域)。DE2上(shàng)的(de)音(yīn)頻編解(jiě)碼器生(shēng)成(chéng)一(yī)个(gè)采樣(yàng)波(bō)形,該波(bō)形在(zài)时(shí)間(jiān)上(shàng)是(shì)離散(sàn)的(de)(樣(yàng)本(běn)不(bù)連(lián)續)和(hé)有(yǒu)限持(chí)續时(shí)間(jiān)(波(bō)形持(chí)續时(shí)間(jiān)是(shì)有(yǒu)限的(de))。

DFTN个(gè)複數(01...n-1)的(de)輸入(rù)序列轉(zhuǎn)換为(wèi)N个(gè)複數(01...n-1)的(de)輸出(chū)序列。DFT由(yóu)等式1給(gěi)出(chū)。


指數因(yīn)子通(tòng)常被(bèi)稱为(wèi)旋轉(zhuǎn)因(yīn)子,并用(yòng)以(yǐ)下(xià)符号(hào)表(biǎo)示。


DFT可(kě)以(yǐ)被(bèi)認为(wèi)是(shì)匹(pǐ)配濾波(bō)器,其将輸入(rù)信(xìn)号(hào)n與(yǔ)由(yóu)旋轉(zhuǎn)因(yīn)子WnkN)給(gěi)出(chū)的(de)正(zhèng)交的(de)正(zhèng)弦基函(hán)數集合進(jìn)行卷(juǎn)積。

應(yìng)注意(yì),由(yóu)于(yú)輸入(rù)序列是(shì)实值的(de),因(yīn)此(cǐ)輸入(rù)的(de)複雜分(fēn)量(liàng)始終(zhōng)为(wèi)零(líng)。結果(guǒ),DFT的(de)複數輸出(chū)頻率關(guān)于(yú)奈奎斯特(tè)頻率(采樣(yàng)頻率的(de)一(yī)半)对(duì)稱。有(yǒu)關(guān)更(gèng)多(duō)詳细(xì)信(xìn)息,請考慮訪問(wèn)有(yǒu)關(guān)奈奎斯特(tè) - 香農采樣(yàng)定(dìng)理和(hé)混疊的(de)參考文(wén)本(běn)。

在(zài)頻谱图(tú)的(de)情(qíng)況下(xià),輸入(rù)序列可(kě)以(yǐ)被(bèi)認为(wèi)是(shì)来(lái)自(zì)音(yīn)頻編解(jiě)碼器的(de)一(yī)組实值樣(yàng)本(běn),并且輸出(chū)序列是(shì)信(xìn)号(hào)的(de)頻率分(fēn)量(liàng)的(de)集合。更(gèng)具體(tǐ)地(dì)说(shuō),設N为(wèi)64,采樣(yàng)頻率为(wèi)48 kHz。这(zhè)意(yì)味着輸入(rù)是(shì)64个(gè)音(yīn)頻波(bō)形樣(yàng)本(běn),輸出(chū)是(shì)64个(gè)等間(jiān)隔頻率區(qū)間(jiān),從0到(dào)48 kHz为(wèi)750 Hz24 kHz至(zhì)48 kHz的(de)頻率是(shì)0 Hz至(zhì)24 kHz頻率的(de)重(zhòng)複頻率。

快(kuài)速傅里(lǐ)葉(yè)變(biàn)換

DFT是(shì)計(jì)算密集型的(de)。從等式1可(kě)以(yǐ)看(kàn)出(chū),每个(gè)頻率分(fēn)量(liàng)Xk)需要(yào)N次(cì)複數乘法和(hé)N次(cì)複數加法。存在(zài)N个(gè)頻率分(fēn)量(liàng),因(yīn)此(cǐ)N點(diǎn)DFT需要(yào)2N 2个(gè)複數運算(2乘法,2个(gè)和(hé))。在(zài)大O表(biǎo)示法中(zhōng),DFT具有(yǒu)O2)的(de)計(jì)算複雜度(dù)。

快(kuài)速傅里(lǐ)葉(yè)變(biàn)換使用(yòng)多(duō)个(gè)优化(huà)来(lái)将操作數減少(shǎo)到(dào)ON log N)。

抽取(qǔ)(分(fēn)而(ér)治之)

 

将长度(dù)为(wèi)8的(de)DFT分(fēn)解(jiě)为(wèi)两(liǎng)个(gè)长度(dù)为(wèi)4的(de)DFT
(来(lái)源:Connexions

最(zuì)重(zhòng)要(yào)的(de)优化(huà)之一(yī)是(shì)抽取(qǔ)。出(chū)于(yú)说(shuō)明(míng)的(de)目的(de),基數2抽取(qǔ)时(shí)間(jiān)算法示出(chū)了(le)如(rú)何簡化(huà)DFT以(yǐ)形成(chéng)FFT

基數-2 DIT FFT算法首先(xiān)将N點(diǎn)DFT分(fēn)成(chéng)两(liǎng)个(gè)长度(dù)为(wèi)N / 2的(de)DFT。所(suǒ)有(yǒu)奇數編号(hào)的(de)标(biāo)記(jì)都用(yòng)一(yī)个(gè)DFT分(fēn)組,所(suǒ)有(yǒu)偶數編号(hào)的(de)索引用(yòng)另(lìng)一(yī)个(gè)DFT分(fēn)組。

这(zhè)被(bèi)稱为(wèi)radix-2 DFT,因(yīn)为(wèi)有(yǒu)两(liǎng)个(gè)組,它(tā)被(bèi)稱为(wèi)时(shí)間(jiān)抽取(qǔ),因(yīn)为(wèi)时(shí)域樣(yàng)本(běn)的(de)索引是(shì)重(zhòng)新排列的(de)。還(huán)有(yǒu)更(gèng)高(gāo)的(de)基數算法(例如(rú)radix-4)以(yǐ)及(jí)頻率抽取(qǔ)算法(其中(zhōng)頻率區(qū)間(jiān)需要(yào)重(zhòng)新排序)。

只(zhī)用(yòng)一(yī)个(gè)階(jiē)段(duàn)基2簡單化(huà)的(de)減少(shǎo)複雜的(de)操作,以(yǐ)N + N2 /2次(cì)複數乘法和(hé)2 /2次(cì)複數加法。遞歸地(dì)應(yìng)用(yòng)基數-2 DFT産生(shēng)ON log N)結果(guǒ)。

 

進(jìn)一(yī)步分(fēn)解(jiě)DFT 
(来(lái)源:Connexions

通(tòng)过(guò)轉(zhuǎn)換到(dào)可(kě)以(yǐ)在(zài)FPGA上(shàng)更(gèng)有(yǒu)效地(dì)計(jì)算的(de)基數,可(kě)以(yǐ)進(jìn)一(yī)步节(jié)省(shěng)成(chéng)本(běn)。Radix-4特(tè)别有(yǒu)用(yòng),因(yīn)为(wèi)每个(gè)DFT內(nèi)的(de)旋轉(zhuǎn)因(yīn)子只(zhī)是(shì)乘以(yǐ)±1或(huò)±j

对(duì)于(yú)实際的(de)複數乘數,可(kě)以(yǐ)使用(yòng)更(gèng)多(duō)的(de)优化(huà)。有(yǒu)關(guān)更(gèng)多(duō)信(xìn)息,請參閱radix-4 DFT实現(xiàn)詳细(xì)信(xìn)息。

带(dài)通(tòng)濾波(bō)器

第(dì)二(èr)種(zhǒng)方(fāng)法是(shì)使用(yòng)一(yī)組带(dài)通(tòng)濾波(bō)器。这(zhè)些带(dài)通(tòng)濾波(bō)器可(kě)以(yǐ)在(zài)起始頻率和(hé)奈奎斯特(tè)頻率之間(jiān)線(xiàn)性(xìng)或(huò)对(duì)數地(dì)間(jiān)隔開(kāi)。每个(gè)带(dài)通(tòng)濾波(bō)器構成(chéng)頻谱图(tú)中(zhōng)的(de)單个(gè)頻率倉。乘法器的(de)數量(liàng)随着頻谱图(tú)中(zhōng)頻段(duàn)的(de)頻率數量(liàng)而(ér)縮放(fàng)为(wèi)ON)。

VGA顯示

滾動(dòng)視頻

我(wǒ)们(men)項目的(de)一(yī)个(gè)主(zhǔ)要(yào)組成(chéng)部(bù)分(fēn)是(shì)平滑滾動(dòng)頻谱图(tú),在(zài)可(kě)調节(jié)的(de)时(shí)間(jiān)窗(chuāng)口(kǒu)內(nèi)顯示32个(gè)頻率的(de)大小。在(zài)項目開(kāi)始时(shí),我(wǒ)们(men)意(yì)識到(dào)我(wǒ)们(men)希望我(wǒ)们(men)的(de)时(shí)間(jiān)窗(chuāng)口(kǒu)不(bù)斷更(gèng)新而(ér)不(bù)是(shì)填充,然後(hòu)凍結或(huò)清(qīng)除。但是(shì),我(wǒ)们(men)還(huán)必須考慮到(dào),在(zài)同(tóng)步期(qī)間(jiān),我(wǒ)们(men)很可(kě)能(néng)无法以(yǐ)視頻速率移動(dòng)大块(kuài)視頻SRAM,这(zhè)标(biāo)志着我(wǒ)们(men)的(de)第(dì)一(yī)个(gè)概念障礙。

相反(fǎn),我(wǒ)们(men)開(kāi)始将視頻SRAM視为(wèi)列的(de)圆(yuán)形矢量(liàng)。然後(hòu)我(wǒ)们(men)意(yì)識到(dào)我(wǒ)们(men)可(kě)以(yǐ)使用(yòng)一(yī)些任意(yì)指針(zhēn)或(huò) offset 来(lái)标(biāo)記(jì)屏幕最(zuì)左(zuǒ)側的(de)開(kāi)头(tóu),并使用(yòng)邏輯循环(huán)遍(biàn)曆我(wǒ)们(men)的(de)向(xiàng)量(liàng)。因(yīn)此(cǐ),通(tòng)过(guò)以(yǐ)固定(dìng)速率移動(dòng)偏移,我(wǒ)们(men)将在(zài)屏幕上(shàng)創建滾動(dòng)動(dòng)作。下(xià)图(tú)更(gèng)好(hǎo)地(dì)说(shuō)明(míng)了(le)这(zhè)个(gè)概念。

 

将視頻SRAM視为(wèi)列的(de)僞圆(yuán)矢量(liàng),屏幕的(de)最(zuì)左(zuǒ)邊(biān)部(bù)分(fēn)用(yòng)移動(dòng)偏移标(biāo)記(jì)。

 

新數據(jù)已在(zài)旧(jiù)偏移位置写入(rù)SRAM矢量(liàng),并且偏移已更(gèng)新,以(yǐ)便最(zuì)新輸入(rù)數據(jù)顯示在(zài)屏幕右(yòu)側。

SRAM作为(wèi)列的(de)循环(huán)緩沖區(qū)進(jìn)行处理可(kě)确保我(wǒ)们(men)不(bù)必将SRAM數據(jù)移位,從而(ér)实現(xiàn)快(kuài)速,平滑的(de)滾動(dòng)。

VGA約束(shù)

我(wǒ)们(men)很早(zǎo)就(jiù)決定(dìng)調整VGA控制器会(huì)超出(chū)我(wǒ)们(men)項目的(de)範圍,这(zhè)使我(wǒ)们(men)的(de)默認屏幕分(fēn)辨率为(wèi)640 x 480像素,而(ér)25.2 MHz VGA控制时(shí)鐘(zhōng)。

要(yào)查看(kàn)每次(cì)屏幕刷新我(wǒ)们(men)有(yǒu)多(duō)少(shǎo)个(gè)周期(qī),我(wǒ)们(men)使用(yòng)了(le)来(lái)自(zì)http://www.epanorama.net/documents/pc/vga_timing.html的(de)同(tóng)步信(xìn)息。根(gēn)據(jù)我(wǒ)们(men)的(de)消息来(lái)源,每个(gè)水(shuǐ)平同(tóng)步持(chí)續96个(gè)周期(qī),每个(gè)垂直(zhí)同(tóng)步持(chí)續2行或(huò)1600个(gè)周期(qī),總(zǒng)共(gòng)96 * 480 + 1600 = 47,680个(gè)周期(qī),在(zài)此(cǐ)期(qī)間(jiān)我(wǒ)们(men)可(kě)以(yǐ)訪問(wèn)SRAM

我(wǒ)们(men)更(gèng)新頻谱图(tú)中(zhōng)的(de)列并移動(dòng)偏移的(de)速率決定(dìng)了(le)滾動(dòng)的(de)表(biǎo)观速率。所(suǒ)需的(de)滾動(dòng)速率也(yě)取(qǔ)決于(yú)窗(chuāng)口(kǒu)在(zài)时(shí)間(jiān)和(hé)像素上(shàng)的(de)长度(dù)。时(shí)鐘(zhōng)周期(qī)中(zhōng)的(de)读(dú)取(qǔ)速率由(yóu)以(yǐ)下(xià)公式确定(dìng):

 

HSL顔色(sè)

背景

HSL顔色(sè)空間(jiān)是(shì)RGB顔色(sè)編碼的(de)替代(dài)方(fāng)案(àn)。H代(dài)表(biǎo)色(sè)調,顔色(sè)的(de)方(fāng)面(miàn)将用(yòng) redyellow或(huò)blue等字(zì)来(lái)描述。它(tā)被(bèi)編碼为(wèi)0到(dào)360度(dù)的(de)角(jiǎo)度(dù),如(rú)下(xià)图(tú)所(suǒ)示。

 

图(tú)片(piàn)来(lái)源:維基百(bǎi)科 - HSL

S代(dài)表(biǎo)顔色(sè)的(de)飽和(hé)度(dù),顔色(sè)強(qiáng)度(dù)的(de)度(dù)量(liàng),或(huò)感(gǎn)知顔色(sè)與(yǔ)顔色(sè)灰色(sè)的(de)差异(yì)程度(dù)。L代(dài)表(biǎo)亮(liàng)度(dù),是(shì)衡量(liàng)顔色(sè)亮(liàng)度(dù)的(de)标(biāo)準。低亮(liàng)度(dù)值導致(zhì)近(jìn)黑(hēi)色(sè),高(gāo)亮(liàng)度(dù)值導致(zhì)近(jìn)白色(sè)。通(tòng)过(guò)以(yǐ)下(xià)双(shuāng)錐图(tú)更(gèng)好(hǎo)地(dì)顯示HSL顔色(sè)空間(jiān)的(de)組織。

 

图(tú)片(piàn)来(lái)源:維基百(bǎi)科 - HSL

可(kě)以(yǐ)使用(yòng)以(yǐ)下(xià)方(fāng)程組将HSL顔色(sè)值轉(zhuǎn)換为(wèi)RGB值:

 

我(wǒ)们(men)的(de)HSL色(sè)彩空間(jiān)

在(zài)我(wǒ)们(men)的(de)項目中(zhōng)使用(yòng)HSL色(sè)彩空間(jiān)的(de)主(zhǔ)要(yào)优點(diǎn)是(shì)我(wǒ)们(men)能(néng)够編碼宽(kuān)廣而(ér)平滑的(de)明(míng)亮(liàng)色(sè)彩範圍,而(ér)无需求助于(yú)查找(zhǎo)表(biǎo)。这(zhè)是(shì)通(tòng)过(guò)使用(yòng)每个(gè)頻率的(de)8位幅度(dù)作为(wèi)色(sè)調值,并将飽和(hé)度(dù)值固定(dìng)为(wèi)1并将亮(liàng)度(dù)固定(dìng)为(wèi)0.5来(lái)实現(xiàn),以(yǐ)顯示頻谱图(tú)。

对(duì)于(yú)我(wǒ)们(men)的(de)色(sè)調和(hé)飽和(hé)度(dù)值,我(wǒ)们(men)計(jì)算q值为(wèi)1p为(wèi)0.然後(hòu)我(wǒ)们(men)将所(suǒ)有(yǒu)公式乘以(yǐ)360,这(zhè)樣(yàng)我(wǒ)们(men)就(jiù)可(kě)以(yǐ)避免使用(yòng)分(fēn)數(從而(ér)避免在(zài)硬(yìng)件(jiàn)中(zhōng)進(jìn)行任何複雜的(de)算術(shù)運算) 。最(zuì)後(hòu),我(wǒ)们(men)通(tòng)过(guò)360°的(de)分(fēn)數255縮放(fàng)Color結果(guǒ),允许我(wǒ)们(men)为(wèi)VGA的(de)每種(zhǒng)顔色(sè)轉(zhuǎn)換为(wèi)8位值。得到(dào)的(de)方(fāng)程式每个(gè)顔色(sè)只(zhī)需乘以(yǐ)一(yī)个(gè)固定(dìng)因(yīn)子,然後(hòu)右(yòu)移一(yī)个(gè)除法:

 

实施细(xì)节(jié)

頻率分(fēn)析: Radix-4 DFT | 硬(yìng)件(jiàn)權衡 | MATLAB | Verilog | IIR带(dài)通(tòng)濾波(bō)器
頻谱图(tú)顯示: 頻谱图(tú) | HSL

Radix-4 DFT

每个(gè)radix-4 DFT模块(kuài)被(bèi)模块(kuài)化(huà)以(yǐ)接收(shōu)四(sì)个(gè)輸入(rù)樣(yàng)本(běn),三(sān)个(gè)旋轉(zhuǎn)因(yīn)子和(hé)四(sì)个(gè)輸出(chū)樣(yàng)本(běn)。在(zài)每个(gè)FFT中(zhōng)進(jìn)一(yī)步优化(huà)複數加法和(hé)乘法。

每个(gè)基數-4蝶形每个(gè)樣(yàng)本(běn)需要(yào)三(sān)个(gè)複雜的(de)加法,每个(gè)蝴蝶總(zǒng)共(gòng)12个(gè)複雜的(de)加法。这(zhè)可(kě)以(yǐ)优化(huà)为(wèi)僅使用(yòng)8个(gè)複雜的(de)添加。由(yóu)于(yú)每个(gè)複數加法对(duì)應(yìng)于(yú)两(liǎng)个(gè)实數加法,这(zhè)意(yì)味着每个(gè)蝴蝶有(yǒu)16个(gè)实際加法而(ér)不(bù)是(shì)24个(gè)加法。

每个(gè)基數-4 DFT具有(yǒu)三(sān)个(gè)旋轉(zhuǎn)因(yīn)子複數乘法。对(duì)于(yú)每个(gè)複數乘法器,这(zhè)对(duì)應(yìng)于(yú)两(liǎng)个(gè)实數加法器和(hé)四(sì)个(gè)实數乘法器。这(zhè)可(kě)以(yǐ)优化(huà)为(wèi)使用(yòng)五(wǔ)个(gè)实數加法器和(hé)三(sān)个(gè)实數乘法。由(yóu)于(yú)乘法器需要(yào)比加法器多(duō)得多(duō)的(de)硬(yìng)件(jiàn),因(yīn)此(cǐ)可(kě)以(yǐ)节(jié)省(shěng)大量(liàng)空間(jiān)。

所(suǒ)需的(de)總(zǒng)基數为(wèi)4 DFT的(de)硬(yìng)件(jiàn)從每个(gè)DFT的(de)30个(gè)加法器和(hé)12个(gè)乘法器減少(shǎo)到(dào)僅27个(gè)加法器和(hé)9个(gè)乘法器。

硬(yìng)件(jiàn)權衡

單周期(qī)FFT

最(zuì)初的(de)計(jì)劃(huà)是(shì)实現(xiàn)單周期(qī)FFT,可(kě)以(yǐ)在(zài)50 MHz系(xì)統时(shí)鐘(zhōng)的(de)一(yī)个(gè)时(shí)鐘(zhōng)周期(qī)內(nèi)計(jì)算64點(diǎn)變(biàn)換。这(zhè)甚至(zhì)比音(yīn)頻編解(jiě)碼器可(kě)以(yǐ)放(fàng)出(chū)采樣(yàng)的(de)速率(48 kHz)更(gèng)快(kuài)。理論上(shàng),新的(de)樣(yàng)本(běn)将被(bèi)移入(rù)移位寄存器,并且一(yī)旦結果(guǒ)通(tòng)过(guò)16个(gè)DFT的(de)三(sān)个(gè)階(jiē)段(duàn)級聯,就(jiù)可(kě)以(yǐ)計(jì)算64點(diǎn)變(biàn)換。

但是(shì),硬(yìng)件(jiàn)要(yào)求太多(duō)了(le)。由(yóu)于(yú)48个(gè)基數为(wèi)4的(de)DFT并行工作,因(yīn)此(cǐ)需要(yào)288个(gè)乘法器(FFT的(de)最(zuì)後(hòu)一(yī)級不(bù)需要(yào)旋轉(zhuǎn)因(yīn)子乘法)。DE2板上(shàng)使用(yòng)的(de)Cyclone II FPGAEP2C35)只(zhī)有(yǒu)35个(gè)嵌入(rù)式18位乘法器和(hé)足够的(de)硬(yìng)件(jiàn),可(kě)实現(xiàn)105个(gè)软(ruǎn)乘法器,總(zǒng)共(gòng)140个(gè)乘法器。單周期(qī)实現(xiàn)需要(yào)略高(gāo)于(yú)可(kě)用(yòng)邏輯區(qū)域的(de)205%,或(huò)者(zhě)換句(jù)話(huà)说(shuō),两(liǎng)个(gè)EP2C35 FPGA。當編譯器无法将64,000多(duō)个(gè)邏輯元(yuán)件(jiàn)裝(zhuāng)入(rù)EP2C35上(shàng)可(kě)用(yòng)的(de)33,216个(gè)邏輯元(yuán)件(jiàn)时(shí),編譯过(guò)程失敗时(shí)验(yàn)證了(le)这(zhè)一(yī)點(diǎn)。應(yìng)該注意(yì)的(de)是(shì),将来(lái)參考可(kě)以(yǐ)通(tòng)过(guò)使用(yòng)更(gèng)大的(de)FPGA来(lái)实現(xiàn)64點(diǎn)FFT,例如(rú)EP2C70400个(gè)乘法器,68,416个(gè)邏輯元(yuán)件(jiàn))。

多(duō)周期(qī)FFT

虽然仍有(yǒu)一(yī)些优化(huà)可(kě)用(yòng)于(yú)降低硬(yìng)件(jiàn)要(yào)求,但仍決定(dìng)轉(zhuǎn)換到(dào)多(duō)周期(qī)FFT

在(zài)該配置中(zhōng),計(jì)算是(shì)順序計(jì)算而(ér)不(bù)是(shì)并行計(jì)算。并行化(huà)的(de)數量(liàng)是(shì)可(kě)變(biàn)的(de),具體(tǐ)取(qǔ)決于(yú)并行操作的(de)FFT數量(liàng)。

一(yī)个(gè)极(jí)端是(shì)快(kuài)速單周期(qī)FFT,其中(zhōng)64个(gè)樣(yàng)本(běn)在(zài)一(yī)批中(zhōng)通(tòng)过(guò)48个(gè)基數-4 DFT級聯。另(lìng)一(yī)个(gè)极(jí)端是(shì)慢(màn)速多(duō)級FFT,其中(zhōng)通(tòng)过(guò)48个(gè)批次(cì)的(de)序列中(zhōng)的(de)單个(gè)基數-4DFT一(yī)次(cì)处理4个(gè)樣(yàng)本(běn)。在(zài)两(liǎng)个(gè)极(jí)端之間(jiān)是(shì)混合解(jiě)決方(fāng)案(àn),其中(zhōng)多(duō)个(gè)DFT分(fēn)階(jiē)段(duàn)地(dì)計(jì)算樣(yàng)本(běn)。一(yī)个(gè)例子是(shì)通(tòng)过(guò)3批中(zhōng)的(de)16个(gè)基數-4DFT处理64个(gè)樣(yàng)本(běn)。

每个(gè)階(jiē)段(duàn)需要(yào)有(yǒu)限數量(liàng)的(de)周期(qī)来(lái)檢索樣(yàng)本(běn),計(jì)算DFT并存儲樣(yàng)本(běn)。假設保守估計(jì)9个(gè)时(shí)鐘(zhōng)周期(qī)(三(sān)个(gè)时(shí)鐘(zhōng)周期(qī)来(lái)檢索采樣(yàng),三(sān)个(gè)时(shí)鐘(zhōng)周期(qī)来(lái)計(jì)算DFT,以(yǐ)及(jí)三(sān)个(gè)时(shí)鐘(zhōng)周期(qī)来(lái)存儲采樣(yàng)),最(zuì)慢(màn)的(de)多(duō)級FFT将需要(yào)432个(gè)周期(qī)(48个(gè)階(jiē)段(duàn),9个(gè)周期(qī)) / stage)計(jì)算64點(diǎn)FFT。在(zài)50 MHz的(de)系(xì)統时(shí)鐘(zhōng),这(zhè)对(duì)應(yìng)于(yú)115 kHz的(de)FFT速度(dù)。这(zhè)仍然比音(yīn)頻編解(jiě)碼器为(wèi)FFT産生(shēng)輸入(rù)樣(yàng)本(běn)的(de)48 kHz速率快(kuài)得多(duō)。

因(yīn)此(cǐ),对(duì)于(yú)音(yīn)頻速率頻谱图(tú),FFT可(kě)以(yǐ)在(zài)沒(méi)有(yǒu)任何DFT并行的(de)情(qíng)況下(xià)操作。所(suǒ)需的(de)硬(yìng)件(jiàn)總(zǒng)數为(wèi)27个(gè)加法器和(hé)9个(gè)乘法器。權衡是(shì)存儲,加载和(hé)跟蹤正(zhèng)在(zài)計(jì)算的(de)階(jiē)段(duàn)所(suǒ)需的(de)內(nèi)存使用(yòng)量(liàng)。

测序

如(rú)果(guǒ)順序計(jì)算FFT,則必須为(wèi)每个(gè)DFT階(jiē)段(duàn)分(fēn)配正(zhèng)确的(de)樣(yàng)本(běn)和(hé)旋轉(zhuǎn)因(yīn)子。这(zhè)可(kě)以(yǐ)通(tòng)过(guò)将輸入(rù)樣(yàng)本(běn),旋轉(zhuǎn)因(yīn)子和(hé)DFT結果(guǒ)存儲到(dào)存儲器块(kuài)中(zhōng)来(lái)完成(chéng)。可(kě)以(yǐ)創建附加的(de)存儲块(kuài)以(yǐ)存儲每个(gè)存儲块(kuài)的(de)适當索引,以(yǐ)計(jì)算正(zhèng)确的(de)DFT計(jì)算序列。

对(duì)于(yú)64點(diǎn)基數-4 FFT,需要(yào)執行48次(cì)DFT計(jì)算。对(duì)于(yú)每个(gè)DFT計(jì)算,需要(yào)從RAM中(zhōng)取(qǔ)出(chū)四(sì)个(gè)樣(yàng)本(běn),需要(yào)從ROM中(zhōng)取(qǔ)出(chū)三(sān)个(gè)旋轉(zhuǎn)因(yīn)子,并将四(sì)个(gè)樣(yàng)本(běn)存儲回(huí)RAM中(zhōng)。四(sì)个(gè)輸入(rù)樣(yàng)本(běn),三(sān)个(gè)旋轉(zhuǎn)因(yīn)子和(hé)四(sì)个(gè)輸出(chū)樣(yàng)本(běn)的(de)索引可(kě)以(yǐ)存儲在(zài)定(dìng)序器ROM中(zhōng)。FFT狀态機(jī)可(kě)以(yǐ)通(tòng)过(guò)序列器遞增,獲取(qǔ)四(sì)个(gè)樣(yàng)本(běn)和(hé)三(sān)个(gè)旋轉(zhuǎn)因(yīn)子,執行DFT計(jì)算,并存儲四(sì)个(gè)結果(guǒ)。重(zhòng)複此(cǐ)过(guò)程,直(zhí)到(dào)定(dìng)序器到(dào)达(dá)序列ROM中(zhōng)的(de)最(zuì)後(hòu)一(yī)个(gè)条(tiáo)目。在(zài)这(zhè)个(gè)階(jiē)段(duàn),已經(jīng)計(jì)算了(le)所(suǒ)有(yǒu)48个(gè)DFT計(jì)算,并且可(kě)以(yǐ)存儲得到(dào)的(de)頻率數據(jù)以(yǐ)供将来(lái)使用(yòng)。

還(huán)可(kě)以(yǐ)对(duì)順控程序進(jìn)行优化(huà)。最(zuì)直(zhí)接的(de)是(shì)使用(yòng)就(jiù)地(dì)FFT算法。这(zhè)是(shì)一(yī)種(zhǒng)算法,其中(zhōng)輸入(rù)樣(yàng)本(běn)的(de)索引與(yǔ)輸出(chū)結果(guǒ)中(zhōng)使用(yòng)的(de)索引相同(tóng)。因(yīn)此(cǐ),輸入(rù)樣(yàng)本(běn)和(hé)輸出(chū)樣(yàng)本(běn)可(kě)以(yǐ)存儲在(zài)同(tóng)一(yī)RAM块(kuài)中(zhōng),從而(ér)減少(shǎo)了(le)所(suǒ)需的(de)總(zǒng)存儲量(liàng)。另(lìng)外(wài),定(dìng)序器ROM現(xiàn)在(zài)只(zhī)需要(yào)存儲一(yī)組索引。

MATLAB实現(xiàn)

該实現(xiàn)首先(xiān)在(zài)MATLAB中(zhōng)進(jìn)行了(le)测試。複數乘法器,radix-4蝶形和(hé)音(yīn)序器都是(shì)在(zài)MATLAB脚本(běn)中(zhōng)創建的(de),这(zhè)些脚本(běn)近(jìn)似于(yú)未来(lái)的(de)硬(yìng)件(jiàn)实現(xiàn)。将FFT的(de)結果(guǒ)與(yǔ)MATLAB提(tí)供的(de)FFT函(hán)數進(jìn)行比較,發(fà)現(xiàn)它(tā)们(men)具有(yǒu)精确的(de)一(yī)一(yī)对(duì)應(yìng)關(guān)系(xì)。

修改了(le)序列發(fà)生(shēng)器的(de)MATLAB脚本(běn),直(zhí)接從脚本(běn)本(běn)身(shēn)自(zì)動(dòng)生(shēng)成(chéng)Verilog代(dài)碼。这(zhè)允许在(zài)FFT的(de)參數改變(biàn)时(shí)非(fēi)常快(kuài)速地(dì)自(zì)動(dòng)生(shēng)成(chéng)Verilog代(dài)碼。

下(xià)面(miàn)的(de)附录(lù)中(zhōng)包(bāo)含两(liǎng)个(gè)MATLAB不(bù)同(tóng)的(de)实現(xiàn)。第(dì)一(yī)个(gè)实現(xiàn)是(shì)用(yòng)于(yú)生(shēng)成(chéng)64點(diǎn)單周期(qī)FFT的(de)实現(xiàn)。第(dì)二(èr)種(zhǒng)实現(xiàn)使用(yòng)就(jiù)地(dì)FFT算法。这(zhè)两(liǎng)个(gè)參考文(wén)獻(Tom Wada和(hé)Magnus Nilsson)对(duì)MATLAB脚本(běn)的(de)開(kāi)發(fà)非(fēi)常有(yǒu)幫助。代(dài)碼結構的(de)一(yī)部(bù)分(fēn)是(shì)從学分(fēn)中(zhōng)列出(chū)的(de)MATLAB脚本(běn)中(zhōng)複制的(de)。

Verilog实施

Verilog实現(xiàn)直(zhí)接從MATLAB脚本(běn)生(shēng)成(chéng)。为(wèi)了(le)創建單周期(qī)FFT,必須适當地(dì)命名輸入(rù)和(hé)輸出(chū)線(xiàn),以(yǐ)便将正(zhèng)确的(de)值傳遞到(dào)FFT的(de)每个(gè)級。对(duì)于(yú)多(duō)周期(qī)FFT,必須編写Verilog代(dài)碼以(yǐ)正(zhèng)确排序樣(yàng)本(běn)和(hé)旋轉(zhuǎn)因(yīn)子的(de)檢索和(hé)存儲。

FFT的(de)Verilog代(dài)碼包(bāo)含在(zài)fft64pt_seq模块(kuài)中(zhōng)。音(yīn)頻ADC的(de)采樣(yàng)时(shí)鐘(zhōng),音(yīn)頻ADC的(de)采樣(yàng)和(hé)VGA的(de)握手(shǒu)線(xiàn)都是(shì)輸入(rù)。VGA顯示單元(yuán)可(kě)以(yǐ)通(tòng)过(guò)五(wǔ)位地(dì)址(32个(gè)不(bù)同(tóng)的(de)頻率區(qū)間(jiān))請求特(tè)定(dìng)頻率,并以(yǐ)无符号(hào)8位結果(guǒ)接收(shōu)幅度(dù)數據(jù)。

音(yīn)頻ADC移位寄存器包(bāo)含64个(gè)寄存器,每个(gè)寄存器为(wèi)16位宽(kuān)。在(zài)音(yīn)頻ADC时(shí)鐘(zhōng)的(de)每个(gè)时(shí)鐘(zhōng)周期(qī),移位寄存器接收(shōu)最(zuì)新的(de)ADC采樣(yàng)(16位)并将剩餘的(de)采樣(yàng)移位一(yī)。可(kě)以(yǐ)通(tòng)过(guò)FFT狀态機(jī)暫停ADC移位寄存器,以(yǐ)便在(zài)FFT狀态機(jī)複制出(chū)值时(shí)樣(yàng)本(běn)不(bù)会(huì)改變(biàn)。

ADC移位寄存器的(de)內(nèi)容可(kě)以(yǐ)通(tòng)过(guò)音(yīn)頻采樣(yàng)地(dì)址在(zài)外(wài)部(bù)尋址。读(dú)取(qǔ)該索引处的(de)ADC樣(yàng)本(běn),并可(kě)選地(dì)通(tòng)过(guò)窗(chuāng)口(kǒu)函(hán)數傳遞。在(zài)将結果(guǒ)發(fà)送到(dào)FFT狀态機(jī)之前(qián),窗(chuāng)口(kǒu)函(hán)數将ADC樣(yàng)本(běn)乘以(yǐ)适當的(de)縮放(fàng)因(yīn)子。

FFT狀态機(jī)使用(yòng)三(sān)个(gè)M4K块(kuài)。第(dì)一(yī)个(gè)是(shì)信(xìn)号(hào)RAM,它(tā)包(bāo)含FFT过(guò)程中(zhōng)使用(yòng)的(de)64个(gè)數據(jù)樣(yàng)本(běn)。第(dì)二(èr)个(gè)是(shì)旋轉(zhuǎn)因(yīn)子ROM,它(tā)包(bāo)含用(yòng)于(yú)每个(gè)DFT階(jiē)段(duàn)的(de)旋轉(zhuǎn)因(yīn)子。第(dì)三(sān)个(gè)是(shì)程序序列ROM,它(tā)包(bāo)含每个(gè)DFT計(jì)算的(de)前(qián)两(liǎng)个(gè)M4K块(kuài)的(de)索引。

信(xìn)号(hào)RAM是(shì)双(shuāng)端口(kǒu)RAM,以(yǐ)最(zuì)大化(huà)數據(jù)带(dài)宽(kuān)。有(yǒu)两(liǎng)个(gè)輸入(rù),每个(gè)輸入(rù)36位。每个(gè)輸入(rù)包(bāo)含两(liǎng)个(gè)带(dài)符号(hào)的(de)18位值,表(biǎo)示每个(gè)複數的(de)实部(bù)和(hé)虛部(bù)。相同(tóng)的(de)格式适用(yòng)于(yú)信(xìn)号(hào)RAM輸出(chū)。

有(yǒu)一(yī)系(xì)列多(duō)路(lù)複用(yòng)器可(kě)控制數據(jù)流入(rù)和(hé)流出(chū)信(xìn)号(hào)RAMRAM可(kě)以(yǐ)一(yī)次(cì)存儲或(huò)加载两(liǎng)个(gè)複數。信(xìn)号(hào)RAM的(de)輸入(rù)来(lái)自(zì)ADC移位寄存器或(huò)DFT輸出(chū)。信(xìn)号(hào)RAM的(de)輸出(chū)進(jìn)入(rù)DFT輸入(rù)或(huò)VGA顯示。

FFT狀态機(jī)編排程序定(dìng)序器,信(xìn)号(hào)RAM,旋轉(zhuǎn)ROMADC移位寄存器和(hé)VGA控制块(kuài)之間(jiān)的(de)複雜交互。一(yī)般来(lái)说(shuō),FFT狀态機(jī)可(kě)以(yǐ)分(fēn)为(wèi)四(sì)種(zhǒng)狀态:保持(chí),加载,存儲和(hé)采樣(yàng)。

在(zài)保持(chí)狀态期(qī)間(jiān),VGA控制器可(kě)以(yǐ)停止FFT,以(yǐ)便VGA控制器可(kě)以(yǐ)訪問(wèn)信(xìn)号(hào)RAM。如(rú)果(guǒ)沒(méi)有(yǒu)停止FFT,則狀态機(jī)檢查是(shì)否需要(yào)獲取(qǔ)新樣(yàng)本(běn)(樣(yàng)本(běn)狀态)。如(rú)果(guǒ)樣(yàng)本(běn)已写入(rù)信(xìn)号(hào)RAM,則FFT跳轉(zhuǎn)到(dào)負载狀态。DFT序列計(jì)數器遞增,因(yīn)此(cǐ)程序定(dìng)序器可(kě)以(yǐ)加载DFT計(jì)算所(suǒ)需的(de)索引。一(yī)次(cì)從信(xìn)号(hào)RAM中(zhōng)檢索两(liǎng)个(gè)樣(yàng)本(běn)的(de)信(xìn)号(hào)樣(yàng)本(běn)。從旋轉(zhuǎn)ROM中(zhōng)檢索旋轉(zhuǎn)因(yīn)子。实際的(de)DFT計(jì)算發(fà)生(shēng)在(zài)組合邏輯中(zhōng),因(yīn)此(cǐ)轉(zhuǎn)換後(hòu)的(de)值在(zài)單个(gè)周期(qī)內(nèi)就(jiù)緒。然後(hòu)将信(xìn)号(hào)樣(yàng)本(běn)存儲回(huí)信(xìn)号(hào)RAM。遞增DFT計(jì)數器并重(zhòng)複整个(gè)过(guò)程,直(zhí)到(dào)計(jì)算出(chū)所(suǒ)有(yǒu)48个(gè)DFT

实際的(de)DFT在(zài)radix4dft中(zhōng)模块(kuài)化(huà)。複數乘數在(zài)optcomplexmult中(zhōng)模块(kuài)化(huà)。每个(gè)使用(yòng)的(de)优化(huà)都記(jì)录(lù)在(zài)Verilog文(wén)件(jiàn)的(de)注釋中(zhōng)。

带(dài)通(tòng)IIR濾波(bō)器

带(dài)通(tòng)濾波(bō)器是(shì)四(sì)階(jiē)IIR橢圆(yuán)濾波(bō)器。濾波(bō)器模块(kuài)来(lái)自(zì)ECE 576課程页(yè)面(miàn),完全(quán)模块(kuài)化(huà),使用(yòng)带(dài)符号(hào)的(de)18位定(dìng)點(diǎn)表(biǎo)示法。MATLAB文(wén)件(jiàn)中(zhōng)還(huán)有(yǒu)其他(tā)代(dài)碼可(kě)生(shēng)成(chéng)濾波(bō)器抽头(tóu)權重(zhòng)。修改这(zhè)些MATLAB脚本(běn)以(yǐ)生(shēng)成(chéng)32个(gè)带(dài)通(tòng)濾波(bō)器,这(zhè)些濾波(bō)器可(kě)以(yǐ)在(zài)采樣(yàng)頻谱上(shàng)線(xiàn)性(xìng)或(huò)对(duì)數地(dì)間(jiān)隔開(kāi)。此(cǐ)外(wài),MATLAB脚本(běn)被(bèi)修改为(wèi)自(zì)動(dòng)執行必要(yào)的(de)縮放(fàng)系(xì)數。每个(gè)濾波(bō)器使用(yòng)一(yī)个(gè)18位乘法器。完整的(de)带(dài)通(tòng)濾波(bō)器組使用(yòng)32个(gè)嵌入(rù)式18位乘法器。

谱图(tú)

实現(xiàn)頻谱图(tú)的(de)第(dì)一(yī)步是(shì)控制读(dú)取(qǔ)頻率輸入(rù)的(de)速率并将其複制到(dào)顯示SRAM中(zhōng)。我(wǒ)们(men)選擇使用(yòng)以(yǐ)VGA CTRL CLK速率運行的(de)32位累加器,以(yǐ)确定(dìng)何时(shí)采樣(yàng)和(hé)更(gèng)新。只(zhī)要(yào)累加器等于(yú)或(huò)大于(yú)值(CLK * T / X),我(wǒ)们(men)就(jiù)会(huì)在(zài)下(xià)次(cì)機(jī)会(huì)读(dú)取(qǔ)頻率并從累加器中(zhōng)減去(qù)(CLK * T / X)。在(zài)我(wǒ)们(men)的(de)最(zuì)後(hòu)一(yī)次(cì)叠代(dài)中(zhōng),时(shí)間(jiān)窗(chuāng)口(kǒu)可(kě)以(yǐ)使用(yòng)開(kāi)關(guān)2-0進(jìn)行選擇,開(kāi)關(guān)2-0被(bèi)硬(yìng)連(lián)線(xiàn)到(dào)表(biǎo)示2秒(miǎo)到(dào)9秒(miǎo)的(de)窗(chuāng)口(kǒu)的(de)常數。采樣(yàng)常數是(shì)硬(yìng)連(lián)線(xiàn)的(de),以(yǐ)避免使用(yòng)乘法器單元(yuán)。

接下(xià)来(lái),我(wǒ)们(men)需要(yào)一(yī)个(gè)狀态機(jī)来(lái)斷言对(duì)包(bāo)含頻率幅度(dù)的(de)寄存器的(de)控制,阻止它(tā)们(men)被(bèi)覆蓋,并将它(tā)们(men)读(dú)入(rù)緩沖區(qū)。在(zài)垂直(zhí)同(tóng)步期(qī)間(jiān),读(dú)取(qǔ)該緩沖區(qū)并将其複制到(dào)SRAM中(zhōng),在(zài)每列複制後(hòu)更(gèng)新指針(zhēn)偏移值。在(zài)垂直(zhí)同(tóng)步期(qī)間(jiān),我(wǒ)们(men)有(yǒu)足够多(duō)的(de)周期(qī)将每个(gè)32个(gè)頻率的(de)6个(gè)樣(yàng)本(běn)複制到(dào)SRAM中(zhōng)。

該頻率複制狀态機(jī)如(rú)下(xià)图(tú)所(suǒ)示:

 

VGA幀狀态機(jī) 通(tòng)过(guò)垂直(zhí)同(tóng)步複位。

在(zài)我(wǒ)们(men)創建了(le)狀态機(jī)之後(hòu),我(wǒ)们(men)需要(yào)将邏輯添加到(dào)VGA的(de)像素爆破組件(jiàn)中(zhōng),該組件(jiàn)将根(gēn)據(jù)水(shuǐ)平偏移和(hé)頻率分(fēn)級重(zhòng)定(dìng)向(xiàng)正(zhèng)在(zài)读(dú)取(qǔ)的(de)SRAM地(dì)址。我(wǒ)们(men)選擇使用(yòng)尺寸(cùn)为(wèi)600 x 256像素的(de)光(guāng)谱图(tú)。我(wǒ)们(men)需要(yào)顯示32个(gè)不(bù)同(tóng)的(de)頻段(duàn),这(zhè)意(yì)味着每个(gè)頻段(duàn)的(de)高(gāo)度(dù)为(wèi)8像素。我(wǒ)们(men)不(bù)是(shì)在(zài)SRAM中(zhōng)将每个(gè)頻率的(de)幅度(dù)写入(rù)8次(cì),而(ér)是(shì)忽略了(le)頻谱图(tú)顯示中(zhōng)每个(gè)Y坐标(biāo)的(de)低3位。

我(wǒ)们(men)決定(dìng)顯示每个(gè)視頻幀存儲到(dào)視頻內(nèi)存的(de)最(zuì)後(hòu)頻率幅度(dù)的(de)条(tiáo)形图(tú),類(lèi)似于(yú)音(yīn)頻均衡器上(shàng)常見(jiàn)的(de)頻率。我(wǒ)们(men)实現(xiàn)了(le)这(zhè)一(yī)點(diǎn),而(ér)无需对(duì)視頻內(nèi)存執行任何額外(wài)的(de)写操作。相反(fǎn),我(wǒ)们(men)定(dìng)義了(le)一(yī)个(gè)512 x 128像素的(de)區(qū)域(32条(tiáo)最(zuì)大高(gāo)度(dù)128像素,每条(tiáo)16像素宽(kuān))專用(yòng)于(yú)这(zhè)些条(tiáo)形图(tú),并使用(yòng)存儲在(zài)頻率緩沖區(qū)最(zuì)後(hòu)一(yī)个(gè)条(tiáo)目中(zhōng)的(de)大小来(lái)确定(dìng)每个(gè)酒(jiǔ)吧的(de)高(gāo)度(dù)。

 

在(zài)像素爆炸期(qī)間(jiān)基于(yú)像素的(de)屏幕高(gāo)度(dù)重(zhòng)定(dìng)向(xiàng)SRAM

使用(yòng)緩沖區(qū)中(zhōng)存儲的(de)頻率幅度(dù)的(de)高(gāo)7位設置每个(gè)条(tiáo)的(de)高(gāo)度(dù),如(rú)果(guǒ)被(bèi)尋址的(de)像素位于(yú)条(tiáo)形图(tú)上(shàng)方(fāng),我(wǒ)们(men)再次(cì)使用(yòng)地(dì)址重(zhòng)定(dìng)向(xiàng)and,因(yīn)此(cǐ)黑(hēi)色(sè),我(wǒ)们(men)通(tòng)常对(duì)SRAM進(jìn)行尋址,如(rú)果(guǒ)像素是(shì)条(tiáo)形图(tú)的(de)一(yī)部(bù)分(fēn),我(wǒ)们(men)将写入(rù)写入(rù)視頻存儲器的(de)頻谱图(tú)部(bù)分(fēn)的(de)最(zuì)後(hòu)一(yī)列的(de)相應(yìng)段(duàn)。因(yīn)此(cǐ),我(wǒ)们(men)在(zài)需要(yào)写入(rù)SRAM的(de)數據(jù)方(fāng)面(miàn)免費实現(xiàn)額外(wài)的(de)顯示功能(néng)。

测試

首先(xiān),我(wǒ)们(men)通(tòng)过(guò)在(zài)複位时(shí)在(zài)SRAM中(zhōng)的(de)黑(hēi)色(sè)背景上(shàng)繪制白色(sè)对(duì)角(jiǎo)線(xiàn)来(lái)测試我(wǒ)们(men)的(de)滾動(dòng)概念,并添加邏輯以(yǐ)調整每个(gè)垂直(zhí)同(tóng)步上(shàng)的(de)水(shuǐ)平偏移,并通(tòng)过(guò)偏移量(liàng)調整VGA控制器尋址的(de)存儲位置。我(wǒ)们(men)快(kuài)速而(ér)肮髒的(de)测試證明(míng)了(le)这(zhè)个(gè)概念可(kě)以(yǐ)工作并生(shēng)成(chéng)一(yī)个(gè)非(fēi)常平滑的(de)滾動(dòng),幾(jǐ)乎不(bù)需要(yào)邏輯方(fāng)式。

其次(cì),我(wǒ)们(men)通(tòng)过(guò)創建一(yī)个(gè)随機(jī)位生(shēng)成(chéng)器并不(bù)斷将其輸出(chū)的(de)8位块(kuài)複制到(dào)一(yī)系(xì)列32个(gè)寄存器中(zhōng)来(lái)测試我(wǒ)们(men)将頻率信(xìn)息放(fàng)入(rù)顯示存儲器的(de)能(néng)力。如(rú)果(guǒ)斷言 hold 線(xiàn),这(zhè)些寄存器将保持(chí)其值,并且可(kě)由(yóu)我(wǒ)们(men)的(de)顯示狀态機(jī)使用(yòng)大型32对(duì)1多(duō)路(lù)複用(yòng)器進(jìn)行尋址和(hé)读(dú)取(qǔ)。我(wǒ)们(men)的(de)测試表(biǎo)明(míng),我(wǒ)们(men)可(kě)以(yǐ)很好(hǎo)地(dì)读(dú)取(qǔ)无意(yì)義的(de)輸入(rù)流,但也(yě)在(zài)我(wǒ)们(men)的(de)顯示中(zhōng)發(fà)現(xiàn)了(le)一(yī)个(gè)問(wèn)題(tí)。最(zuì)初,读(dú)取(qǔ)被(bèi)直(zhí)接写入(rù)SRAM,導致(zhì)頻谱图(tú)在(zài)幀中(zhōng)更(gèng)新。这(zhè)会(huì)以(yǐ)水(shuǐ)平線(xiàn)向(xiàng)上(shàng)的(de)形式創建屏幕瑕疵,并且在(zài)視覺上(shàng)分(fēn)散(sàn)注意(yì)力。为(wèi)了(le)解(jiě)決这(zhè)个(gè)問(wèn)題(tí),我(wǒ)们(men)創建了(le)頻率幅度(dù)緩沖區(qū),并且只(zhī)在(zài)垂直(zhí)同(tóng)步时(shí)複制到(dào)SRAM中(zhōng)。这(zhè)導致(zhì)了(le)平稳的(de)表(biǎo)現(xiàn),

接下(xià)来(lái),我(wǒ)们(men)实現(xiàn)了(le)条(tiáo)形图(tú)功能(néng),并用(yòng)固定(dìng)級别替換了(le)我(wǒ)们(men)的(de)随機(jī)輸入(rù)。这(zhè)揭示了(le)顯示重(zhòng)定(dìng)向(xiàng)邏輯中(zhōng)的(de)一(yī)些尋址錯誤,例如(rú)從錯誤輸入(rù)读(dú)取(qǔ)的(de)頻率倉。这(zhè)些錯誤得到(dào)糾正(zhèng),顯示再次(cì)起作用(yòng)。

我(wǒ)们(men)的(de)顯示器組件(jiàn)的(de)最(zuì)終(zhōng)版本(běn)以(yǐ)平滑的(de)60 Hz幀速率運行,并且可(kě)以(yǐ)在(zài)2到(dào)9秒(miǎo)的(de)可(kě)選时(shí)間(jiān)窗(chuāng)口(kǒu)中(zhōng)在(zài)頻谱图(tú)中(zhōng)顯示32个(gè)頻率幅度(dù),并附带(dài)最(zuì)近(jìn)輸入(rù)的(de)条(tiáo)形图(tú)。

HSL实施

HSL方(fāng)程使用(yòng)組合邏輯和(hé)寄存器实現(xiàn)为(wèi)SRAM數據(jù)和(hé)VGA顔色(sè)輸入(rù)之間(jiān)的(de)階(jiē)段(duàn)。轉(zhuǎn)換在(zài)SRAM數據(jù)和(hé)VGA顔色(sè)輸入(rù)之間(jiān)增加了(le)1个(gè)延遲周期(qī),因(yīn)此(cǐ)我(wǒ)们(men)必須修改VGA控制器,以(yǐ)便在(zài)一(yī)个(gè)周期(qī)之前(qián)对(duì)SRAM進(jìn)行補償。

测試

我(wǒ)们(men)通(tòng)过(guò)簡單地(dì)在(zài)複位时(shí)在(zài)SRAM中(zhōng)写入(rù)0到(dào)255的(de)色(sè)調值的(de)線(xiàn)性(xìng)掃描来(lái)测試我(wǒ)们(men)的(de)HSL色(sè)彩空間(jiān)。得到(dào)的(de)图(tú)像是(shì)從紅(hóng)色(sè)到(dào)綠(lǜ)色(sè)到(dào)藍(lán)色(sè)的(de)平滑过(guò)渡 但是(shì),紅(hóng)色(sè)对(duì)應(yìng)于(yú)SRAM中(zhōng)的(de)0,因(yīn)此(cǐ)我(wǒ)们(men)必須添加一(yī)个(gè)簡單的(de)減法来(lái)反(fǎn)轉(zhuǎn)我(wǒ)们(men)的(de)顔色(sè)範圍的(de)方(fāng)向(xiàng),從而(ér)将藍(lán)色(sè)置于(yú)低端在(zài) high 結束(shù)时(shí)是(shì)紅(hóng)色(sè)的(de)。

最(zuì)後(hòu),我(wǒ)们(men)必須添加邏輯,以(yǐ)便在(zài)未顯示頻率信(xìn)息的(de)區(qū)域中(zhōng)正(zhèng)确地(dì)将黑(hēi)色(sè)繪制到(dào)屏幕上(shàng)。由(yóu)此(cǐ)産生(shēng)的(de)顯示器具有(yǒu)令人(rén)愉快(kuài)和(hé)鮮豔的(de)色(sè)彩,使其更(gèng)具吸引力。

 

  •   
  •   
  •   
  •  
  • FPGA教育領域第(dì)一(yī)品牌(pái)
  • 咨詢热(rè)線(xiàn):020-39002701
  • 技術(shù)交流Q群(qún):544453837
⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨