[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XDYSRDJ2DFG7VPNMP4HGMC":3,"skill-same:01M6XDYSRDJ2DFG7VPNMP4HGMC":59},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":13,"repositoryHtmlUrl":41,"repositoryHomepageUrl":6,"ownerHtmlUrl":42,"ownerBlogUrl":6,"ownerDescription":43,"updatedAt":44,"install":45,"resources":58},"01M6XDYSRDJ2DFG7VPNMP4HGMC","simulation-metrics",null,"Use this skill when calculating control system performance metrics such as rise time, overshoot percentage, steady-state error, or settling time for evaluating simulation results.","Waaaalnut\u002Fskillsbench","Waaaalnut","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F103995656?v=4","01M6XCS9K1V51EY3JMB7DGMX24","01M6XCS9Q4WPW88W62C55G1H44",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fadaptive-cruise-control\u002Fenvironment\u002Fskills\u002Fsimulation-metrics\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],"metrics","simulation","simulation metrics","performance","state","system","results","use","performance metrics","time","control","as","error","for","when","2026-11-10 10:12:30",false,"---\nname: simulation-metrics\ndescription: Use this skill when calculating control system performance metrics such as rise time, overshoot percentage, steady-state error, or settling time for evaluating simulation results.\n---\n\n# Control System Performance Metrics\n\n## Rise Time\n\nTime for system to go from 10% to 90% of target value.\n\n```python\ndef rise_time(times, values, target):\n    \"\"\"Calculate rise time (10% to 90% of target).\"\"\"\n    t10 = t90 = None\n\n    for t, v in zip(times, values):\n        if t10 is None and v >= 0.1 * target:\n            t10 = t\n        if t90 is None and v >= 0.9 * target:\n            t90 = t\n            break\n\n    if t10 is not None and t90 is not None:\n        return t90 - t10\n    return None\n```\n\n## Overshoot\n\nHow much response exceeds target, as percentage.\n\n```python\ndef overshoot_percent(values, target):\n    \"\"\"Calculate overshoot percentage.\"\"\"\n    max_val = max(values)\n    if max_val \u003C= target:\n        return 0.0\n    return ((max_val - target) \u002F target) * 100\n```\n\n## Steady-State Error\n\nDifference between target and final settled value.\n\n```python\ndef steady_state_error(values, target, final_fraction=0.1):\n    \"\"\"Calculate steady-state error using final portion of data.\"\"\"\n    n = len(values)\n    start = int(n * (1 - final_fraction))\n    final_avg = sum(values[start:]) \u002F len(values[start:])\n    return abs(target - final_avg)\n```\n\n## Settling Time\n\nTime to stay within tolerance band of target.\n\n```python\ndef settling_time(times, values, target, tolerance=0.02):\n    \"\"\"Time to settle within tolerance of target.\"\"\"\n    band = target * tolerance\n    lower, upper = target - band, target + band\n\n    settled_at = None\n    for t, v in zip(times, values):\n        if v \u003C lower or v > upper:\n            settled_at = None\n        elif settled_at is None:\n            settled_at = t\n\n    return settled_at\n```\n\n## Usage\n\n```python\ntimes = [row['time'] for row in results]\nvalues = [row['value'] for row in results]\ntarget = 30.0\n\nprint(f\"Rise time: {rise_time(times, values, target)}\")\nprint(f\"Overshoot: {overshoot_percent(values, target)}%\")\nprint(f\"SS Error: {steady_state_error(values, target)}\")\n```\n","# Control System Performance Metrics\n\n## Rise Time\n\nTime for system to go from 10% to 90% of target value.\n\n```python\ndef rise_time(times, values, target):\n    \"\"\"Calculate rise time (10% to 90% of target).\"\"\"\n    t10 = t90 = None\n\n    for t, v in zip(times, values):\n        if t10 is None and v >= 0.1 * target:\n            t10 = t\n        if t90 is None and v >= 0.9 * target:\n            t90 = t\n            break\n\n    if t10 is not None and t90 is not None:\n        return t90 - t10\n    return None\n```\n\n## Overshoot\n\nHow much response exceeds target, as percentage.\n\n```python\ndef overshoot_percent(values, target):\n    \"\"\"Calculate overshoot percentage.\"\"\"\n    max_val = max(values)\n    if max_val \u003C= target:\n        return 0.0\n    return ((max_val - target) \u002F target) * 100\n```\n\n## Steady-State Error\n\nDifference between target and final settled value.\n\n```python\ndef steady_state_error(values, target, final_fraction=0.1):\n    \"\"\"Calculate steady-state error using final portion of data.\"\"\"\n    n = len(values)\n    start = int(n * (1 - final_fraction))\n    final_avg = sum(values[start:]) \u002F len(values[start:])\n    return abs(target - final_avg)\n```\n\n## Settling Time\n\nTime to stay within tolerance band of target.\n\n```python\ndef settling_time(times, values, target, tolerance=0.02):\n    \"\"\"Time to settle within tolerance of target.\"\"\"\n    band = target * tolerance\n    lower, upper = target - band, target + band\n\n    settled_at = None\n    for t, v in zip(times, values):\n        if v \u003C lower or v > upper:\n            settled_at = None\n        elif settled_at is None:\n            settled_at = t\n\n    return settled_at\n```\n\n## Usage\n\n```python\ntimes = [row['time'] for row in results]\nvalues = [row['value'] for row in results]\ntarget = 30.0\n\nprint(f\"Rise time: {rise_time(times, values, target)}\")\nprint(f\"Overshoot: {overshoot_percent(values, target)}%\")\nprint(f\"SS Error: {steady_state_error(values, target)}\")\n```\n",{"name":5,"description":7},"main","7eeb258ada72b7f58119b0e7a2c00ea89d9beedd","tasks\u002Fadaptive-cruise-control\u002Fenvironment\u002Fskills\u002Fsimulation-metrics","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench","https:\u002F\u002Fgithub.com\u002FWaaaalnut","student of Zhejiang University","2026-04-21 23:16:23",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add Waaaalnut\u002Fskillsbench --skill simulation-metrics",{"tool":51,"command":52},"bunx","bunx skills add Waaaalnut\u002Fskillsbench --skill simulation-metrics",{"tool":54,"command":55},"pnpm","pnpm dlx skills add Waaaalnut\u002Fskillsbench --skill simulation-metrics","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fadaptive-cruise-control\u002Fenvironment\u002Fskills\u002Fsimulation-metrics\u002FSKILL.md",true,[],[60,74,89,115,136,153],{"skillNo":61,"name":62,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":70,"publishedAt":33},"01M6XEWMJ6VY3ZC53MPDCPG3GH","data-reconciliation","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fxlsx-recover-data\u002Fenvironment\u002Fskills\u002Fdata-reconciliation\u002FSKILL.md",[65],{"categoryNo":66,"categoryName":67,"taxonomyType":68,"taxonomyTypeDesc":69},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[71,72,73],"data reconciliation","reconciliation","data",{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":33},"01M6XEW8MNPMF1KRXV6ATGFRQF","speech-to-text","Transcribe video to timestamped text using Whisper tiny model (pre-installed).","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fvideo-tutorial-indexer\u002Fenvironment\u002Fskills\u002Fspeech-to-text\u002FSKILL.md",[],[81,82,83,84,85,86,87,88],"speech","text","speech to text","transcribe video","whisper","model","Video","transcribe",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":100,"publishedAt":33},"01M6XEW3FQZP0T1RKQQJFXVY9T","video-processor","Process videos by removing segments and concatenating remaining parts. Use when you need to remove detected pauses\u002Fopenings from videos, create highlight reels, or batch process segment removals using ffmpeg filter_complex.","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fvideo-silence-remover\u002Fenvironment\u002Fskills\u002Fvideo-processor\u002FSKILL.md",[95],{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[87,101,102,103,104,105,32,106,107,108,109,110,111,112,113,25,114],"processor","video processor","batch","create","reels","parts","segments","process","videos","you","segment","filter","ffmpeg","remove",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":122,"publishedAt":33},"01M6XEVXJ5KZ0NTY3XZKRY4AS1","silence-detector","Detect initial silence segments in audio\u002Fvideo using energy-based analysis. Use when you need to find low-energy periods at the start of recordings (title slides, setup time, pre-roll silence).","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fvideo-silence-remover\u002Fenvironment\u002Fskills\u002Fsilence-detector\u002FSKILL.md",[121],{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},[123,124,125,126,32,110,27,127,128,129,130,107,131,132,87,133,134,135,25],"detector","silence detector","title","slides","energy","at","recordings","detect","find","Audio","analysis","start","setup",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":142,"publishedAt":33},"01M6XEVT3NGRN1FT7JPMAPXS6M","segment-combiner","Combine multiple segment detection results into a unified list. Use when you need to merge segments from different detectors, prepare removal lists for video processing, or consolidate detection outputs.","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fvideo-silence-remover\u002Fenvironment\u002Fskills\u002Fsegment-combiner\u002FSKILL.md",[],[111,143,87,144,145,146,147,31,32,148,149,107,110,150,151,25,24,152],"segment combiner","detection","prepare","merge","video processing","outputs","combine","processing","consolidate","list",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":162,"publishedAt":33},"01M6XEVMPVASGS2KX86QK4FMT7","report-generator","Generate compression reports for video processing. Use when you need to create structured JSON reports with duration statistics, compression ratios, and segment details after video processing.","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fvideo-silence-remover\u002Fenvironment\u002Fskills\u002Freport-generator\u002FSKILL.md",[159],{"categoryNo":160,"categoryName":161,"taxonomyType":68,"taxonomyTypeDesc":69},"01JBSEEDCAT000000000000034","行政与办公人员",[163,164,165,111,32,31,110,166,150,167,168,169,25,147,170,87,171,172,104],"generator","report generator","report","with","statistics","structured","reports","json","compression","generate"]