V5.20.10 Early Access

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
8,033
V5.20.10/11 Early Access release

There are more changes in V5.20.10 than is usually the case for the minor releases, so I am providing an early access version here for feedback ahead of the formal release.

Windows 64-bit
Windows 32-bit
MacOS
Linux AMD64
Linux no JRE (for non-AMD64 linux platforms)

Files updated 31st August 2022


The Linux AMD64 build has a new JavaSound provider, courtesy of Pavel Hofman, which allows direct access to ALSA PCM devices.
The Windows-x64 build also has a new JavaSound provider, courtesy of Pavel Hofman, which allows direct access to WASAPI exclusive devices


Here is what's new in REW V5.20.10:

Pro upgrade:
RTA input level calibrate button allows calibration of the full scale input voltage for any or all of the current input channels

Frequency meter: There is now a frequency meter in the Tools menu which uses a form of reciprocal counting with interpolation and averaging on oversampled data to measure the average frequency of the measurement input. The minimum frequency is approximately 10 Hz, minimum input level for reliable readings is approximately -60 dBFS. Note that although the meter has 0.01 Hz precision it is only as accurate as the ADC clock.

53517



Loopback cal: A new timing reference option has been added to use a loopback connection for both timing and to compensate for the measurement system loopback frequency response. That would typically be compensating for the measurement system's own roll-offs when a straight loopback is used, but it is also open to more creative use by modifying the response of the loopback path. When this option is being used the loopback path can either be used to generate a soundcard calibration for the measurement, allowing the loopback response to be removed in future if desired, or merged into the impulse response producing an impulse that includes the corrections to compensate for the loopback response.

53518



Virtual balanced input: There is a Virtual balanced input option on the soundcard preferences, Measure dialog and RTA input selection dialog. When selected this subtracts a second input from the measurement input and scales the result by 0.5 to simulate the behaviour of a balanced input. It is appropriate if the balanced input is being driven by an inverted signal (such as by selecting the Invert second output option on the signal generator).

53519



Multitone
  • The stepped sine test options now include Multitone TD+N, the test uses the multitone signal as configured on the REW signal generator at the time the test is run.
  • When a multitone RTA measurement is saved the Distortion graph now shows the fundamental, noise floor (if available) and TD+N results vs frequency.
  • Multitone TD+N figures are now available using any window type, but a Rectangular window is required for precise results (which needs the same clock source for signal generation and capture)
  • When a multitone is being measured with a Rectangular window (required for precise results) the RTA can check for any clock rate error in the captured data, if that option is selected in the Distortion settings.
53520



RTA
  • The RTA THD+N, N and N+D figures are no longer affected by coherent averaging and remain correct based on magnitude (rms) averaging, coherent averaging only affects the THD and harmonic level figures.
  • An option has been added in the RTA controls to automatically restart RTA capture and clear averaging if the signal generator is started or is running and its settings are changed while using the RTA.

Trace arithmetic

Trace arithmetic has a few new features:
  • There is an optional regularisation factor to use during trace arithmetic division or inversion and optional frequency limits can be set to apply to the operation. The regularisation factor avoids problems from very low levels in the divisor, limiting the boost they would otherwise cause.
  • There is a target level to use with the trace arithmetic inversion operation, with an option to set the level automatically based on the average level of the measurement. That adjusts the inverse to present it relative to the desired level. If the target level is not used the levels of the results of 1/A and 1/B trace arithmetic operations are adjusted so that the level of the response being inverted is retained when multiplied by the inverse.
  • An option has been added to exclude parts of the response that look like notches from the trace arithmetic inversion operation.
  • If trace arithmetic is carried out on one measurement with an impulse response and one without the result will have an impulse response. This could be used to apply a target response adjustment to an IR, for example.
  • An A * B conjugate trace arithmetic operation has been added, which corresponds to a cross-correlation.
  • The IR windows for the result of a trace arithmetic division operation are set to cover the full span of the response.
