Dave's Speaker Pages

WinPCD -- Version Information

WinPCD Index
Background and History
Download and Installation Instructions
Speakerdesign Home Page

v1.510 - 10 Mar 2017 - Polar (off-axis) Calculations Enhancement and Bug Fixes

Change summary:

v1.501 - 9 Jul 2016 - Bessel Filter and user Requested UI Changes

The UI for driver filter type and order selection now has separate pull-downs for each part. There are also several Bessel "types". They are essentially all the same algorithm. Bessel filters were originally lowpass only with a specific time delay as the goal. It provides minimal group delay in achieving this. They were not designed for nor were they used in crossovers. However, they can be used as an option, but it's mostly academic. A more thorough discription can be found in the WinFilters index page.

Several user requested or influenced changes have been made as well and are listed below.

v1.500 - 26 Aug 2015 - Listening Window Average

A listening window average response is occasionally measured and presented in reviews of speakers. It's useful to see what the response is, but usually it's very limited. One site known for providing this makes only five measurements. Two are at +/- 15 degrees horizontal, two at +/- 15 vertical and the on-axis response. These are averaged. It's a good start and since it inherently includes diffraction, shows more than the crossover influence. I wanted WinPCD to provide more in the polar response. It currently does not include diffraction modeling, but can cover the front hemisphere polar response with regard to the crossover rather well. The vector magnitude (distance) is 1m. Cones are at 5 degree intervals from the on-axis, 18 total (90 degrees / 5). Each cone is a set of vectors taken at 5 degree rotation intervals around the on-axis vector. The result is a set of 72 vector calculations for a 360 degree rotation. This yields an average of 1297 vectors including the on-axis. But be warned, I have not yet found an easy way to interrupt the process (a .NET thing). Once started, it takes several minutes to complete. The program is unresponsive during this period. I hope to fix this later.

This was originally considered to be an easy addition. It was not. The first stab at calculations and single average looked good, but had obvious errors. I added a second graph (more time consuming than I anticipated) to display the current vector calculation location on a 2D polar map to debug and verify the correct 3D rotation matrix calculations. The user can watch the vector location of each SPL calculation for each cone of vectors that are then averaged for display. A representative set of cone averages is then overlayed on the graph along with the average for the front hemisphere. If driver diameters are provided, the driver off-axis response is estimated with a Bessel function. This final average should be a rough estimate of the power response in the front hemisphere for the section above the step area, but without diffraction influence, of course. Below the step area, since that is a transition to 4-pi, it isn't an accurate indicator of the true power response. The individual window averages should be good across the spectrum, however, since these exclude any room response issues.

The original power response calculation in the system window assumes driver outputs to be totally uncorrelated and does not have the driver off-axis estimate (Bessel). This calculation should be more accurate.

In my testing, the 45 degree cone average was almost identical to the hemispherical average (roughly the power response above the step area). This makes sense since the off-axis directivity is a function of diameter. 45 degrees is the middle value, so the 0-45 and 45-90 ranges should average to the 45 value. In reality this won't be true because it's unlikely that the change in directivity of a dynamic driver will change linearly, which is the assumption when using the Bessel function. Despite that, the average of any individual cone section does serve to show the approximate change with angle.

hemispherical

To coincide with the listening window average calculations, the rotations made when changing the axis manually on the main system page now rotate the mic position the same way. What this means is if you rotate about the y-axis (horizontally), then about the x-axis (vertically), the resulting location will not be the same as rotating in the reverse order. Matrix multiplication used for rotation is not commutative and it mirrors what you would see were you to do this with a physical mic position (vector) rotatable about an origin (0, 0, 0).

One other function change is included. The transfer function graph scale on the System window now is referenced to 0db.

The target of the build has, since the beginning, been for an x86 cpu. This has been changed to what's called "Any CPU". The processing time should be reduced depending on the CPU in your PC.

v1.410 - 22 May 2015

This was supposed to be another small change. The phase for equalized driver responses did not change when a drive was inverted. It does now. That was the to be the main change. I've wanted to have a separate tab to make it easier to determine relative acoustic offset, I had some time, so that is now added. I included some abreviated instructions for making typical measurements and a step-by-step for the process to determine the offset for a pair of drivers.

v1.403 - 4 Jan 2015

