{"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\/nb\/calculators\/vibration-checklist-generator\/","title":{"rendered":"Generator for vibrasjonsm\u00e5lingsplan | Gratis nettbasert verkt\u00f8y"},"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>Gratis generator for vibrasjonsm\u00e5lingsplaner. Beregn anbefalt frekvensomr\u00e5de, m\u00e5lepunkter, datalagring og generer nedlastbare m\u00e5leplaner for pumper, motorer, vifter, kompressorer og turbiner.<\/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\/nb\/wp-json\/wp\/v2\/calculator\/100280","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vibromera.eu\/nb\/wp-json\/wp\/v2\/calculator"}],"about":[{"href":"https:\/\/vibromera.eu\/nb\/wp-json\/wp\/v2\/types\/calculator"}],"version-history":[{"count":1,"href":"https:\/\/vibromera.eu\/nb\/wp-json\/wp\/v2\/calculator\/100280\/revisions"}],"predecessor-version":[{"id":100589,"href":"https:\/\/vibromera.eu\/nb\/wp-json\/wp\/v2\/calculator\/100280\/revisions\/100589"}],"wp:attachment":[{"href":"https:\/\/vibromera.eu\/nb\/wp-json\/wp\/v2\/media?parent=100280"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vibromera.eu\/nb\/wp-json\/wp\/v2\/categories?post=100280"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vibromera.eu\/nb\/wp-json\/wp\/v2\/tags?post=100280"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}