欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

常見的濾波算法及其在單片機(jī)中的應(yīng)用介紹(二)

冬至子 ? 來源:HITwh汽院智能車團(tuán)隊 ? 作者:汽小智 ? 2023-11-21 14:50 ? 次閱讀

01

中值濾波

原理

中值濾波是一種非線性濾波算法,它將信號中的每個采樣點替換成該采樣點鄰域內(nèi)的中值。它的主要思想是通過找到鄰域內(nèi)的中值來消除信號中的噪聲,同時盡可能地保留信號中的有用信息

中值濾波的步驟如下:

a. 定義鄰域大小和形狀。常用的鄰域形狀有矩形、圓形、十字形等。

b. 對信號的每個采樣點,選取其鄰域內(nèi)的所有采樣點,并將其排序。

c. 將排序后的采樣點序列中間的值作為該采樣點的輸出值。

由于中值濾波采用了排序的方式,因此它比線性濾波算法的計算量要大,但是相對于其它非線性濾波算法,中值濾波的計算量相對較小,而且不需要預(yù)先確定濾波器參數(shù),因此具有很好的實時性能。

中值濾波通常適用于以下場景:

a. 信號中含有脈沖噪聲或椒鹽噪聲。

b. 信號中含有高斯噪聲,但信號的均值和方差不易確定。

c. 信號中含有周期性噪聲,周期長度大于鄰域大小。

需要注意的是,中值濾波可能會導(dǎo)致信號的某些特征被模糊化,因此在應(yīng)用中需要謹(jǐn)慎選擇鄰域大小和形狀,以及濾波器的使用場景。

代碼

下面是一個使用C語言編寫的中值濾波函數(shù)的示例代碼,它可以處理一個長度為N的整型數(shù)組input,并將輸出結(jié)果保存在一個長度為N的整型數(shù)組output中。這個函數(shù)的鄰域大小由變量size指定,可以根據(jù)需要進(jìn)行調(diào)整。

C++
#include
#include

#define SIZE 3 // 鄰域大小

int cmp(const void *a, const void b) {
return (
(int *)a - *(int *)b);
}

void median_filter(int *input, int *output, int N) {
int i, j, k, m;
int median[SIZE * SIZE];

for (i = 0; i < N; i++) {
    k = 0;
    for (j = i - (SIZE - 1) / 2; j <= i + (SIZE - 1) / 2; j++) {
        if (j < 0 || j >= N) {
            continue;
        }
        for (m = j - (SIZE - 1) / 2; m <= j + (SIZE - 1) / 2; m++) {
            if (m < 0 || m >= N) {
                continue;
            }
            median[k++] = input[m];
        }
    }
    qsort(median, k, sizeof(int), cmp);
    output[i] = median[k / 2];
}

}

int main() {
int input[] = {1, 5, 2, 7, 3, 9, 4, 8, 6};
int output[sizeof(input) / sizeof(int)];
int N = sizeof(input) / sizeof(int);
int i;

median_filter(input, output, N);

printf("Input data: ");
for (i = 0; i < N; i++) {
    printf("%d ", input[i]);
}
printf("n");

printf("Output data: ");
for (i = 0; i < N; i++) {
    printf("%d ", output[i]);
}
printf("n");

return 0;

}

輸出結(jié)果如下:

Kotlin
Input data: 1 5 2 7 3 9 4 8 6
Output data: 2 2 3 4 4 5 6 7 8

可以看到,中值濾波算法可以有效地消除噪聲,同時盡可能地保留原始信號的特征。需要注意的是,在使用中值濾波算法時,鄰域大小的選擇需要根據(jù)實際情況進(jìn)行調(diào)整,以免產(chǎn)生過度平滑或者信息損失的問題。

02

消抖濾波

原理

消抖濾波法(Debouncing Filter)是一種常用的信號處理算法。它主要用于消除由于輸入信號在短時間內(nèi)出現(xiàn)了快速變化而導(dǎo)致的抖動現(xiàn)象。在實際應(yīng)用中,如電子開關(guān)、按鍵等場景中,由于機(jī)械接觸的原因,可能會產(chǎn)生短時間內(nèi)快速變化的信號,這種信號稱為抖動信號,會對系統(tǒng)產(chǎn)生誤判和誤動作。因此,需要對這種信號進(jìn)行濾波處理。

