From: Xplosiv166 on
>Xplosiv166 wrote:
>>> On 3 Nov, 19:15, "Xplosiv166" <andrew_...(a)blueyonder.co.uk> wrote:
>>>> Hi,
>>>>
>>>> I am looking to implement the following filter in either C, C#.Net
or
>>>> Visual Basic.Net.
>>>>
>>>> Type: =A0 =A0 =A0 =A0 =A0 =A0 =A0 - Low Pass FIR
>>>> Sampling Frequency: - 480Hz (10Bit ADC Values from a microprocessor)
>>>> Number of TAPs: =A0 =A0 - 51
>>>> Cut-off frequency: =A0- 30Hz
>>>> Window: =A0 =A0 =A0 =A0 =A0 =A0 - Kaiser
>>>>
>>>> Basically this is a filter that somebody has proved using LabView
and
>> I
>>>> need to write a similar filter in the either of the above languages.
>>> If you need to replicate what others have already done in LabView,
>>> the main concern is to get hold of a copy of the filter coefficients
>>> that whoever have shown to work in the application.
>>>
>>> Once you have the coefficients, the filer itself is a simple loop
>>> (pseudo code inspired by matlab):
>>>
>>> x =3D vector of N input samples
>>> y =3D zeros(N+50);
>>> h =3D 50 filter coeffficients
>>>
>>> for n=3D0:(N-1+50)
>>> for k =3D 0:50
>>> y(n)=3D y(n)+h(k)*x(n-k);
>>> end
>>> end
>>>
>>> Don't take this too literally - I have ignored end effects, proof
>>> reading and testing.
>>>
>>> However, once you have the filter coefficients h, the filter is
>>> only marginally more complicated than shown. No need for FFTs or
>>> IFFTs.
>>> The FFT / IFFT pair speed computations up in offline applications,
>>> but tend to complicate matters in online applications. They are
>>> convenient, but not essential.
>>>
>>> Newbies can just stick with the simple loop like above. The main
>>> problem with fixed-point arithemtic will likely not be speed, but
>>> numerical inaccuracy issues.
>>>
>>> Rune
>>>
>>
>> Hi Rune,
>>
>> Thank you for you response it was very helpful.
>>
>> Question is the window in this case Kaiser part of the filter
coefficients
>> ? or is it part of the filter calculation loop (like in you example
above)
>>
>> Also how hard would it be for me to design the above filter myself? I
>> don't have any design tools although I think i have a students copy of
>> Matlab 6.5 somewhere around although this would be no good for
commercial
>> applications.
>>
>> As i am not sure if I can actual get the coefficients, the filter does
not
>> have to be a perfect match to the one above.
>>
>> Also Can somebody please explain ((if they have time) why one would use
a
>> window and why would you use a Kaiser window specifically?
>
>The shaping window will usually be part of the given coefficients. The
>capculations will certainly be done that way. You can ask when you get
>the coefficients whether they have been windowed or not.
>
> From what you wrote, the filter was designed according to the "windowed

>sinc" method. The choice of window sets the stop-band attenuation,
>passband ripple, and band-edge sharpness. More sophisticated windows
>improves the first two and worsens the last. A few more taps get that
>performance back.
>
>A window increases the stop-band attenuation
>
>If, in the end, you need to derive the coefficients yourself, ignore all

>that and use a filter-design program that iteratively calculates optimum

>coefficients with whatever cut-off sharpness, stop-band attenuation, and

>passband ripple is specified. You can use a free trial version of
>ScopeFIR form http://www.iowegian.com/ to calculate the coefficients.
>
>A low-pass with a cutoff frequency that is such a small fraction of the
>sample frequency is best done with an IIR unless there is a particular
>reason to use an FIR filter. Was that considered?
>
>Jerry
>--
>Engineering is the art of making what you want from things you can get.
>�����������������������������������������������������������������������
>

Hi Jerry,

Thank you for your response.

The person who designed the filter supposedly knew what they were doing,
but i am not convinced as they seem not to be able to supply me with the
coefficients or the Kaiser Beta value used so that i could at least have a
fighting chance at designing it myself.

The signal I am looking at is between 1 and 6 Hz pulses, but as the
hardware has limited filtering there is allot of mains (50Hz as i am in the
UK) noise and the harmonics of and over that there is allot of low
amplitude high frequency noise. I have tested the filter mentioned above in
LabView and it seems to work well but cannot access the filter design
it's self as I am viewing it through a LV GUI.

>A low-pass with a cutoff frequency that is such a small fraction of the
>sample frequency is best done with an IIR unless there is a particular
>reason to use an FIR filter. Was that considered?

I originally was using a very basic single pole IIR filter which worked
but not well enough, I am no DSP engineer but it is looking more and more
like i will need to design the filter myself, on a plus point i have Matlab
6.5 and simulink working which i can use to calculate the coefficients
using the filter designer if only i knew what i was doing.

This is a very basic mspaint attempt at drawing the signal and before and
after filtering

http://andy166.pwp.blueyonder.co.uk/Signal.jpg

Is there any example code written in C/C++ that uses an array of
coefficients and calculates the output from an array of inputs that I can
use (i.e. the FIR filter)? Then i can test my filters out.

Thanks again for your/every bodies help on this,
Xplosiv166

From: Jerry Avins on
Xplosiv166 wrote:

...

> The person who designed the filter supposedly knew what they were doing,
> but i am not convinced as they seem not to be able to supply me with the
> coefficients or the Kaiser Beta value used so that i could at least have a
> fighting chance at designing it myself.

He couldn't assess the adequacy of the filter without testing it at
least to th point of producing a frequenct-response curve. That requires
knowing the values of the windowed coefficients. If he never knew them,
then his design is by estimation and untested.

> The signal I am looking at is between 1 and 6 Hz pulses, but as the
> hardware has limited filtering there is allot of mains (50Hz as i am in the
> UK) noise and the harmonics of and over that there is allot of low
> amplitude high frequency noise. I have tested the filter mentioned above in
> LabView and it seems to work well but cannot access the filter design
> it's self as I am viewing it through a LV GUI.

The links I provided can get you the coefficients and a response plot.

>> A low-pass with a cutoff frequency that is such a small fraction of the
>> sample frequency is best done with an IIR unless there is a particular
>> reason to use an FIR filter. Was that considered?
>
> I originally was using a very basic single pole IIR filter which worked
> but not well enough, I am no DSP engineer but it is looking more and more
> like i will need to design the filter myself, on a plus point i have Matlab
> 6.5 and simulink working which i can use to calculate the coefficients
> using the filter designer if only i knew what i was doing.

It should be no trick to design an eighth-order FIR Chebychev filter
that will do your job very well. The aJava ap is set for 8 KHz sample
rate. Just ratio the cutoff you want and it serve.

> This is a very basic mspaint attempt at drawing the signal and before and
> after filtering
>
> http://andy166.pwp.blueyonder.co.uk/Signal.jpg
>
> Is there any example code written in C/C++ that uses an array of
> coefficients and calculates the output from an array of inputs that I can
> use (i.e. the FIR filter)? Then i can test my filters out.

I don't have one. It shouldn't be hard to write once a program gives you
the coefficients.

Jerry
--
Engineering is the art of making what you want from things you can get.
From: Richard Dobson on
Xplosiv166 wrote:
...
>
> http://andy166.pwp.blueyonder.co.uk/Signal.jpg
>
> Is there any example code written in C/C++ that uses an array of
> coefficients and calculates the output from an array of inputs that I can
> use (i.e. the FIR filter)? Then i can test my filters out.
>


See if you can find a copy of the book "Introductory Digital Signal
Processing" by Lynn and Fuerst:

http://www.amazon.co.uk/Introductory-Digital-Signal-Processing-disk

It has (to my non-specialist eye) very clear explanations, and example
code. The first edition (which I have and still refer to) used Basic and
Pascal, the second edition uses C instead of BASIC.

There is a whole lot of code in open-source audio/music tools such as
Csound (including code to make Kaiser windows; widely used in phase
vocoders). A filter is a filter, and it doesn't matter if your own
application isn't "musical" as such; the requirements are much the same.

Richard Dobson


From: Fully Half Baked on
I'm sure there's an online filter calculator that gives out a C style
difference equation but I can't remember which one it is. I have a
free program called WinFilter that gives out C code. I'm not sure how
good it is for designing filters but it can give you an idea of how to
use coefficients in your code.
Stephen Smiths book http://www.dspguide.com/pdfbook.htm is pretty good
for a beginner and includes pseudo code in basic (whatever that is).
From: Xplosiv166 on
>I'm sure there's an online filter calculator that gives out a C style
>difference equation but I can't remember which one it is. I have a
>free program called WinFilter that gives out C code. I'm not sure how
>good it is for designing filters but it can give you an idea of how to
>use coefficients in your code.
>Stephen Smiths book http://www.dspguide.com/pdfbook.htm is pretty good
>for a beginner and includes pseudo code in basic (whatever that is).
>

Hi all,

Thank you for your help, i will try what you have suggested and see how i
get on

Xplosiv166