WY the phase jump on diffrent measures without change anything so much ?

user44455555

Registered
Thread Starter
Joined
Jan 16, 2021
Messages
137
I try phase correct a speaker but see in screenshot the excess phase change alot and there is nothing change on measure. microphone, speaker and level same. impulse response start look near same but lots changes in excess phase. what can do to get better measure results ?. the min phase look in all measures same
phase 2.jpg

phase 1.jpg
 

Attachments

  • phase measure 2.jpg
    phase measure 2.jpg
    206.3 KB · Views: 20
  • phase measure  1.jpg
    phase measure 1.jpg
    204.3 KB · Views: 14

John Mulcahy

REW Author
Joined
Apr 3, 2017
Messages
7,212
Looks pretty similar to me. When phase is unwrapped there may be shifts of multiples of 360 degrees depending on the reference frequency (cursor position) when unwrapping. The +/- 360 buttons can be used to shift the phase response.
 

user44455555

Registered
Thread Starter
Joined
Jan 16, 2021
Messages
137
I check with cursor, it depend really on the cursor position. this is good to know i read that not in manual about unwrap phase. Another thing: When i click on Add LF Tail there come a message about 0 pointer. when i click on Add HF tail sometimes too. when this is close and click to positon cursor in main window this message come allways, so need taskkill REW
null pointer.jpg
 

John Mulcahy

REW Author
Joined
Apr 3, 2017
Messages
7,212
Here is the help on unwrap phase:
The phase trace normally wraps at +180/-180 degrees. This is because phase is cyclic over a 360 degree range (+90 is the same phase as -270). The trace can, however, be displayed without wrapping which is what the Unwrap Phase control does. A difficulty with unwrapped phase is knowing where the correct zero phase is, another is being able to view parts of the trace where the unwrapped value has become very large. The unwrapped phase is offset (by a multiple of 360 degrees) so that it is within the range -180..180 degrees at the cursor frequency. The +360 and -360 buttons will also shift the phase trace in 360 degree steps.

Please post the text of error messages rather than images, there is a button to copy the text to the clipboard. Do you have an mdat file which always generates that error? If so, please attach it.
 

user44455555

Registered
Thread Starter
Joined
Jan 16, 2021
Messages
137
I have do a mdat file. when double click the file rew start then go to control then click minimum phase. and in the requester click Add LF Tail then this error come


REW V5.20.4 running Oracle Corporation JRE 1.8.0_291 64-bit on Windows 10 Locale: language de, keyboard DE, windows-1252 at 96 DPI


Message:
java.lang.NullPointerException
Stack Trace:
roomeqwizard.MinPhaseTails.calculateTransition(y:2693)
roomeqwizard.MinPhaseTails.getLfTransition(y:3058)
roomeqwizard.CI.A(y:271)
roomeqwizard.CI.A(y:2291)
roomeqwizard.yA.B(y:2743)
roomeqwizard.MI.A(y:1397)
roomeqwizard.MI.paintComponent(y:3195)
javax.swing.JComponent.paint(Unknown Source)
javax.swing.JComponent.paintChildren(Unknown Source)
javax.swing.JComponent.paint(Unknown Source)
javax.swing.JLayeredPane.paint(Unknown Source)
javax.swing.JComponent.paintChildren(Unknown Source)
javax.swing.JComponent.paint(Unknown Source)
javax.swing.JLayer.paint(Unknown Source)
javax.swing.plaf.LayerUI.paint(Unknown Source)
javax.swing.plaf.ComponentUI.update(Unknown Source)
javax.swing.JComponent.paintComponent(Unknown Source)
javax.swing.JLayer.paint(Unknown Source)
javax.swing.JComponent.paintChildren(Unknown Source)
javax.swing.JComponent.paint(Unknown Source)
javax.swing.JComponent.paintChildren(Unknown Source)
javax.swing.JComponent.paint(Unknown Source)
javax.swing.JComponent.paintChildren(Unknown Source)
javax.swing.JComponent.paint(Unknown Source)
javax.swing.JComponent.paintChildren(Unknown Source)
javax.swing.JComponent.paint(Unknown Source)
javax.swing.JLayer.paint(Unknown Source)
javax.swing.plaf.LayerUI.paint(Unknown Source)
roomeqwizard.UB.paint(y:2131)
javax.swing.plaf.ComponentUI.update(Unknown Source)
javax.swing.JComponent.paintComponent(Unknown Source)
javax.swing.JLayer.paint(Unknown Source)
javax.swing.JComponent.paintChildren(Unknown Source)
javax.swing.JComponent.paint(Unknown Source)
javax.swing.JComponent.paintToOffscreen(Unknown Source)
javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
javax.swing.RepaintManager.paint(Unknown Source)
javax.swing.JComponent._paintImmediately(Unknown Source)
javax.swing.JComponent.paintImmediately(Unknown Source)
javax.swing.JLayer.paintImmediately(Unknown Source)
javax.swing.plaf.LayerUI.paintImmediately(Unknown Source)
javax.swing.JLayer.paintImmediately(Unknown Source)
javax.swing.JComponent.paintImmediately(Unknown Source)
javax.swing.JLayer.paintImmediately(Unknown Source)
javax.swing.plaf.LayerUI.paintImmediately(Unknown Source)
javax.swing.JLayer.paintImmediately(Unknown Source)
javax.swing.JComponent.paintImmediately(Unknown Source)
javax.swing.RepaintManager$4.run(Unknown Source)
javax.swing.RepaintManager$4.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
javax.swing.RepaintManager.access$1200(Unknown Source)
javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
java.awt.event.InvocationEvent.dispatch(Unknown Source)
java.awt.EventQueue.dispatchEventImpl(Unknown Source)
java.awt.EventQueue.access$500(Unknown Source)
java.awt.EventQueue$3.run(Unknown Source)
java.awt.EventQueue$3.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
java.awt.EventQueue.dispatchEvent(Unknown Source)
java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
java.awt.EventDispatchThread.pumpEvents(Unknown Source)
java.awt.EventDispatchThread.pumpEvents(Unknown Source)
java.awt.EventDispatchThread.run(Unknown Source)
 

