国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

滑動(dòng)短時(shí)傅里葉變換的FPGA 實(shí)現(xiàn)

2020-05-30 03:21:38邵瑞付永慶
應(yīng)用科技 2020年2期
關(guān)鍵詞:高電平傅里葉時(shí)鐘

邵瑞,付永慶

哈爾濱工程大學(xué) 信息與通信工程學(xué)院,黑龍江 哈爾濱 150001

短時(shí)傅里葉變換作為一種常用的時(shí)-頻分析方法,在語音信號(hào)、信號(hào)識(shí)別等方面應(yīng)用十分廣泛[1-3],其基本思想是在傅里葉變換的基礎(chǔ)上實(shí)現(xiàn)時(shí)域的局部化。對(duì)于時(shí)變信號(hào),短時(shí)傅里葉變換采用一個(gè)滑動(dòng)窗截取信號(hào),并且認(rèn)為窗內(nèi)的信號(hào)是平穩(wěn)的,對(duì)這些信號(hào)進(jìn)行傅里葉變換,可以得到信號(hào)在某一時(shí)刻的頻譜。通常情況下,為了克服窗與窗內(nèi)數(shù)據(jù)的關(guān)聯(lián)性,相鄰兩窗會(huì)有所重疊,重疊的長(zhǎng)度越長(zhǎng)對(duì)分析該信號(hào)的頻譜越準(zhǔn)確。本文設(shè)置每次滑動(dòng)的數(shù)據(jù)長(zhǎng)度為滑動(dòng)窗長(zhǎng)度的1/4。

1 滑動(dòng)短時(shí)傅里葉變換的原理

離散序列信號(hào)的短時(shí)傅里葉變換的定義為

式中:x(m)為待分析的信號(hào);w(n)為分析窗函數(shù);X(ejω)即為待分析信號(hào)每個(gè)窗的傅里葉變換。離

n散短時(shí)傅里葉變換通過滑動(dòng)窗截取信號(hào),并對(duì)該信號(hào)進(jìn)行離散傅里葉變換,提取出信號(hào)的局部頻域信息。

2 FPGA 的介紹及設(shè)計(jì)環(huán)境

本設(shè)計(jì)所采用的開發(fā)板為Altera 公司提供的Stratix ii-EP2S180C3,使用的軟件環(huán)境為Quartus ii 13.0,波形仿真采用了第三方軟件Modelsim,開發(fā)板的實(shí)物圖如圖1所示。

圖1 Stratix ii-EP2S180C3 開發(fā)板

本設(shè)計(jì)充分利用Altera 公司所提供的IP 核,簡(jiǎn)化了以往設(shè)計(jì)的過程,設(shè)計(jì)利用ROM 核存儲(chǔ)漢明窗的數(shù)據(jù)。FIFO 核實(shí)現(xiàn)滑動(dòng)窗。通過使用FFT 核實(shí)現(xiàn)傅里葉變換,要根據(jù)設(shè)計(jì)需求進(jìn)行FFT 核模式的選取,并根據(jù)芯片手冊(cè)進(jìn)行FFT 核時(shí)序的編寫。利用這些工具可以很方便地實(shí)現(xiàn)滑動(dòng)短時(shí)傅里葉變換的功能,不需要推導(dǎo)復(fù)雜的數(shù)學(xué)公式,相對(duì)于文獻(xiàn)[4-6]中的復(fù)雜數(shù)學(xué)公式推導(dǎo)更簡(jiǎn)潔,更容易使用現(xiàn)有工具進(jìn)行實(shí)現(xiàn)。

3 設(shè)計(jì)思路總框圖

設(shè)計(jì)的前提條件是希望判斷下一段信號(hào)在各個(gè)窗內(nèi)頻譜特征,根據(jù)頻譜特征可以檢驗(yàn)信號(hào)所含有的頻率成分,用于信號(hào)解調(diào),設(shè)計(jì)總體框圖如圖2 所示。

圖2 滑動(dòng)短時(shí)傅里葉變換的FPGA 設(shè)計(jì)框圖

