1)限幅濾波算法
該運算的過程中將兩次相鄰的采樣相減,求出其增量,然后將增量的絕對值,與兩次采樣允許的最大差值A進行比較。A的大小由被測對象的具體情況而定,如果小于或等于允許的最大差值,則本次采樣有效;否則取上次采樣值作為本次數據的樣本。
算法的程序代碼如下:
#defineA //允許的最大差值
chardata; //上一次的數據
char filter()
{
chardatanew; //新數據變量
datanew=get_data(); //獲得新數據變量
if((datanew-data)>A||(data-datanew>A))
return data;
else
returndatanew;
}
說明:限幅濾波法主要用于處理變化較為緩慢的數據,如溫度、物體的位置等。使用時,關鍵要選取合適的門限制A。通常這可由經驗數據獲得,必要時可通過實驗得到。
(2)中值濾波算法
該運算的過程是對某一參數連續采樣N次(N一般為奇數),然后把N次采樣的值按從小到大排列,再取中間值作為本次采樣值,整個過程實際上是一個序列排序的過程。
算法的程序代碼如下:#define N11 //定義獲得的數據個數
char filter()
{
charvalue_buff[N]; //定義存儲數據的數組
char count,i,j,temp;
for(count=0;count
{
value_buf[count]=get_data();
delay(); //如果采集數據比較慢,那么就需要延時或中斷
}
for(j=0;j
{
for(value_buff[i]>value_buff[i+1]
{
temp=value_buff[i];
value_buff[i]=value_buff[i+1];
value_buff[i+1]=temp;
}
}
returnvalue_buff[(N-1)/2];
}
說明:中值濾波比較適用于去掉由偶然因素引起的波動和采樣器不穩定而引起的脈動干擾。若被測量值變化比較慢,采用中值濾波法效果會比較好,但如果數據變化比較快,則不宜采用此方法。
(3)算術平均濾波算法
該算法的基本原理很簡單,就是連續取N次采樣值后進行算術平均。
算法的程序代碼如下:char filter()
{
int sum=0;
for(count=0;count
{
sum+=get_data();
delay():
}
return (char)(sum/N);
}
說明:算術平均濾波算法適用于對具有隨機干擾的信號進行濾波。這種信號的特點是有一個平均值,信號在某一數值附近上下波動。信號的平均平滑程度完全到決于N值。當N較大時,平滑度高,靈敏度低;當N較小時,平滑度低,但靈敏度高。為了方便求平均值,N一般取4、8、16、32之類的2的整數冪,以便在程序中用移位操作來代替除法。
(4)加權平均濾波算法
由于前面所說的“算術平均濾波算法”存在平滑度和靈敏度之間的矛盾。為了協調平滑度和靈敏度之間的關系,可采用加權平均濾波。它的原理是對連續N次采樣值分別乘上不同的加權系數之后再求累加,加權系數一般先小后大,以突出后面若干采樣的效果,加強系統對參數變化趨勢的認識。各個加權系數均小于1的小數,且滿足總和等于1的結束條件。這樣加權運算之后的累加和即為有效采樣值。其中加權平均數字濾波的數學模型是:
式中:D為N個采樣值的加權平均值:XN-i為第N-i次采樣值;N為采樣次數;Ci為加權系數。加權系數Ci體現了各種采樣值在平均值中所占的比例。一般來說采樣次數越靠后,取的比例越大,這樣可增加新采樣在平均值中所占的比重。加權平均值濾波法可突出一部分信號抵制另一部分信號,以提高采樣值變化的靈敏度。
程序代碼如下:
char code jq[N]={1,2,3,4,5,6,7,8,9,10,11,12};
//code數組為加權系數表,存在程序存儲區
char codesum_jq=1+2+3+4+5+6+7+8+9+10+11+12;
char filter()
{
char count;
char value_buff[N];
int sum=0;
for(count=0;count
{
value_buff[count]=get_data();
delay();
}
for(count=0;count
sum+=value_buff[count]*jq[count];
return(char)(sum/sum_jq);
}
(5)滑動平均濾波算法
以上介紹和各種平均濾波算法有一個共同點,即每獲取一個有效采樣值必須連續進行若干次采樣,當采速度慢時,系統的實時得不到保證。這里介紹的滑動平均濾波算法只采樣一次,將一次采樣值和過去的若干次采樣值一起求平均,得到的有效采樣值即可投入使用。如果取N個采樣值求平均,存儲區中必須開辟N個數據的暫存區。每新采集一個數據便存入暫存區中,同時去掉一個最老數據,保存這N個數據始終是最新更新的數據。采用環型隊列結構可以方便地實現這種數據存放方式。
程序代碼如下:char value_buff[N];
char i=0;
char filter()
{
char count;
int sum=0;
value_buff[i++]=get_data();
if(i==N)
i=0;
for(count=0;count
sum=value_buff[count];
return (char)(sum/N);
}
(6)低通濾波
將普通硬件RC低通濾波器的微分方程用差分方程來表求,變可以采用軟件算法來模擬硬件濾波的功能,低通濾波算法如下:
Yn=a* Xn+(1-a) *Yn-1
式中 Xn——本次采樣值
Yn-1——上次的濾波輸出值;
,a——濾波系數,其值通常遠小于1;
Yn——本次濾波的輸出值。
由上式可以看出,本次濾波的輸出值主要取決于上次濾波的輸出值(注意不是上次的采樣值,這和加權平均濾波是有本質區別的),本次采樣值對濾波輸出的貢獻是比較小的,但多少有些修正作用,這種算法便模擬了具體有教大慣性的低通濾波器功能。濾波算法的截止頻率可用以下式計算:
fL=a/2Pit pi為圓周率3.14…
式中 a——濾波系數; t——采樣間隔時間。
例如:當t=0.5s(即每秒2次),a=1/32時;
fL=(1/32)/(2*3.14*0.5)=0.01Hz
當目標參數為變化很慢的物理量時,這是很有效的。另外一方面,它不能濾除高于1/2采樣頻率的干攪信號,本例中采樣頻率為2Hz,故對1Hz以上的干攪信號應采用其他方式濾除。
上一篇:keil編譯時出現錯誤和警告總結
下一篇:DSP28035_波特率的設置
推薦閱讀
史海拾趣
在電子行業競爭日益激烈的背景下,BB公司深知技術創新是企業發展的核心動力。因此,公司投入大量研發資金,積極引進和培養人才,不斷推動技術創新。經過多年的努力,BB公司在模擬集成電路領域取得了多項重大突破,推出了一系列具有自主知識產權的創新產品。這些產品不僅提升了BB公司的市場競爭力,也為整個電子行業的發展做出了貢獻。
隨著電子行業的快速發展,市場對機箱和外殼產品的要求也越來越高。Box Enclosures公司敏銳地捕捉到了這一市場變化,開始加大在技術研發上的投入。公司成功開發出一系列具有創新性的產品,不僅滿足了市場的需求,還引領了行業的發展方向。這些技術創新為Box Enclosures公司帶來了更多的商業機會和市場份額。
近年來,電子行業經歷了多次技術變革和市場調整。面對這些變化,Baton Lock公司積極調整戰略,加大了對新興技術如物聯網、人工智能等領域的研發投入。同時,公司還通過優化生產流程、降低成本等方式提高競爭力,成功應對了行業變革帶來的挑戰。
隨著ANYSOLAR的產品在市場上取得一定的成功,公司開始考慮市場拓展。李明帶領團隊深入調研國內外市場需求,發現歐洲市場對高效、環保的光伏材料有著巨大的需求。于是,ANYSOLAR開始積極尋求與國際企業的合作機會。
經過多次洽談和協商,ANYSOLAR最終與一家歐洲知名光伏企業達成了戰略合作協議。雙方共同投資建立生產線,共同開拓市場。這一合作不僅為ANYSOLAR帶來了穩定的訂單和資金支持,也提升了公司的品牌知名度和國際影響力。
1972年,意大利的Romano Volta博士憑借對光電技術的深厚理解和前瞻性眼光,創立了DATALOGIC公司,并致力于自動化機器的光電傳感器和控制產品的開發。這是Datasensor公司的起點,也是其日后成為全球工業自動化光電檢測領域領導者的基石。在初創期,公司面臨技術挑戰、市場競爭和資金壓力等多重困難,但Romano Volta博士的堅定信念和團隊的共同努力,使公司逐漸站穩腳跟,并開始贏得市場的認可。
隨著公司的不斷發展壯大,DATALOGIC公司逐漸整合為三大業務模塊:自動化產品、手持設備和自動掃描系統。為了更好地適應市場變化和滿足客戶需求,公司于1998年將自動化產品業務模塊獨立出來,成立新的公司,并啟用DATALOGIC Sensor &More新標識。2000年,公司進一步啟用全新的DATASENSOR品牌標識,標志著公司在工業自動化光電檢測領域的新篇章。同時,公司投入大量資金用于生產改善、項目管理和高新技術領域的發展,為公司的持續創新和市場拓展提供了有力保障。
微機產品在電力系統的推廣應用,導致對供電電源提出了更高的要求。美國、德國等西方發達國家電力系統中的直流電源早已采用模塊高頻開關整流式電源。在我國這種更新換代也已經開始。本文介紹的電力用智能高頻開關整流式充電電源正是為適應這種趨勢而 ...… 查看全部問答∨ |
無意間點開北交大BBS中一同級通信專業的同學寫的帖子。感觸頗深,對比下自己,不禁感嘆有諸多相似之處,但是鄙人對未來的認識沒有該牛人那么的清晰。帖子中回答了諸多曾經困擾,甚至至今仍在困擾我的問題……推薦給每位城院學子,相信大家都會受益 ...… 查看全部問答∨ |
http://www.dzsc.com/data/html/2009-10-14/79406.html 摘 要設計實現了一種基于FPGA 的,可用于多數據緩存的、能夠高效利用帶寬的多端口SDRAM 控制器。本文使用狀態機的設計思想,采用Verilog 硬件描述語言設計了時序控制程序。得到的SDRAM ...… 查看全部問答∨ |
最近在做一個pcf8563的時鐘電路,i2c總線讀寫,同時i2c總線上還掛了一片AT24c02,同樣的i2c總線讀寫程序,在讀寫AT24c02沒有任何問題,但是讀寫pcf8563時卻讀出來是亂碼 以下是8563的讀寫程序 void Write8563(unsigned char address,unsigned c ...… 查看全部問答∨ |
誰有X86CPU的Wince系統的cemgrc.exe,cetlstub.dll,tcpipc.dll三個文件?謝謝大家幫我傳一下 baiminshengbai@126.com… 查看全部問答∨ |
因為在WindowsXP下開發嵌入式 感覺完全像在編程 可以請問各位高手有什么建議?給點開發的方向可以嗎? 然后我們現在想開發無線網絡,GPRS,但沒什么概念,應該看些什么。如果開發成功,用處大么? 謝謝。… 查看全部問答∨ |
小弟開發一個Windowce 5.0的設備, 支持無線網卡, 目前上網沖浪等沒有問題, 但是在終端上想讀寫局域網內PC上共享目錄的文件一直沒有線索, 請幫忙給點開發線索.… 查看全部問答∨ |
|
用ucos+stm32做了一個小板子做modbus的模擬量采集。采了一會兒,當采集端什么都沒接及采集結果為零時 能夠正常運行。而當采集端接入一個模擬量,及采集結果不為零時,上位機的modbus調試軟件顯示超時,而mdk停在了hardfaultexception上。當程 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 英飛凌發布“在中國、為中國”本土化戰略 三十而勵啟新篇
- 智慧農業:英特爾處理器驅動更加可持續、高效的農業發展
- 英偉達正在用“物理AI”,徹底顛覆自動駕駛、工業、機器人和智慧城市
- 臺積電-東京大學實驗室啟用,雙方聯手推動半導體研究和教育
- ?意法半導體大巴窯工廠落地創新冷卻系統,提升可持續發展能力
- Nordic Semiconductor聯同Omnispace和Gatehouse Satcom完成5G NB-IoT衛星演示
- 英偉達開啟“攻城略地”模式,擬在歐洲建設20座AI工廠
- 臺積電:日本JASM第二晶圓廠預計今年下半年動工
- 工信部:支持車企“60天賬期”承諾,促進產業健康發展
- 全球十大芯片代工廠最新排名!中芯國際沖擊世界第二