Attachments

  • pointertest.zip
    2.4 MB · Views: 12

John Mulcahy

REW Author
Joined
Apr 3, 2017
Messages
7,212
Thanks, I have fixed that for the next build and also to take account of the effect of smoothing on the minimum valid frequency for the measurement. As a workaround in the meantime remove smoothing before clicking Add LF tail, then select a start frequency for the tail that is above the minimum valid frequency for the smoothing you wish to use (e.g. 38 Hz for ERB smoothing on your example mdat). You can then apply the desired smoothing and generate the min phase response.
 

user44455555

Registered
Thread Starter
Joined
Jan 16, 2021
Messages
137
Thanks, i try without smoothing and it work a new mesure with 1 MB sweep to increase precision and i can set tails. with only add HF tail the result look nicest. but i am not sure, which is
correct. there are much diffrences. i also try measure only from 30 hz upto 20 khz. does not help. it is that on low freq below 30 hz the level of speaker is too low and so much noise happen which result in wrong 0 point . i set cursor at 1 khz but the phase begin at 20 hz at around 0

with Add LF tail Add HF tail.jpg

with add HF tail.jpg

no tails.jpg
 

John Mulcahy

REW Author
Joined
Apr 3, 2017
Messages
7,212
Not really sure what your question is, if there is a question. For that measurement the LF tail should probably start at around 40 Hz. No point adding the tail at a point the measurement is already in the noise.
 

user44455555

Registered
Thread Starter
Joined
Jan 16, 2021
Messages
137
I mean which setting is the correct phase how can i verify and wy does only add HF tail change the phase in low freq so much and phase look good ? . I try other speakers happen strange results too. with or without cal file effect do no diffrence

no tails.jpg
lf hf tails.jpg
 

jtalden

Senior Member
Joined
May 22, 2017
Messages
887
Location
Arizona, USA
More  
Preamp, Processor or Receiver
Marantz AV7705 Pre/Pro
Main Amp
VTV 6 chnl NC252MP P-amp x 2
Additional Amp
Behringer DCX2496 x 2
Universal / Blu-ray / CD Player
OPPO BDP-103 Universal Player
Front Speakers
DIY SEAS H1456/H1212 Spkr x 5
Subwoofers
DIY JBL 2235H 15" SW x 2
Video Display Device
JVC DLA-X790R
Screen
Da-Lite Da-Snap 39105V - 92"
I might be able to help, but I need to understand what your objective is and how you intend to implement it.
  • Stereo system?
  • L, R speakers only? brand?
  • Objective: Remove excess phase from direct sound of the 2 speakers?
  • Use rePhase program to create the FIR?
  • How will the FIR be implemented - JRiver or similar?
If this is the general idea just move the mic to about 1 m from a speaker and measure that single speaker. It will provide a much cleaner measurement of the direct sound that is easy to work with.
 

user44455555

Registered
Thread Starter
Joined
Jan 16, 2021
Messages
137
I might be able to help, but I need to understand what your objective is and how you intend to implement it.
  • Stereo system?
  • L, R speakers only? brand?
  • Objective: Remove excess phase from direct sound of the 2 speakers?
  • Use rePhase program to create the FIR?
  • How will the FIR be implemented - JRiver or similar?