消抖濾波法的基本思想是在輸入信號發(fā)生變化時,延遲一段時間再檢測信號狀態(tài),如果信號保持穩(wěn)定狀態(tài),則認(rèn)為信號有效。如果信號在這段時間內(nèi)發(fā)生了變化,則重新計時。這種方法可以有效地抑制抖動信號,并且可以消除無效的信號瞬態(tài)。

消抖濾波法的具體實現(xiàn)方式可以采用軟件或硬件的方式實現(xiàn)。軟件實現(xiàn)方式常見的是利用定時器進(jìn)行延時,硬件實現(xiàn)方式常見的是利用RC電路進(jìn)行延時。下面給出一個基于軟件實現(xiàn)的消抖濾波函數(shù)的偽代碼:

Python
int debouncing_filter(int input, int delay_ms) {
static int last_input = 0;
static int stable_cnt = 0;
if (input != last_input) {
stable_cnt = 0;
}
else {
stable_cnt++;
}
last_input = input;
if (stable_cnt >= delay_ms / sampling_time) {
return input;
}
else {
return last_input;
}
}

在這個函數(shù)中,input表示輸入信號的狀態(tài),delay_ms表示需要延遲的時間。函數(shù)通過記錄上一個時刻的輸入狀態(tài)以及信號保持穩(wěn)定狀態(tài)的時間來實現(xiàn)消抖功能。如果信號保持穩(wěn)定狀態(tài)的時間超過了設(shè)定的延時時間,則返回當(dāng)前的輸入狀態(tài)。否則,返回上一個時刻的輸入狀態(tài)。

需要注意的是,在使用消抖濾波法時,延時時間需要根據(jù)具體的應(yīng)用場景來進(jìn)行設(shè)置。如果延時時間設(shè)置過長,則可能會導(dǎo)致信號響應(yīng)時間過長,影響系統(tǒng)的實時性;如果延時時間設(shè)置過短,則可能會無法有效地抑制抖動信號。

代碼

下面給出一個基于軟件實現(xiàn)的消抖濾波函數(shù)的具體實現(xiàn)代碼,以及使用示例:

C++
int debouncing_filter(int input, int delay_ms) {
static int last_input = 0;
static int stable_cnt = 0;
if (input != last_input) {
stable_cnt = 0;
}
else {
stable_cnt++;
}
last_input = input;
if (stable_cnt >= delay_ms / 10) { // 采樣周期假設(shè)為10ms
return input;
}
else {
return last_input;
}
}

在這個函數(shù)中,input表示輸入信號的狀態(tài),delay_ms表示需要延遲的時間。函數(shù)通過記錄上一個時刻的輸入狀態(tài)以及信號保持穩(wěn)定狀態(tài)的時間來實現(xiàn)消抖功能。如果信號保持穩(wěn)定狀態(tài)的時間超過了設(shè)定的延時時間,則返回當(dāng)前的輸入狀態(tài)。否則,返回上一個時刻的輸入狀態(tài)。

下面給出一個示例,展示如何使用該函數(shù)進(jìn)行消抖處理:

C++
#include

int main() {
int input = 0;
int output = 0;
int delay_ms = 50; // 延時時間為50ms
while (1) {
scanf("%d", &input); // 從終端讀取輸入信號狀態(tài)
output = debouncing_filter(input, delay_ms); // 進(jìn)行消抖濾波處理
printf("Input: %d, Output: %dn", input, output); // 輸出結(jié)果
}
return 0;
}

在這個示例中,首先從終端讀取輸入信號狀態(tài),然后調(diào)用debouncing_filter函數(shù)進(jìn)行消抖濾波處理,并將處理后的結(jié)果輸出到終端。循環(huán)執(zhí)行該過程,直到程序結(jié)束。

03

遞推平均濾波

原理

遞推平均濾波法,又稱為滑動平均濾波法,是一種對于輸入信號進(jìn)行平滑處理的算法。該算法采用一定的方式對一定數(shù)量的輸入信號進(jìn)行加權(quán)平均,得到一個平滑的輸出信號。具體地,遞推平均濾波法使用一個固定長度的窗口,每當(dāng)有新的輸入信號到來時,就將窗口內(nèi)的舊的信號淘汰掉,并將新的信號加入到窗口中,然后重新計算窗口內(nèi)所有信號的平均值作為當(dāng)前的輸出信號。

