Lowpass Filter with Linear Units

Illustration
Adilynn - 2021-02-05T10:12:48+00:00
Question: Lowpass Filter with Linear Units

I'm struggling to design a lowpass filter for data that is in a linear unit, not decibels. It's displacement data measured directly by a potentiometer. I'd like to remove noise above approximately 250hz, but I'll need to play around with that number I'm sure. The data is in a vector. I don't understand how all the different parameters work, like filter order, ripple, etc. Been frustrating myself all morning trying to sort it out. Any help is more than welcome.

Expert Answer

Profile picture of Prashant Kumar Prashant Kumar answered . 2025-11-20

The ‘decibel’ calculation simply converts amplitude to power, and scales it logarithmically. It is convenient with respect to  plotting transfer functions and designing filters, and has no effect at all on the actual signal. If you give the filter your data in ‘linear’ amplitude units, the filtered result will be in the same units.
A prototype filter for your signal would be:
 
signal = ...;                                           % Signal Vector
tv = ...;                                               % Time Vector
Ts = mean(diff(tv));                                    % Sampling Interval
Fs = 1/Ts;                                              % Sampling Frequency (Hz)
Fn = Fs/2;                                              % Nyquist Frequency (Hz)
Wp = 250/Fn;                                            % Passband Frequency (Normalised)
Ws = 252/Fn;                                            % Stopband Frequency (Normalised)
Rp =   1;                                               % Passband Ripple (dB)
Rs =  50;                                               % Stopband Ripple (dB)
[n,Ws] = cheb2ord(Wp,Ws,Rp,Rs);                         % Filter Order
[z,p,k] = cheby2(n,Rs,Ws);                              % Filter Design
[soslp,glp] = zp2sos(z,p,k);                            % Convert To Second-Order-Section For Stability

figure(3)
freqz(soslp, 2^16, Fs)                                  % Filter Bode Plot

filtered_signal = filtfilt(soslp, glp, signal);         % Filter Signal

Note Your sampling frequency ‘Fs’ must be at least 550 Hz for this filter to work. It has a passband ripple of 1 dB (that is irrelevant here with a Chebyshev Type II filter) and a stopband attenuation of 50 dB. Change those as necessary.


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!