This was supposed to be a small change. The automatic calculators for textbook crossovers was the impetus. This had been low on the priority list, but recent comments nudged me to it. A simple rough calculation for a generic calculation was not satisfactory. I extended it to using the exact calculations for the electrical crossovers specific to each type. What this means is that, for example, the LR2 textbook calculations are only valid for a 2nd order electrical crossover, LR4 requires requires a 4th, B3 requires an electrical third, etc. The calculation requires that the user select the proper electrical crossover beforehand. The code uses the selected crossover as part of what the textbook calculation is to make. If it does not match the desired textbook crossover selected, it will not continue. Unused crossover circuit elements, if there are any, are unchanged.

The other automatic circuit calculations also seemed to be a simple task, until I decided to make it more thorough. The calculations that have been added are the parallel notch circuits before/after the crossover and the series notch circuits in parallel with the driver.

The before/after circuits have only one calculation for now, that being the LCR. The user enters the T/S parameters required and the desired Fc (center frequency).

Only two calculations have been programmed for the circuits in parallel. These are the Zobel (RC) and a full trap (LCR). The user must enter approximate T/S parameters for these and specify which of the three legs to populate, rather than defaulting to a fixed position for either of them.

All of the above are meant to be starting points only. It's unlikely that any textbook calculation will be appropriate as a final value.

While working on this I found that reinitializing the crossover wasn't really complete. Only the affected components were initialized, the active states of circuits were not. Now all controls involved are reset accordingly. That is, circuits such as series/parallel notches, crossover circuit selections (type and order), etc. are all set inactive.

v1.402 - 8 November 2014

BUG FIX - 3-Way crossovers with a third or fourth order electrical lowpass on the midrange had an error with the third component, the second series inductor, if it is non-zero. This release fixes that.

v1.4 - 12 October 2014

There are quite a few changes and additions in this version, two in particular, cleaner GUI and surface off-axis plots. That last point is because surface plots were ready to go until I learned that the license that I thought would allow for a "Community Version" turns out to allow it only for personal use or distribution under the GPLv3 license that I am not yet ready to follow. I could buy it, but the cost is $100's and I am not doing this commercially, so the expense rules that out. It's a huge disappointment as I invested a lot of time into creating surface plots from the package. The descriptions below were written prior to learning of the license issue.

I intended to change only the polar scheme. The original controls moved the mic (listener) position in the x or y plane or by angles that kept the mic position at the same distance in the z-plane. What I didn't realize was that this limited the maximum angle.

I wanted to be able to add graphs for the full polar range of -90 to +90 degrees. The program is changed to rotate the mic position at a constant radius for polar calculations. This allow me to easily create a set of off-axis curves for plots, whether 2-D or 3-D. While working on this, I found a graphing tool that provided for surface plots, although it is a bit buggy. The code is provided by ILNumerics, v3.3, it's their last "Community" version. This is much better than the 2-D graphs I had planned despite the bug with it. The bug has to do with the video card/driver. Even my fairly recent, 3 year old i7 laptop is affected by it. The text does not show in the graph using OpenGL in my case, it does on other PCs. In GDI mode it looks fine, but is frustratingly slow both to create and to rotate afterwards.

The polar calculations and the graphing of off-axis points now include the driver directionality as an option. This uses the classic Bessel function for now. I'm not fully satisfied with that since this assumes a flat piston. My plan is to address the further at some point. I have a couple of ideas to modify the calculation to try to more accurately represent real-world drivers since they are not flat pistons. This will have to wait for a while, however.

The polar plots are not the reusable type. Each time you display a plot, a new window will open. You can compare multiple off-axis selections side by side. The windows are, as usual, resizable. Options in each window allow you to display specific sets of curves to make it easier to see what's what. For example, you can display all curves (the default, 5 degree spacing) or display only every 15 or 30 degree spacing.

horizontal_off_axis

vertical_off_axis

The GUI changes are all for cleanup. The tab pages were all cluttered. The new scheme eliminates much of the "description" blocks and wraps each section in a frame with the description for that group in the frame. It's easier to see what's what this way. The relative positions have all remained the same, so it shouldn't be confusing with the new scheme.

One last item to has to do with the graph tool used. It's released under the GPLv3 license. I've decided that I can't include the surface plots due to the requirements of the GPLv3 licensing.

v1.301 - 15 May 2014