設(shè)計(jì)中為了避免數(shù)據(jù)堵塞及丟失,應(yīng)用了乒乓思想[7],使用了4 個(gè)相同的FIFO。4 個(gè)FIFO 通過輸入數(shù)據(jù)選擇流單元進(jìn)行控制,使用FIFO_cnt的計(jì)數(shù)大小判定當(dāng)前哪個(gè)FIFO 寫入數(shù)據(jù)。設(shè)計(jì)中每次滑動(dòng)窗更新數(shù)據(jù)長(zhǎng)度為90,則當(dāng)FIFO1_cnt的大小大于90,此時(shí)FIFO2 就要準(zhǔn)備進(jìn)行寫入數(shù)據(jù);當(dāng)FIFO2_cnt 的大小大于90,此時(shí)FIFO3 就要準(zhǔn)備進(jìn)行寫入數(shù)據(jù);當(dāng)FIFO3_cnt 的大小大于90,此時(shí)FIFO4 就要準(zhǔn)備進(jìn)行寫入數(shù)據(jù)。至此一個(gè)循環(huán)下,F(xiàn)IFO 的寫使能都打開了。輸出數(shù)據(jù)流選擇單元也是通過FIFO_cnt 的數(shù)據(jù)大小來決定當(dāng)前哪個(gè)FIFO 的數(shù)據(jù)輸出,每個(gè)時(shí)刻只有一個(gè)數(shù)據(jù)輸出,其FIFO 間的滑動(dòng)圖如圖3 所示,90、180、270、360 分別代表FIFO 中的4 個(gè)地址段。

圖3 滑動(dòng)窗(FIFO)控制設(shè)計(jì)

漢寧窗的實(shí)現(xiàn)采用了ROM 核,存放漢寧窗[8]函數(shù)數(shù)據(jù)。通過MATLAB 生成360 點(diǎn)Hanning 窗函數(shù)系數(shù)表,由于該數(shù)據(jù)為浮點(diǎn)數(shù),而本設(shè)計(jì)中采用定點(diǎn)化運(yùn)算,將系數(shù)表生成mif 文件,作為ROM 的初始化文件。

FIFO 核和ROM 核的使用中設(shè)計(jì)一個(gè)共同的使能,當(dāng)FIFO 核有數(shù)據(jù)讀出時(shí),ROM 核也會(huì)有數(shù)據(jù)讀出,兩者同步輸出:送入乘法器進(jìn)行加窗計(jì)算,輸出數(shù)據(jù)位寬24 位,送給后端的FFT 模塊進(jìn)行計(jì)算,根據(jù)FFT 的輸出有效信號(hào)source_valid 的高低指示,進(jìn)行判斷信號(hào)特征,解調(diào)信號(hào)。

4 FPGA 具體實(shí)現(xiàn)

4.1 滑動(dòng)窗口設(shè)計(jì)

滑動(dòng)窗使用了異步FIFO[9],F(xiàn)IFO 選擇結(jié)構(gòu)如圖4 所示。其中FIFO 的大小設(shè)置的512,數(shù)據(jù)位寬是16,讀時(shí)鐘Rdclk 和寫時(shí)鐘Wrclk 的大小相差5 倍,F(xiàn)IFO 的讀寫使能分別為Rdreq、Wrreq,輸出滿標(biāo)志位Wrfull,空標(biāo)志位Rdempty。

圖4 異步FIFO 的結(jié)構(gòu)

設(shè)計(jì)中需要4 個(gè)FIFO,4 個(gè)FIFO 輪換輸出數(shù)據(jù),4 個(gè)FIFO 的切換采用了狀態(tài)機(jī)的思想,狀態(tài)機(jī)設(shè)計(jì)了8 種狀態(tài),如圖5 所示。當(dāng)一個(gè)狀態(tài)完成之后,再切換到下一個(gè)狀態(tài),否則一直處于當(dāng)前狀態(tài)。

圖5 滑動(dòng)窗的狀態(tài)機(jī)設(shè)計(jì)

圖6 為滑動(dòng)窗口的仿真波形,剛開始時(shí),F(xiàn)ifo1_wreq 的電平為高,F(xiàn)IFO1 開始寫入數(shù)據(jù);當(dāng)寫到第90 個(gè)數(shù)據(jù)時(shí),此時(shí)FIFO2 的Fifo2_wreq 置成高電平,F(xiàn)IFO2 開始寫入數(shù)據(jù);此時(shí)State 同時(shí)發(fā)生跳轉(zhuǎn);當(dāng)FIFO2 寫數(shù)據(jù)寫到第90 個(gè)時(shí),F(xiàn)IFO3的Fifo3_wreq 被置高電平,F(xiàn)IFO3 開始寫數(shù)據(jù);此時(shí)state 在此發(fā)生了跳轉(zhuǎn),數(shù)據(jù)繼續(xù)進(jìn)行寫入;當(dāng)FIFO3 寫入數(shù)據(jù)寫到第90 個(gè)數(shù)據(jù)時(shí),此時(shí)FIFO1寫到了第270 個(gè)數(shù)據(jù),F(xiàn)IFO4 的Fifo4_wreq 被置成高電平,開始寫數(shù)據(jù);此時(shí)4 個(gè)FIFO 的Wreq 都被制成高電平,寫入數(shù)據(jù)。當(dāng)FIFO1 再寫進(jìn)18 個(gè)數(shù)據(jù)時(shí)就要開始讀數(shù)據(jù),F(xiàn)ifo1_rdreq 變?yōu)?,維持讀時(shí)鐘的72 個(gè)高電平,360 個(gè)數(shù)據(jù)被寫進(jìn)FIFO1時(shí),同時(shí)也讀空了,之后開始新的循環(huán)。

