• 正文
    • 一、位運算與布爾代數(shù)
    • 二、定點數(shù)運算
    • 三、模運算與環(huán)形緩沖區(qū)
    • 四、線性代數(shù)與濾波算法
    • 五、數(shù)值分析與控制算法
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

分享5種嵌入式開發(fā)常用的數(shù)學(xué)原理

03/26 11:06
636
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

大家好,我是專注分享職業(yè)規(guī)劃/技術(shù)科普/智能生活有關(guān)原創(chuàng)文章的allen康哥。

今天介紹下嵌入式系統(tǒng)中常見的基礎(chǔ)數(shù)學(xué)算法。嵌入式數(shù)學(xué)的核心在于將理論抽象轉(zhuǎn)化為資源受限環(huán)境下的高效實現(xiàn)。

一、位運算與布爾代數(shù)

應(yīng)用場景:寄存器配置、通信協(xié)議解析、硬件狀態(tài)管理

數(shù)學(xué)原理:通過邏輯與(&)、或(|)、異或(^)及位移(<< / >>)實現(xiàn)位級操作,屬于布爾代數(shù)的實際應(yīng)用。源碼實例:

//?位反轉(zhuǎn)函數(shù)
unsigned?int?reverse_bits(unsigned?int?num)?{
????unsigned?int?numOfBits?=?sizeof(num)?*?8;
????unsigned?int?reverseNum?=?0;
????for?(unsigned?int?i?=?0;?i?<?numOfBits;?i++)?{
????????if?(num?&?(1?<<?i))?
????????????reverseNum?|=?(1?<<?((numOfBits?-?1)?-?i));
????}
????return?reverseNum;
}

此函數(shù)通過遍歷每一位實現(xiàn)二進制逆序,常用于數(shù)據(jù)編碼(如CRC校驗)或特殊外設(shè)(如LED矩陣驅(qū)動)。

二、定點數(shù)運算

應(yīng)用場景:無浮點單元(FPU)的MCU中實現(xiàn)小數(shù)運算(如電機控制、傳感器校準(zhǔn))

數(shù)學(xué)原理:將浮點數(shù)映射到整數(shù)空間,通過縮放因子(如Q格式)保留精度,本質(zhì)是線性變換。

源碼實例:

//?定點數(shù)乘法
typedef?int16_t?fixed_t;
#define?FIXED_SHIFT?8
fixed_t?fixed_multiply(fixed_t?a,?fixed_t?b)?{
????return?(fixed_t)(((int32_t)a?*?(int32_t)b)?>>?FIXED_SHIFT);
}

該代碼通過32位中間結(jié)果避免溢出,適用于溫度補償、PID控制器等需高效計算的場景。

三、模運算與環(huán)形緩沖區(qū)

應(yīng)用場景:串口數(shù)據(jù)緩存、循環(huán)任務(wù)調(diào)度

數(shù)學(xué)原理:利用取模(%)操作實現(xiàn)索引循環(huán),避免緩沖區(qū)越界。

源碼實例:

#define?BUFFER_SIZE?64
uint8_t?buffer[BUFFER_SIZE];
uint8_t?read_ptr?=?0,?write_ptr?=?0;

void?push_data(uint8_t?data)?{
????buffer[write_ptr?%?BUFFER_SIZE]?=?data;
????write_ptr++;
}

uint8_t?pop_data()?{
????uint8_t?val?=?buffer[read_ptr?%?BUFFER_SIZE];
????read_ptr++;
????return?val;
}

此結(jié)構(gòu)在UART接收中斷服務(wù)程序中廣泛使用,確保數(shù)據(jù)流的連續(xù)性。

四、線性代數(shù)與濾波算法

應(yīng)用場景:傳感器信號去噪(如加速度計、陀螺儀

數(shù)學(xué)原理:滑動平均濾波、卡爾曼濾波等均基于矩陣運算和統(tǒng)計學(xué)原理。

源碼實例:

//?滑動平均濾波
#define?WINDOW_SIZE?5
float?moving_average(float?new_sample)?{
????static?float?samples[WINDOW_SIZE]?=?{0};
????static?uint8_t?index?=?0;
????samples[index]?=?new_sample;
????index?=?(index?+?1)?%?WINDOW_SIZE;
????
????float?sum?=?0;
????for?(uint8_t?i?=?0;?i?<?WINDOW_SIZE;?i++)?
????????sum?+=?samples[i];
????return?sum?/?WINDOW_SIZE;
}

此算法通過窗口內(nèi)數(shù)據(jù)均值抑制高頻噪聲,常見于ADC采樣后處理。

五、數(shù)值分析與控制算法

應(yīng)用場景:電機調(diào)速、溫度閉環(huán)控制

數(shù)學(xué)原理:PID控制器依賴積分(誤差累積)、微分(誤差變化率)的離散化計算。

源碼實例:

typedef?struct?{
????float?Kp,?Ki,?Kd;
????float?integral;
????float?prev_error;
}?PIDController;

float?pid_update(PIDController?*pid,?float?setpoint,?float?actual)?{
????float?error?=?setpoint?-?actual;
????pid->integral?+=?error;
????float?derivative?=?error?-?pid->prev_error;
????pid->prev_error?=?error;
????return?pid->Kp?*?error?+?pid->Ki?*?pid->integral?+?pid->Kd?*?derivative;
}

該實現(xiàn)通過離散化公式將連續(xù)系統(tǒng)轉(zhuǎn)化為嵌入式可執(zhí)行的迭代算法。

你好,我是Allen,CSDN博客專家,博客訪問超千萬?,F(xiàn)任世界500強外企高級開發(fā)工程師,有多年國企和外企工作經(jīng)驗,擅長電子及嵌入式方向?qū)W習(xí)規(guī)劃,簡歷優(yōu)化及offer咨詢,高考/考研咨詢等,歡迎留言與我交流!

相關(guān)推薦