{"id":100280,"date":"2026-02-15T20:31:38","date_gmt":"2026-02-15T20:31:38","guid":{"rendered":"https:\/\/vibromera.eu\/?post_type=calculator&#038;p=100280"},"modified":"2026-02-15T20:31:38","modified_gmt":"2026-02-15T20:31:38","slug":"vibration-checklist-generator","status":"publish","type":"calculator","link":"https:\/\/vibromera.eu\/sw\/calculators\/vibration-checklist-generator\/","title":{"rendered":"Kizalishaji cha Mpango wa Kipimo cha Mtetemo | Zana ya Bure ya Mtandaoni"},"content":{"rendered":"\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"WebApplication\",\"name\":\"Vibration Measurement Plan Generator\",\"description\":\"Generate vibration measurement plans with calculated frequency ranges, measurement points, and data storage requirements.\",\"url\":\"https:\/\/vibromera.eu\/calculators\/vibration-checklist-generator\/\",\"applicationCategory\":\"Engineering Calculator\",\"operatingSystem\":\"Any\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"EUR\"},\"creator\":{\"@type\":\"Organization\",\"name\":\"Vibromera\",\"url\":\"https:\/\/vibromera.eu\/\"},\"datePublished\":\"2024-01-01\",\"dateModified\":\"2026-02-15\",\"inLanguage\":\"en\",\"isAccessibleForFree\":true}\n<\/script>\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[\n{\"@type\":\"Question\",\"name\":\"How do I determine the correct Fmax for vibration measurement?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Fmax should be at least 3.5\u00d7 the highest bearing defect frequency. For rolling element bearings, BPFO is typically 0.4\u00d7N\u00d7RPM\/60 where N is the number of rolling elements. A common rule: Fmax \u2248 40\u00d7 shaft speed for standard bearings, 80\u00d7 for high-speed machinery.\"}},\n{\"@type\":\"Question\",\"name\":\"How many FFT lines should I use?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Use 800 lines for routine monitoring, 1600 lines for detailed analysis, 3200 or 6400 lines for high-resolution bearing diagnostics. More lines = better frequency resolution but longer acquisition time.\"}},\n{\"@type\":\"Question\",\"name\":\"What measurement parameters should I collect?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Velocity (mm\/s RMS, 10-1000 Hz) for overall machine condition per ISO 10816. Acceleration (g) for bearing defects and high-frequency issues. Displacement (\u03bcm pk-pk) for low-speed machines (<600 RPM). Envelope\/demodulation for early bearing defect detection.\"}},\n{\"@type\":\"Question\",\"name\":\"How many measurement points per bearing?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Minimum 2 per bearing: horizontal (H) and vertical (V). Add axial (A) for thrust bearings and to detect misalignment. For critical machines, measure H+V+A at each bearing = 3 points per bearing position.\"}},\n{\"@type\":\"Question\",\"name\":\"How is data storage calculated for vibration measurements?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Each spectrum requires FFT_lines \u00d7 4 bytes (float32). Total storage = number_of_points \u00d7 parameters_per_point \u00d7 FFT_lines \u00d7 4 bytes. A typical route with 50 machines \u00d7 4 points \u00d7 3 parameters \u00d7 800 lines = ~1.9 MB per route.\"}}\n]}\n<\/script>\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,400&#038;family=JetBrains+Mono:wght@400;500;600&#038;family=Fraunces:opsz,wght@9..144,700;9..144,800&#038;display=swap\" rel=\"stylesheet\">\n\n<link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/katex@0.16.11\/dist\/katex.min.css\">\n\n<style>\n:root {\n    --vc-bg: #f4f1ec;\n    --vc-surface: #ffffff;\n    --vc-surface-alt: #f8f6f2;\n    --vc-ink: #1a1a1a;\n    --vc-ink-secondary: #5a5650;\n    --vc-ink-muted: #8a857e;\n    --vc-accent: #c85a2a;\n    --vc-accent-hover: #b04d22;\n    --vc-accent-light: #fdf0ea;\n    --vc-blue: #2a5c8c;\n    --vc-blue-light: #eaf1f8;\n    --vc-green: #2a7a4b;\n    --vc-green-light: #eaf8ef;\n    --vc-yellow: #a67c00;\n    --vc-yellow-light: #fef9e8;\n    --vc-red: #b91c1c;\n    --vc-red-light: #fef2f2;\n    --vc-border: #d9d4cc;\n    --vc-border-light: #e8e4dd;\n    --vc-shadow: 0 1px 3px rgba(26,26,26,0.06), 0 4px 12px rgba(26,26,26,0.04);\n    --vc-shadow-lg: 0 4px 12px rgba(26,26,26,0.08), 0 16px 40px rgba(26,26,26,0.06);\n    --vc-radius: 8px;\n    --vc-radius-lg: 12px;\n    --vc-font: 'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    --vc-mono: 'JetBrains Mono', 'Consolas', 'Monaco', monospace;\n    --vc-display: 'Fraunces', Georgia, serif;\n}\n\n.vc-calculator {\n    font-family: var(--vc-font);\n    font-size: 15px;\n    line-height: 1.65;\n    color: var(--vc-ink);\n    max-width: 960px;\n    margin: 0 auto;\n    padding: 20px 16px 40px;\n    -webkit-font-smoothing: antialiased;\n}\n.vc-calculator *, .vc-calculator *::before, .vc-calculator *::after { box-sizing: border-box; }\n\n\/* HEADER *\/\n.vc-header { text-align: center; padding: 48px 24px 40px; position: relative; }\n.vc-header::after { content: ''; position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); width: 80px; height: 3px; background: var(--vc-accent); border-radius: 2px; }\n.vc-header-eyebrow { font-family: var(--vc-mono); font-size: 11px; font-weight: 500; letter-spacing: 0.15em; text-transform: uppercase; color: var(--vc-accent); margin: 0 0 12px; }\n.vc-header-title { font-family: var(--vc-display); font-size: clamp(24px, 4vw, 36px); font-weight: 800; line-height: 1.15; color: var(--vc-ink); margin: 0 0 16px; letter-spacing: -0.02em; }\n.vc-header-subtitle { font-size: 15px; color: var(--vc-ink-secondary); margin: 0 auto 20px; max-width: 600px; }\n.vc-badges { display: inline-flex; gap: 8px; flex-wrap: wrap; justify-content: center; }\n.vc-badge { font-family: var(--vc-mono); font-size: 11px; font-weight: 500; padding: 4px 10px; border-radius: 4px; background: var(--vc-surface); border: 1px solid var(--vc-border); color: var(--vc-ink-secondary); }\n\n\/* CARD *\/\n.vc-card { background: var(--vc-surface); border: 1px solid var(--vc-border); border-radius: var(--vc-radius-lg); box-shadow: var(--vc-shadow); overflow: hidden; margin-top: 32px; }\n\n\/* FORM *\/\n.vc-form { padding: 24px; }\n.vc-form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }\n@media (max-width: 600px) { .vc-form-grid { grid-template-columns: 1fr; } }\n.vc-field { display: flex; flex-direction: column; }\n.vc-field-full { grid-column: 1 \/ -1; }\n.vc-label { font-size: 12px; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: var(--vc-ink-secondary); margin-bottom: 6px; }\n.vc-label-hint { font-weight: 400; text-transform: none; letter-spacing: 0; color: var(--vc-ink-muted); font-size: 11px; }\n.vc-select, .vc-input { width: 100%; padding: 10px 12px; border: 1.5px solid var(--vc-border); border-radius: 6px; font-family: var(--vc-font); font-size: 14px; color: var(--vc-ink); background: var(--vc-surface); transition: border-color 0.15s, box-shadow 0.15s; }\n.vc-select { padding-right: 36px; appearance: none; -webkit-appearance: none; cursor: pointer; background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' fill='none' stroke='%235a5650' stroke-width='2'%3E%3Cpath d='M4 6l4 4 4-4'\/%3E%3C\/svg%3E\"); background-repeat: no-repeat; background-position: right 10px center; }\n.vc-select:focus, .vc-input:focus { outline: none; border-color: var(--vc-accent); box-shadow: 0 0 0 3px rgba(200,90,42,0.12); }\n.vc-select:hover, .vc-input:hover { border-color: var(--vc-ink-muted); }\n\n\/* CHECKBOX GROUP *\/\n.vc-check-group { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 4px; }\n.vc-check-label { display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--vc-ink-secondary); cursor: pointer; }\n.vc-check-label input { accent-color: var(--vc-accent); width: 16px; height: 16px; }\n\n\/* PRESETS *\/\n.vc-presets { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 18px; padding-top: 18px; border-top: 1px solid var(--vc-border-light); }\n.vc-presets-label { font-family: var(--vc-mono); font-size: 11px; font-weight: 500; letter-spacing: 0.1em; text-transform: uppercase; color: var(--vc-ink-muted); width: 100%; margin-bottom: 2px; }\n.vc-preset-btn { padding: 5px 12px; font-family: var(--vc-font); font-size: 12px; font-weight: 500; border: 1px solid var(--vc-border); border-radius: 6px; background: var(--vc-surface-alt); color: var(--vc-ink-secondary); cursor: pointer; transition: all 0.15s; }\n.vc-preset-btn:hover { border-color: var(--vc-accent); color: var(--vc-accent); background: var(--vc-accent-light); }\n\n\/* RESULTS *\/\n.vc-results { border-top: 1px solid var(--vc-border-light); background: var(--vc-surface-alt); padding: 0; max-height: 0; overflow: hidden; transition: max-height 0.5s cubic-bezier(0.4,0,0.2,1), padding 0.3s; }\n.vc-results.vc-visible { max-height: 4000px; padding: 24px; }\n.vc-results-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 18px; }\n.vc-results-title { font-family: var(--vc-display); font-size: 20px; font-weight: 700; color: var(--vc-ink); margin: 0; }\n.vc-copy-btn { display: inline-flex; align-items: center; gap: 5px; padding: 6px 12px; border: 1px solid var(--vc-border); border-radius: 6px; background: var(--vc-surface); font-family: var(--vc-font); font-size: 12px; font-weight: 500; color: var(--vc-ink-secondary); cursor: pointer; transition: all 0.15s; }\n.vc-copy-btn:hover { border-color: var(--vc-accent); color: var(--vc-accent); }\n.vc-copy-btn.vc-copied { background: var(--vc-green-light); border-color: var(--vc-green); color: var(--vc-green); }\n\n.vc-result-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 20px; }\n@media (max-width: 500px) { .vc-result-grid { grid-template-columns: 1fr; } }\n.vc-rcard { background: var(--vc-surface); border: 1px solid var(--vc-border-light); border-radius: var(--vc-radius); padding: 16px; transition: transform 0.2s; }\n.vc-rcard:hover { transform: translateY(-1px); }\n.vc-rcard-primary { border-color: var(--vc-accent); border-width: 2px; background: linear-gradient(135deg, #fdf6f2 0%, var(--vc-surface) 100%); grid-column: 1 \/ -1; }\n.vc-rcard-label { font-family: var(--vc-mono); font-size: 10px; font-weight: 500; letter-spacing: 0.1em; text-transform: uppercase; color: var(--vc-ink-muted); margin-bottom: 4px; }\n.vc-rcard-value { font-family: var(--vc-mono); font-size: 22px; font-weight: 600; color: var(--vc-ink); line-height: 1.2; }\n.vc-rcard-primary .vc-rcard-value { font-size: 30px; color: var(--vc-accent); }\n.vc-rcard-unit { font-size: 14px; font-weight: 400; color: var(--vc-ink-secondary); }\n\n\/* DOWNLOAD BUTTON *\/\n.vc-download-btn { display: inline-flex; align-items: center; gap: 8px; padding: 10px 20px; border: 2px solid var(--vc-accent); border-radius: 6px; background: var(--vc-accent); font-family: var(--vc-font); font-size: 14px; font-weight: 600; color: #fff; cursor: pointer; transition: all 0.15s; margin-top: 12px; }\n.vc-download-btn:hover { background: var(--vc-accent-hover); border-color: var(--vc-accent-hover); }\n\n\/* COLLAPSIBLE SECTIONS *\/\n.vc-section { margin-top: 24px; border: 1px solid var(--vc-border); border-radius: var(--vc-radius-lg); background: var(--vc-surface); box-shadow: var(--vc-shadow); overflow: hidden; }\n.vc-section-toggle { width: 100%; display: flex; align-items: center; justify-content: space-between; padding: 18px 24px; border: none; background: transparent; cursor: pointer; font-family: var(--vc-font); text-align: left; transition: background 0.15s; }\n.vc-section-toggle:hover { background: var(--vc-surface-alt); }\n.vc-section-toggle-text { display: flex; align-items: center; gap: 10px; }\n.vc-section-icon { font-size: 20px; line-height: 1; }\n.vc-section-title { font-family: var(--vc-display); font-size: 18px; font-weight: 700; color: var(--vc-ink); margin: 0; }\n.vc-section-chevron { width: 20px; height: 20px; color: var(--vc-ink-muted); transition: transform 0.3s; flex-shrink: 0; }\n.vc-section.vc-open .vc-section-chevron { transform: rotate(180deg); }\n.vc-section-body { max-height: 0; overflow: hidden; transition: max-height 0.4s cubic-bezier(0.4,0,0.2,1); }\n.vc-section.vc-open .vc-section-body { max-height: 20000px; }\n.vc-section-inner { padding: 0 24px 24px; border-top: 1px solid var(--vc-border-light); }\n\n\/* THEORY *\/\n.vc-theory h3 { font-family: var(--vc-display); font-size: 17px; font-weight: 700; color: var(--vc-ink); margin: 28px 0 10px; }\n.vc-theory h3:first-child { margin-top: 20px; }\n.vc-theory p { font-size: 14px; color: var(--vc-ink-secondary); margin: 0 0 10px; }\n.vc-theory ul, .vc-theory ol { font-size: 14px; color: var(--vc-ink-secondary); margin: 0 0 12px 18px; padding: 0; }\n.vc-theory li { margin-bottom: 5px; }\n.vc-formula-box { background: var(--vc-surface-alt); border: 2px solid var(--vc-border); border-radius: 6px; padding: 14px 20px; font-family: var(--vc-mono); font-size: 16px; font-weight: 500; text-align: center; margin: 14px 0; color: var(--vc-ink); overflow-x: auto; }\n.vc-info-box { background: var(--vc-blue-light); border-left: 3px solid var(--vc-blue); padding: 14px 16px; border-radius: 0 6px 6px 0; margin: 14px 0; }\n.vc-info-box p { margin: 0; font-size: 14px; color: var(--vc-ink-secondary); }\n.vc-warning-box { background: var(--vc-yellow-light); border-left: 3px solid var(--vc-yellow); padding: 14px 16px; border-radius: 0 6px 6px 0; margin: 14px 0; }\n.vc-example-box { background: var(--vc-surface-alt); border: 1px solid var(--vc-border-light); border-radius: 6px; padding: 16px; margin: 14px 0; }\n.vc-example-title { font-family: var(--vc-mono); font-size: 13px; font-weight: 600; color: var(--vc-accent); margin-bottom: 8px; }\n.vc-table { width: 100%; border-collapse: collapse; margin: 14px 0; font-size: 13px; }\n.vc-table th, .vc-table td { padding: 10px 12px; border: 1px solid var(--vc-border-light); text-align: left; }\n.vc-table th { background: var(--vc-surface-alt); font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: var(--vc-ink-secondary); }\n.vc-table tr:nth-child(even) { background: var(--vc-surface-alt); }\n\n\/* FAQ *\/\n.vc-faq-list { display: flex; flex-direction: column; gap: 8px; margin-top: 20px; }\n.vc-faq-item { border: 1px solid var(--vc-border-light); border-radius: 6px; overflow: hidden; }\n.vc-faq-q { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 16px; border: none; background: var(--vc-surface-alt); cursor: pointer; font-family: var(--vc-font); font-size: 15px; font-weight: 600; color: var(--vc-ink); text-align: left; transition: background 0.15s; }\n.vc-faq-q:hover { background: #ede9e3; }\n.vc-faq-chevron { width: 16px; height: 16px; color: var(--vc-ink-muted); flex-shrink: 0; transition: transform 0.25s; }\n.vc-faq-item.vc-open .vc-faq-chevron { transform: rotate(180deg); }\n.vc-faq-a { max-height: 0; overflow: hidden; transition: max-height 0.35s; }\n.vc-faq-item.vc-open .vc-faq-a { max-height: 1200px; }\n.vc-faq-a-inner { padding: 14px 16px; border-top: 1px solid var(--vc-border-light); font-size: 14px; color: var(--vc-ink-secondary); }\n.vc-faq-a-inner p { margin: 0 0 8px; }\n.vc-faq-a-inner p:last-child { margin-bottom: 0; }\n.vc-faq-a-inner ul { margin: 4px 0 8px 16px; padding: 0; }\n.vc-faq-a-inner li { margin-bottom: 3px; }\n\n\/* RELATED *\/\n.vc-related { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 16px; }\n.vc-related-link { display: inline-block; padding: 8px 16px; font-family: var(--vc-font); font-size: 13px; font-weight: 600; background: var(--vc-surface-alt); color: var(--vc-ink-secondary); border: 1px solid var(--vc-border); border-radius: var(--vc-radius); text-decoration: none; transition: all 0.15s; }\n.vc-related-link:hover { border-color: var(--vc-accent); color: var(--vc-accent); background: var(--vc-accent-light); }\n\n\/* PROMO *\/\n.vc-promo { margin-top: 24px; padding: 20px; background: linear-gradient(135deg, var(--vc-accent-light), var(--vc-surface)); border: 1px solid var(--vc-border); border-radius: var(--vc-radius-lg); display: flex; align-items: center; gap: 16px; }\n.vc-promo-text { flex: 1; font-size: 14px; color: var(--vc-ink-secondary); }\n.vc-promo-text strong { color: var(--vc-ink); }\n.vc-promo-link { padding: 8px 20px; font-size: 13px; font-weight: 700; color: #fff; background: var(--vc-accent); border-radius: var(--vc-radius); text-decoration: none; white-space: nowrap; transition: background 0.15s; }\n.vc-promo-link:hover { background: var(--vc-accent-hover); }\n\n\/* FOOTER *\/\n.vc-footer { text-align: center; padding: 32px 16px; font-size: 13px; color: var(--vc-ink-muted); }\n.vc-footer a { color: var(--vc-accent); text-decoration: none; }\n.vc-footer a:hover { text-decoration: underline; }\n.vc-footer-links { margin-top: 8px; font-size: 12px; }\n.vc-footer-links a { margin: 0 8px; }\n\n@media print {\n    .vc-section-body { max-height: none !important; }\n    .vc-faq-a { max-height: none !important; }\n    .vc-results { max-height: none !important; padding: 24px !important; }\n    .vc-copy-btn, .vc-section-chevron, .vc-faq-chevron, .vc-presets, .vc-promo, .vc-download-btn { display: none !important; }\n}\n<\/style>\n\n<div class=\"vc-calculator\" id=\"vc-vibration-plan\">\n\n<header class=\"vc-header\">\n    <p class=\"vc-header-eyebrow\">Free Engineering Tool<\/p>\n    <h1 class=\"vc-header-title\">Vibration Measurement Plan Generator<\/h1>\n    <p class=\"vc-header-subtitle\">Calculate recommended frequency range, measurement points, acquisition time, and data storage. Generate a downloadable measurement plan.<\/p>\n    <div class=\"vc-badges\">\n        <span class=\"vc-badge\">ISO 10816<\/span>\n        <span class=\"vc-badge\">ISO 20816<\/span>\n        <span class=\"vc-badge\">Bearing Defects<\/span>\n    <\/div>\n<\/header>\n\n<div class=\"vc-card\">\n    <form class=\"vc-form\" id=\"vc-form\" autocomplete=\"off\">\n        <div class=\"vc-form-grid\">\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-machine\">Machine Type<\/label>\n                <select class=\"vc-select\" id=\"vc-machine\">\n                    <option value=\"pump\">Centrifugal Pump<\/option>\n                    <option value=\"motor\">Electric Motor<\/option>\n                    <option value=\"fan\">Fan \/ Blower<\/option>\n                    <option value=\"compressor\">Compressor<\/option>\n                    <option value=\"turbine\">Turbine<\/option>\n                <\/select>\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-speed\">Shaft Speed <span class=\"vc-label-hint\">(RPM)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-speed\" inputmode=\"decimal\" step=\"any\" min=\"1\" max=\"100000\" placeholder=\"e.g. 1500\" value=\"1500\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-bearings\">Bearing Positions <span class=\"vc-label-hint\">(2\u20138)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-bearings\" inputmode=\"numeric\" step=\"1\" min=\"2\" max=\"8\" value=\"4\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-lines\">FFT Lines<\/label>\n                <select class=\"vc-select\" id=\"vc-lines\">\n                    <option value=\"400\">400 lines (fast screening)<\/option>\n                    <option value=\"800\" selected>800 lines (routine)<\/option>\n                    <option value=\"1600\">1600 lines (detailed)<\/option>\n                    <option value=\"3200\">3200 lines (bearing analysis)<\/option>\n                    <option value=\"6400\">6400 lines (high resolution)<\/option>\n                <\/select>\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-rollers\">Rolling Elements per Bearing <span class=\"vc-label-hint\">(N, for BPFO calc)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-rollers\" inputmode=\"numeric\" step=\"1\" min=\"5\" max=\"30\" value=\"12\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-tag\">Machine Tag \/ ID<\/label>\n                <input class=\"vc-input\" type=\"text\" id=\"vc-tag\" placeholder=\"e.g. P-101A\" value=\"P-101A\">\n            <\/div>\n            <div class=\"vc-field vc-field-full\">\n                <label class=\"vc-label\">Measurement Parameters<\/label>\n                <div class=\"vc-check-group\">\n                    <label class=\"vc-check-label\"><input type=\"checkbox\" id=\"vc-vel\" checked> Velocity (mm\/s RMS)<\/label>\n                    <label class=\"vc-check-label\"><input type=\"checkbox\" id=\"vc-acc\" checked> Acceleration (g peak)<\/label>\n                    <label class=\"vc-check-label\"><input type=\"checkbox\" id=\"vc-disp\"> Displacement (\u03bcm pk-pk)<\/label>\n                    <label class=\"vc-check-label\"><input type=\"checkbox\" id=\"vc-env\" checked> Envelope \/ Demodulation<\/label>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"vc-presets\">\n            <div class=\"vc-presets-label\">Quick presets<\/div>\n            <button type=\"button\" class=\"vc-preset-btn\" data-machine=\"pump\" data-speed=\"2960\" data-bearings=\"4\" data-lines=\"800\" data-tag=\"P-101\">Pump 2960 RPM \/ 4 brg<\/button>\n            <button type=\"button\" class=\"vc-preset-btn\" data-machine=\"motor\" data-speed=\"1480\" data-bearings=\"2\" data-lines=\"800\" data-tag=\"M-201\">Motor 1480 RPM \/ 2 brg<\/button>\n            <button type=\"button\" class=\"vc-preset-btn\" data-machine=\"fan\" data-speed=\"980\" data-bearings=\"4\" data-lines=\"1600\" data-tag=\"F-301\">Fan 980 RPM \/ 4 brg<\/button>\n            <button type=\"button\" class=\"vc-preset-btn\" data-machine=\"turbine\" data-speed=\"7500\" data-bearings=\"6\" data-lines=\"3200\" data-tag=\"T-401\">Turbine 7500 RPM \/ 6 brg<\/button>\n        <\/div>\n    <\/form>\n\n    <!-- Results -->\n    <div class=\"vc-results\" id=\"vc-results\">\n        <div class=\"vc-results-head\">\n            <h2 class=\"vc-results-title\">Measurement Plan<\/h2>\n            <button type=\"button\" class=\"vc-copy-btn\" id=\"vc-copy-btn\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\"\/><\/svg>\n                Copy\n            <\/button>\n        <\/div>\n        <div class=\"vc-result-grid\">\n            <div class=\"vc-rcard vc-rcard-primary\">\n                <div class=\"vc-rcard-label\">Recommended Fmax<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-fmax\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Total Measurement Points<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-points\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Frequency Resolution (\u0394f)<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-df\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">BPFO Estimate<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-bpfo\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Estimated Acq. Time per Point<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-time\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Total Measurement Time<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-totaltime\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Data Storage per Route<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-storage\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Parameters per Point<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-params\">\u2014<\/div>\n            <\/div>\n        <\/div>\n        <button type=\"button\" class=\"vc-download-btn\" id=\"vc-download-btn\">\n            <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4\"\/><polyline points=\"7 10 12 15 17 10\"\/><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"\/><\/svg>\n            Download Measurement Plan (.txt)\n        <\/button>\n    <\/div>\n<\/div>\n\n<!-- Theory -->\n<div class=\"vc-section vc-open\" id=\"vc-sec-theory\">\n    <button type=\"button\" class=\"vc-section-toggle\" aria-expanded=\"true\">\n        <span class=\"vc-section-toggle-text\">\n            <span class=\"vc-section-icon\">\ud83d\udcd8<\/span>\n            <span class=\"vc-section-title\">Theory &amp; Formulas<\/span>\n        <\/span>\n        <svg class=\"vc-section-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"vc-section-body\">\n        <div class=\"vc-section-inner vc-theory\">\n            <h3>Maximum Frequency (Fmax) Recommendation<\/h3>\n            <p>Fmax must capture the highest-frequency defect of interest. For rolling element bearings, the outer race defect frequency (BPFO) is approximately:<\/p>\n            <div class=\"vc-formula-box\" id=\"vc-katex-1\"><\/div>\n            <p>To capture 3rd harmonic of BPFO with sidebands, the recommended Fmax is:<\/p>\n            <div class=\"vc-formula-box\" id=\"vc-katex-2\"><\/div>\n\n            <h3>Frequency Resolution &amp; Acquisition Time<\/h3>\n            <p>The frequency resolution determines the minimum resolvable frequency difference:<\/p>\n            <div class=\"vc-formula-box\" id=\"vc-katex-3\"><\/div>\n            <p>The time record length T (acquisition time for one average) equals 1\/\u0394f. With 4 averages (75% overlap), total acquisition time \u2248 2.5 \u00d7 T.<\/p>\n\n            <h3>Data Storage Calculation<\/h3>\n            <p>Each spectrum stores amplitude values for every FFT line. Storage per measurement:<\/p>\n            <div class=\"vc-formula-box\" id=\"vc-katex-4\"><\/div>\n\n            <h3>Measurement Directions<\/h3>\n            <table class=\"vc-table\">\n                <thead><tr><th>Direction<\/th><th>Code<\/th><th>Detects<\/th><\/tr><\/thead>\n                <tbody>\n                    <tr><td>Horizontal<\/td><td>H<\/td><td>Unbalance, looseness, misalignment<\/td><\/tr>\n                    <tr><td>Vertical<\/td><td>V<\/td><td>Unbalance, bearing defects<\/td><\/tr>\n                    <tr><td>Axial<\/td><td>A<\/td><td>Misalignment, thrust bearing, blade pass<\/td><\/tr>\n                <\/tbody>\n            <\/table>\n\n            <h3>Practical Example<\/h3>\n            <div class=\"vc-example-box\">\n                <div class=\"vc-example-title\">Example \u2014 Centrifugal Pump at 2960 RPM, 4 bearings<\/div>\n                <p><strong>Shaft frequency:<\/strong> f = 2960\/60 = 49.3 Hz<\/p>\n                <p><strong>BPFO estimate (12 rollers):<\/strong> 0.4 \u00d7 12 \u00d7 49.3 = 236.8 Hz<\/p>\n                <p><strong>Fmax:<\/strong> 3.5 \u00d7 236.8 = 828 Hz \u2192 round to <strong>1000 Hz<\/strong><\/p>\n                <p><strong>Points:<\/strong> 4 bearings \u00d7 3 directions = 12 points<\/p>\n                <p><strong>\u0394f (800 lines):<\/strong> 1000\/800 = 1.25 Hz \u2192 can resolve 1\u00d7 at 49.3 Hz easily<\/p>\n                <p><strong>Storage:<\/strong> 12 \u00d7 3 params \u00d7 800 \u00d7 4 = 115,200 bytes \u2248 <strong>113 KB<\/strong><\/p>\n            <\/div>\n\n            <div class=\"vc-warning-box\">\n                <p style=\"margin:0;font-size:14px;color:var(--vc-ink-secondary);\"><strong>\u26a0\ufe0f Note:<\/strong> For gearbox vibration analysis, Fmax should cover gear mesh frequency and its harmonics: GMF = N_teeth \u00d7 shaft_speed. This calculator focuses on rolling element bearing machines.<\/p>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Related -->\n<div class=\"vc-section\" id=\"vc-sec-related\">\n    <button type=\"button\" class=\"vc-section-toggle\" aria-expanded=\"false\">\n        <span class=\"vc-section-toggle-text\">\n            <span class=\"vc-section-icon\">\ud83d\udd17<\/span>\n            <span class=\"vc-section-title\">Related Calculators<\/span>\n        <\/span>\n        <svg class=\"vc-section-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"vc-section-body\">\n        <div class=\"vc-section-inner\">\n            <div class=\"vc-related\">\n                <a class=\"vc-related-link\" href=\"\/calculators\/vibration-velocity\/\">Vibration Velocity (ISO 10816)<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/residual-unbalance-iso1940\/\">Residual Unbalance<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/bearing-defect-frequencies\/\">Bearing Defect Frequencies<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/predictive-maintenance-roi\/\">PdM ROI Calculator<\/a>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- FAQ -->\n<div class=\"vc-section\" id=\"vc-sec-faq\">\n    <button type=\"button\" class=\"vc-section-toggle\" aria-expanded=\"false\">\n        <span class=\"vc-section-toggle-text\">\n            <span class=\"vc-section-icon\">\u2753<\/span>\n            <span class=\"vc-section-title\">Frequently Asked Questions<\/span>\n        <\/span>\n        <svg class=\"vc-section-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"vc-section-body\">\n        <div class=\"vc-section-inner\">\n            <div class=\"vc-faq-list\" id=\"vc-faq-list\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Promo -->\n<div class=\"vc-promo\">\n    <div class=\"vc-promo-text\">\n        <strong>Vibromera \u2014 Portable Balancing &amp; Vibration Analysis<\/strong><br>\n        Professional field balancing instruments and vibration analyzers. Used in 50+ countries.\n    <\/div>\n    <a class=\"vc-promo-link\" href=\"https:\/\/vibromera.eu\/\" target=\"_blank\" rel=\"noopener\">Learn More<\/a>\n<\/div>\n\n<footer class=\"vc-footer\">\n    <p>&copy; 2024&ndash;2026 <a href=\"https:\/\/vibromera.eu\/\">Vibromera<\/a> &mdash; Engineering Calculators<\/p>\n    <div class=\"vc-footer-links\">\n        <a href=\"\/calculators\/engineering-calculators\/\">All Calculators<\/a>\n        <a href=\"https:\/\/vibromera.eu\/contacts\/\">Contact<\/a>\n    <\/div>\n<\/footer>\n\n<\/div>\n\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/katex@0.16.11\/dist\/katex.min.js\"><\/script>\n<script>\n(function() {\n    'use strict';\n\n    var SLUG = 'vibration-checklist-generator';\n\n    function $(id) { return document.getElementById(id); }\n    function fmt(n, d) {\n        if (isNaN(n) || !isFinite(n)) return '\u2014';\n        var f = n.toFixed(d === undefined ? 2 : d);\n        return f.replace(\/(\\.\\d*?)0+$\/, '$1').replace(\/\\.$\/, '');\n    }\n\n    \/* Machine type configs: typical Fmax multiplier, directions per bearing, typical bearing elements *\/\n    var machineConfig = {\n        pump:       { fmaxMult: 40, dirs: 3, label: 'Centrifugal Pump', fmaxRound: [500,1000,2000,5000,10000,20000] },\n        motor:      { fmaxMult: 40, dirs: 3, label: 'Electric Motor',   fmaxRound: [500,1000,2000,5000,10000,20000] },\n        fan:        { fmaxMult: 50, dirs: 3, label: 'Fan \/ Blower',     fmaxRound: [500,1000,2000,5000,10000,20000] },\n        compressor: { fmaxMult: 60, dirs: 3, label: 'Compressor',       fmaxRound: [1000,2000,5000,10000,20000] },\n        turbine:    { fmaxMult: 80, dirs: 3, label: 'Turbine',          fmaxRound: [2000,5000,10000,20000,40000] }\n    };\n\n    var dirLabels = ['H', 'V', 'A'];\n\n    function roundFmax(raw, options) {\n        for (var i = 0; i < options.length; i++) {\n            if (options[i] >= raw) return options[i];\n        }\n        return options[options.length - 1];\n    }\n\n    function getParamCount() {\n        var count = 0;\n        if ($('vc-vel').checked) count++;\n        if ($('vc-acc').checked) count++;\n        if ($('vc-disp').checked) count++;\n        if ($('vc-env').checked) count++;\n        return Math.max(count, 1);\n    }\n\n    function getParamList() {\n        var list = [];\n        if ($('vc-vel').checked) list.push('Velocity (mm\/s RMS)');\n        if ($('vc-acc').checked) list.push('Acceleration (g peak)');\n        if ($('vc-disp').checked) list.push('Displacement (\u03bcm pk-pk)');\n        if ($('vc-env').checked) list.push('Envelope \/ Demodulation');\n        return list.length ? list : ['Velocity (mm\/s RMS)'];\n    }\n\n    var lastPlan = '';\n\n    function calculate() {\n        var machineType = $('vc-machine').value;\n        var speed = parseFloat($('vc-speed').value);\n        var bearings = parseInt($('vc-bearings').value);\n        var fftLines = parseInt($('vc-lines').value);\n        var rollers = parseInt($('vc-rollers').value);\n\n        if (!speed || speed <= 0 || !bearings || bearings < 1 || !rollers || rollers < 1) {\n            $('vc-results').classList.remove('vc-visible');\n            return;\n        }\n\n        var cfg = machineConfig[machineType] || machineConfig.pump;\n        var shaftFreq = speed \/ 60;\n\n        \/* BPFO estimate: 0.4 \u00d7 N \u00d7 shaft_freq (simplified, assumes contact angle ~ 0, Pd\/Bd ~ 0.4) *\/\n        var bpfo = 0.4 * rollers * shaftFreq;\n\n        \/* Fmax: capture 3.5\u00d7 BPFO as minimum, also consider machine multiplier *\/\n        var fmaxBearing = 3.5 * bpfo;\n        var fmaxMachine = cfg.fmaxMult * shaftFreq;\n        var fmaxRaw = Math.max(fmaxBearing, fmaxMachine);\n        var fmax = roundFmax(fmaxRaw, cfg.fmaxRound);\n\n        \/* Points: bearings \u00d7 3 directions (H, V, A) *\/\n        var dirsPerBrg = cfg.dirs;\n        var totalPoints = bearings * dirsPerBrg;\n        var paramCount = getParamCount();\n\n        \/* Frequency resolution *\/\n        var deltaF = fmax \/ fftLines;\n\n        \/* Acquisition time: T_record = 1\/deltaF, with 4 averages 75% overlap: total \u2248 2.5 \u00d7 T *\/\n        var tRecord = 1 \/ deltaF;\n        var tAcqPerMeasurement = 2.5 * tRecord; \/* seconds, 4 averages with 75% overlap *\/\n        var tPerPoint = tAcqPerMeasurement * paramCount; \/* multiple params per point *\/\n        var tTotal = tPerPoint * totalPoints;\n\n        \/* Data storage: lines \u00d7 4 bytes (float32) per spectrum *\/\n        var bytesPerSpectrum = fftLines * 4;\n        var totalSpectra = totalPoints * paramCount;\n        var totalBytes = totalSpectra * bytesPerSpectrum;\n\n        \/* Display results *\/\n        $('vc-r-fmax').innerHTML = fmt(fmax, 0) + ' <span class=\"vc-rcard-unit\">Hz<\/span>';\n        $('vc-r-points').innerHTML = totalPoints + ' <span class=\"vc-rcard-unit\">' + bearings + ' brg \u00d7 ' + dirsPerBrg + ' dir<\/span>';\n        $('vc-r-df').innerHTML = fmt(deltaF, 2) + ' <span class=\"vc-rcard-unit\">Hz<\/span>';\n        $('vc-r-bpfo').innerHTML = fmt(bpfo, 1) + ' <span class=\"vc-rcard-unit\">Hz<\/span>';\n        $('vc-r-time').innerHTML = fmt(tPerPoint, 1) + ' <span class=\"vc-rcard-unit\">sec<\/span>';\n\n        if (tTotal >= 60) {\n            $('vc-r-totaltime').innerHTML = fmt(tTotal \/ 60, 1) + ' <span class=\"vc-rcard-unit\">min<\/span>';\n        } else {\n            $('vc-r-totaltime').innerHTML = fmt(tTotal, 0) + ' <span class=\"vc-rcard-unit\">sec<\/span>';\n        }\n\n        if (totalBytes >= 1048576) {\n            $('vc-r-storage').innerHTML = fmt(totalBytes \/ 1048576, 2) + ' <span class=\"vc-rcard-unit\">MB<\/span>';\n        } else {\n            $('vc-r-storage').innerHTML = fmt(totalBytes \/ 1024, 1) + ' <span class=\"vc-rcard-unit\">KB<\/span>';\n        }\n\n        $('vc-r-params').innerHTML = paramCount + ' <span class=\"vc-rcard-unit\">' + getParamList().join(', ') + '<\/span>';\n\n        $('vc-results').classList.add('vc-visible');\n\n        \/* Generate plan text *\/\n        var tag = $('vc-tag').value || 'N\/A';\n        var paramList = getParamList();\n        var lines = [];\n        lines.push('\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550');\n        lines.push('  VIBRATION MEASUREMENT PLAN');\n        lines.push('\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550');\n        lines.push('Machine:       ' + cfg.label);\n        lines.push('Tag:           ' + tag);\n        lines.push('Shaft Speed:   ' + speed + ' RPM (' + fmt(shaftFreq, 2) + ' Hz)');\n        lines.push('BPFO Estimate: ' + fmt(bpfo, 1) + ' Hz');\n        lines.push('Fmax:          ' + fmax + ' Hz');\n        lines.push('FFT Lines:     ' + fftLines);\n        lines.push('Resolution:    ' + fmt(deltaF, 3) + ' Hz');\n        lines.push('Parameters:    ' + paramList.join(', '));\n        lines.push('\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500');\n        lines.push('');\n        lines.push('MEASUREMENT POINTS:');\n        lines.push('');\n        for (var b = 1; b <= bearings; b++) {\n            lines.push('  Bearing ' + b + ':');\n            for (var d = 0; d < dirsPerBrg; d++) {\n                var ptNum = (b - 1) * dirsPerBrg + d + 1;\n                lines.push('    Pt ' + ptNum + ': Brg' + b + '-' + dirLabels[d] + '  [  ] ' + paramList.join('  [  ] '));\n            }\n            lines.push('');\n        }\n        lines.push('\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500');\n        lines.push('TOTALS:');\n        lines.push('  Measurement Points: ' + totalPoints);\n        lines.push('  Spectra per Route:  ' + totalSpectra);\n        lines.push('  Est. Acq. Time:     ' + (tTotal >= 60 ? fmt(tTotal \/ 60, 1) + ' min' : fmt(tTotal, 0) + ' sec'));\n        lines.push('  Data Storage:       ' + (totalBytes >= 1048576 ? fmt(totalBytes \/ 1048576, 2) + ' MB' : fmt(totalBytes \/ 1024, 1) + ' KB'));\n        lines.push('');\n        lines.push('\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500');\n        lines.push('ALARM LIMITS (ISO 10816 Group 2):');\n        lines.push('  Good:       < 2.8 mm\/s RMS');\n        lines.push('  Acceptable: 2.8 \u2013 7.1 mm\/s');\n        lines.push('  Alert:      7.1 \u2013 18 mm\/s');\n        lines.push('  Danger:     > 18 mm\/s');\n        lines.push('');\n        lines.push('Date: ___\/___\/______  Technician: _______________');\n        lines.push('Instrument: ________________  S\/N: _____________');\n        lines.push('\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550');\n        lines.push('Generated by vibromera.eu\/calculators\/vibration-checklist-generator\/');\n\n        lastPlan = lines.join('\\n');\n\n        \/* URL params *\/\n        var u = new URL(window.location);\n        u.searchParams.set('machine', machineType);\n        u.searchParams.set('speed', speed);\n        u.searchParams.set('bearings', bearings);\n        u.searchParams.set('lines', fftLines);\n        u.searchParams.set('rollers', rollers);\n        history.replaceState(null, '', u.toString());\n\n        \/* History *\/\n        saveHistory({\n            machine: machineType,\n            speed: speed,\n            bearings: bearings,\n            lines: fftLines,\n            fmax: fmax,\n            _summary: cfg.label + ' ' + speed + ' RPM, ' + bearings + ' brg, Fmax=' + fmax + ' Hz'\n        });\n    }\n\n    \/* PRESETS *\/\n    document.querySelectorAll('.vc-preset-btn').forEach(function(btn) {\n        btn.addEventListener('click', function(e) {\n            e.preventDefault();\n            $('vc-machine').value = this.getAttribute('data-machine');\n            $('vc-speed').value = this.getAttribute('data-speed');\n            $('vc-bearings').value = this.getAttribute('data-bearings');\n            $('vc-lines').value = this.getAttribute('data-lines');\n            $('vc-tag').value = this.getAttribute('data-tag') || '';\n            calculate();\n        });\n    });\n\n    \/* AUTO-CALCULATE *\/\n    $('vc-form').addEventListener('input', calculate);\n    $('vc-form').addEventListener('change', calculate);\n\n    \/* COPY *\/\n    $('vc-copy-btn').addEventListener('click', function() {\n        if (navigator.clipboard && lastPlan) {\n            navigator.clipboard.writeText(lastPlan).then(function() {\n                var btn = $('vc-copy-btn');\n                btn.classList.add('vc-copied');\n                btn.innerHTML = '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg> Copied!';\n                setTimeout(function() {\n                    btn.classList.remove('vc-copied');\n                    btn.innerHTML = '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\"\/><\/svg> Copy';\n                }, 2000);\n            });\n        }\n    });\n\n    \/* DOWNLOAD *\/\n    $('vc-download-btn').addEventListener('click', function() {\n        if (!lastPlan) return;\n        var tag = $('vc-tag').value || 'plan';\n        var blob = new Blob([lastPlan], { type: 'text\/plain' });\n        var a = document.createElement('a');\n        a.href = URL.createObjectURL(blob);\n        a.download = 'vibration-plan-' + tag.replace(\/\\s+\/g, '-') + '.txt';\n        a.click();\n        URL.revokeObjectURL(a.href);\n    });\n\n    \/* COLLAPSIBLE SECTIONS *\/\n    document.querySelectorAll('.vc-section-toggle').forEach(function(btn) {\n        btn.addEventListener('click', function() {\n            var section = this.closest('.vc-section');\n            var isOpen = section.classList.contains('vc-open');\n            section.classList.toggle('vc-open');\n            this.setAttribute('aria-expanded', !isOpen);\n        });\n    });\n\n    \/* FAQ *\/\n    var faqData = [\n        { q: 'How do I determine the correct Fmax for vibration measurement?', a: '<p>Fmax should be at least 3.5\u00d7 the highest bearing defect frequency (BPFO). For rolling element bearings, BPFO \u2248 0.4 \u00d7 N \u00d7 RPM\/60 where N is the number of rolling elements. This calculator uses the higher of BPFO-based and machine-type-based Fmax recommendations.<\/p><p>Common Fmax values: 1000 Hz for standard machines, 5000 Hz for high-speed, 10000+ Hz for turbines.<\/p>' },\n        { q: 'How many FFT lines should I use?', a: '<p>FFT lines determine frequency resolution (\u0394f = Fmax \/ lines):<\/p><ul><li><strong>400 lines<\/strong> \u2014 Fast screening, walk-around routes<\/li><li><strong>800 lines<\/strong> \u2014 Routine monitoring (most common)<\/li><li><strong>1600 lines<\/strong> \u2014 Detailed analysis, gear mesh<\/li><li><strong>3200 lines<\/strong> \u2014 High-resolution bearing analysis<\/li><li><strong>6400 lines<\/strong> \u2014 Maximum resolution for close frequencies<\/li><\/ul>' },\n        { q: 'What measurement parameters should I collect?', a: '<p><strong>Velocity<\/strong> (mm\/s RMS, 10\u20131000 Hz): Overall machine condition per ISO 10816. Best for 600\u201360000 RPM machines.<\/p><p><strong>Acceleration<\/strong> (g peak): Bearing defects, gear mesh, high-frequency problems.<\/p><p><strong>Displacement<\/strong> (\u03bcm pk-pk): Low-speed machines below 600 RPM.<\/p><p><strong>Envelope<\/strong>: Early bearing defect detection via demodulation of high-frequency resonances.<\/p>' },\n        { q: 'How many measurement points per bearing?', a: '<p>Minimum: 2 per bearing (Horizontal + Vertical). Recommended: 3 per bearing (H + V + Axial). The axial direction is essential for detecting misalignment, thrust bearing wear, and blade\/vane pass issues.<\/p><p>For critical machines, add extra points on gearbox housings or at shaft seals.<\/p>' },\n        { q: 'How is data storage calculated?', a: '<p>Each FFT spectrum stores one float32 (4 bytes) per line. Formula: Storage = Points \u00d7 Parameters \u00d7 FFT_Lines \u00d7 4 bytes. Example: 12 points \u00d7 3 params \u00d7 800 lines \u00d7 4 = 115,200 bytes \u2248 113 KB per machine.<\/p><p>A full route of 50 machines typically requires 2\u201310 MB of storage.<\/p>' }\n    ];\n\n    var faqList = $('vc-faq-list');\n    faqData.forEach(function(faq) {\n        faqList.innerHTML += '<div class=\"vc-faq-item\"><button type=\"button\" class=\"vc-faq-q\"><span>' + faq.q + '<\/span><svg class=\"vc-faq-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg><\/button><div class=\"vc-faq-a\"><div class=\"vc-faq-a-inner\">' + faq.a + '<\/div><\/div><\/div>';\n    });\n    faqList.addEventListener('click', function(e) {\n        var btn = e.target.closest('.vc-faq-q');\n        if (!btn) return;\n        btn.closest('.vc-faq-item').classList.toggle('vc-open');\n    });\n\n    \/* HISTORY *\/\n    function saveHistory(entry) {\n        var key = 'vc_history_' + SLUG;\n        var arr = [];\n        try { arr = JSON.parse(localStorage.getItem(key)) || []; } catch(e) {}\n        entry._ts = new Date().toISOString();\n        arr.unshift(entry);\n        if (arr.length > 10) arr = arr.slice(0, 10);\n        try { localStorage.setItem(key, JSON.stringify(arr)); } catch(e) {}\n    }\n\n    \/* URL PARAMS *\/\n    function loadParams() {\n        var p = new URLSearchParams(window.location.search);\n        if (p.get('machine')) $('vc-machine').value = p.get('machine');\n        if (p.get('speed')) $('vc-speed').value = p.get('speed');\n        if (p.get('bearings')) $('vc-bearings').value = p.get('bearings');\n        if (p.get('lines')) $('vc-lines').value = p.get('lines');\n        if (p.get('rollers')) $('vc-rollers').value = p.get('rollers');\n        if (p.get('tag')) $('vc-tag').value = p.get('tag');\n    }\n\n    \/* KATEX *\/\n    function renderFormulas() {\n        try {\n            katex.render('\\\\text{BPFO} \\\\approx 0.4 \\\\times N \\\\times \\\\frac{\\\\text{RPM}}{60} \\\\quad [\\\\text{Hz}]', $('vc-katex-1'), { displayMode: true, throwOnError: false });\n            katex.render('F_{\\\\max} = \\\\max\\\\!\\\\left(3.5 \\\\times \\\\text{BPFO},\\\\; k \\\\times f_{\\\\text{shaft}}\\\\right) \\\\quad k = 40\\\\text{\u2013}80', $('vc-katex-2'), { displayMode: true, throwOnError: false });\n            katex.render('\\\\Delta f = \\\\frac{F_{\\\\max}}{\\\\text{FFT lines}} \\\\qquad T_{\\\\text{record}} = \\\\frac{1}{\\\\Delta f}', $('vc-katex-3'), { displayMode: true, throwOnError: false });\n            katex.render('\\\\text{Storage} = N_{\\\\text{points}} \\\\times N_{\\\\text{params}} \\\\times \\\\text{FFT lines} \\\\times 4 \\\\;\\\\text{bytes}', $('vc-katex-4'), { displayMode: true, throwOnError: false });\n        } catch(e) {}\n    }\n\n    \/* INIT *\/\n    function init() {\n        loadParams();\n        renderFormulas();\n        calculate();\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', init);\n    } else {\n        init();\n    }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Kizalishaji cha mpango wa kipimo cha mtetemo bila malipo. Hesabu anuwai inayopendekezwa ya masafa, pointi za kipimo, uhifadhi wa data, na uzalishe mipango ya kipimo inayoweza kupakuliwa kwa pampu, motors, mashabiki, compressors, na turbines.<\/p>","protected":false},"featured_media":0,"template":"","meta":{"ai_generated_summary":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-100280","calculator","type-calculator","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vibromera.eu\/sw\/wp-json\/wp\/v2\/calculator\/100280","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vibromera.eu\/sw\/wp-json\/wp\/v2\/calculator"}],"about":[{"href":"https:\/\/vibromera.eu\/sw\/wp-json\/wp\/v2\/types\/calculator"}],"version-history":[{"count":1,"href":"https:\/\/vibromera.eu\/sw\/wp-json\/wp\/v2\/calculator\/100280\/revisions"}],"predecessor-version":[{"id":100589,"href":"https:\/\/vibromera.eu\/sw\/wp-json\/wp\/v2\/calculator\/100280\/revisions\/100589"}],"wp:attachment":[{"href":"https:\/\/vibromera.eu\/sw\/wp-json\/wp\/v2\/media?parent=100280"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vibromera.eu\/sw\/wp-json\/wp\/v2\/categories?post=100280"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vibromera.eu\/sw\/wp-json\/wp\/v2\/tags?post=100280"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}