If this is the general idea just move the mic to about 1 m from a speaker and measure that single speaker. It will provide a much cleaner measurement of the direct sound that is easy to work with.

I test a focal alpha 65 evo because it have carbon fibre and should be better precision in the above 3 pictures. only single speaker . 2 is kaii LP6 . maybe you can show measure if that look in degree same when use Add LF Tail and Add HF Tail or not

the last pictures i post from kali have at 55 hz around - 180 deg. and at around 200 hz - 360 deg. without this options it have around +70 deg at 55 hz and 0 deg at 200 hz.

so what is correct now ?. results are much diffrent
 

jtalden

Senior Member
Joined
May 22, 2017
Messages
887
Location
Arizona, USA
More  
Preamp, Processor or Receiver
Marantz AV7705 Pre/Pro
Main Amp
VTV 6 chnl NC252MP P-amp x 2
Additional Amp
Behringer DCX2496 x 2
Universal / Blu-ray / CD Player
OPPO BDP-103 Universal Player
Front Speakers
DIY SEAS H1456/H1212 Spkr x 5
Subwoofers
DIY JBL 2235H 15" SW x 2
Video Display Device
JVC DLA-X790R
Screen
Da-Lite Da-Snap 39105V - 92"
How are you measuring these speakers?
  • Mic 0.5 - 1 m distant?
  • Speaker away from close reflections in the room?
I ask because the direct sound is best measured this way.

It appears there is lots of room effects in your measurement. We don't want that if we are looking to identify the phase of the direct sound. You could apply a FDW of maybe 4 - 6 cycles to your measurement and see if the phase is improved enough to see the trend of the direct sound phase rotation. A new measure is probably a better idea.

Personally, I use an FIR filter to correct the actual measured phase rotation rather than the excess phase portion. It does seem however, that it is much more popular among other hobbyists to correct just the excess phase portion.

Below is a 32" measurement prior to any phase correction. the DIY speaker measured is shown in my avatar. I do have some nearby room interference here, but selected REW settings to better reflect the direct sound.
49971
 

user44455555

Registered
Thread Starter
Joined
Jan 16, 2021
Messages
137
thank you. this "Add frequency depend window with cycles 6" help most. I know when i have too much room reflections because desktop plate is too near i get such phase jumps in measure as can see in screenshot 1 at 1 khz around. I have my speakers on desktop and hear position is 55 cm away. desktop plate is 40cm below speaker. I need for no such jump in phase measure put a basotek foam plate on desktop. this measure is without foam plate. the other walls are all more than 1 meter away. i do now more tests if the results are repeatable. I test diffrent cycle parameters and i can set cycles upto 12 . on 13 i get the jump at 1 khz

no add frequency depend window.jpg


add frequency depend window.jpg
 
Last edited:

jtalden

Senior Member
Joined
May 22, 2017
Messages
887
Location
Arizona, USA
More  
Preamp, Processor or Receiver
Marantz AV7705 Pre/Pro
Main Amp
VTV 6 chnl NC252MP P-amp x 2
Additional Amp
Behringer DCX2496 x 2
Universal / Blu-ray / CD Player
OPPO BDP-103 Universal Player
Front Speakers
DIY SEAS H1456/H1212 Spkr x 5
Subwoofers
DIY JBL 2235H 15" SW x 2
Video Display Device
JVC DLA-X790R
Screen
Da-Lite Da-Snap 39105V - 92"
Yes, your 2nd chart looks good.
 

user44455555

Registered
Thread Starter
Joined
Jan 16, 2021
Messages
137
In the newest version the null pointer error do not come. Thanks for this very fast fix. I still notice lots diffrence when enable Add LF tail when use SLope db/oct 12 or 24. with 48 db slope the curve look best
 

John Mulcahy

REW Author
Joined
Apr 3, 2017
Messages
7,212
The minimum phase is determined by the shape of the magnitude response, if the shape is changed by the tails the result will change correspondingly. The tails should be chosen to reflect how the device would behave if the noise floor was not a factor. For HF the bandwidth of the measurement needs to be higher (ideally much higher) than the bandwidth of the device so that the roll-off occurs within the measurement bandwidth. The help covers that in detail.
 

user44455555

Registered
Thread Starter
Joined
Jan 16, 2021
Messages
137
Hello In the newest version i get with other measure this message. I remove my java install. maybe it is the reason that no better error report ?

in details it output only this

REW V5.20.5 running Azul Systems, Inc. JRE 1.8.0_302 64-bit on Windows 10 Locale: language de, keyboard DE, windows-1252 at 96 DPI

Message:
java.lang.ArrayIndexOutOfBoundsException
Stack Trace:

