Filter löschen
Filter löschen

design filter to implement in microcontroller

6 Ansichten (letzte 30 Tage)
Eyal Sasson
Eyal Sasson am 16 Okt. 2022
Kommentiert: Star Strider am 17 Okt. 2022
Hello :)
I want to design a filter that attenuate some frequencies and has minimun delay to the signal.
I'm building quacoopter controller, and I want to design a IIR or FIR filter to implement later in C code in the microcontroller.
is there some exaple or explanation on how could i desgin the filter and implement it in C code?
Thank you very much!

Akzeptierte Antwort

Star Strider
Star Strider am 17 Okt. 2022
An IIR filter would be more efficient, and an elliptic filter the most efficient of those. The designfilt function may be the easiest way to create the filter you want, however it outputs a digitalFilter object that is a second-order-section implementation of the filter, not a transfer function, so it would then require the sos2tf function.
Since you want a transfer function, another way to design the filter using command-line functions would be something like this —
Fs = 1000; % Sampling Frequency (Hz)
Fn = Fs/2; % Nyquist Frequency (Hz)
Wp = 100/Fn; % Passband Frequency (Normalised)
Ws = 110/Fn; % Stopband Frequency (Normalised)
Rp = 1; % Passband Ripple (Attenuation)
Rs = 60; % Stopband Ripple (Attenuation)
[n,Wn] = ellipord(Wp,Ws,Rp,Rs); % Calculate Optimal Filter Order
[b,a] = ellip(n,Rp,Rs,Wp,'low') % Transfer Function
b = 1×9
0.0025 -0.0094 0.0198 -0.0279 0.0313 -0.0279 0.0198 -0.0094 0.0025
a = 1×9
1.0000 -6.5233 19.4448 -34.4236 39.4818 -29.9978 14.7365 -4.2805 0.5636
figure
freqz(b,a, 2^16, Fs) % Filter Bode Plot
See ellipord and ellip for more information.
Explore the available options to design the filter you want.
.
  4 Kommentare
Eyal Sasson
Eyal Sasson am 17 Okt. 2022
thank you very much, i have succefuly succeded to implement the filter (:
Star Strider
Star Strider am 17 Okt. 2022
As always, my pleasure!
Congratulations!
If you believe it would be appropriate to share your results, please post them (or a link to them).

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Jan
Jan am 16 Okt. 2022
You find C code implementation of filter() here: https://www.mathworks.com/matlabcentral/fileexchange/32261-filterm
Do you want to rewrite the tool to design of the filter parameters also?
  2 Kommentare
Eyal Sasson
Eyal Sasson am 17 Okt. 2022
I don't want to rewrite the tool, just to find the filter coefficients according to my sampling frequency and cut-off frequency desired, and then use this to get a differece equation in order to write a C function that gets the current sampled variable and calculates the next output.
I saw that in the example you shared the function gets the full vector of x but my system will run in real-time so each time ill send the next input to get the next output. how can I implement this? I'm new to designing filters in MatLab so sorry if the answer is obvious. thanks for the help(:
Jan
Jan am 17 Okt. 2022
Then you have to insert the code to obtain the next value into the loop for filtering.

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by