Low Pass Filter in Software question

Click For Summary

Discussion Overview

The discussion revolves around the implementation and behavior of low pass and high pass filters in software, particularly focusing on a specific equation for a low pass filter and its implications on data processing. Participants explore the mathematical underpinnings and practical effects of these filters on datasets.

Discussion Character

  • Technical explanation
  • Exploratory
  • Debate/contested

Main Points Raised

  • One participant expresses confusion regarding the convergence of the output from the low pass filter equation provided by Barry L. Dorr, particularly questioning the role of the term + x(n).
  • Another participant points out that the filter has a gain at low frequencies and illustrates how the output behaves when filtering a constant input signal, leading to a geometric series that converges to a specific value.
  • A participant confirms that they observed the output leveling off at around 16 when using a large array, indicating an understanding of the filter's behavior.
  • One participant inquires about the effects of a high pass filter, specifically whether it converges more quickly to the data and how it differentiates between large and small changes in the dataset.
  • Another participant explains that a high pass filter retains the components that a low pass filter removes, suggesting that it emphasizes high-frequency changes while potentially leaving behind noise.

Areas of Agreement / Disagreement

Participants generally agree on the behavior of the low pass filter and its gain characteristics, but there is ongoing exploration regarding the effects and implications of high pass filters, with some uncertainty about their specific behavior in relation to data changes.

Contextual Notes

There are unresolved aspects regarding the mathematical derivations and the specific conditions under which the filters operate effectively. The discussion does not fully clarify the assumptions behind the filter equations or the definitions of noise versus signal.

Who May Find This Useful

Individuals interested in digital signal processing, software implementation of filters, and those seeking to understand the practical applications of low pass and high pass filters in data analysis may find this discussion relevant.

preimmortal
Messages
13
Reaction score
0
Hi Everyone,
I read an article by Barry L. Dorr about how to implement a Low Pass Filter in software, however, the equation that he gave confused me as I didn't see any sort of convergence to the value desired.

So here is the equation:
y(n) = (1 - 2^(-k)) * y(n-1) + x(n)
x is the input, y is the output, n is the index, and k is the filter strength

So I understand how k works as it just makes it so that previous values affect the output less. But where I run into problems is the + x(n) term.

So taking the example where k = 4, I have the equation:
y(n) = 0.9375 * y(n-1) + x(n)

Then I will just create an arbitrary array with which I want to low-pass and smooth out.
So let's say, x(n) = {1, 5, 3, 2}

Then that means,
y(3) = .9375 * y(2) + x(3) = 8.031 + 2 = 10.031
y(2) = .9375 * y(1) + x(2) = 5.5664 + 3 = 8.5664
y(1) = .9375 * y(0) + x(1) = .9375 + 5 = 5.9375
y(0) = x(0) = 1

So at this point, I can see the the output array is not even converging to getting larger as time goes on, even though the maximum input to low-pass filter was 5.

Any insight on how this works would be great.
 
Engineering news on Phys.org
You mean ths article? http://www.edn.com/article/465351-A...filter_suits_embedded_system_applications.php

He "forgot" to tell you that his simple filter has a gain at low frequences. If you see what happens when you filter a constant input signal with all the x(n) values equal to 1, the output values are
1
1 + .9375
1 + .9375 + .9375^2
1 + .9375 + .9375^2 + 9375^3
etc.
This is a geometric series. The output will rise "slowly" and then level off at the value of
1 / (1 - .9375) = 16.

Note: you will need to get about 50 output values to see the complete picture of what happens.

If you want the filter to have a gain of 1 at low frequencies, use
y(n) = 2^(-k)(1 - 2^(-k)) * y(n-1) + 2^(-k)x(n)
instead.
 
Last edited:
Ah yes,
I did notice that when I was running it in my actual software. It would level off at around 16 if I passed in a large array. I will try implementing your low-pass filter with gain of 1 and see how it works out. Thanks.
 
Okay I just implemented the low-pass filter and it does have the affect of "smoothing" out my data, now I want to implement a high pass filter for my data. My main question is,
What affect does a high pass filter have on my dataset?
For example, I know that the low pass smooths out data and passes low frequencies (changes?). So applying this logic, does the high pass filter converge more quickly to my data, (ie. pass large changes in data but not small?)
 
Short answer: high pass leaves you with the part that low pass removes. If your data are the sum of a low-frequency "signal" and some higher-frequency "noise" then low-pass will tend to filter out the noise, while high-pass will leave you with the noise. (Of course, one person's noise is another person's data, etc., etc...)

The time derivative (changes) is weighted toward high frequencies in a sort of "ramp" rather than providing good "high pass."
 

Similar threads

  • · Replies 46 ·
2
Replies
46
Views
4K
  • · Replies 6 ·
Replies
6
Views
3K
  • · Replies 20 ·
Replies
20
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 7 ·
Replies
7
Views
4K
Replies
8
Views
2K
  • · Replies 14 ·
Replies
14
Views
4K
  • · Replies 15 ·
Replies
15
Views
7K
Replies
6
Views
3K
  • · Replies 16 ·
Replies
16
Views
2K