WHINING NOISE WHEN ACCELERATING — HOW THESE NUMBERS WERE PRODUCED PulsCar analysis of NHTSA public data, September 2026. Computed 18 September 2026. License: CC BY 4.0. Credit "PulsCar analysis of NHTSA public data" and link to https://www.pulscar.io/blog/whining-noise-when-accelerating -------------------------------------------------------------------------------- 1. SOURCES -------------------------------------------------------------------------------- NHTSA Office of Defects Investigation public flat files, loaded into SQLite: - COMPLAINTS_RECEIVED (2015-2019, 2020-2024, 2025-2026), de-duplicated by ODINO, product type V (vehicle): 777,040 distinct complaints received 1 January 2015 - 8 September 2026. - FLAT_TSBS (manufacturer communications), one row per make/model/model year. - FLAT_RCL (recalls), one row per make/model/model year per campaign. - FLAT_INV (investigations). File directory: https://static.nhtsa.gov/odi/ffdd/ Data dictionary: https://static.nhtsa.gov/odi/ffdd/cmpl/CMPL.txt -------------------------------------------------------------------------------- 2. CASE SENSITIVITY — READ THIS BEFORE RE-RUNNING ANYTHING -------------------------------------------------------------------------------- NHTSA complaint narratives are written ENTIRELY IN CAPITALS through 2020 and in mixed case from 2021 onward. In the whine set below, 1,139 of 2,386 narratives (47.7%) are fully upper case. Every query on this page is case-insensitive: SQL uses lower(descr) LIKE, and every Python regular expression carries re.IGNORECASE. An upper-case-only pattern (or an upper-case SQL GLOB) silently drops most complaints received after 2020 and would have cut this study roughly in half. This is stated here because it is the single easiest way to reproduce these numbers wrongly. -------------------------------------------------------------------------------- 3. BUILDING THE WHINE SET -------------------------------------------------------------------------------- Step 1. Prefilter: SELECT ... FROM complaints WHERE lower(descr) LIKE '%whin%' -> 2,396 rows (A full-text MATCH on 'whine OR whining OR whines OR whined OR whiny' returned 2,360 and missed the misspellings, so the LIKE prefilter was used instead.) Step 2. Token whitelist. Every token matching \bwhin[a-z]* (re.IGNORECASE) was counted and read. Kept tokens, with counts: whining 2034, whine 496, whines 97, whinning 74, whiny 20, whined 20, whinny 10, whinging 5, whinnying 4, whiney 3, whinig 2, whineing 2, whinin 1, whinding 1, whinnin 1, whinninh 1, whinnging 1, whinnning 1, whinnig 1 Rejected tokens (not a noise): whin (a misspelling of "when" or "while", 4), whiner (1), whindshiled (1). A complaint is kept if any of its tokens, stripped of non-letters, is in the kept list. Result: 2,389. Step 3. Sense filter. Dropped narratives where the word is used in the sense of complaining rather than of a noise: re.compile(r'whin\w*\s+(?:about|dorks?)|whiner', re.IGNORECASE) Dropped 3. Result: 2,386. Step 4. Non-passenger makes dropped: WINNEBAGO (21), YAMAHA (12), DUCATI (2), KTM (2), KAWASAKI (1), FREIGHTLINER (1), KEYSTONE (1). Result: 2,346. Suzuki, Fisker and Tesla rows were kept: they are passenger cars. Step 5. Negation-only rows dropped. A complaint that says only that there is NO whine ("NO 'WHINING' NOISE") is not a whine report: NEG = r'\b(?:no|not|without|never)\b[^.;]{0,25}whin' A row is dropped only when removing every NEG span leaves no whine word behind. Dropped 36. FINAL SET: 2,310 complaints. Sample reading (required before publishing any keyword count): 30 rows drawn at random with seed 11 were read in full. 30 of 30 described an actual whining or whirring noise from the vehicle - a false-positive rate of 0 in 30 for the question "is this a whine report". Two of the 30 were a travel trailer and a motorcycle, which is what produced the make exclusion in step 4 above. No further tightening was applied because none was warranted. -------------------------------------------------------------------------------- 4. BASELINES -------------------------------------------------------------------------------- Computed over all 777,040 complaints, using the structured fields as NHTSA records them: towed 5.11% crash 4.37% fire 1.82% "Shop could not find it" baseline, same regex as section 6 below: 1.74% (13,551 of 777,040). Mileage: rows with 0 < MILES < 400,000 only (392,935 of 777,040 carry one). -------------------------------------------------------------------------------- 5. WHAT OWNERS NAME (whine-part-named-by-owner.csv) -------------------------------------------------------------------------------- Case-insensitive regular expressions run over the whole narrative. A complaint can appear in more than one row, so the shares do not sum to 100. transmission \b(?:transmission|transaxle|cvt|gearbox|torque converter|valve body) power steering \bpower[ -]steering|steering pump|steering fluid|steering rack|steering column|\bps pump differential \bdifferential|\brear end\b|\bpinion|\bring gear|\btransfer case alternator \balternator timing chain \btiming chain|\bchain tensioner turbo \bturbo|\bsupercharg fuel pump \bfuel pump belt \bserpentine|\bbelt tensioner|\bidler pulley|\bdrive belt|\bpulley wheel bearing \bwheel bearing|\bhub assembly electric drive \bdrive unit|\belectric motor|\breduction gear|\binverter water pump \bwater pump A/C compressor \ba/?c compressor|\bair ?conditioning compressor engine bearings \brod bearing|\bmain bearing|\bcrankshaft|\bcam(?:shaft)? bearing LIMITATION, STATED IN THE ARTICLE AND REPEATED HERE. These shares measure what reaches NHTSA, not how often each part is the cause of a whine. People file with a federal safety agency about failures and about repairs they were refused; a whine cured by $15 of power steering fluid never becomes a complaint. The file cannot answer "how often is a whine cheap", and no number on this page should be read that way. -------------------------------------------------------------------------------- 6. CONDITION NAMED (whine-condition-named-near-the-word.csv) -------------------------------------------------------------------------------- To tie a condition to the whine rather than to anything else in the narrative, each regex is run only inside a window of 140 characters on either side of every whine token in that complaint. Same case-insensitive rules. Patterns are listed in section 5's style and are reproduced in the CSV's first column in plain words. "No condition named" means no pattern matched inside any window. "Shop could not find it" regex (used for the 1.95% figure and the 1.74% baseline): could ?n[o']?t (?:find|duplicate|replicate|reproduce|hear|detect) |unable to (?:find|duplicate|replicate|reproduce|hear|detect) |no (?:fault|problem|issue) found|found nothing|nothing (?:was )?found |told (?:me|us) (?:it (?:is|was) )?normal|said it (?:is|was) normal |operating as designed -------------------------------------------------------------------------------- 7. MAKES AND MODELS (whine-complaints-by-make.csv, whine-top-models.csv) -------------------------------------------------------------------------------- Make and model text exactly as NHTSA records it, combined across model years. Model years are NHTSA's YEARTXT field. Median miles uses only the complaints that carry a mileage between 1 and 399,999; the count of those is published beside every median, because it is often small. Counts are complaints, not vehicles and not failure rates: they follow how many of a model were sold, how old the fleet is and how likely a given group of owners is to file. -------------------------------------------------------------------------------- 8. MANUFACTURER COMMUNICATIONS (whine-bulletins.csv) -------------------------------------------------------------------------------- Rows whose SUMMARY matches lower(summary) LIKE '%whin%', then confirmed with \bwhin(?:e|es|ed|ing|ning|y|ny)\b (re.IGNORECASE) 9,494 make/model/year rows. Collapsed to one document per manufacturer GROUP plus normalized document number: brands of one group share numbers (Chevrolet, GMC, Cadillac, Buick, Pontiac, Saturn = GM; Chrysler, Dodge, Jeep, Ram = Stellantis; Ford and Lincoln; Toyota, Lexus and Scion; Honda and Acura; Nissan and Infiniti; Hyundai, Kia and Genesis; VW, Audi and Porsche; Land Rover and Jaguar; BMW and Mini). Revision marks (REV A, trailing _2) are stripped before comparison. Result: 282 distinct documents. Software share: \b(?:software|reprogram|recalibrat|calibration|flash) -> 13 (4.6%) Calls it normal: \bnormal\b|no repair|do not replace|operating as designed|characteristic -> 19 (6.7%) Limitations: the software share is read from NHTSA's one-paragraph summary, not from the full document, so it is a floor. Bulletin makes were NOT filtered: 18 of the 282 documents belong to heavy-truck, motorcycle or non-US brands (Cummins, Harley-Davidson, International Harvester, Western Star, Freightliner, Tiffin, Opel, Saab, Bentley, Ineos, Isuzu, Karma). Removing them does not change any share by more than one point. -------------------------------------------------------------------------------- 9. RECALLS AND INVESTIGATIONS -------------------------------------------------------------------------------- Recalls whose DEFECT or CONSEQUENCE text contains a whine word, same rule as above: TWO campaigns in the whole 2015-2026 file, 11V-258 (Kia Sorento, 12,690 vehicles) and 11V-261 (Hyundai Santa Fe, 5,876), both for the same intermediate shaft misalignment. Investigations: no open or closed ODI investigation in the file names a whine in its subject or summary. In particular, there is no investigation covering the Toyota Highlander transmission whine described in the article, as of the file downloaded for this analysis. -------------------------------------------------------------------------------- 10. WHAT THIS DATA CANNOT DO -------------------------------------------------------------------------------- - It is not a failure rate and not a reliability ranking. Complaints are unverified public reports. - It cannot say which part causes a whine most often (see section 5). - Structured fields (towed, crash, fire, miles, speed) are filled in by the owner and are frequently blank. - Small samples stay small: any figure computed on fewer than about 40 rows is published with its denominator beside it.