As an example of how some of those features might be used, a measurement could be inverted to a target magnitude response shape by dividing the measurement by the desired target magnitude then 1/A inversion with regularisation and suitable frequency limits on the result could be used to generate a convolution filter that will invert the original measurement to the desired target shape. The result of the regularised inversion could be exported and used in a convolution engine, such as that offered by Equalizer APO.

Merge cal data to IR: There is a new measurement action on the All SPL graph to merge a measurement's cal files into its impulse response, producing a new measurement without cal files.

53521



Magn Phase average: There is a new averaging option on the All SPL graph, Magn phase average. It averages the magnitudes and phases of the responses separately, preventing phase cancellations from affecting the magnitude. Any cal files in the selected measurements are merged into the resulting impulse response. Removed pending further investigation into its utility

Room simulator: Phase has been added to the room simulator response exports

Signal generator
  • The signal generator square wave now has an option to band limit the sample values produced by the square wave generator instead of generating the classical flat sample sequence. When this option is used REW generates the data by summing the constituent harmonics of the signal up to half the sample rate. This avoids out-of-band content in the raw data, though the even-sample restriction REW applies to data that is not band limited mean the audible difference is small for the 50% duty cycle case. Note that the band limited signal may clip up to 1.5 dB sooner as the overshoots inherent to the band limiting of sampled data appear in the sample values rather than being inter-sample for the equal-valued case. However, the band-limited data will have less overshoot when converted to analog. The frequency constraint for band limited data is much less strict than for equal-valued data, which forced the period to be an even number of samples, but for efficient signal generation the exact frequency used will chosen so that the data values repeat within at most 8192 samples. The frequency used will usually be within 0.1% of the requested frequency, but the minimum frequency is 5.4 Hz at 44.1 kHz sample rate and proportionately higher at higher sample rates. Dither should be applied when using the band limited option to avoid artefacts due to quantisation, it isn't relevant for the equal-valued case which only has two sample values.
  • The signal generator now has a sawtooth option, band-limited or idealised.

Minor updates
  • The IR delay estimation has been prevent from producing results that place the response peak before t = 0, which could occur if a later part of the response correlated better with the minimum phase response.
  • When the impulse response t=0 position is changed the data is no longer resampled to place t=0 at a sample instant, only the axis start time is updated.
  • A Ctrl+Alt+P shortcut has been added to move the IR peak to 20% of the way across the Impulse graph as a quick way to locate the peak when zoomed in.
  • There is now a settings button for the mic cal data entries in the Cal files preferences which brings up a dialog with fields to directly enter the SPL scaling or full scale sine Vrms for each input. For microphones with sensitivity entries in their cal files the SPL fields (input dBFS for 94 dB SPL and SPL at full scale input) are displayed but are not editable.
  • There is now a View preference to show the dB/decade aspect ratio of frequency response graphs in the bottom right corner when the cursor is over the graph. There are also View preferences to apply a selected aspect ratio when a frequency span preset button is pressed by adjusting the vertical span of the graph.
  • V/sqrt(Hz) Y axis unit options have been added to the SPL & Phase and Overlay SPL graphs to allow viewing of amplitude spectral density results for captured RTA measurements. Amplitude spectral density is only available for RTA measurements.
  • An extra digit has been added to displayed voltage values
  • The measurement protection settings have been moved to the left side of the Measure dialog.
  • Trace highlighting when the mouse cursor is over the trace name in the legend has been made more prominent and the trace name is shown on the graph, a new View preference controls whether the highlighting uses a thicker trace
  • The legend area can use up to 30% of the graph area height to allow more trace selections to be visible on overlay graphs
  • Negative slopes are allowed in the EQ target room curve settings
  • Added a soundcard preference to treat 32-bit sample formats as carrying 24-bit data
  • Allow a broader range for the speed of sound setting to accommodate media other than air
  • REW retains the last 7 days of measurements in a temp folder, deleting any older than 7 days on startup. If REW did not shut down normally it will offer to load any measurements that were made since it last started up.
  • Added check boxes in the FlexASIO control panel for exclusive mode when using WASAPI
  • Expanded the bit depth detector to 32 bits
  • Extended the RTA clock rate monitoring to include FFT-locked sine signals
  • Show ASIO input and output formats separately
  • Doubled the scope buffer duration
  • If the sweep end is at Nyquist keep it at Nyquist when the sample rate changes
  • Added an export menu entry and Filter tasks action to save EQ filter settings as a formatted text file with a header and using the Export text delimiter to separate field
  • Added a button on the EQ filters panel to copy the filter settings to the clipboard in a text format that can be pasted into a spreadsheet

    Bug fixes
  • The signal generator measurement sweep duration figure may not update correctly to reflect the wave sample rate when configuring a sweep to save to file
  • Control of input volume was always enabled when an input device was selected
  • Scope channel settings popup remained visible after bringing up the trace colour dialog
  • Impulse responses imported from text files were not padded to a power of 2 length
  • RT60 and clarity values did not appear in Overlay graph legends unless the measurements had first each been individually selected in the main REW window
  • Distortion data export as text did not work for stepped IMD measurements
  • Mic cal files entries for Java driver devices using per-channel cal had a redundant "Default input" entry as the last channel
  • Stepped measurements with SPL as the Y axis would generate an exception
  • Use double precision calculations for the input high pass option to avoid rising LF noise floor

