Digital Low Pass Filter

For Flowcode users to discuss projects, flowcharts, and any other issues related to Flowcode 2 and 3.

Moderators: Benj, Mods

Post Reply
keeweet
Posts: 2
Joined: Mon Jun 22, 2009 6:52 pm
Contact:

Digital Low Pass Filter

Post by keeweet »

Hello,

Would anyone here know how to create a digital lowpass filter? I wanted to use one for audio processing on a Pic12f

Thanks

-K

User avatar
Benj
Matrix Staff
Posts: 15312
Joined: Mon Oct 16, 2006 10:48 am
Location: Matrix TS Ltd
Has thanked: 4803 times
Been thanked: 4314 times
Contact:

Re: Digital Low Pass Filter

Post by Benj »

Hello

Could you not just use a Pf or Nf ceramic cap to provide your low pass filter effect.

Jaspervdw
Posts: 12
Joined: Fri Dec 12, 2008 4:45 pm
Been thanked: 3 times
Contact:

Re: Digital Low Pass Filter

Post by Jaspervdw »

Hey,

You could use an IIR-filter. IIR ask a litle CPU from the chip.
At the site: http://www-users.cs.york.ac.uk/~fisher/ ... /trad.html you can design your filter.
Here is a little guide to use the site:
1) For audio you choose the "Butterworth" filter (this has a flat passband). The you choose the type of filter.
2) leave this empty.
3) In order you choose the selectivity of the filer. Per oder you'll make the filter more selective with 20dB/dec.
4) sample rate. How fast dou you sample the audio?
5) Enter the frequency's. Read the text there.
6) Leave this empty
7) Leave this empty
8) Leave this empty
9) Select query verzenden.

Then you come at a new page. This are the results.
What you need is from the results: Recurrence relation.

Example: With a High pass filter at 2000 Hz the eduqaution is:
y[n] = ( 1 * x[n- 2])+( -2 * x[n- 1])+( 1 * x[n- 0])+( -0.6683689946 * y[n- 2])+( 1.6010923942 * y[n- 1])

Were x[n] is the input and y[n] is the output.

Here you'll need a buffer 3 times the input and 3 times the input.
There is also a C example code.
If you can't make it work I will help you further.
Greetings

User avatar
Benj
Matrix Staff
Posts: 15312
Joined: Mon Oct 16, 2006 10:48 am
Location: Matrix TS Ltd
Has thanked: 4803 times
Been thanked: 4314 times
Contact:

Re: Digital Low Pass Filter

Post by Benj »

This sound's very interesting,
If you give it a go I would like to know how you get on.

I have one or two doubts such as can you run these sort of calculations on a PIC fast enough for the filter to work effectivly? There is a lot of floating point maths calculations there.

I can see this being a very handy little equasion for an AVR or ARM device.

Jaspervdw
Posts: 12
Joined: Fri Dec 12, 2008 4:45 pm
Been thanked: 3 times
Contact:

Re: Digital Low Pass Filter

Post by Jaspervdw »

Of the Speed I Have absolutly no idea. You can lower the order of the filter to decrease the number of calculations.

keeweet
Posts: 2
Joined: Mon Jun 22, 2009 6:52 pm
Contact:

Re: Digital Low Pass Filter

Post by keeweet »

Jasper,

thanks for the link, and for making sense of the calculations also... I was planning to use this for a pic 12f685 running @ 8MHZ (it will do this exclusively) I'll load it up and see if I can't get away with it. :)



-K

edward
Posts: 5
Joined: Thu Jul 09, 2020 10:22 am
Contact:

Re: Digital Low Pass Filter

Post by edward »

Hi guys.
I want to convert below C code to FC8 charts but dont know how to do it. Can someone help.
This is butterworth filter generated by Win Filter software.
Many thanks.


#define NCoef 4
float iir(float NewSample) {
float ACoef[NCoef+1] = {
0.01020853419306819500,
0.04083413677227278000,
0.06125120515840917100,
0.04083413677227278000,
0.01020853419306819500
};

float BCoef[NCoef+1] = {
1.00000000000000000000,
-1.96842778693851760000,
1.73586070920888560000,
-0.72447082950736208000,
0.12038959989624438000
};

static float y[NCoef+1]; //output samples
static float x[NCoef+1]; //input samples
int n;

//shift the old samples
for(n=NCoef; n>0; n--) {
x[n] = x[n-1];
y[n] = y[n-1];
}

//Calculate the new output
x[0] = NewSample;
y[0] = ACoef[0] * x[0];
for(n=1; n<=NCoef; n++)
y[0] += ACoef[n] * x[n] - BCoef[n] * y[n];

return y[0];
}

Post Reply