日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matlab练习:timer(定时器3)

發(fā)布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matlab练习:timer(定时器3) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

同學(xué)畢設(shè)做信號辨識,需要嚴格設(shè)計時鐘信號,對于信號的精確產(chǎn)生有很高的需求,因此使用matlab的timer對象來實現(xiàn)該需求,本著學(xué)一個技術(shù)就要學(xué)精的原則,深入了解了matlab timer背后的實現(xiàn)原理,現(xiàn)將學(xué)習(xí)成果分享給大家。

主體

任務(wù)描述如下:

1多次執(zhí)行回調(diào)函數(shù):

顯示這個事件和在計時器開始運作,運行,和結(jié)束時的日期/時間產(chǎn)出。計時器回調(diào)函數(shù)會以2秒的間隔執(zhí)行三次。回調(diào)函數(shù)傳遞的前兩條語句是定時器對象和事件結(jié)構(gòu)的句柄。
事件結(jié)構(gòu)有兩個成員:類型定義了回調(diào)函數(shù)的來源,數(shù)據(jù)則是一個包含事件什么時候發(fā)生的日期時間的向量。

t = timer; t.StartFcn = @(~,thisEvent)disp([thisEvent.Type ' executed '...datestr(thisEvent.Data.time,'dd-mmm-yyyy HH:MM:SS.FFF')]); t.TimerFcn = @(~,thisEvent)disp([thisEvent.Type ' executed '...datestr(thisEvent.Data.time,'dd-mmm-yyyy HH:MM:SS.FFF')]); t.StopFcn = @(~,thisEvent)disp([thisEvent.Type ' executed '...datestr(thisEvent.Data.time,'dd-mmm-yyyy HH:MM:SS.FFF')]); t.Period = 2; t.TasksToExecute = 3; t.ExecutionMode = 'fixedRate'; start(t)

輸出如下:

StartFcn executed 25-May-2018 20:12:16.344 TimerFcn executed 25-May-2018 20:12:19.345 TimerFcn executed 25-May-2018 20:12:21.345 TimerFcn executed 25-May-2018 20:12:23.345 StopFcn executed 25-May-2018 20:12:23.351

同樣記得刪除這個定時器:
delete(t)

2定義一個通用的回調(diào)函數(shù)

創(chuàng)建一個定時器對象來提示你在接下來的8小時中每10分鐘學(xué)習(xí)30秒。
在一個名為createErgoTimer.m的文件里面創(chuàng)建一個返回定時器的函數(shù)。
在這個文件里包含著三個局部函數(shù)來處理定時器開始,執(zhí)行和結(jié)束任務(wù)。
代碼如下:

function t = createErgoTimer() secondsBreak = 30; secondsBreakInterval = 600; secondsPerHour = 60^2; secondsWorkTime = 8*secondsPerHour; t = timer; t.UserData = secondsBreak; t.StartFcn = @ergoTimerStart; t.TimerFcn = @takeBreak; t.StopFcn = @ergoTimerCleanup; t.Period = secondsBreakInterval+secondsBreak; t.StartDelay = t.Period-secondsBreak; t.TasksToExecute = ceil(secondsWorkTime/t.Period); t.ExecutionMode = 'fixedSpacing'; end

使用起始延遲函數(shù)允許定時器在沒有指引你立即休息的情況下啟動計時器。
將執(zhí)行模式設(shè)置為固定空間,因此在一個時間函數(shù)執(zhí)行完后將是一個固定的耗散周期10分鐘30秒。這會允許你在下個10分鐘的間隔之間有30秒的休息時間。

在之間新建的createErgo.m文件中,增加一個本地函數(shù)來處理對應(yīng)與定時器開始的任務(wù)。作為默認,定時器對象將它自己和事件數(shù)據(jù)傳遞給回調(diào)函數(shù)。這個函數(shù)忽略事件數(shù)據(jù)

function ergoTimerStart(mTimer,~) secondsPerMinute = 60; secondsPerHour = 60*secondsPerMinute; str1 = 'Starting Ergonomic Break Timer. '; str2 = sprintf('For the next %d hours you will be notified',...round(mTimer.TasksToExecute*(mTimer.Period + ...mTimer.UserData)/secondsPerHour)); str3 = sprintf(' to take a %d second break every %d minutes.',...mTimer.UserData, (mTimer.Period - ...mTimer.UserData)/secondsPerMinute); disp([str1 str2 str3]) end

增加一個局部函數(shù)來處理和執(zhí)行和任務(wù)相關(guān)的定時器。定義的定時任務(wù)回調(diào)函數(shù)應(yīng)該告訴你應(yīng)該休息30秒。

function takeBreak(mTimer,~) disp('Take a 30 second break.') end

增加一個局部函數(shù)來處理和計時器停止相關(guān)的任務(wù)。

function ergoTimerCleanup(mTimer,~) disp('Stopping Ergonomic Break Timer.') delete(mTimer) end

從內(nèi)存中刪除計時器任務(wù)。
在命令行輸入createErgoTimer函數(shù)來創(chuàng)建和開始一個定時器。

t = createErgoTimer; start(t)

運行結(jié)果

Starting Ergonomic Break Timer. For the next 8 hours you will be notified to take a 30 second break every 10 minutes.Take a 30 second break.

周期休息定時器。
開始周期休息定時器。在接下來的八個小時中每10分鐘你會被提醒一次休息30秒。
你可以讓這個定時器運行八小時也可以手動停止它。包括在內(nèi)存里面消除這個定時器。

stop(t)

停止周期間隔定時器。


參考:

mathwork官方文檔

總結(jié)

以上是生活随笔為你收集整理的Matlab练习:timer(定时器3)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。