日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式客棧
[導(dǎo)讀]?點(diǎn)上方嵌入式客棧,置頂/星標(biāo)干貨及時(shí)送達(dá) 【導(dǎo)讀】: 前面一篇文章介紹關(guān)于IIR設(shè)計(jì)實(shí)現(xiàn),還是有朋友愿意點(diǎn)開(kāi)一看。 雖不知看官們的感想如何,但想著總還是有賞光一讀的,所以決定繼續(xù)這個(gè)系列。 本文來(lái)聊一聊平均濾波器,咋一看非常容易。但你真的了解其內(nèi)

 點(diǎn)上方嵌入式客棧,置頂/星標(biāo)干貨及時(shí)送達(dá)

【導(dǎo)讀】: 前面一篇文章介紹關(guān)于IIR設(shè)計(jì)實(shí)現(xiàn),還是有朋友愿意點(diǎn)開(kāi)一看。 雖不知看官們的感想如何,但想著總還是有賞光一讀的,所以決定繼續(xù)這個(gè)系列。 本文來(lái)聊一聊平均濾波器,咋一看非常容易。但你真的了解其內(nèi)在密碼嗎? 本文來(lái)試圖探究一下一維平均濾波器設(shè)計(jì)內(nèi)在機(jī)理、應(yīng)用場(chǎng)景。

注:盡量在每篇文章寫(xiě)寫(xiě)摘要,方便閱讀。信息時(shí)代,大家時(shí)間都很寶貴,如此亦可節(jié)約粉絲們的寶貴時(shí)間。前一篇文章公式整失敗了,在朋友們的指導(dǎo)下效果好多了,在此感謝! 故將此文重發(fā)一遍。

理論理解

學(xué)習(xí)一樣?xùn)|西,個(gè)人建議須從三個(gè)維度進(jìn)行: What Why How
這里的內(nèi)容主要參考胡廣書(shū)編寫(xiě)的<<數(shù)字信號(hào)處理導(dǎo)論>>7.5.1節(jié),加了一些自己的理解。

提到平均濾波器,做過(guò)單片機(jī)應(yīng)用開(kāi)發(fā)的朋友,馬上能想到將一些采樣數(shù)據(jù)進(jìn)行加和求平均。誠(chéng)然如此,從其時(shí)域數(shù)學(xué)描述而言也很直觀:

其中 代表當(dāng)前測(cè)量值,對(duì)于單片機(jī)應(yīng)用而言,可以是當(dāng)前ADC的采樣值或者當(dāng)前傳感器經(jīng)過(guò)一系列處理的物理量(比如在工業(yè)控制領(lǐng)域中的溫度、壓力、流量等測(cè)量值),而 表示上一次的測(cè)量值,以此類推, 則是前第N-1次測(cè)量值。

為了揭示其更深層次的機(jī)理,這里用Z傳遞函數(shù)將上述公式進(jìn)一步描述:

對(duì)于傅立葉變換而言:

Z變換的本質(zhì)是拉普拉斯變換的離散化形式, ,令 ,則

,則

所以,平均濾波器的頻率響應(yīng)為:

幅頻相頻響應(yīng)分析

利用下面的python代碼,來(lái)分析一下

# encoding: UTF-8
from scipy.optimize import newton
from scipy.signal import freqz, dimpulse, dstep
from math import sin, cos, sqrt, pi
import numpy as np
import matplotlib.pyplot as plt
import sys
reload(sys)
sys.setdefaultencoding('utf8')

#函數(shù)用于計(jì)算移動(dòng)平均濾波器的截止頻率
def get_filter_cutoff(N, **kwargs):
    func = lambda w: sin(N*w/2) - N/sqrt(2) * sin(w/2)
    deriv = lambda w: cos(N*w/2) * N/2 - N/sqrt(2) * cos(w/2) / 2
    omega_0 = pi/N  # Starting condition: halfway the first period of sin
    return newton(func, omega_0, deriv, **kwargs)

#設(shè)置采樣率
sample_rate = 200 #Hz
N = 7


# 計(jì)算截止頻率
w_c = get_filter_cutoff(N)
cutoff_freq = w_c * sample_rate / (2 * pi)

# 濾波器參數(shù)
b = np.ones(N)
a = np.array([N] + [0]*(N-1))

#頻率響應(yīng)
w, h = freqz(b, a, worN=4096)
#轉(zhuǎn)為頻率
w *= sample_rate / (2 * pi)                      

