相位累加器
關(guān)于相位累加器的使用,我不確定放在FPGA專題中是否合適,但是因?yàn)榇_實(shí)很多應(yīng)用都是在FPGA上面的,所以暫時(shí)先這樣定吧。
標(biāo)題中所提到的DDS,我感覺(jué)這兩個(gè)放一起也可以,因?yàn)镈DS的核心思想就是使用的相位累加器。那么這玩意兒的作用是啥?簡(jiǎn)單來(lái)說(shuō)就是在FPGA工作主頻之下,可以生成任意頻率的周期信號(hào)出來(lái)。
定義一個(gè)32bit的頻率字Acc
定義一個(gè)32bit的頻率控制字F_word
假設(shè)系統(tǒng)時(shí)鐘(準(zhǔn)確的說(shuō)法應(yīng)該是相位累加器的參考時(shí)鐘)fclk
需要產(chǎn)生的時(shí)鐘頻率 fout
根據(jù)公式:
上面兩個(gè)公式可以在已知需要獲得的輸出頻率的基礎(chǔ)上,計(jì)算得到需要的頻率控制字。
然后看下頻率控制字是怎么用的,這里就是用的相位累加器的原理。
上式是一個(gè)累加的過(guò)程,實(shí)現(xiàn)的原理是在一個(gè)32bit的數(shù)據(jù)范圍內(nèi),即在(0~2^32-1)這個(gè)范圍內(nèi)進(jìn)行累加,累加的步進(jìn)是F_word;完成這一個(gè)范圍內(nèi)的累加之后,用時(shí)為T,那么這個(gè)T的倒數(shù)就是我們需要的fout了。完成一次累加之后,頻率字Acc會(huì)溢出,然后進(jìn)入下一次累加,形成下一個(gè)周期信號(hào);如此重復(fù)進(jìn)行后就是一個(gè)振蕩的周期信號(hào)了。
那么這個(gè)周期信號(hào)該怎么表示出來(lái)呢?上面說(shuō)了,完成(0~2^32-1)的累加過(guò)程是一個(gè)周期T,那么在這個(gè)周期里面,應(yīng)該會(huì)有一次信號(hào)翻轉(zhuǎn)。即高電平時(shí)間T/2,低電平時(shí)間也是T/2。
對(duì)于一個(gè)32bit的數(shù),當(dāng)?shù)?1位不斷累加,直到第32bit從0跳轉(zhuǎn)到1的時(shí)間段內(nèi),就是用了T/2的時(shí)間;當(dāng)?shù)?2bit變成1之后,低31位又開(kāi)始累加,直到數(shù)據(jù)溢出,又是T/2的時(shí)間。
如果不能理解,結(jié)合下圖
也就是說(shuō),在整個(gè)累加過(guò)程中,我們只要判斷Acc的最高的情況,在0~T/2時(shí)間內(nèi),最高位為0;
在T/2~T的時(shí)間內(nèi),最高位為1;這樣就是會(huì)產(chǎn)生一個(gè)fout的方波信號(hào)了。
assign clk_out=Acc(31);
這樣的clk_out就是需要的fout了。
亦或者,直接對(duì)Acc的值進(jìn)行判斷
always@(posedgeclkornegedgerst)if(!rst) clk_out <=?1'b0;elseif(Acc <=?32'h7fffffff) clk_out <=?1'b0;elseif(Acc >32'h7fffffff) clk_out <=?1'b1;
同樣可以輸出fout。
采樣率
同時(shí),想說(shuō)一下關(guān)于采樣率的問(wèn)題。
常見(jiàn)于ADC這類芯片中,例如,某ADC芯片的采樣率為1MHz,意思是每秒可以采樣1M個(gè)點(diǎn),那么采一個(gè)點(diǎn)所要花的時(shí)間是(1/1M) 秒。
在做FFT的時(shí)候,通常需要采集一個(gè)完整的正弦波,來(lái)進(jìn)行FFT,這里就會(huì)涉及采樣率的問(wèn)題。
假如一個(gè)正弦波的頻率為fsig=50KHz,我們需要用128個(gè)點(diǎn)來(lái)進(jìn)行FFT,那就是要128個(gè)點(diǎn)采集完成這個(gè)正弦波。根據(jù)正弦波的頻率可以計(jì)算出正弦波的周期Tsig=1/fsig;那么這128個(gè)點(diǎn)所占的時(shí)間就應(yīng)該是這個(gè)周期Tsig。也就是說(shuō),采樣芯片需要在Tsig時(shí)間內(nèi)采集完成128個(gè)點(diǎn),那么這個(gè)就可以計(jì)算出需要的采樣率了。采樣率設(shè)為Fs,則采一個(gè)點(diǎn)的時(shí)間是1/Fs;采128個(gè)點(diǎn)的時(shí)間就是128/Fs;則
128/Fs=1/fsig;會(huì)得出采樣率Fs=128fsig;得到的是和被采樣信號(hào)頻率的關(guān)系;
根據(jù)奈奎斯特定律,采樣頻率至少要是被采樣信號(hào)頻率的2倍,才能獲得被采樣信號(hào)的有效信息,否則就會(huì)出現(xiàn)失真。這里其實(shí)就可以分析得到,這里的128個(gè)點(diǎn)其實(shí)是可以人為設(shè)定的,假如設(shè)置為N;那么最后的公式就是Fs=Nfsig 。當(dāng)然,保證這里的N>2是非常有必要的。
一般來(lái)說(shuō),我們的N會(huì)取的比較大。
FFT
說(shuō)到上面的信息,不得不再說(shuō)下FFT
其中的參數(shù)就包括上面說(shuō)的Fs、N、fsig
FFT是一種計(jì)算,采樣到一個(gè)點(diǎn),進(jìn)行一系列的運(yùn)算后,輸出一個(gè)復(fù)數(shù),假設(shè)為A+Bi;這個(gè)復(fù)數(shù)中就包含這個(gè)被采樣信號(hào)sig的信息,對(duì)A和B求平方和再開(kāi)根號(hào),就是當(dāng)前采樣點(diǎn)在頻譜上的幅值(注意并不是在正弦波形上的幅值),頻譜上幅值最大的點(diǎn)出現(xiàn)在fsig頻率處。
對(duì)于一個(gè)未知頻率的正弦波信號(hào),對(duì)其進(jìn)行采樣,然后進(jìn)行頻譜幅值的最大值篩選,可以計(jì)算出這個(gè)信號(hào)的頻率。
Fs/N的意思是,對(duì)所有的N個(gè)采樣點(diǎn),用Fs的采樣率來(lái)采樣,則在每個(gè)點(diǎn)處的頻率值(這個(gè)是在頻域上的信息)。假設(shè)fsig出現(xiàn)在從0~N之間的某個(gè)點(diǎn)n處,則會(huì)有Fs/N*(n-1)=fsig;同樣是可以計(jì)算出這個(gè)n。
-
FPGA
+關(guān)注
關(guān)注
1645文章
22050瀏覽量
618590 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1901瀏覽量
133241 -
相位累加器
+關(guān)注
關(guān)注
0文章
11瀏覽量
9276
原文標(biāo)題:相位累加器
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
基于相位累加器的任意分頻原理解析
累加器verilog語(yǔ)言編程問(wèn)題
FPGA實(shí)現(xiàn)NCO中相位累加器的輸出和查找表地址什么關(guān)系?
請(qǐng)問(wèn)AD9910并行端口控制相位時(shí),并行數(shù)據(jù)是輸入到相位累加器中還是輸入到相位偏移字中?
dds相位累加器沒(méi)有提高采樣頻率
計(jì)算機(jī)累加器有加法器功能嗎,累加器是什么_累加器的作用及原理介紹 精選資料推薦
相位累加器原理

累加器是什么_累加器的作用及原理介紹

累加器是寄存器嗎_寄存器、累加器、暫存器有什么區(qū)別
累加器A的主要作用是什么_一文解析累加器a和acc的區(qū)別
32位數(shù)字相位累加器的程序和工程文件免費(fèi)下載

Arduino的累加器實(shí)驗(yàn)程序和工程文件免費(fèi)下載
數(shù)字設(shè)計(jì)筆試Verilog手撕代碼—累加器

評(píng)論