91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

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

FOC之定點(diǎn)小數(shù)運(yùn)算

fcsde-sh ? 來源:未知 ? 作者:胡薇 ? 2018-07-11 15:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

許多MCU 芯片只支持整數(shù)運(yùn)算,如果要在這些芯片上進(jìn)行小數(shù)運(yùn)算,定點(diǎn)運(yùn)算應(yīng)該是最佳選擇了;此外即使芯片支持浮點(diǎn)數(shù),定點(diǎn)小數(shù)運(yùn)算也是最佳的速度選擇。所謂定點(diǎn)小數(shù)運(yùn)算,就是將小數(shù)點(diǎn)位置固定,用整數(shù)的方式來進(jìn)行運(yùn)算;由于小數(shù)點(diǎn)的位置是固定的,所以就沒有必要儲(chǔ)存它。既然沒有儲(chǔ)存小數(shù)點(diǎn)的位置,那么計(jì)算機(jī)當(dāng)然就不知道小數(shù)點(diǎn)的位置,所以這個(gè)小數(shù)點(diǎn)的位置是我們寫程序的人自己需要牢記的。那么,如何將小數(shù)表示成整數(shù)呢?

處理器整數(shù)以二進(jìn)制形式存儲(chǔ),首先要了解如何將小數(shù)轉(zhuǎn)換成二進(jìn)制!假定MCU 是16位,因最高位是符號(hào)位,那么有效位就只有15位(不考慮符號(hào)則16位)。即小數(shù)點(diǎn)之后可以有0~15 位。我們把小數(shù)點(diǎn)之后有n位叫做Qn,例如小數(shù)點(diǎn)之后有12位叫做Q12 格式的定點(diǎn)小數(shù),而Q0就是我們所說的整數(shù):

以Q12 格式為例,Q12 的正數(shù)的最大值是0111.111111111111,第一個(gè)0是符號(hào)位,后面的數(shù)都是1,那么這個(gè)數(shù)是十進(jìn)制的多少呢? 請(qǐng)看下面的運(yùn)算:

對(duì)于Qn格式的定點(diǎn)小數(shù)的表達(dá)的數(shù)值就它的整數(shù)值除以2^Qn。在計(jì)算機(jī)中還是以整數(shù)來運(yùn)算,我們把它想象成實(shí)際所表達(dá)的值的時(shí)候,進(jìn)行這個(gè)運(yùn)算。反過來把一個(gè)實(shí)際所要表達(dá)的值x 轉(zhuǎn)換Qn 型的定點(diǎn)小數(shù)的時(shí)候,就是x*(2^ Qn)了。例如0.2 的Q12 型定點(diǎn)小數(shù)為:0.2*(2^12) =819.2,由于這個(gè)數(shù)要用整數(shù)儲(chǔ)存, 所以是819 即0x0333。因?yàn)樯釛壛诵?shù)部分,所以0x0333 不是精確的0.2,實(shí)際上它是819/2^12=0.199951171875,非常接近0.2 了。

因此我們可以歸納出一個(gè)公式,假定x 表示實(shí)際的小數(shù), q表示這小數(shù)在MCU 中的Qn 型定點(diǎn)小數(shù),則有:

由以上公式我們可以很快得出定點(diǎn)小數(shù)運(yùn)算法則:

加減法和一般的整數(shù)運(yùn)算相同,而乘除法的時(shí)候,為了使得結(jié)果的小數(shù)點(diǎn)位不移動(dòng),對(duì)數(shù)值進(jìn)行了移動(dòng)(乘除2^Qn實(shí)際是將被乘除數(shù)左或右移動(dòng)n位):

q3 = q1 * q2 / (2^Qn) ---> q3 = (q1 * q2 )>>Qn

c語言來寫定點(diǎn)小數(shù)的乘法就是:

short q1,q2,q3;

....

q3=((long q1) * (long q2)) >> n;