#繪制波特圖
plt.subplot(211)
plt.suptitle("Bode")
#轉(zhuǎn)換為分貝
plt.plot(w, 20 * np.log10(abs(h)))       
plt.ylabel('Magnitude [dB]')
plt.xlim(0, sample_rate / 2)
plt.ylim(-6010)
plt.axvline(cutoff_freq, color='red')
plt.axhline(-3.01, linewidth=0.8, color='black', linestyle=':')

# 相頻響應(yīng)
plt.subplot(212)
plt.plot(w, 180 * np.angle(h) / pi)      
plt.xlabel('Frequency [Hz]')
plt.ylabel('Phase [°]')
plt.xlim(0, sample_rate / 2)
plt.ylim(-18090)
plt.yticks([-180-135-90-4504590])
plt.axvline(cutoff_freq, color='red')
plt.show()

取采樣率為200Hz,濾波器長(zhǎng)度為7可得下面的幅頻、相頻響應(yīng)曲線。從其主瓣可見(jiàn)其幅頻響應(yīng)為一低通濾波器。幅頻響應(yīng)略有不平,隨頻率上升而衰減。其相頻響應(yīng)線性。如果對(duì)濾波器有經(jīng)驗(yàn)的朋友會(huì)知道FIR濾波器的相頻響應(yīng)是線性的,而移動(dòng)平均濾波器剛好是FIR的一種特例。

當(dāng)改變?yōu)V波器長(zhǎng)度為3/7/21時(shí),僅觀察其幅頻響應(yīng):

可見(jiàn),隨著濾波器的長(zhǎng)度變長(zhǎng),其截止頻率變小,其通帶變窄。濾波器的響應(yīng)變慢,延遲變大。所以實(shí)際使用的時(shí)候,須根據(jù)有用頻率帶寬合理選擇濾波器的長(zhǎng)度。有用信號(hào)的帶寬可以通過(guò)按采樣率采集一定的點(diǎn)進(jìn)行傅立葉分析可得。如果有帶FFT功能的示波器,也可以直接測(cè)量得到。

C語(yǔ)言實(shí)現(xiàn)

濾波器的C語(yǔ)言實(shí)現(xiàn),比較容易。干貨在此,快快領(lǐng)走

#define MVF_LENGTH  5
typedef float E_SAMPLE;
/*定義移動(dòng)平均寄存器歷史狀態(tài)*/
typedef struct  _t_MAF
{

    E_SAMPLE buffer[MVF_LENGTH];
    E_SAMPLE sum;
    int index;
}t_MAF;

void moving_average_filter_init(t_MAF * pMaf)
{
    pMaf->index = -1;
    pMaf->sum   = 0;
}

E_SAMPLE moving_average_filter(t_MAF * pMaf,E_SAMPLE xn)
{
    E_SAMPLE yn=0;
    int i=0;

    if(pMaf->index == -1)
    {
        for(i = 0; i < MVF_LENGTH; i++)
        {
            pMaf->buffer[i] = xn;
        }
        pMaf->sum   = xn*MVF_LENGTH;
        pMaf->index = 0;
    }
    else
    {
        pMaf->sum     -= pMaf->buffer[pMaf->index];
        pMaf->buffer[pMaf->index] = xn;
        pMaf->sum     += xn;
        pMaf->index++;
        if(pMaf->index>=MVF_LENGTH)
            pMaf->index = 0;
    }
    yn = pMaf->sum/MVF_LENGTH;
    return yn;
}

測(cè)試代碼:

