Plotting different filtering functions WITH DATA

Hi everyone,
I'm trying to filter an ECG signal but I am unsure how to filter the data and then plot the filter with my own data using the parameters set. I know that fvtool and freqz can plot the magnitude and phase but I can't figure out how to plot the filter on my data (yes I've tried using plot! :) ) I've used a ton of different filtering techniques and my latest can be seen below (taken from a previous post). Can I use "plot" to plot my data with this filter and if so how? Please let me know as I am desperate!!! Thank you in advance.
Fs = 2000; % Sampling Frequency
Fn = Fs/2; % Nyquist Frequency
Wp = [2 100]/Fn; % Filter Passband (Normalised)
Ws = Wp .* [0.5 1.2]; % Filter Stopband (Normalised)
Rp= 1;
Rs= 50;
[n,Ws] = cheb2ord(Wp,Ws,Rp,Rs);
[b,a] = cheby2(n, Rs, Ws);
[sos,g] = tf2sos(b,a);
%figure(1)
%freqz(sos, 1024, Fs)

 Respuesta aceptada

Star Strider
Star Strider el 18 de Jun. de 2019
Can I use "plot" to plot my data with this filter and if so how?
Yes. It depends on what you want to plot.
To plot your filtered data as a function of time, and if ‘t’ is your time vector, and ‘data’ is your data vector:
filtered_data = filtfilt(sos, g, data);
figure
plot(t, filtered_data)
grid

4 comentarios

Kathleen Nicole Rice
Kathleen Nicole Rice el 18 de Jun. de 2019
Editada: Kathleen Nicole Rice el 18 de Jun. de 2019
For some reason when I plot this nothing shows up on the graph. Below is the full code I have currently. There is no usable time t variable because of the software we use and how it counts time on a repetitive scale so I have previously just plotted just saying "plot(filter_x11)" and it has worked. I am not sure why nothing is being plotted since all of the variables are there and working.
Fs = 2000; % Sampling Frequency
Fn = Fs/2; % Nyquist Frequency
Wp = [2 100]/Fn; % Filter Passband (Normalised)
Ws = Wp .* [0.5 1.2]; % Filter Stopband (Normalised)
Rp= 1;
Rs= 50;
[n,Ws] = cheb2ord(Wp,Ws,Rp,Rs);
[b,a] = cheby2(n, Rs, Ws);
[sos,g] = tf2sos(b,a);
%figure(1)
%freqz(sos, 1024, Fs)
filtered_data = filtfilt(sos, g, filter_x11); %filter_x11 is
% previously filtered ecg data with 60Hz notch filters
figure
plot(filtered_data)
A problem with transfer function representation is that your filters do not always do what you believe they are doing. That’s the reason the zero-pole-gain and second-order-section representation is best.
Try this instead:
[z,p,k] = cheby2(n, Rs, Ws);
[sos,g] = zp2sos(z,p,k);
That worked with the random signal I used for ‘filter_x11’.
Also, I appreciate your quoting my code. My later code using ellliptical filters is significantly better than my eariler code.
It works! Thank you so much- you have been extremely helpful! :)
Star Strider
Star Strider el 19 de Jun. de 2019
As always, my pleasure!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Productos

Versión

R2018b

Preguntada:

el 18 de Jun. de 2019

Comentada:

el 19 de Jun. de 2019

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by