大俠好,歡迎來到FPGA技術江湖,江湖偌大,相見即是緣分。大俠可以關注FPGA技術江湖,在“闖蕩江湖”、"行俠仗義"欄里獲取其他感興趣的資源,或者一起煮酒言歡?!爸缶蒲詺g”進入IC技術圈,這里有近100個IC技術公眾號。
今天給大俠帶來在FPAG技術交流群里平時討論的問題答疑合集(二十一),以后還會多推出本系列,話不多說,上貨。
Q:FPGA數字信號處理問題,這樣處理可行嗎?在做項目的時候遇到一個問題,求大佬們解答一下。
要求對頻率范圍為5Hz到5000Hz的三路振動信號進行采集,打算用一塊AD復用三個通道來進行采集,采樣頻率打算用60KHz,那么每通道的實際采樣頻率是不是就是20KHz呢?這樣是不是就能滿足每通道采樣頻率為信號頻率的4倍呢?
對采集到的信號進行fft處理,以得到指定頻率點的幅度值,指定的頻率點都集中在200Hz以內,且都精確到了小數點后一位,也就是說頻率分辨率得是0.1才能將這些信號區(qū)分出來,這樣的話fft點數得是20K*2/0.1 ,達到了40萬以上(不知道我這樣算對不對),那么fpga是不是沒辦法做了呢,我看7系fpga的fft ip核最大點數也就到65536。
如果我將采集到的數據通過一個數字濾波器,將200Hz以上頻率的信號全部濾除,再做fft,這樣可處理可行嗎?
A:以下是對問題的分析以及給出的一些小建議,僅供參考:
一、關于采樣頻率分配
如果用一塊 AD 復用三個通道進行采集,采樣頻率為 60kHz,理論上平均分配給三個通道時,每通道的實際采樣頻率約為 20kHz。但在實際應用中,由于復用的方式可能會引入一些不確定性,不能簡單地認為完全平均分配。對于頻率范圍為 5Hz 到 5000Hz 的信號,一般來說,采樣頻率為信號最高頻率的 2 倍以上就能較好地還原信號,但為了更好的效果通常取 4 倍及以上。在這種情況下,20kHz 的采樣頻率對于 5000Hz 的信號滿足了 4 倍的關系。
二、關于 FFT 點數計算
對于頻率分辨率的計算方法基本正確。如果要區(qū)分出精確到小數點后一位且集中在 200Hz 以內的頻率點,頻率分辨率為 0.1Hz 時,根據采樣頻率和頻率分辨率的關系(采樣頻率/FFT 點數 = 頻率分辨率),FFT 點數確實需要達到 20kHz/0.1 = 200000,遠超過一般 FPGA 的 FFT IP 核最大點數。
三、關于數字濾波后再做 FFT
這種方法在一定程度上是可行的。通過數字濾波器將 200Hz 以上頻率的信號濾除,可以降低數據量和處理復雜度。但需要注意以下幾點:
1. 數字濾波器的設計要合理,確保能夠有效地濾除不需要的頻率成分,同時對 200Hz 以內的信號影響最小。
2. 濾波后的信號可能會出現一些失真或相位變化,需要評估這些影響對最終結果的準確性。
3. 即使經過濾波,FFT 的點數仍然可能比較大,需要進一步優(yōu)化算法或考慮其他處理方式,比如分段處理再拼接結果等。
總之,這種處理方法有一定的可行性,但需要仔細設計和驗證各個環(huán)節(jié),以確保滿足項目的要求。
Q:IIC協議中如何校驗ACK?在學51單片機,使用到at24c02這塊EEPROM芯片存儲,iic與單片機通信。對于主機發(fā)數據給從機,從機應答,SDA=0。主機怎么校驗這個應答位呢?需要自己寫函數嗎?
還有,在主機作為接收器,接收數據后應答從機又是怎么檢驗的呢?
A:在 IIC 協議中,校驗 ACK(應答位)的方法如下:
一、主機發(fā)送數據后校驗從機應答
1. 當主機發(fā)送完一個字節(jié)的數據后,會釋放 SDA 線(將其設置為輸入模式),并在 SCL 線上產生第 9 個時鐘脈沖。
2. 在這個時鐘脈沖期間,從機應該將 SDA 線拉低以表示應答(ACK),即 SDA = 0。如果從機拉低 SDA 線,主機可以讀取 SDA 線的狀態(tài)來判斷是否收到應答。
3. 對于 51 單片機,可以通過編程設置相應的 GPIO 口為輸入模式來讀取 SDA 線的狀態(tài)。如果讀取到的 SDA 值為 0,則表示從機應答成功;如果為 1,則表示從機未應答或出現錯誤。
在一些單片機的開發(fā)環(huán)境中,可能已經提供了 IIC 通信的庫函數,這些庫函數通常會自動處理 ACK 的校驗。但如果沒有現成的庫函數,你可能需要自己編寫函數來實現 ACK 的校驗。
二、主機作為接收器接收數據后應答從機
1. 當主機作為接收器接收從機發(fā)送的數據時,在接收到每個字節(jié)后,主機需要在 SCL 線上產生一個應答脈沖。
2. 如果主機希望繼續(xù)接收數據,它應該在第 9 個時鐘脈沖期間將 SDA 線拉低以表示應答;如果主機希望結束通信,它應該將 SDA 線保持為高電平以表示非應答(NACK)。
3. 同樣,對于 51 單片機,可以通過編程設置相應的 GPIO 口為輸出模式,并根據需要將 SDA 線設置為低電平(應答)或高電平(非應答)。
校驗 ACK 的過程需要仔細考慮時鐘同步、數據傳輸的時序以及 GPIO 口的設置和讀取操作,以確保通信的準確性和可靠性。
Q:這個Quartus軟件顯示問題怎么解決?我在Quartus上面進行Verilog仿真,全編譯后查看RTL視圖,正常顯示應該如圖1,但是我的電腦屏幕上面顯示的如圖2,有些內容顯示不完整,看著很難受,這種問題應該怎么解決?
A:這種情況可以嘗試以下幾種方法來解決:
一、調整軟件顯示設置
1. 嘗試調整 Quartus 軟件的窗口大小。有時候窗口過小過大可能會導致部分內容顯示不完整??梢允謩永齑翱谶吙颍词欠衲苁癸@示內容完整呈現。
2. 檢查軟件的縮放設置。如果軟件支持縮放功能,可以嘗試調整縮放比例,看是否能改善顯示效果。通常可以在軟件的“視圖”或“設置”菜單中找到相關選項。
二、更新顯卡驅動
1. 過時的顯卡驅動可能會導致圖形顯示問題。訪問顯卡制造商的官方網站,下載并安裝最新版本的顯卡驅動程序。
2. 安裝完成后,重新啟動計算機,然后再次打開 Quartus 軟件,查看 RTL 視圖是否正常顯示。
三、檢查系統(tǒng)分辨率設置
1. 確保你的計算機系統(tǒng)分辨率設置合理。過高或過低的分辨率可能會影響軟件的顯示效果。
2. 嘗試調整系統(tǒng)分辨率,看是否能使 Quartus 軟件的 RTL 視圖正常顯示。可以在操作系統(tǒng)的“顯示設置”中進行分辨率調整。
四、重新安裝 Quartus 軟件
1. 如果以上方法都無法解決問題,可以考慮重新安裝 Quartus 軟件。
2. 在卸載軟件之前,確保備份好你的項目文件和設置。然后按照正確的步驟卸載 Quartus 軟件,并清理殘留文件。
3. 下載較新且穩(wěn)定的版本的 Quartus 軟件(如18.0版本,并進行安裝。安裝過程中,注意選擇正確的安裝選項和配置。安裝完成后,重新打開軟件,查看 RTL 視圖是否正常顯示。
如果多種方法嘗試都不行,卸載重裝最直接高效。
今天先整理三個問題答疑,后續(xù)還會持續(xù)推出本系列。