因此,隨著新的信號不斷到來,窗口內(nèi)的信號會不斷滑動,而輸出信號也會不斷變化,從而實現(xiàn)對輸入信號的平滑處理。

遞推平均濾波法的優(yōu)點是簡單、實時性好,對于周期性的噪聲有一定的抑制效果。其缺點是在處理突變的輸入信號時,輸出信號會有一定的延遲,且在窗口大小不夠大的情況下,噪聲的抑制效果會比較有限。

下面是遞推平均濾波法的算法步驟:

a. 定義一個固定長度為N的窗口,并初始化窗口內(nèi)的所有數(shù)據(jù)為0。

b. 當(dāng)有新的輸入信號x_i到來時,將窗口內(nèi)的第一個信號x_{i-N}移除,并將新的信號x_i加入到窗口中。

c. 計算窗口內(nèi)所有信號的平均值,作為當(dāng)前的輸出信號y_i。

d. 返回輸出信號y_i,并等待下一次輸入信號到來。

代碼

下面是遞推平均濾波法的示例代碼,其中,N為窗口大小,x表示輸入信號,y表示輸出信號,buffer為窗口緩存,sum為窗口內(nèi)數(shù)據(jù)的累加和:

C++
#define N 10 // 窗口大小

float moving_average_filter(float x) {
static float buffer[N] = {0};
static float sum = 0;
static int ptr = 0;
sum = sum - buffer[ptr] + x;
buffer[ptr] = x;
ptr = (ptr + 1) % N;
return sum / N;
}

在這個函數(shù)中,我們使用了一個靜態(tài)的窗口緩存buffer來存儲窗口內(nèi)的數(shù)據(jù),使用sum來記錄窗口內(nèi)數(shù)據(jù)的累加和,使用ptr來記錄當(dāng)前窗口內(nèi)最后一個數(shù)據(jù)的位置。當(dāng)有新的輸入信號x到來時,我們將窗口內(nèi)第一個數(shù)據(jù)buffer[ptr-N]移除,并將新的信號x加入到窗口中。然后,我們重新計算窗口內(nèi)所有信號的平均值作為當(dāng)前的輸出信號,并將作為當(dāng)前的輸出信號,返回輸出信號,并等待下一次輸入信號到來。

04

中位值平均濾波法

原理

中位值平均濾波法是一種抗干擾性能很強(qiáng)的濾波方法,也稱為防脈沖干擾平均濾波法。與其他濾波方法不同的是,它不是對一段時間內(nèi)的數(shù)據(jù)進(jìn)行簡單的平均處理,而是將一段時間內(nèi)的多個數(shù)據(jù)進(jìn)行排序,然后取中間值作為濾波結(jié)果。中位值平均濾波法的優(yōu)點是可以有效地濾除脈沖噪聲、斜坡干擾等干擾信號。

中位值平均濾波法的實現(xiàn)步驟如下:

a. 將一段時間內(nèi)的多個數(shù)據(jù)存儲在數(shù)組中;

b. 對數(shù)組進(jìn)行排序;

c. 取排序后中間位置的數(shù)值作為濾波結(jié)果。

中位值平均濾波法的實現(xiàn)較為簡單,但由于需要對數(shù)組進(jìn)行排序,計算量較大,因此在實際應(yīng)用中需要注意性能問題。

中位值平均濾波法的優(yōu)點:

a. 對脈沖噪聲、斜坡干擾等干擾信號具有較強(qiáng)的濾除能力;

b. 濾波效果較好,能夠保持信號的較高精度。

中位值平均濾波法的缺點:

a. 計算量較大,特別是在大數(shù)據(jù)量時;

b. 無法完全消除高頻噪聲,因此在高頻噪聲較多的情況下效果可能不佳;

c. 數(shù)組排序會改變原始數(shù)據(jù)的順序,因此需要注意排序的實現(xiàn)方式,避免對實際應(yīng)用造成影響。

代碼

C++
#include