Asymmetric bandpass targets are now funtioning for the midrange. Symmetric ones were used from the beginning because that was much easier to implement. I intended to update it, but kept putting it off for other changes. It was about time to get it done.

A minor bug was fixed as well. When setting the target back to "Not yet selected", the last target remained displayed. This was true of all driver targets. Each target will now go back to flat if the target is changed to "not selected".

One other change is that Bessel filters are now in the midrange. I left that out initially because it didn't seem likely than anyone would use Bessel filters in a 3-way, but they are now included.

v1.3 - 9 May 2014

This is a small update, but due to one added bit of functionality, I decided on the v1.3 tag. The biggest change is an option related to the case when two midrange drivers and/or two woofers are used, each with its own set of measurement files. An option now exists to switch the connection between parallel and series. Rather than have to measure two drivers connected together and import them as a single driver if connected in series, each driver is now fully independent with the exception that there should always be a driver in the primary position. Driver 2 should never be entered as the only one. I'm not quite sure if the program would fail at some point with only a driver 2 input. I have not added code to prevent this occurrence. An additional benefit with this is that the off-axis modelling of series connected drivers will be correct, disgarding the usual issue with differing diffraction signatures in the off-axis area.

A second change is in the schematic overlay. The inductor and capacitor values display to three decimal places. The controls for these on the main tabbed window are unchanged. This was done on request for the case where very small values are used, primarily for some resonant traps. The data entered was always maintained as entered, but the limit to two decimal places inherently displayed a rounded value, though the actual value was maintained internally.

Several other changes are included, primarily bug fixes. The session files did not properly save the connection polarity of the tweeter and midrange. One case of a first order electrical crossover highpass in one section was being reloaded as second order. Other minor ones were made, but these did not affect any calculations, they had to do with the display of controls.

I haven't been able to do an exhaustive set of tests, so if you encounter a problem, please post it on the forum at Meniscus Audio.

v1.2 Update 1 (v1.201) - 15 Nov 2013

The schematic window was frustrating at times due to size, though it is resizable. The top section (description area) could not be hidden. It overlaid other windows too much. This version has a change to the schematic window placing the descriptions underneath the schematic itself. You can now resize the window leaving only the schematic showing. It has a maximum size as well, both horizontal and vertical so that maximizing it manually won't make a printout shrink in size. Keep in mind that if you do print it, it will print only what is visible, so be sure to resize to maximum prior to printint if you want to see the whole circuit.

This is probably of more benefit to those with smaller displays. You can now resize the main window, the system graph window and circuit overlay so that it's all easily visible without the schematic obscuring another window. Remember that you don't necessarily need the system window during design. Each driver SPL graph has an option to display the summed response. You'll need the system graph, though, to see the system impedance and phase or multiple driver graphs simultaneously. The screen capture below is 916 x 789 as an example of how it can be set up.

v1.2 - 10 Nov 2013

This version has one major improvement, several minor improvements and a small bug fix.

The big change is to the schematic overlay. Changes made to the component values on the schematic now update the design. The primary window is updated as are all calculations and related graphs. Previously, the schematic window was passive and meant primarily to let the user print a schematic with the values overlaid.

The crossovers now include a resistor on the capacitor leg of the parallel traps, the "before" and "after" crossover sections. This allows fine tuning if the capacitor is used as part of a trap. It's one more bit of flexibility.

The graph that had remained on the System page has been moved to the System graphs window. I don't know why I didn't do this when that window option was added. The current System page has been re-arranged a bit, but the "work flow" layout is unchanged. There's now additional space for new items in the future.

The bug fix was a graph update issue. If the tweeter or midrange was toggled off/on in the System page, the raw measurements on the System graph window were lost for the respective driver. The design was not affected.

v1.1 Update 5 (v1.106) - 31 Aug 2013

Unfortunately, this release is purely for a bug fix. A user reported an issue with saving/reloading session files for 3-way design. That particular problem was in the SPL file load for the midrange from the system page. Loading the file from the midrange page seemed to work fine. While investigating this another problem became apparent. I have used reloading of a previous session file for so much testing that I have not tried a design from scratch for some time. To verify the bug fix above, I noticed a similar problem with saving session files. This version has fixes for both and I've tried to test it thoroughly. I suggest downloading this latest version if you save session files for projects, which I assume is nearly universal. I'm a bit disappointed that this got by me, but I do believe that it is now working fully. If you have any issues whatsoever, please contact me or post at the forum.

