week27 信號(hào)時(shí)頻分析軟件結(jié)項(xiàng)

如果光 遺忘了要將前方照亮 你會(huì)握著我的手嗎
如果路 要通往不知名的地方 你會(huì)跟我一起走嗎
我想 也許不會(huì)吧

疫情下的開(kāi)學(xué)

第一周快要過(guò)去了,新學(xué)期以一種從未見(jiàn)過(guò)的方式開(kāi)始了,這一周終于把上個(gè)學(xué)期的尾項(xiàng)結(jié)了,算是還清了吧。從中學(xué)到的就是做事情不要逃避,你越逃避它越害怕,當(dāng)它變成一件必須要做退無(wú)可退(的事情)的時(shí)候,不再害怕了。
說(shuō)實(shí)話以前真的夢(mèng)想可以躺著上課,可以不用去教室不用去占座,上學(xué)的時(shí)候可以吃到家里美味的飯菜,只是它突然實(shí)現(xiàn)的時(shí)候反而沒(méi)了原來(lái)的味道。武漢加油,中國(guó)加油。

項(xiàng)目背景

在傳統(tǒng)模式中,要對(duì)信號(hào)進(jìn)行分析,示波器是必不可少的。通過(guò)示波器,我們可以得到信號(hào)的幅值、頻譜、瀑布圖等一系列信息。然而示波器過(guò)于笨重,我們要想做分析就必須跑到實(shí)驗(yàn)室里去。于是有人提出,能不能做一個(gè)數(shù)字信號(hào)分析軟件呢?將信號(hào)的某些特征作為輸入,得到想要的輸出。在這種背景下,信號(hào)時(shí)頻分析軟件應(yīng)運(yùn)而生。

思路

首先要明白要的是什么。我們選取信號(hào)的時(shí)域圖、頻譜圖、IQ矢量圖和瀑布圖作為需求,信號(hào)的IQ分量作為輸入,共有50k個(gè)信號(hào)點(diǎn),即50k個(gè)IQ矢量對(duì)。
思路是根據(jù)設(shè)定的每幀點(diǎn)數(shù),將這些點(diǎn)讀取進(jìn)double類(lèi)型的數(shù)組中得到時(shí)域數(shù)組,進(jìn)行fftw得到頻域數(shù)組,調(diào)用高速繪圖軟件High-speed-Chart-Control進(jìn)行顯示,而矢量圖和瀑布圖使用CDC類(lèi)進(jìn)行繪制。再根據(jù)設(shè)定的幀率,動(dòng)態(tài)地進(jìn)行數(shù)組的更新,再重新顯示。
開(kāi)發(fā)方案為VS2017+MFC

對(duì)話框設(shè)計(jì)

主對(duì)話框分為四個(gè)窗口,分別顯示時(shí)域圖、頻域圖、IQ矢量圖和瀑布圖。菜單欄中,F(xiàn)ile下有打開(kāi)文件和保存圖片的按鈕,View下有播放、暫停和停止的按鈕,Parameters下有幀率和每幀長(zhǎng)度設(shè)置的按鈕。


打開(kāi)文件后預(yù)覽

菜單欄

播放

所遇問(wèn)題

