design filter to implement in microcontroller

조회 수: 8 (최근 30일)
Eyal Sasson
Eyal Sasson 2022년 10월 16일
댓글: Star Strider 2022년 10월 17일
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!

채택된 답변

Star Strider
Star Strider 2022년 10월 17일
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
Eyal Sasson
Eyal Sasson 2022년 10월 17일
thank you very much, i have succefuly succeded to implement the filter (:
Star Strider
Star Strider 2022년 10월 17일
As always, my pleasure!
Congratulations!
If you believe it would be appropriate to share your results, please post them (or a link to them).

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Jan
Jan 2022년 10월 16일
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
Eyal Sasson
Eyal Sasson 2022년 10월 17일
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 2022년 10월 17일
Then you have to insert the code to obtain the next value into the loop for filtering.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Digital Filter Design에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by