HOLMImpulse: Measuring Frequency & Impulse Response

Thanks, ARTA "2.3 Frequency Resolution of DFT and Octave-Band Analyzers"
if ARTA window = BLACKMANN3, then this corresponds to HOLMImpulse amplitude smoothing with N = 1, N = 3

The HOLMImpulse FR makes a calculation for all discrete frequencies, not only the ISO-standard-steps. I might implement an ISO-standard-step FR which will show bars and not a curve.

The discussion on windows, however, refers to the DFT resolution. The 1/N smoothing is discussed further down in that section with methods similar to Earl's (continuous smoothing).
 
The discussion on windows, however, refers to the DFT resolution. The 1/N smoothing is discussed further down in that section with methods similar to Earl's (continuous smoothing).

Sorry, Yes I are right - he writes:
Power output of 6-pole Butterworth bandpass filter – First, the power spectrum is weighted with a squared magnitude of a bandpass filter response.

And not which bandpass filter he uses.

If I get the time and feel for it I can compare my amplitude smoothing with this
 
gedlee = askbojesen?

I sum the "magnitudes", and yes, you must do a 1/f compensation for the frequencies, but this is part of the "integration".

Then your post processing should equal my amplitude smoothing.

I suggest the following for a measurement:

1. Export unsmoothed FR or IR to your program
2. Your program -> Smoothed FR/IR -> HOLMImpulse
3. Compare

Perhaps you can email me an IR and your smoothed FR - then I can do the comparison?
 
Then your post processing should equal my amplitude smoothing.

I suggest the following for a measurement:

1. Export unsmoothed FR or IR to your program
2. Your program -> Smoothed FR/IR -> HOLMImpulse
3. Compare

Perhaps you can email me an IR and your smoothed FR - then I can do the comparison?

How can I import a FR curve? is there documentation of the proper format? After smoothing the FR curve is purely real there is no phase. Is this a problem?

If I smooth in Holm, can those curves be exported en-mass like the IRs?
 
I take the impulse response and find the FR, normal FFT. Then I go to a set of log spaced frequencies and at each of those find a weighting function that is 1/N wide - I use a gaussian type of shape. The magnitudes at each of the FFT data point is then weighted by this shape and integrated (summed). This procedure has trouble at LF when the frequency spacing of the data is comparable to the smoothing bandwidth, but works good otherwise.
Instead of using a gaussian window use a rectangular window but make 4 successive passes through the data. It is orders of magnitude more efficient (when correctly implemented) and is easily implemented as a sliding window (whose endpoints can vary logarithmically as you go for fractional octave filtering) for more accurate filtering.
 
Instead of using a gaussian window use a rectangular window but make 4 successive passes through the data. It is orders of magnitude more efficient (when correctly implemented) and is easily implemented as a sliding window (whose endpoints can vary logarithmically as you go for fractional octave filtering) for more accurate filtering.

Sounds interesting, could you ellaborate further. It would be way more efficient and I need that, but I am unclear on why multiple pass makes any difference, or exactly what you mean.
 
From a numerical analysis point of view smoothing always reduces to some form of integration:

A'(fc) = integral [W(f)A(f)]/ integral[W(f)] over some limits f1 to f2 where fc is between them. W(f) is a weighting function of choice, typically symmetric about fc. Obviously, in the digital domain the integrals are replaced with their representative summations.
 
Curious, I posted something last night, but it seems to have gotten lost.

JohnPM, I completely understand the link that you provided, but that applies to filters in the time domain. What I am doing (and what John k describes above) are in the frequency domain and I don't understand how what you are saying is applied in the frequenct domain. Unless you are implying doing it in the time domain directly on the impulse response, but then I think that the efficiency is lost unless you are using fixed bands instead of a swept average over a high resoultion FR. Either that or I am still missing something.

(John K is up early! On a Sat no less. Whats up with that?)
 
JohnPM, I completely understand the link that you provided, but that applies to filters in the time domain. What I am doing (and what John k describes above) are in the frequency domain and I don't understand how what you are saying is applied in the frequenct domain. Unless you are implying doing it in the time domain directly on the impulse response, but then I think that the efficiency is lost unless you are using fixed bands instead of a swept average over a high resoultion FR. Either that or I am still missing something.
The filter only knows data, not domains. A moving average filter applied to a set of frequency data (e.g. FFT magnitudes) results in frequency domain smoothing. The effect of multiple passes is the same, with each pass altering the effective filter kernel applied. For fractional octave smoothing on linearly spaced frequency data a little fiddling with the start and end pointers and corresponding running sum adjustments are required as you pass through the data to ensure the window span covers the desired octave fraction (remembering to correct for the effects of fractional samples at the window edges), but otherwise the same principles apply as for the time data and the same efficiency benefits result.
 
The filter only knows data, not domains. A moving average filter applied to a set of frequency data (e.g. FFT magnitudes) results in frequency domain smoothing. The effect of multiple passes is the same, with each pass altering the effective filter kernel applied. For fractional octave smoothing on linearly spaced frequency data a little fiddling with the start and end pointers and corresponding running sum adjustments are required as you pass through the data to ensure the window span covers the desired octave fraction (remembering to correct for the effects of fractional samples at the window edges), but otherwise the same principles apply as for the time data and the same efficiency benefits result.

