High Pass and Low Pass Filters

Algorithm development and general DSP issues

Moderator: frank

Aaron
Posts: 54
Joined: Wed Mar 04, 2015 8:10 pm
Location: Oklahoma

High Pass and Low Pass Filters

Post 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!
frank
Posts: 1244
Joined: Wed Oct 19, 2005 12:26 pm
Contact:

Post by frank »

Read all the sections in this area: http://spinsemi.com/knowledge_base.html
Frank Thomson
Experimental Noize
Aaron
Posts: 54
Joined: Wed Mar 04, 2015 8:10 pm
Location: Oklahoma

Post 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.
gfisys
Posts: 28
Joined: Wed Dec 14, 2011 7:39 pm
Location: Indonesia
Contact:

Re: High Pass and Low Pass Filters

Post 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)
Digital Larry
Posts: 338
Joined: Mon Nov 12, 2012 1:12 pm
Contact:

Re: High Pass and Low Pass Filters

Post 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
gfisys
Posts: 28
Joined: Wed Dec 14, 2011 7:39 pm
Location: Indonesia
Contact:

Re: High Pass and Low Pass Filters

Post 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
Aaron
Posts: 54
Joined: Wed Mar 04, 2015 8:10 pm
Location: Oklahoma

Post by Aaron »

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

This equation is working much better! Thanks gfisys! :D
MacroMachines
Posts: 71
Joined: Fri Dec 12, 2014 10:45 pm
Location: Detroit,MI
Contact:

Post 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
http://MacroMachines.net
Digital Control for your Analog Soul.
Digital Larry
Posts: 338
Joined: Mon Nov 12, 2012 1:12 pm
Contact:

Post 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.
MacroMachines
Posts: 71
Joined: Fri Dec 12, 2014 10:45 pm
Location: Detroit,MI
Contact:

Post 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.
http://MacroMachines.net
Digital Control for your Analog Soul.
frank
Posts: 1244
Joined: Wed Oct 19, 2005 12:26 pm
Contact:

Post 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.
Frank Thomson
Experimental Noize
MacroMachines
Posts: 71
Joined: Fri Dec 12, 2014 10:45 pm
Location: Detroit,MI
Contact:

Post 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
http://MacroMachines.net
Digital Control for your Analog Soul.
Sweetalk
Posts: 141
Joined: Thu Oct 15, 2009 5:13 am

Re: High Pass and Low Pass Filters

Post 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?
frank
Posts: 1244
Joined: Wed Oct 19, 2005 12:26 pm
Contact:

Post by frank »

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: 141
Joined: Thu Oct 15, 2009 5:13 am

Post 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
Post Reply