// 中位值平均濾波函數(shù)
int Median_Filter(int *data, int length)
{
int i, j, temp, result;
int *sort = (int *)malloc(sizeof(int) * length); // 分配排序數(shù)組的空間
memcpy(sort, data, sizeof(int) * length); // 復(fù)制原始數(shù)據(jù)到排序數(shù)組

// 冒泡排序
for (i = 0; i < length - 1; i++) {
    for (j = i + 1; j < length; j++) {
        if (sort[i] > sort[j]) {
            temp = sort[i];
            sort[i] = sort[j];
            sort[j] = temp;
        }
    }
}

// 取中間值作為濾波結(jié)果
result = sort[length / 2];

// 釋放排序數(shù)組的空間
free(sort);

return result;

}

int main()
{
int data[10] = {5, 6, 8, 9, 12, 7, 13, 10, 11, 6};
int result;

result = Median_Filter(data, 10);
printf("Filtered result: %dn", result);

return 0;

}

上面的程序?qū)崿F(xiàn)了一個簡單的中位值平均濾波函數(shù)Median_Filter,該函數(shù)的參數(shù)data為原始數(shù)據(jù)數(shù)組,length為數(shù)據(jù)數(shù)組的長度。函數(shù)返回經(jīng)過中位值平均濾波后的結(jié)果。