圖6 滑動(dòng)窗口的仿真波形

當(dāng)FIFO1 在寫進(jìn)288 個(gè)數(shù)據(jù)時(shí)就要開始讀數(shù)據(jù),F(xiàn)ifo1_rdreq 變?yōu)?,維持讀時(shí)鐘的72 個(gè)高電平,360 個(gè)數(shù)據(jù)被寫進(jìn)FIFO1 時(shí),同時(shí)也讀空了,此時(shí)FIFO1 的讀使能就被關(guān)閉;當(dāng)FIFO2 在寫進(jìn)288 個(gè)數(shù)據(jù)時(shí),F(xiàn)IFO2 就要開始讀數(shù)據(jù),F(xiàn)ifo2_rdreq變?yōu)?,維持讀時(shí)鐘的72 個(gè)高電平,360 個(gè)數(shù)據(jù)被寫進(jìn)FIFO2 時(shí),同時(shí)也讀空了,F(xiàn)ifo2_rdeq 變?yōu)?;同理FIFO3、FIFO4。4 個(gè)FIFO 輪流輸出數(shù)據(jù),每次只有一個(gè)讀使能有效。

圖7 為滑動(dòng)窗模塊的仿真波形,可以看到每個(gè)窗相鄰的將有3/4 的數(shù)據(jù)是重復(fù)的,4 個(gè)FIFO輪換輸出數(shù)據(jù)。

圖7 滑動(dòng)窗口控制仿真波形

4.2 Hanning 窗函數(shù)設(shè)計(jì)

Hanning 窗使用了ROM[10],ROM 采用Altera公司提供的IP 核,ROM 中的地址線由于只能為2 的整次數(shù)冪,取最貼近碼元寬度的512 作為該ROM 的地址數(shù),數(shù)據(jù)位寬為A/DC 的輸出數(shù)據(jù)寬度12,ROM 值在初始化時(shí)被賦予了漢寧窗的數(shù)據(jù),其結(jié)構(gòu)如圖8 所示。

Hanning 窗數(shù)據(jù)仿真波形為圖9,在每個(gè)時(shí)鐘的上升沿?cái)?shù)據(jù)從ROM 端讀出,其數(shù)據(jù)波形如圖中的q 所示。

4.3 乘法器設(shè)計(jì)

乘法器的結(jié)構(gòu)如圖10 所示。

圖8 ROM 窗結(jié)構(gòu)

圖9 ROM 讀出的數(shù)據(jù)顯示波形

圖10 乘法器設(shè)計(jì)的結(jié)構(gòu)圖

輸入端數(shù)據(jù)Dataa、Datab 分別來自于FIFO 輸出的數(shù)據(jù)和ROM 窗內(nèi)的數(shù)據(jù),二者相乘之后的結(jié)果為24 位,為信號(hào)加過窗的數(shù)據(jù),數(shù)據(jù)送給FFT 模塊進(jìn)行計(jì)算。

4.4 傅里葉變換模塊設(shè)計(jì)

傅里葉變換[11]部分選擇FFT 核[12],F(xiàn)FT 核可以設(shè)置FFT 變換的數(shù)據(jù)長(zhǎng)度、輸入數(shù)據(jù)精度、運(yùn)算中旋轉(zhuǎn)因子數(shù)據(jù)精度,并提供了4 種運(yùn)算結(jié)構(gòu),可以根據(jù)板子的運(yùn)算速度及硬件資源情況進(jìn)行選擇使用。由于數(shù)據(jù)是實(shí)時(shí)采集進(jìn)來的,所以設(shè)計(jì)結(jié)構(gòu)中選擇了流模式。流模式的運(yùn)算分2 個(gè)進(jìn)程:載入數(shù)據(jù)及輸出數(shù)據(jù)進(jìn)程和FFT 變換運(yùn)算過程,且這2 個(gè)進(jìn)程可以同一時(shí)間處理。當(dāng)FFT 變換啟動(dòng)時(shí),輸入數(shù)據(jù)首先在時(shí)鐘的控制下輸入信號(hào)到FFT 核內(nèi)部的存儲(chǔ)器內(nèi),當(dāng)一幀數(shù)據(jù)載入完成后才開始計(jì)算,F(xiàn)FT 變換后的數(shù)據(jù)在FFT 變換完成后再輸出到相應(yīng)的端口,流模式下的FFT 結(jié)構(gòu)如圖11 所示。

