Can you explain the original software a bit more? 
For now, it looks like you put some unpredictable un-liniarity on the display value. 
Why are small changes less important than big? 
Is it really a display only issue, or do we need to make whole viny scratch less noisy? 
For now, I would feel better with a IIF low pass for the display value.