Hopefully there is something in all that worth trying out and commenting on :)
 
Last edited:

thothsong

Member
Joined
Jun 29, 2021
Posts
405
I'm getting an NPE when trying to set a UMIK-1 cal file:
Jul 30, 2022 1:55:03 PM roomeqwizard.RoomEQ_Wizard main
INFO: REW V5.20.10 running Azul Systems, Inc. JRE 1.8.0_302 64-bit on Windows 10
Locale: language en, keyboard US, windows-1252 at 96 DPI
Jul 30, 2022 1:55:05 PM roomeqwizard.RoomEQ_Wizard$5 run
INFO: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
Jul 30, 2022 1:55:07 PM com.synthbot.jasiohost.AsioDriver <clinit>
INFO: Loaded jasiohost64.dll
Jul 30, 2022 1:55:17 PM roomeqwizard.CalData calFileLoader
INFO: Mic sensitivity 2.933 dB for serial number 7079664 from UMIK-1 7079664_90deg.txt
Jul 30, 2022 1:55:17 PM roomeqwizard.RoomEQ_Wizard A
SEVERE: Exception java.lang.NullPointerException
java.lang.NullPointerException
at roomeqwizard.PF$_A.C(y:1824)
at roomeqwizard.PF.propertyChange(y:698)
at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)
at javax.swing.event.SwingPropertyChangeSupport.firePropertyChange(SwingPropertyChangeSupport.java:92)
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)
at roomeqwizard.U.B(y:3436)
at roomeqwizard.PF$_A.B(y:409)
at roomeqwizard.PF$_A.B(y:323)
at roomeqwizard.PF$_A$4.actionPerformed(y:3438)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6539)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6304)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
at java.awt.Dialog.show(Dialog.java:1084)
at java.awt.Component.show(Component.java:1671)
at java.awt.Component.setVisible(Component.java:1623)
at java.awt.Window.setVisible(Window.java:1014)
at java.awt.Dialog.setVisible(Dialog.java:1005)
at roomeqwizard.E$8.run(y:3277)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
 
Last edited by a moderator:

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
8,033
I'm getting an NPE when trying to set a UMIK-1 cal file:
Thanks for the report. A couple of questions:
  • Was the mic already plugged in when REW was started or was it plugged in afterwards?
  • Was the "Separate cal for each input" box selected?

I have updated the file, please download again and reinstall and see if it still happens.
 

thothsong

Member
Joined
Jun 29, 2021
Posts
405
Thanks for the report. A couple of questions:
  • Was the mic already plugged in when REW was started or was it plugged in afterwards?
  • Was the "Separate cal for each input" box selected?