See also screenshot. when click on generate the error come. I use no smoothing and no tails and i can deactivate cal file use too. the error come. it happen not allways . but when try 10 times generates error come in 4-6 times. it happen only when SPL & phase page is show and press generate. maybe it is because phase go in top out of display

the measure file i have attach too
 

Attachments

  • focal allpass.zip
    1.3 MB · Views: 12
  • out of bounds (2).jpg
    out of bounds (2).jpg
    226.8 KB · Views: 20

John Mulcahy

REW Author
Joined
Apr 3, 2017
Messages
7,212
Can you please attach a zipped copy of the REW log files folder, the location is shown in the About REW dialog.
 

user44455555

Registered
Thread Starter
Joined
Jan 16, 2021
Messages
137
Thanks, I have fixed that for the next build.

I test new build it happen only after several generate now and very rare. maybe you can see. it is only a very small problem now, much better as before. and the error messages are also more precise

REW V5.20.6 running Azul Systems, Inc. JRE 1.8.0_302 64-bit on Windows 10 Locale: language de, keyboard DE, windows-1252 at 96 DPI


Message:
java.lang.ArrayIndexOutOfBoundsException: 52132
Stack Trace:
52132
roomeqwizard.MeasData.excessMinMax(y:6848)
roomeqwizard.MeasData.excessPhaseMinMax(y:6771)
roomeqwizard.RI.C(y:5640)
roomeqwizard.RI.A(y:3189)
roomeqwizard.RI.R(y:233)
roomeqwizard.RI.A(y:652)
roomeqwizard.RI.A(y:1556)
roomeqwizard.RI.paintComponent(y:3195)
javax.swing.JComponent.paint(JComponent.java:1056)
javax.swing.JComponent.paintChildren(JComponent.java:889)
javax.swing.JComponent.paint(JComponent.java:1065)
javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
javax.swing.JComponent.paintChildren(JComponent.java:889)
javax.swing.JComponent.paint(JComponent.java:1065)
javax.swing.JLayer.paint(JLayer.java:433)
javax.swing.plaf.LayerUI.paint(LayerUI.java:79)
javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
javax.swing.JComponent.paintComponent(JComponent.java:780)
javax.swing.JLayer.paint(JLayer.java:428)
javax.swing.JComponent.paintChildren(JComponent.java:889)
javax.swing.JComponent.paint(JComponent.java:1065)
javax.swing.JComponent.paintChildren(JComponent.java:889)
javax.swing.JComponent.paint(JComponent.java:1065)
javax.swing.JComponent.paintChildren(JComponent.java:889)
javax.swing.JComponent.paint(JComponent.java:1065)
javax.swing.JComponent.paintChildren(JComponent.java:889)
javax.swing.JComponent.paint(JComponent.java:1065)
javax.swing.JLayer.paint(JLayer.java:433)
javax.swing.plaf.LayerUI.paint(LayerUI.java:79)
roomeqwizard.WB.paint(y:2131)
javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
javax.swing.JComponent.paintComponent(JComponent.java:780)
javax.swing.JLayer.paint(JLayer.java:428)
javax.swing.JComponent.paintChildren(JComponent.java:889)
javax.swing.JComponent.paint(JComponent.java:1065)
javax.swing.JComponent.paintToOffscreen(JComponent.java:5210)
javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579)
javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502)
javax.swing.RepaintManager.paint(RepaintManager.java:1272)
javax.swing.JComponent._paintImmediately(JComponent.java:5158)
javax.swing.JComponent.paintImmediately(JComponent.java:4969)
javax.swing.JLayer.paintImmediately(JLayer.java:415)
javax.swing.plaf.LayerUI.paintImmediately(LayerUI.java:717)
javax.swing.JLayer.paintImmediately(JLayer.java:410)
javax.swing.JComponent.paintImmediately(JComponent.java:4950)
javax.swing.JLayer.paintImmediately(JLayer.java:415)
javax.swing.plaf.LayerUI.paintImmediately(LayerUI.java:717)
javax.swing.JLayer.paintImmediately(JLayer.java:410)
javax.swing.JComponent.paintImmediately(JComponent.java:4950)
javax.swing.RepaintManager$4.run(RepaintManager.java:831)
javax.swing.RepaintManager$4.run(RepaintManager.java:814)
java.security.AccessController.doPrivileged(Native Method)
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
java.awt.EventQueue.access$500(EventQueue.java:97)
java.awt.EventQueue$3.run(EventQueue.java:709)
java.awt.EventQueue$3.run(EventQueue.java:703)
java.security.AccessController.doPrivileged(Native Method)
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
 
Top Bottom