在main函數(shù)中,我們聲明了一個長度為10的原始數(shù)據(jù)數(shù)組data,并將其傳遞給Median_Filter函數(shù)進(jìn)行中位值平均濾波。最后輸出濾波后的結(jié)果。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 濾波器
    +關(guān)注

    關(guān)注

    161

    文章

    7870

    瀏覽量

    179039
  • 非線性濾波
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    6755
  • 中值濾波
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    8398
  • 高斯噪聲
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    8385
收藏 人收藏

    評論

    相關(guān)推薦

    如何用單片機(jī)實現(xiàn)數(shù)字濾波?6種數(shù)字濾波算法解析

    單片機(jī)主要作用是控制外圍的器件,并實現(xiàn)一定的通信和數(shù)據(jù)處理。但在某些特定場合,不可避免地要用到數(shù)學(xué)運(yùn)算,盡管單片機(jī)并不擅長實現(xiàn)算法和進(jìn)行復(fù)雜的運(yùn)算。下面主要是介紹如何用
    的頭像 發(fā)表于 02-28 09:41 ?8962次閱讀
    如何用<b class='flag-5'>單片機(jī)</b>實現(xiàn)數(shù)字<b class='flag-5'>濾波</b>?6種數(shù)字<b class='flag-5'>濾波</b><b class='flag-5'>算法</b>解析

    常見濾波算法及其單片機(jī)的應(yīng)用介紹(一)

    限幅消抖濾波法是一種簡單有效的數(shù)字濾波算法,常用于對采集到的離散信號進(jìn)行去抖動處理。它可以去除信號的瞬時噪聲和突發(fā)干擾,同時保留信號的主要特征。
    的頭像 發(fā)表于 11-21 14:47 ?2054次閱讀

    單片機(jī)數(shù)據(jù)采集——數(shù)字濾波算法

    單片機(jī)主要作用是控制外圍的器件,并實現(xiàn)一定的通信和數(shù)據(jù)處理。但在某些特定場合,不可避免地要用到數(shù)學(xué)運(yùn)算,盡管單片機(jī)并不擅長實現(xiàn)算法和進(jìn)行復(fù)雜的運(yùn)算。下面主要是介紹如何用
    發(fā)表于 02-20 15:14

    單片機(jī)數(shù)字濾波算法

    運(yùn)算,盡管單片機(jī)并不擅長實現(xiàn)算法和進(jìn)行復(fù)雜的運(yùn)算。下面主要是介紹如何用單片機(jī)實現(xiàn)數(shù)字濾波。
    發(fā)表于 10-30 17:44

    算法移植到STM32單片機(jī)常見的問題有哪些?

    算法移植到STM32單片機(jī)常見的問題有哪些?
    發(fā)表于 11-22 07:10

    如何用單片機(jī)實現(xiàn)數(shù)字濾波算法

    單片機(jī)主要作用是控制外圍的器件,并實現(xiàn)一定的通信和數(shù)據(jù)處理。但在某些特定場合,不可避免地要用到數(shù)學(xué)運(yùn)算,盡管單片機(jī)并不擅長實現(xiàn)算法和進(jìn)行復(fù)雜的運(yùn)算。下面主要是介紹如何用
    發(fā)表于 01-07 06:30

    詳細(xì)分析單片機(jī)數(shù)字濾波算法

    單片機(jī)主要作用是控制外圍的器件,并實現(xiàn)一定的通信和數(shù)據(jù)處理。但在某些特定場合,不可避免地要用到數(shù)學(xué)運(yùn)算,盡管單片機(jī)并不擅長實現(xiàn)算法和進(jìn)行復(fù)雜的運(yùn)算。下面主要是介紹如何用
    發(fā)表于 04-27 08:42 ?1326次閱讀

    單片機(jī)常用PID濾波算法資料匯總

    單片機(jī)常用PID濾波算法資料匯總
    發(fā)表于 05-21 11:45 ?26次下載

    使用51單片機(jī)實現(xiàn)MPU6050的卡爾曼濾波算法代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)實現(xiàn)MPU6050的卡爾曼濾波算法代碼免費(fèi)下載 。
    發(fā)表于 08-20 17:31 ?60次下載
    使用51<b class='flag-5'>單片機(jī)</b>實現(xiàn)MPU6050的卡爾曼<b class='flag-5'>濾波</b><b class='flag-5'>算法</b>代碼免費(fèi)下載

    單片機(jī)晶振電路的作用及常見參數(shù)的介紹

    每個單片機(jī)系統(tǒng)里都有晶振,全程是叫晶體震蕩器,單片機(jī)系統(tǒng)里晶振的作用非常大。本文就來給大家簡單的介紹下晶振的工作過程,以及其主要的參數(shù)
    的頭像 發(fā)表于 12-24 12:35 ?3589次閱讀

    這篇把單片機(jī)數(shù)字濾波算法講絕了

    單片機(jī)主要作用是控制外圍的器件,并實現(xiàn)一定的通信和數(shù)據(jù)處理。但在某些特定場合,不可避免地要用到數(shù)學(xué)運(yùn)算,盡管單片機(jī)并不擅長實現(xiàn)算法和進(jìn)行復(fù)雜的運(yùn)算。下面主要是介紹如何用
    發(fā)表于 02-10 10:22 ?8次下載
    這篇把<b class='flag-5'>單片機(jī)</b>數(shù)字<b class='flag-5'>濾波</b><b class='flag-5'>算法</b>講絕了

    單片機(jī)十種常見的ADC濾波算法

    單片機(jī)主要作用是控制外圍的器件,并實現(xiàn)一定的通信和數(shù)據(jù)處理。但在某些特定場合,不可避免地要用到數(shù)學(xué)運(yùn)算,盡管單片機(jī)并不擅長實現(xiàn)算法和進(jìn)行復(fù)雜的運(yùn)算。下面給大家介紹十種
    發(fā)表于 10-02 15:21 ?1566次閱讀

    單片機(jī)十種常見濾波算法介紹

    我們都知道,單片機(jī)的主要作用是控制外圍的器件,并實現(xiàn)一定的通信和數(shù)據(jù)處理。但在某些特定場合,不可避免地要用到數(shù)學(xué)運(yùn)算,盡管單片機(jī)并不擅長實現(xiàn)算法和進(jìn)行復(fù)雜的運(yùn)算。
    的頭像 發(fā)表于 11-06 21:41 ?6044次閱讀

    單片機(jī)引腳的VCC和VDD有什么區(qū)別?

    單片機(jī)作為一種常見的嵌入式設(shè)備,是許多電子設(shè)備和系統(tǒng)必不可少的一部分。而在單片機(jī)的設(shè)計和應(yīng)用,電源電壓是一個非常重要的參數(shù),而其中VCC
    的頭像 發(fā)表于 04-27 17:29 ?8688次閱讀
    <b class='flag-5'>單片機(jī)</b>引腳<b class='flag-5'>中</b>的VCC和VDD有什么區(qū)別?

    單片機(jī)ADC,十大C語言濾波算法

    單片機(jī)ADC,十大C語言濾波算法
    的頭像 發(fā)表于 10-24 15:53 ?1367次閱讀