v1.1 Update 4 (v1.105) - 24 Aug 2013

Several changes are included: some improvements and one bug fix.

The power response can now be displayed on the system SPL graph.

The absolute level of the imported SPL measurement files can be changed if correction is needed (e.g. different measurement conditions) and can be made during file importation or any times afterwards.

The bug fix is for the message related the mic/listening distance. The calculation was correct. The message now relates only to distance from the origin in the z-axis and is no longer automatically displayed. An associated change with that calculation was found to be necessary. The off-axis is limited to 75 degrees due to an issue with removing any excess-phase wrap and CPU time for very large angles.

For those technically curious, versions prior to 1.105 will crash on wide angles due to excessive recursion and stack limitation having to do with removal of phase wrapping. Moving to the traditional loop allowed the program to go CPU intensive, hence the program became unresponsive. The angle limit was a quick fix. Long term I think a change in the off-axis algorithm is needed. Angle change should be a constant vector magnitude change rather than leaving the listening distance constant as it does now.

v1.1 Update 3 (v1.104) - 26 Apr 2013

The impedance graph for the tweeter in a 2-way was not updating automatically due to a typo. That is corrected. The SPL was not affected.

v1.1 Update 2 (v1.103) - 19 Apr 2013

This includes one small bug fix and one suggested addition.

The bug fix is for the open dialog for drivers. If a change was made to the default directory, the session file load correctly used it, but not the file load. That should now work correctly.

The suggestion was to have a System Graph Window button on each driver tab for convenience. These have been added.

v1.1 Update 1 (v1.102) - 19 Apr 2013

If an error exists in the frd or zma files, a duplicate entry at any given frequency, the program would crash. This is unlikely for any direct software generated files. This situation does exist, however, in some PCD v6 sample files provided for testing. It is now fixed. It's unlikely that users would encounter this in normal use, but I've corrected it anyway.

v1.1 Release - 18 Apr 2013

Version 1 was designed to somewhat emulate the PCD. That one being an Excel spreadsheet, it didn't provide nearly as much flexibility as a free-standing program can provide. But it is in wide use and I originally thought the transition would be easier if WinPCD maintained a simliar scheme. However, there were immediate requests to make the system window "detach", so that was step one of the v1.1 release.

Version 1.1 is almost exclusively changes related the user interface. Much of it turned out to be easier than I had expected. It also provided the impetus to move more of the tabs to windows that are groups of similar tabs. At this point those windows are now the (original) main system/driver/design, the system SPL/Z graphs, all tabs for the schematic layouts (originals from the PCD), schematics with crossover components overlaid (real-time update), generic circuits (again, originals from the PCD) and finally, one for the instructions.

All windows can be re-sized. However, only two have contents that change size with the window. Those two are the instructions and the default schematics windows. This is due to the difficulty in having multiple components that must remain in the same relative position and still legible (scroller size reduction isn't an option).

The main window was also slightly reduced in vertical size. The change was small, but this should help to satisfy those who had concerns with using the program on small laptops. Check out the window capture page to see how these windows can be re-sized and positioned for easier use.

The schematic with component overlay window is a long-term item I wanted to add. It resulted in a secondary benefit. It made a bug apparent in some code changes I had made in crossover calculations I made to do a bit of code reduction. I also found one bug in the circuit setup code. If the user changed a crossover order to none ("No xxxx Pass Crossover"), the last number used actually remained in the circuit, despite the change in the form display. That is now corrected. It should have been the default in the code up front, but I missed it.

Version 1.1 Screen Captures

v1.0 Release - 19 Feb 2013

WinPCD v1 is, at long last, ready to release. This version is the first phase. Being the first version, the focus was on getting the basics working which were the 2-Way and 3-Way design functionality. Those are now complete, though I wouldn't be surprised to hear of a bug or two. I've put it through a fair amount of testing, but it's unlikely that I exercised it in every possible way, so if you use this, please send an email if you encounter a bug.

Click on an image to open a new window with a full size display. Only the passive crossover sections are shown. Those are the first that will be implemented as far as calculations are concerned. The circuit tabs are collections of the circuit displays that were found in the original PCD.

Version 1 Screen Captures

Top of the Page
WinPCD Index
Speakerdesign Home Page