由于/ 2^Qn 和* 2^Qn可以簡(jiǎn)單的用移位來計(jì)算,所以定點(diǎn)小數(shù)的運(yùn)算比浮點(diǎn)小數(shù)要快得多。下面我們用一個(gè)例子來驗(yàn)證一下上面的公式:用Q12來計(jì)算2.1 * 2.2,先把2.1, 2.2轉(zhuǎn)換為Q12 定點(diǎn)小數(shù):

2.1 * 2^12 = 8601.6 = 8602

2.2 * 2^12 = 9011.2 = 9011

(8602 * 9011) >> 12 = 18923

18923 的實(shí)際值是18923/(2^12) = 4.619873046875 和實(shí)際的結(jié)果4.62相差0.000126953125,對(duì)于一般的計(jì)算已經(jīng)足夠精確了。好了,話不投機(jī)半句多,說了這么多,最終還是要用實(shí)例代碼來形象的指出如何實(shí)現(xiàn)定點(diǎn)運(yùn)算。

MCU 實(shí)例

用碩呈16BIT-MCU 實(shí)現(xiàn)一組數(shù)據(jù)乘以0.492,這組數(shù)據(jù)是:

100*0.492=49.2

105*0.492=51.66

147*0.492=72.324

350*0.492=172.2

860*0.492=423.12

458*0.492=225.336

步驟一,先確定小數(shù),0.492屬于小于“1”的小數(shù);且乘數(shù)與被乘數(shù)符號(hào)都為正,為了提高精度,可以考慮使用Q16 格式;因此將0.492轉(zhuǎn)換成定點(diǎn)小數(shù)有:

步驟二,編寫如下代碼:

在地址0x00F0 處,設(shè)定運(yùn)算為無符號(hào)乘以無符號(hào)運(yùn)算。

地址0x00F1 處,將Q16 小數(shù)送入MX 寄存器

地址0x00f4~0x00f8 處,利用循環(huán)計(jì)算出_MUL_表格中列出的數(shù)據(jù),并將結(jié)果存到I0指向的緩沖中(MR1 是計(jì)算結(jié)果的整數(shù)位,MR0 是計(jì)算結(jié)果的小數(shù)低位)。

計(jì)算結(jié)果請(qǐng)查閱以下表格:

如果運(yùn)算不需要小數(shù)部分(即運(yùn)算結(jié)果取整),則"MCU 運(yùn)算結(jié)果"中的數(shù)值均需要向右移動(dòng)16位去掉小數(shù)部分;在代碼中,用戶可以直接取MR1的數(shù)字做為整數(shù)結(jié)果(假如不考慮四舍五入)。

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

    關(guān)注

    146

    文章

    17984

    瀏覽量

    367023
  • FOC
    FOC
    +關(guān)注

    關(guān)注

    21

    文章

    347

    瀏覽量

    44317

原文標(biāo)題:一步步解剖FOC之定點(diǎn)小數(shù)運(yùn)算!

