High Pass and Low Pass Filters

Algorithm development and general DSP issues

Moderator: frank

Aaron
Posts: 46
Joined: Wed Mar 04, 2015 7:10 pm
Location: Oklahoma

High Pass and Low Pass Filters

Post by Aaron » Fri Mar 06, 2015 7:02 am

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!

frank
Posts: 991
Joined: Wed Oct 19, 2005 12:26 pm
Contact:

Post by frank » Fri Mar 06, 2015 8:15 am

Read all the sections in this area: http://spinsemi.com/knowledge_base.html
Frank Thomson
Experimental Noize

Aaron
Posts: 46
Joined: Wed Mar 04, 2015 7:10 pm
Location: Oklahoma

Post by Aaron » Fri Mar 06, 2015 10:01 am

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.

gfisys
Posts: 23
Joined: Wed Dec 14, 2011 6:39 pm
Location: Indonesia
Contact:

Re: High Pass and Low Pass Filters

Post by gfisys » Fri Mar 06, 2015 5:36 pm

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)

Digital Larry
Posts: 279
Joined: Mon Nov 12, 2012 12:12 pm
Contact:

Re: High Pass and Low Pass Filters

Post by Digital Larry » Sat Mar 07, 2015 8:19 am

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

gfisys
Posts: 23
Joined: Wed Dec 14, 2011 6:39 pm
Location: Indonesia
Contact:

Re: High Pass and Low Pass Filters

Post by gfisys » Sat Mar 07, 2015 4:44 pm

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

Aaron
Posts: 46
Joined: Wed Mar 04, 2015 7:10 pm
Location: Oklahoma

Post by Aaron » Tue Mar 10, 2015 6:28 am

RDFXcoeff = 1 - exp(-2*pi * Freq / 32768)

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

MacroMachines
Posts: 71
Joined: Fri Dec 12, 2014 9:45 pm
Location: Detroit,MI
Contact:

Post by MacroMachines » Wed Jul 06, 2016 11:08 am

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
http://MacroMachines.net
Digital Control for your Analog Soul.

Digital Larry
Posts: 279
Joined: Mon Nov 12, 2012 12:12 pm
Contact:

Post by Digital Larry » Thu Jul 07, 2016 12:20 pm

You can't make an adjustable filter with RDFX. It is for fixed filters. So you calculate the coefficient ahead of time.

MacroMachines
Posts: 71
Joined: Fri Dec 12, 2014 9:45 pm
Location: Detroit,MI
Contact:

Post by MacroMachines » Thu Jul 07, 2016 11:29 pm

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.
http://MacroMachines.net
Digital Control for your Analog Soul.

frank
Posts: 991
Joined: Wed Oct 19, 2005 12:26 pm
Contact:

Post by frank » Fri Jul 08, 2016 4:50 pm

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.
Frank Thomson
Experimental Noize

MacroMachines
Posts: 71
Joined: Fri Dec 12, 2014 9:45 pm
Location: Detroit,MI
Contact:

Post by MacroMachines » Mon Jul 11, 2016 2:32 am

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
http://MacroMachines.net
Digital Control for your Analog Soul.

Sweetalk
Posts: 96
Joined: Thu Oct 15, 2009 5:13 am

Re: High Pass and Low Pass Filters

Post by Sweetalk » Thu Aug 18, 2016 11:43 am

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?

frank
Posts: 991
Joined: Wed Oct 19, 2005 12:26 pm
Contact:

Post by frank » Fri Aug 19, 2016 8:53 am

What sample rate are you running at? If different than 32768 you need to use it instead of 32768 in the equations.
Frank Thomson
Experimental Noize

Sweetalk
Posts: 96
Joined: Thu Oct 15, 2009 5:13 am

Post by Sweetalk » Fri Aug 19, 2016 2:09 pm

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

Post Reply