How to filter a signal with a transfer function?
    57 views (last 30 days)
  
       Show older comments
    
    Ana Gabriela Guedes
 on 26 May 2021
  
    
    
    
    
    Commented: Star Strider
      
      
 on 27 May 2021
            Hi! 
I have a discrete signal (a vector with many values) I want to filter using a low pass filter but I only have the tranfer function in the  form. How can I do this since the common filter functions dont use
  form. How can I do this since the common filter functions dont use  transforms?
 transforms?
 form. How can I do this since the common filter functions dont use
  form. How can I do this since the common filter functions dont use  transforms?
 transforms?0 Comments
Accepted Answer
  Star Strider
      
      
 on 26 May 2021
        The easiest approach is to first let the Control System Toolbox solve it, then realise it as a discrete filter using the numerator and denominator vectors — 
z = tf('z');
H = (1-z^-6)^2 / (1-z^-1)^2
Num = H.Numerator
Den = H.Denominator
figure
freqz(Num{:}, Den{:}, 2^16)
Use ‘Num{:}’ and ‘Den{:}’ with filtfilt to filter the signal.  
Remember that it will be necessary to define a sampling interval, ‘Ts’ where ‘Ts=1/Fs’ where ‘Fs’ is the sampling frequency.  
.
2 Comments
  Star Strider
      
      
 on 27 May 2021
				No, use the filtfilt function to filter ‘x’.  
Assuming that the sampling interval or sampling frequency is defined in the first tf call: 
Fs = 1000;                                          % Define Sampling Frequency
Ts = 1/Fs;
z = tf('z',Ts);
H = (1-z^-6)^2 / (1-z^-1)^2
Num = H.Numerator
Den = H.Denominator
figure
freqz(Num{:}, Den{:}, 2^16, Fs)
x = [-233....-667]
x_filtered = filtfilt(Num{:}, Den{:}, x)
and go from there.  
.
More Answers (0)
See Also
Categories
				Find more on Multirate Signal Processing in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