文章出處:【微信號(hào):fcsde-sh,微信公眾號(hào):fcsde-sh】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于牛頓迭代法的FPGA定點(diǎn)小數(shù)計(jì)算

    倒數(shù)算法的HDL實(shí)現(xiàn),只需要進(jìn)行一次到兩次迭代便可獲得相對(duì)精確的結(jié)果。在一些實(shí)時(shí)圖像處理場(chǎng)合中,對(duì)算法的運(yùn)算速度和Latency要求較高,因此可以采用定點(diǎn)小數(shù)適當(dāng)?shù)亟档途纫垣@得更高的性能。
    發(fā)表于 07-18 07:33

    【每日一知識(shí)點(diǎn)】如何在沒有浮點(diǎn)運(yùn)算的單片機(jī)中,更高效快速的進(jìn)行小數(shù)運(yùn)算

    許多 MCU 芯片只支持整數(shù)運(yùn)算,如果要在這些芯片上進(jìn)行小數(shù)運(yùn)算,那么該如何高效滴、快速滴、計(jì)算呢? 定點(diǎn)小數(shù)
    發(fā)表于 03-16 11:02

    定點(diǎn)dsp浮點(diǎn)運(yùn)算教程

    定點(diǎn)dsp浮點(diǎn)運(yùn)算的多媒體視頻教程:
    發(fā)表于 01-24 09:14 ?50次下載
    <b class='flag-5'>定點(diǎn)</b>dsp浮點(diǎn)<b class='flag-5'>運(yùn)算</b>教程

    DSP芯片的定點(diǎn)運(yùn)算

    DSP芯片的定點(diǎn)運(yùn)算3.1 數(shù) 的 定 標(biāo)在定點(diǎn)DSP芯片中,采用定點(diǎn)數(shù)進(jìn)行數(shù)值運(yùn)算,其操作數(shù)一般采用整型數(shù)來表示。一個(gè)整型數(shù)的最大表示范圍
    發(fā)表于 04-06 14:07 ?33次下載

    定點(diǎn)小數(shù)的表示方法

    定點(diǎn)小數(shù)的表示方法   定點(diǎn)小數(shù),是指小數(shù)點(diǎn)準(zhǔn)確固定在數(shù)據(jù)某個(gè)位置上的小數(shù),從實(shí)用角度看,都把
    發(fā)表于 10-13 17:12 ?8508次閱讀

    定點(diǎn)小數(shù)的編碼方法

    定點(diǎn)小數(shù)的編碼方法  用定點(diǎn)小數(shù)引出數(shù)值的三種編碼(原碼、補(bǔ)碼和反碼)方法是最方便的。   (1) 原碼表示法,是用機(jī)器數(shù)的最高一位代表符號(hào),以下各位
    發(fā)表于 10-13 17:19 ?3639次閱讀
    <b class='flag-5'>定點(diǎn)</b><b class='flag-5'>小數(shù)</b>的編碼方法

    定點(diǎn)DSP,定點(diǎn)DSP是什么意思

    定點(diǎn)DSP,定點(diǎn)DSP是什么意思 定點(diǎn)DSP完成的是整數(shù)運(yùn)算小數(shù)運(yùn)算,數(shù)值格式中不包含階碼,
    發(fā)表于 03-26 14:56 ?2402次閱讀

    Labview字符轉(zhuǎn)小數(shù)

    Labview字符轉(zhuǎn)小數(shù),很好的Labview資料,快來下載學(xué)習(xí)吧。
    發(fā)表于 04-19 10:50 ?0次下載

    DSP芯片的定點(diǎn)運(yùn)算

    DSP芯片的定點(diǎn)運(yùn)算,雖然浮點(diǎn)運(yùn)算逐漸流行,不過定點(diǎn)依然有強(qiáng)大的市場(chǎng)
    發(fā)表于 06-17 16:33 ?7次下載

    一文了解FPGA浮點(diǎn)小數(shù)定點(diǎn)小數(shù)的換算及應(yīng)用

    定點(diǎn)小數(shù)運(yùn)算 有些FPGA中是不能直接對(duì)浮點(diǎn)數(shù)進(jìn)行操作的,只能采用定點(diǎn)數(shù)進(jìn)行數(shù)值運(yùn)算。 所謂定點(diǎn)
    的頭像 發(fā)表于 06-28 15:49 ?7713次閱讀

    DSP基礎(chǔ)知識(shí)集錦DSP芯片的定點(diǎn)運(yùn)算

    定點(diǎn)DSP芯片中,采用定點(diǎn)數(shù)進(jìn)行數(shù)值運(yùn)算,其操作數(shù)一般采用整型數(shù)來表示。
    發(fā)表于 04-04 14:51 ?5次下載

    DSP第6章 DSP芯片的定點(diǎn)運(yùn)算

    數(shù)的定標(biāo)即指人為確定小數(shù)位置,以便實(shí)現(xiàn)定點(diǎn)運(yùn)算
    發(fā)表于 04-04 17:12 ?5次下載
    DSP第6章 DSP芯片的<b class='flag-5'>定點(diǎn)</b><b class='flag-5'>運(yùn)算</b>

    LM4F定點(diǎn)格式于浮點(diǎn)格式的對(duì)比和浮點(diǎn)運(yùn)算的應(yīng)用詳細(xì)中文資料

    定點(diǎn)數(shù)指小數(shù)點(diǎn)在數(shù)中的位置是固定不變的,通常有定點(diǎn)整數(shù)和定點(diǎn)小數(shù)。在對(duì)小數(shù)點(diǎn)位置作出選擇之后,
    發(fā)表于 05-09 11:40 ?11次下載
    LM4F<b class='flag-5'>定點(diǎn)</b>格式于浮點(diǎn)格式的對(duì)比和浮點(diǎn)<b class='flag-5'>運(yùn)算</b>的應(yīng)用詳細(xì)中文資料

    FPGA定點(diǎn)小數(shù)的常規(guī)格式、相對(duì)于浮點(diǎn)小數(shù)的優(yōu)勢(shì)與劣勢(shì)和計(jì)算的概述

    所謂定點(diǎn)小數(shù),就是小數(shù)點(diǎn)固定地隱含在某一位置上的數(shù)據(jù)。由于小數(shù)點(diǎn)的位置是固定的,所以就沒有必要儲(chǔ)存它(如果儲(chǔ)存了小數(shù)點(diǎn)的位置,那就是浮點(diǎn)數(shù)了
    的頭像 發(fā)表于 06-12 19:34 ?9947次閱讀
    FPGA<b class='flag-5'>定點(diǎn)</b><b class='flag-5'>小數(shù)</b>的常規(guī)格式、相對(duì)于浮點(diǎn)<b class='flag-5'>小數(shù)</b>的優(yōu)勢(shì)與劣勢(shì)和計(jì)算的概述

    浮點(diǎn)與定點(diǎn)運(yùn)算以及數(shù)據(jù)定標(biāo)和精度問題

    計(jì)算機(jī)體系結(jié)構(gòu)中浮點(diǎn)和定點(diǎn)數(shù)據(jù)的表示 1、定點(diǎn)數(shù): 定點(diǎn)數(shù)指小數(shù)點(diǎn)在數(shù)中的位置是固定不變的,通常有定點(diǎn)整數(shù)和
    的頭像 發(fā)表于 12-06 10:00 ?5894次閱讀
    主站蜘蛛池模板: 亚洲网站在线观看 | 日韩欧美亚洲综合一区二区 | jk黑色丝袜美腿老师啪啪 | 俺也来俺也去俺也射 | 女主播扒开内衣让粉丝看个够 | 日韩欧美亚洲综合一区二区 | 91大神在线看| 亚洲网站免费 | 成人中文字幕一区二区三区 | 天天尻 | 欧美三级视频在线 | av2014天堂网 | 国产免费一区二区三区最新 | 麦克斯奥特曼在线观看 | xxxx日本xx| jzzjlzz亚洲乱熟在线播放 | 欧美激情亚洲色图 | 久草毛片 | 久久国产精品久久久久久 | h网址在线观看 | 日本国产视频 | 伦理片日本韩国电影三级在线观看 | 天天干妹子 | 人人天天夜夜 | 美女扒开腿让男生桶爽网站 | 天堂网在线最新版www中文网 | 综合伊人久久 | 四虎884| 美女网站黄页 | 啪啪网站色大全免费 | 免费看男女做好爽好硬视频 | 国产一级毛片午夜 | 波多野结衣三个女人蕾丝边 | 四虎影院新网址 | 久久久久久久蜜桃 | tom影院亚洲国产日本一区 | 成人午夜精品久久久久久久小说 | 狠狠色噜狠狠狠狠 | 日日干夜夜操视频 | 成人欧美一区二区三区视频 | 无夜精品久久久久久 |