圖11 流模式下的FFT 結(jié)構(gòu)

流模式的時(shí)序接口如表1 所示。流模式的FFT 時(shí)序圖如圖12 所示。從圖中可以看出,輸入數(shù)據(jù)是連續(xù)的,無論載入數(shù)據(jù)還是FFT 運(yùn)算,數(shù)據(jù)輸出都是同時(shí)進(jìn)行的。

表1 FFT 核模塊端口介紹

圖12 流模式下的FFT 時(shí)序

實(shí)際應(yīng)用中,可以根據(jù)變換有效數(shù)據(jù)輸出時(shí)Source_valid 為高電平期間來確定出現(xiàn)峰值的位置,進(jìn)而根據(jù)位置號(hào)推算出信號(hào)中包含的信號(hào)頻率,進(jìn)行信號(hào)的解調(diào)等處理。

流模式下的FFT 工作,Modelsim 的波形如圖13所示。當(dāng)有數(shù)據(jù)輸入時(shí)Sink_valid 為1;當(dāng)輸入第一個(gè)數(shù)據(jù)時(shí),Sink_sop 為高;當(dāng)輸入最后一個(gè)數(shù)據(jù)時(shí),Sink_eop 電平由低變高,維持一個(gè)時(shí)鐘的高電平。FFT 核計(jì)算結(jié)束結(jié)果輸出,Source_valid 拉高。當(dāng)輸出數(shù)據(jù)第一個(gè)值時(shí),Source_sop 被拉高一個(gè)時(shí)鐘的高電平,之后變成低電平;當(dāng)輸出數(shù)據(jù)最后一個(gè)值時(shí),Source_eop被拉高一個(gè)時(shí)鐘的高電平,之后變成低電平。

圖13 流模式下的FFT 仿真波形

5 結(jié)論

本文提出了利用Altera 公司提供的現(xiàn)有IP 核進(jìn)行直接設(shè)計(jì)實(shí)現(xiàn)滑動(dòng)短時(shí)傅里葉變換,從思路到實(shí)現(xiàn)上難度都不大,并給出了具體的設(shè)計(jì)與實(shí)現(xiàn),其采用的方法可以用來其他的相關(guān)處理。

1)滑動(dòng)窗口的實(shí)現(xiàn)采用了具有數(shù)據(jù)先進(jìn)先出特點(diǎn)的FIFO 作為數(shù)據(jù)緩存,讀寫時(shí)鐘可以不一樣,且不用控制地址線,使用操作都很簡(jiǎn)單。

2)設(shè)計(jì)中使用了Altera 公司提供的FFT 核直接進(jìn)行傅里葉變換,只需要根據(jù)FFT 手冊(cè)進(jìn)行恰當(dāng)?shù)臅r(shí)序設(shè)計(jì),完成自己想要的功能,不需要從原理基礎(chǔ)上設(shè)計(jì)出一個(gè)傅里葉變換模塊,可以減少研發(fā)時(shí)間,降低研究成本。

猜你喜歡
高電平傅里葉時(shí)鐘
一種基于FPGA的PWM防錯(cuò)輸出控制電路
別樣的“時(shí)鐘”
古代的時(shí)鐘
TS-03C全固態(tài)PDM中波發(fā)射機(jī)開關(guān)機(jī)控制電路原理及故障分析
科技傳播(2019年15期)2019-08-22 08:07:44
雙線性傅里葉乘子算子的量化加權(quán)估計(jì)
基于小波降噪的稀疏傅里葉變換時(shí)延估計(jì)
有趣的時(shí)鐘
DM 50KW中波廣播發(fā)射機(jī)欠推動(dòng)故障分析
PDM 1kW中波廣播發(fā)射機(jī)保護(hù)電路分析
時(shí)鐘會(huì)開“花”
深州市| 五大连池市| 蓬莱市| 金溪县| 宜春市| 沙河市| 盈江县| 穆棱市| 澎湖县| 伊春市| 扬中市| 辉县市| 永兴县| 临夏市| 南通市| 连州市| 台江县| 汶川县| 嘉峪关市| 肥乡县| 大埔区| 泰州市| 临洮县| 随州市| 霍邱县| 循化| 正阳县| 莱阳市| 浪卡子县| 彩票| 龙岩市| 墨竹工卡县| 嘉善县| 文昌市| 新竹县| 井冈山市| 伊吾县| 古浪县| 定边县| 四子王旗| 边坝县|