I have updated the file, please download again and reinstall and see if it still happens.
Already plugged in, and yes, Separate selected. New file works fine, thanks.
 

Breeman

Member
Joined
Jan 9, 2019
Posts
186
Thank you for this release John, it is appreciated and quite a mouthful of features to explore. What caught my attention and triggered a thought was seeing the new A * B conjugate function in trace arithmetic operation. I remember reading about it in a paper titled, DSP Loudspeaker 3D Complex Correction and another one titled Loudspeaker Transfer Function Averaging and Interpolation. From my layman's understanding the two papers and some extra information in this one, The Use of Continuous Phase for Interpolation, Smoothing and Forming Mean Values of Complex Frequency Response Curves, it seems probable that a special averaging function similar to the RMS Averaging but which computes an average (complex) phase response representative of the measurements of interest. What are your thoughts? Would this be feasible?
 

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
8,033
Cross correlation crops up in lots of places. Are you looking for a trace arithmetic feature to interpolate between two responses?
 

Breeman

Member
Joined
Jan 9, 2019
Posts
186
Cross correlation crops up in lots of places. Are you looking for a trace arithmetic feature to interpolate between two responses?
Yes, that would be great if it can help towards computing an average (RMS) response with an average phase that does not suffer much from the high frequency cancellations.
 

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
8,033
The vector average deals with averaging, as long as the time alignment step is done first.
 

Breeman

Member
Joined
Jan 9, 2019
Posts
186
The vector average deals with averaging, as long as the time alignment step is done first.
Yes I am aware of vector averaging. The issue I've seen is that in instances where there are many reflections like in a car, it does not work too well because of energy loss at high frequencies even with time alignment. The energy loss does not seem to be representative of how we hear sound at these frequencies, hence the RMS average works better. But the RMS average does not compute phase response To put it differently, one would at times want an RMS-type average response with a complex average phase response (as computed by Vector Average) in one graph. This comes in handy when wanting to equalise both the magnitude and phase response using FIR filters
 

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
8,033
OK, understood, an averaging mode that averages magnitude and phase separately. I'll put that on my todo list.
 

sm52

Member
Joined
Mar 14, 2019
Posts
1,008
The latest release works for me. But I can't check all the changes.
I installed it not as an update, but in a separate folder with a different name. If I remove it, won't my previous release settings be removed from the registry?
What more I would like. When you go to the All SPL tab, all created graphs are marked by default. But usually you need to compare two or four graphs. If there are 20 measurements, you have to remove the marks from everyone without looking, and then look for and mark those that are needed. Is it possible to make a 'deselect everyone' button?
Yet. If you're on the All SPL tab, can you make the anti-aliasing change affect all graphs at the same time? But after exiting this tab, everything came back as before switching to it?
 

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
8,033
If I remove it, won't my previous release settings be removed from the registry?
Preferences are not removed unless you specifically select that in the uninstaller.
Is it possible to make a 'deselect everyone' button?
Right click on the legend area.
Yet. If you're on the All SPL tab, can you make the anti-aliasing change affect all graphs at the same time? But after exiting this tab, everything came back as before switching to it?
I don't understand that comment.
 

sm52

Member
Joined
Mar 14, 2019
Posts
1,008
Right click on the legend area.
Yes. This is what I need.

I don't understand that comment.
When I'm on the All SPL tab, I can only smooth one graph, which tab I'll pre-click on (to the left of the graphs). Is it possible, when pressing, for example, Ctrl + Shift + 9, to make all graphs smooth to 1/48, and not just one?
The following is not required, but may make sense.
Collective smoothing should only work on the All SPL tab. When exiting All SPL, all measurements should return to the smoothing that they had before switching to All SPL.
 

Breeman

Member
Joined
Jan 9, 2019
Posts
186
I was playing around with the Magn Phase average function and while the magnitude response looks as expected, I'm not so sure about phase. I would have expected the phase response to follow the same trend somewhat of the one computed by the Vector Average. The individual responses were SPL aligned and their impulse responses aligned before doing the averaging.