①如何繪制動(dòng)態(tài)曲線?
以500點(diǎn)為1幀,根據(jù)幀率調(diào)整定時(shí)器的時(shí)間間隔,在一個(gè)時(shí)間段內(nèi)進(jìn)行一幀圖像的顯示,到下一個(gè)時(shí)間段則更新顯示數(shù)組,重新繪制圖像。
②幀緩存技術(shù)?
可以把幀緩存看成是顯示內(nèi)存的一個(gè)映像,將其映射到進(jìn)程地址空間之后,就可以直接進(jìn)行讀寫(xiě)操作,而寫(xiě)操作可以立即反應(yīng)在屏幕上。這就好比一個(gè)水池,CPU將處理后的數(shù)據(jù)“流”到水池中,再“流”向顯示器。
③如何編寫(xiě)選擇文件的對(duì)話框,得到所選擇源文件的路徑?
用CFileDialog構(gòu)建對(duì)話框,OFN_HIDEREADONLY表示隱藏只讀選項(xiàng),用GetPathName()函數(shù)得到完整的文件名,包括目錄名和擴(kuò)展名。
④如何將整型數(shù)據(jù)轉(zhuǎn)化為Cstring類(lèi)型并查看?
構(gòu)造CString變量,調(diào)用Format寫(xiě)入整型數(shù)據(jù),用MessageBox查看。
⑤如何定義全局變量以在整個(gè)項(xiàng)目中使用?
在stdafx.cpp中定義該變量,如inttimer=333;
在stdafx.h中聲明該變量,如externinttimer;
⑥快速傅立葉變換庫(kù)fftw
一維離散傅立葉變換函數(shù)fftw_plan_dft_1d()
fftw_planfftw_plan_dft_1d(intn,fftw_complexin,fftw_complexout,intsign,unsigned
flags);
n為需要進(jìn)行傅里葉變換的數(shù)據(jù)個(gè)數(shù),in指向輸入數(shù)據(jù),out指向輸出數(shù)據(jù),sign(+1:逆傅里葉變換,-1:正傅里葉變換),F(xiàn)FTW_ESTIMATE表示不進(jìn)行任何的測(cè)試,直接創(chuàng)建局部最優(yōu)的fftw_plan
創(chuàng)建完畢后調(diào)用fftw_execute進(jìn)行傅里葉變換,調(diào)用后要進(jìn)行內(nèi)存回收
⑦如何點(diǎn)擊主對(duì)話框按鈕彈出參數(shù)設(shè)置的對(duì)話框?
在資源中新建對(duì)話框,添加需要的編輯框等控件,添加類(lèi)如CMyNewDlg,自動(dòng)生成.cpp和.h文件,在主對(duì)話框的.cpp文件中包含新生成的.h文件,在需要點(diǎn)擊按鈕的響應(yīng)函數(shù)中添加CMyNewDlgdlg;dlg.DoModal();
DoModal負(fù)責(zé)對(duì)模態(tài)話框的創(chuàng)建和撤銷(xiāo)。完成對(duì)話框的創(chuàng)建后,DoModal啟動(dòng)一個(gè)消息循環(huán),以響應(yīng)用戶的輸入。由于該消息循環(huán)截獲了幾乎所有的輸入消息,使主消息循環(huán)收不到對(duì)對(duì)話框的輸入,致使用戶只能與模態(tài)對(duì)話框進(jìn)行交互,而其它用戶界面對(duì)象收不到輸入信息。
⑧如何取消最大化按鈕?
在主對(duì)話框的屬性欄中將MaximizeBox設(shè)置為false。
⑨定義完OnTimer()函數(shù)后發(fā)現(xiàn)沒(méi)有按預(yù)期調(diào)用?
在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之間添加ON_WM_TIMER()消息
⑩當(dāng)嘗試在其它設(shè)備上運(yùn)行時(shí)報(bào)錯(cuò):找不到WindowsSDK版本xxxxxxxx

報(bào)錯(cuò)

在項(xiàng)目屬性中更改Winows SDK版本

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第三章 語(yǔ)音信號(hào)特征分析 語(yǔ)音合成音質(zhì)的好壞,語(yǔ)音識(shí)別率的高低,都取決于對(duì)語(yǔ)音信號(hào)分析的準(zhǔn)確度和精度。例如,利用線...
    鍋鍋Iris閱讀 10,619評(píng)論 3 8
  • ### YUV顏色空間 視頻是由一幀一幀的數(shù)據(jù)連接而成,而一幀視頻數(shù)據(jù)其實(shí)就是一張圖片。 yuv是一種圖片儲(chǔ)存格式...
    天使君閱讀 3,671評(píng)論 0 4
  • 一、傅立葉變換的由來(lái) 關(guān)于傅立葉變換,無(wú)論是書(shū)本還是在網(wǎng)上可以很容易找到關(guān)于傅立葉變換的描述,但是大都是些故弄玄虛...
    constant007閱讀 4,673評(píng)論 1 10
  • 不得不承認(rèn),我是一個(gè)不太會(huì)寫(xiě)書(shū)評(píng)的人,小說(shuō)的抒情都暫且寫(xiě)不出來(lái),更別說(shuō)這種隨筆集了。所以啊,只是把我讀書(shū)過(guò)程中腦海...
    莫煙呀閱讀 526評(píng)論 3 3
  • 1,從本篇文章/音頻/視頻中我學(xué)到的最重要的概念:團(tuán)隊(duì)合作是非常重要的,在學(xué)習(xí)工作中,我們要學(xué)會(huì)合作。 一個(gè)人走的...
    土管205曹偉閱讀 288評(píng)論 0 0

友情鏈接更多精彩內(nèi)容