Page 1 of 2

High Pass and Low Pass Filters

Posted: Fri Mar 06, 2015 8:02 am
by Aaron
I have been spending the last few days trying to understand how to do simple low pass and high pass filters. So far, I believe I understand how the low pass filtering is accomplished but I am baffled as to how to create a HPF.

Based on this post http://www.spinsemi.com/forum/viewtopic ... ass+filter by Digital Larry I have come to understand that for LPF, the coefficient for RDFX is related to the frequency in the following way:

RDFXcoeff = Freq/(32768/2pi)

So for a cutoff frequency of 72Hz would look something like:

ldax adcl
rdfx LPF, 0.0138
wrax LPF,1
wrax dacl,0

This seems to make sense and works, as far as I can tell.

For high pass, I believe that the WRHX command is needed but I am not sure how to implement it.

If anyone could shine a little light on the subject it would be much appreciated. Thanks!

Posted: Fri Mar 06, 2015 9:15 am
by frank
Read all the sections in this area: http://spinsemi.com/knowledge_base.html

Posted: Fri Mar 06, 2015 11:01 am
by Aaron
So from what I gather then, for a hpf all I would need is:

ldax adcl
rdfx hpf,0.00125
wrhx hpf,-1
wrax dacl,0


But whenever I try this code it sure doesn't sound like a HPF.

Re: High Pass and Low Pass Filters

Posted: Fri Mar 06, 2015 6:36 pm
by gfisys
Aaron wrote:I have been spending the last few days trying to understand how to do simple low pass and high pass filters. So far, I believe I understand how the low pass filtering is accomplished but I am baffled as to how to create a HPF.

Based on this post http://www.spinsemi.com/forum/viewtopic ... ass+filter by Digital Larry I have come to understand that for LPF, the coefficient for RDFX is related to the frequency in the following way:

RDFXcoeff = Freq/(32768/2pi)

So for a cutoff frequency of 72Hz would look something like:

ldax adcl
rdfx LPF, 0.0138
wrax LPF,1
wrax dacl,0

This seems to make sense and works, as far as I can tell.

For high pass, I believe that the WRHX command is needed but I am not sure how to implement it.

If anyone could shine a little light on the subject it would be much appreciated. Thanks!

You got the equation wrong, the correct one is
RDFXcoeff = 1 - exp(-2*pi * Freq / 32768)

Re: High Pass and Low Pass Filters

Posted: Sat Mar 07, 2015 9:19 am
by Digital Larry
gfisys wrote: You got the equation wrong, the correct one is
RDFXcoeff = 1 - exp(-2*pi * Freq / 32768)
Is that for HPF only or both HPF and LPF?

Thx,

DL

Re: High Pass and Low Pass Filters

Posted: Sat Mar 07, 2015 5:44 pm
by gfisys
Digital Larry wrote:
gfisys wrote: You got the equation wrong, the correct one is
RDFXcoeff = 1 - exp(-2*pi * Freq / 32768)
Is that for HPF only or both HPF and LPF?

Thx,

DL
Both HP & LP

Posted: Tue Mar 10, 2015 6:28 am
by Aaron
RDFXcoeff = 1 - exp(-2*pi * Freq / 32768)

This equation is working much better! Thanks gfisys! :D

Posted: Wed Jul 06, 2016 11:08 am
by MacroMachines
how do you code RDFXcoeff = 1 - exp(-2*pi * Freq / 32768) in spinASM? Im a bit lost as to how to do complex math and how to use the exp instruction, I don't seem to get anything from it when I ran it on a pot for testing

Posted: Thu Jul 07, 2016 12:20 pm
by Digital Larry
You can't make an adjustable filter with RDFX. It is for fixed filters. So you calculate the coefficient ahead of time.

Posted: Thu Jul 07, 2016 11:29 pm
by MacroMachines
Digital Larry wrote:You can't make an adjustable filter with RDFX. It is for fixed filters. So you calculate the coefficient ahead of time.
are you sure about that? it doesn't state this in the manual anywhere. Im going to try this now and see. not hard to swap it out for a register based IIR filter if it doesn't work.

Posted: Fri Jul 08, 2016 4:50 pm
by frank
For RDFX the coefficient is part of the instruction so you cannot use a POT input with it. You would need to code it differently if you want to use a pot to control filter cutoff.

Posted: Mon Jul 11, 2016 2:32 am
by MacroMachines
Thank you :)
I realized after posting that there was no way to use a register to modify the coefficient. It looks like it doesn't take many more instructions to do a filter with pot controlled cutoff though, so that's good :D

Re: High Pass and Low Pass Filters

Posted: Thu Aug 18, 2016 11:43 am
by Sweetalk
gfisys wrote:
Aaron wrote:I have been spending the last few days trying to understand how to do simple low pass and high pass filters. So far, I believe I understand how the low pass filtering is accomplished but I am baffled as to how to create a HPF.

Based on this post http://www.spinsemi.com/forum/viewtopic ... ass+filter by Digital Larry I have come to understand that for LPF, the coefficient for RDFX is related to the frequency in the following way:

RDFXcoeff = Freq/(32768/2pi)

So for a cutoff frequency of 72Hz would look something like:

ldax adcl
rdfx LPF, 0.0138
wrax LPF,1
wrax dacl,0

This seems to make sense and works, as far as I can tell.

For high pass, I believe that the WRHX command is needed but I am not sure how to implement it.

If anyone could shine a little light on the subject it would be much appreciated. Thanks!

You got the equation wrong, the correct one is
RDFXcoeff = 1 - exp(-2*pi * Freq / 32768)
Seems to work fine but there's a lot of error in low and high frequencies.

For example, for 600Hz, according to the ecuation the RDFXCoefficient is 0.108677. Measuring the -3dB point with an oscilloscope the cutoff frequency is 700Hz. Had to manually adjust it to 0.1050.

And for 5.8KHz the coef is 0.677 but in the oscilloscope is really 3.5KHz.

There's any explanation to this?, some correction is needed?

Posted: Fri Aug 19, 2016 8:53 am
by frank
What sample rate are you running at? If different than 32768 you need to use it instead of 32768 in the equations.

Posted: Fri Aug 19, 2016 2:09 pm
by Sweetalk
frank wrote:What sample rate are you running at? If different than 32768 you need to use it instead of 32768 in the equations.
32768Hz, I'm aware of the sample rate and it's impact on the equations