The purple curve below is phase calulated by Vector average and the magenta curve is the one computed by Magn Phase average function
53537


The impulse response calculated by the Magn Phase average also look a bit strange, see below.
53535

This is the impulse response calculated by Magn Phase average function

53536

this is the impulse response calculated by the Vector average which looks normal.
 

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
8,033
"Looks normal" is a bit relative, it looks pretty rough :). Please attach the mdat file with the measurements, it isn't possible to investigate using images. The phase averaging uses the unwrapped phase, but unwrapped phase can exhibit 360 degree increases when the response passes through a non-minimum phase region so in some regions the phases being averaged can be multiples of 360 degrees apart. In an environment with many strong reflections there isn't really a perfect solution.
 

Breeman

Member
Joined
Jan 9, 2019
Posts
186
"Looks normal" is a bit relative, it looks pretty rough :). Please attach the mdat file with the measurements, it isn't possible to investigate using images. The phase averaging uses the unwrapped phase, but unwrapped phase can exhibit 360 degree increases when the response passes through a non-minimum phase region so in some regions the phases being averaged can be multiples of 360 degrees apart. In an environment with many strong reflections there isn't really a perfect solution.
The phase calculated by the Vector Average looks more like what you are describing which I understand. However the phase calculated by the Magn Phase average function looks like it still has a lot of excess phase fron bulk delay which should not be case because the impulse responses were aligned at t=0. I cannot seem to attach the file, probably too large. Here is the Google drive link, https://drive.google.com/file/d/1vE-HTKZ1dkWgNgAAud9C_s0DN_7WMSZG/view?usp=sharing
 

sm52

Member
Joined
Mar 14, 2019
Posts
1,008
John, thanks, it turns out everything is already there, just need to look.
 

John Mulcahy

REW Author
Thread Starter
Joined
Apr 3, 2017
Posts
8,033
the phase calculated by the Magn Phase average function looks like it still has a lot of excess phase fron bulk delay which should not be case because the impulse responses were aligned at t=0
That phase is the average of the unwrapped measurement phases, in such a highly reflective environment it will always be pretty chaotic and that in turn will give a dispersed impulse response since the averaged magnitude and averaged phase don't belong together (in a minimum phase sense). Alternatives are possible, such as an RMS average magnitude and phase from a vector average, but there will still be dispersion in the resulting impulse response for the same reason, albeit not as much. How do you plan to use the average, and in particular what use would you make of the phase and/or impulse response of an average? Knowing the intended use might prompt other ways to approach it. In that environment with such varied measurements it does raise a question of how meaningful an average can be.
 

Breeman

Member
Joined
Jan 9, 2019
Posts
186
That phase is the average of the unwrapped measurement phases, in such a highly reflective environment it will always be pretty chaotic and that in turn will give a dispersed impulse response since the averaged magnitude and averaged phase don't belong together (in a minimum phase sense). Alternatives are possible, such as an RMS average magnitude and phase from a vector average, but there will still be dispersion in the resulting impulse response for the same reason, albeit not as much. How do you plan to use the average, and in particular what use would you make of the phase and/or impulse response of an average? Knowing the intended use might prompt other ways to approach it. In that environment with such varied measurements it does raise a question of how meaningful an average can be.
The plan is to create a FIR inverse filter to compensate for both the magnitude and phase response followed by matching of the left and right channels such that both the magnitude and phase looks similar. The spatial measurements (per channel) are constrained to a smal listening zone to derive an average response representative of the zone to be optimised. Because the responses change significantly with a small change in the spatial locations, the equalisation of an average response is required to minimise overfitting and overcompensating by the inverse filter. Granted, the dispersion of the impulse response is an issue in these types of environments and it helps if option exist to minimise it. I think it will be a great idea to also have an averaging function based on an RMS averaged magnitude and a vector averaged phase to see which works better in this case. I will appreciate it if you can consider it.
 
Top Bottom