#define SAMPLE_RATE 500.0f
#define SAMPLE_SIZE 256
#define PI 3.415926f
int main()
{
    E_SAMPLE rawSin[SAMPLE_SIZE];
    E_SAMPLE outSin[SAMPLE_SIZE];

    E_SAMPLE rawSquare[SAMPLE_SIZE];
    E_SAMPLE outSquare[SAMPLE_SIZE];
    t_MAF mvf;

    FILE *pFile=fopen("./simulationSin.csv","wt+");
    /*方波測(cè)試*/
    if(pFile==NULL)
    {
        printf("simulationSin.csv opened failed");
        return -1;
    }
    for(int i=0;i<SAMPLE_SIZE;i++)
    {
        rawSin[i] = 100*sin(2*PI*20*i/SAMPLE_RATE)+rand()%30;
    }

    /*正弦信號(hào)測(cè)試*/
    for(int i=0;i<SAMPLE_SIZE/4;i++)
    {
        rawSquare[i] = 5+rand()%10;
    }
    for(int i=SAMPLE_SIZE/4;i<3*SAMPLE_SIZE/4;i++)
    {
        rawSquare[i] = 100+rand()%10;
    }
    for(int i=3*SAMPLE_SIZE/4;i<SAMPLE_SIZE;i++)
    {
        rawSquare[i] = 5+rand()%10;
    }

    /*初始化*/
    moving_average_filter_init(&mvf);
    /*濾波*/
    for(int i=0;i<SAMPLE_SIZE;i++)
    {
        outSin[i]=moving_average_filter(&mvf,rawSin[i]);
    }

    for(int i=0;i<SAMPLE_SIZE;i++)
    {
        fprintf(pFile,"%f,",rawSin[i]);
    }

    fprintf(pFile,"\n");
    for(int i=0;i<SAMPLE_SIZE;i++)
    {
        fprintf(pFile,"%f,",outSin[i]);
    }

    fclose(pFile);

    pFile=fopen("./simulationSquare.csv","wt+");
    if(pFile==NULL)
    {
        printf("simulationSquare.csv opened failed");
        return -1;
    }
    /*初始化*/
    moving_average_filter_init(&mvf);
    /*濾波*/
    for(int i=0;i<SAMPLE_SIZE;i++)
    {
        outSquare[i]=moving_average_filter(&mvf,rawSquare[i]);
    }

    for(int i=0;i<SAMPLE_SIZE;i++)
    {
        fprintf(pFile,"%f,",rawSquare[i]);
    }

    fprintf(pFile,"\n");
    for(int i=0;i<SAMPLE_SIZE;i++)
    {
        fprintf(pFile,"%f,",outSquare[i]);
    }

    fclose(pFile);
    return 0;
}

對(duì)于方波測(cè)試,利用excel生成波形,可得如下的波形。從波形明顯可見(jiàn),長(zhǎng)度為7的移動(dòng)平均濾波器對(duì)于隨機(jī)噪聲的濾波效果比較滿意。從圖中還可以看出,移動(dòng)平均濾波器在信號(hào)鏈中會(huì)引入一定的延時(shí),在應(yīng)用時(shí)需要考慮。對(duì)于一般的傳感測(cè)量如果沒(méi)有明確的要求,常??梢院雎?。

對(duì)于正弦信號(hào)而言,移動(dòng)平均濾波器也有比較明顯的效果,只是其通帶比較窄,如果有用信號(hào)頻率比較高,則移動(dòng)平均濾波器將不適合。

總結(jié):

  • 移動(dòng)平均濾波器在濾除高頻噪聲時(shí)效果不錯(cuò)。

  • 移動(dòng)平均濾波器本質(zhì)上是一種FIR濾波器,其具有線性相頻響應(yīng)。

  • 在實(shí)際使用中須注意有用信號(hào)頻率,如有用信號(hào)頻率較高,則不適用。

  • 長(zhǎng)度不宜過(guò)長(zhǎng),否則其延時(shí)效應(yīng)將很大。

  • 從信號(hào)鏈的角度而言,可以作為前級(jí)處理,也就是ADC后的數(shù)據(jù)直接濾波。也可以作為后級(jí)處理。

  • 如果是ADC采樣數(shù)據(jù)濾波,樣本為整型,文中代碼可做相應(yīng)優(yōu)化,比如乘法除法可以用移位運(yùn)算代替。

點(diǎn)擊留言/查看留言

END

果喜歡右下點(diǎn)個(gè)在看,也會(huì)讓我倍感鼓舞

往期精彩推薦




▲深度解析U-Boot網(wǎng)絡(luò)實(shí)現(xiàn)(長(zhǎng)篇好文)
讀U-Boot源碼-C語(yǔ)言編程大法總結(jié)篇一
讀U-Boot源碼-C語(yǔ)言編程技巧總結(jié)篇二
基于Buildroot的Linux系統(tǒng)構(gòu)建之根文件系統(tǒng)
U-Boot架構(gòu)淺析
手把手教系列之IIR數(shù)字濾波器設(shè)計(jì)實(shí)現(xiàn)

關(guān)注置頂:掃描左下二維碼關(guān)注公眾號(hào)加星

討論加群:掃描右下二維碼添加,發(fā)送“加群”

關(guān)注

加群

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(chē)(EV)作為新能源汽車(chē)的重要代表,正逐漸成為全球汽車(chē)產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車(chē)的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車(chē)的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車(chē)場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周?chē)娮釉O(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