View previous topic :: View next topic |
Author |
Message |
ressas
Joined: 15 Nov 2019 Posts: 135
|
Software LPF |
Posted: Thu Jun 25, 2020 8:31 am |
|
|
Hello to everyone.
I want to make lpf software. However, I would like to know what you know about HPF and Bpf.
Below Steves shared a post. Thank you to him. But is lpf as simple as shown here?
As I understand it; (1 new data + 3 old data) / 4.
How many hertz is the frequency filtered here?
Actually, what I'm trying to do is write an lpf function.
void lpf (frequency) {
.......
}
I would be glad if you help me in this regard.
Best regards.
http://www.ccsinfo.com/forum/viewtopic.php?t=19509&highlight=filter
Quote: |
===== Low Pass Filter =====
A really simple low pass filter that approximates a single pole (R-C) analog filter:
Out0 = a * In0 + b * Out1
where a + b = 1.0 (a and b are fractions > 0 and < 1)
This is an IIR filter since it uses past outputs. Basically it averages the new input with last output. The smaller the 'a' term is, the slower the response of the filter. If you use constants divisible by a power of two it is a very fast calculation. A good starting point is to set a = 1/4 and b = 3/4:
Out0 = (In0 + Out1 + Out1 + Out1) / 4;
|
|
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19496
|
|
Posted: Thu Jun 25, 2020 10:12 am |
|
|
Problem is that doing a 'generic' filter, without knowing the parameters
at compile time, involves a lot of maths. There is an example using a
PIC that has a built in hardware lpf, in ex_lowpass_filter_adc2.c, and
one doing audio, but using a DsPIC in ex_fft_filter.c.
Honestly the best way to approach the other filter types is to look at
the fft solutions. All the examples of these use the DsPIC's to get the
performance needed.
To do hpf requires much higher frequency sampling than the lpf.
Last edited by Ttelmah on Thu Jun 25, 2020 11:42 am; edited 1 time in total |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9221 Location: Greensville,Ontario
|
|
Posted: Thu Jun 25, 2020 10:41 am |
|
|
Mr T is right, again.
'Generic' LPF....really need to know frquencies involved as well as which PIC. You can create LPF for any PIC but one with a DAC has obvious benfits. Microchip has an apnote( 2 decade+ago) about doing FFT, in assembler of course. Modified, it was the basis of a 'glass break detector' used to replace PIR sensors.
Speed is essential !You'll probably need a PIC clocked at 32-64MHz if you're doing 'other stuff' as well as filters. |
|
|
bkamen
Joined: 07 Jan 2004 Posts: 1615 Location: Central Illinois, USA
|
|
Posted: Thu Jun 25, 2020 11:50 am |
|
|
Ttelmah wrote: | All the examples of these use the DsPIC's to get the performance needed. |
Yes. the dsPIC series is the way to go. And NOT the PIC24. The difference between the two is the dsPIC specifically have DSP style instructions in the processor.
You'll want to look at:
https://www.microchip.com/design-centers/16-bit for more information.
(if you haven't already) _________________ Dazed and confused? I don't think so. Just "plain lost" will do. :D |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19496
|
|
Posted: Thu Jun 25, 2020 1:10 pm |
|
|
Yes, and the fft example from CCS, does use the DSP abilities. |
|
|
ressas
Joined: 15 Nov 2019 Posts: 135
|
|
Posted: Fri Jun 26, 2020 3:06 am |
|
|
As I understand it, LPF means multiplying with different coefficients.
I will not work at high frequencies. Maximum 60 hz. So I think I don't have to work with dspic.
How to start using appropriate coefficients and using ADC in a program like Matlab?
I looked at the function in the link you provided. But I want to design it myself.
Let it be plain and let me understand the logic. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19496
|
|
Posted: Fri Jun 26, 2020 6:22 am |
|
|
Even at 60Hz, if you want to do a high pass filter, If you had a waveform
that has high frequency components (remember a square wave has HF
components extending up to infinity!..), you would need to be sampling
well above this frequency, and the maths is huge.
With FFT, you are calculating the frequency components needed to 'build'
the waveform you have. Even a basic FFT algorithm (example here):
<http://www.ccsinfo.com/forum/viewtopic.php?t=54587&highlight=fft>
Involves performing sin & cos calculations on the data.
Now, you talk about a lpf, and an hpf. Both of these would involve
performing the FFT in 'realtime'. You are underestimating enormously
just how much is involved in doing this. Even on a 40MHz PIC18, a
sin takes nearly 700uSec. You are performing two of these each time
round the FFT loop, and a minimum of 6 loops per data point. Several
mSec per point. Doesn't give you much time...
A non realtime 'test' to verify what frequencies are in a signal, yes. But
realtime (even on low frequency data), no. |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9221 Location: Greensville,Ontario
|
|
Posted: Fri Jun 26, 2020 6:55 pm |
|
|
re: FFT ... download and read Microchip APnote AN00542c.
While the code is in assembly language for the 17C42, it's easy enough to translate into C though I suspect C versions exist.
Obviously much better (faster ,more memory,etc) PICs can be used but the apnote does show what can be done.
I imagine you could fill a library with FFT info......a LOT depends upon what you need the PIC to actually do. |
|
|
|