I see, but the FR data is complex and the time data is real. Do you just use magnitude data? You can't just MA on complex data - I don't think that works right. I also see that it's not so simple as you first implied, there are a lot of gotchas. I do things a little differently and I'm not sure how what you are describing would work in my case. When I smooth, I am also resampling in that the output data is at log spaced frequencies for a better plotting result. It's not clear to me how this would be done in my case. I'll have to think about it. It is clever, I will give you that.
 
The filter only knows data, not domains. A moving average filter applied to a set of frequency data (e.g. FFT magnitudes) results in frequency domain smoothing. The effect of multiple passes is the same, with each pass altering the effective filter kernel applied. For fractional octave smoothing on linearly spaced frequency data a little fiddling with the start and end pointers and corresponding running sum adjustments are required as you pass through the data to ensure the window span covers the desired octave fraction (remembering to correct for the effects of fractional samples at the window edges), but otherwise the same principles apply as for the time data and the same efficiency benefits result.
Does this apply to filtering out low frequency noise, which could be room modes?
 
Been doing a little reading over the weekend. From my reading, applying a moving average filter to time domain data is effectively low pass filtering (not smoothing) in the frequency domain. This should be obvious since applying the moving average filter in the time domain will smooth (removed high frequency information) from the impulse chain. When FFt'ed the frequency domain response will show a roll off at higher frequency.

You can see this in the frequency domain plots from the likn that JM posted:Relatives of the Moving Average Filter. In the more general case it appears to be little more than convolution of the original time data with an impulse represented by the window use.
 
Last edited:
Been doing a little reading over the weekend. From my reading, applying a moving average filter to time domain data is effectively low pass filtering (not smoothing) in the frequency domain. This should be obvious since applying the moving average filter in the time domain will smooth (removed high frequency information) from the impulse chain. When FFt'ed the frequency domain response will show a roll off at higher frequency.

You can see this in the frequency domain plots from the likn that JM posted:Relatives of the Moving Average Filter. In the more general case it appears to be little more than convolution of the original time data with an impulse represented by the window use.

I believe that just like all filters, there are MA HP filters as well as Bandpass, but I suspect that they would need a pole or two to be efficient. The pure MA class of filters is an all zero filter, i.e. a filter with only denominator terms, or as they are also called FIR filters. Given an infinite filter order any shape can be achieved, but for some situations allowing some numerator terms can dramatically improve convergence (but technically the filter is now ARMA).

The idea is quite interesting, although I suspect that implimentaion is not trivial. I am going to look at this.
 
I believe that just like all filters, there are MA HP filters as well as Bandpass, but I suspect that they would need a pole or two to be efficient. The pure MA class of filters is an all zero filter, i.e. a filter with only denominator terms, or as they are also called FIR filters. Given an infinite filter order any shape can be achieved, but for some situations allowing some numerator terms can dramatically improve convergence (but technically the filter is now ARMA).

The idea is quite interesting, although I suspect that implimentaion is not trivial. I am going to look at this.

Say Earl, I didn't see this until after I posted my comments (wish I had). Go to the web page JM eferenced (as I did above as well) and open the chapter 15 PDF file (link at upper ringt of page). It's really all spelled out there.
 
I was reading through it a bit more. Not knowing whether I understand correctly or not, but it seems like the basic thing is that in an impulse response, any rise time that faster than should be expected is considered random noise, and is thus filtered out. This is quite similar to the idea I had mentioend some time ago, but seems to have a more adequate way of filtering.
I would think that if we take this kind of filtering technique and apply it starting from just before the arrival of first reflection, it seems actually possible to remove room reflection data from the measurement data; and, depending on where we want to start apply the filter in time, we can also see how diffraction effects varies the response.
 
I see, but the FR data is complex and the time data is real. Do you just use magnitude data? You can't just MA on complex data - I don't think that works right. I also see that it's not so simple as you first implied, there are a lot of gotchas. I do things a little differently and I'm not sure how what you are describing would work in my case. When I smooth, I am also resampling in that the output data is at log spaced frequencies for a better plotting result. It's not clear to me how this would be done in my case. I'll have to think about it. It is clever, I will give you that.
For fractional octave filtering you use the magnitude data. The complex data can be converted to magnitude and phase and the phase can (indeed should) be smoothed in the same way if you are retaining phase information, but of course you need to unwrap it first (which has its own problems :)). To resample at log spacing you really should first smooth the data, otherwise your resampling introduces aliasing. For example, to convert the data to 96PPO log spaced it is best to first smooth to 48PPO before doing the decimation (which is then simply selecting the desired 96PPO samples from the smoothed set).

@John K: Yes, moving average is simply a low pass filter, albeit one with a fairly poor rolloff. Smoothing and low pass filtering are of course the same thing.
 
New version (Bugfixes+features+changes)

Version 1.4.1.6 (2009-10-19)

Features/Changes:
* Measurement options: Layout changed: Raw response, time-window, freq-smoothing
* Measurement options: Invert button changed to Invert flag checkbox
* DAC-ADC calibration changed from +/- 3dB to +/- 6dB
* Manipulation: Copy A to C

Bugfixes:
* Device & signal: Invert input has no effect
* 1/N-Octave smothing for high frequencies (90% of Nyquist)