Speaker Workshop has been around for quite a while. The program was intended to be used as a complete loudspeaker design package. It includes tools to measure and model loudspeaker systems. Many have found that building the necessary jigs, amplifiers, etc. is more frustrating or time consuming than they would like. However, Speaker Workshop has a very good crossover simulation package that can be very useful, both for generating prototype crossovers, or simply used as a learning tool.
Several other hobbyist have developed tools that allow a multi-way loudspeaker to be simulated using manufacturer supplied frequency and impedance response charts. Visit the Frequency Response Data Consortium to download any tools that may be of interest to you. In this tutorial, three of the tools will be addressed: SPL Tools (SPL Tracer, in particular), the BDS (Baffle Diffraction Simulator) spreadsheet, and the FRC (Frequency Response Combiner) spreadsheet.
This tutorial will guide the user through the basic steps necessary to obtain .frd and .zma files, account for baffle geometry, import and combine files in Speaker Workshop, and design and simulate crossovers in Speaker Workshop.
FRD and ZMA files...
Without .frd and .zma files for the drivers you are using, you are out of luck. If you happen to know someone that has measured your particular drivers and is able to provide you with the data files, WONDERFUL. However, this information is not typically available. On the other hand, many manufacturers and distributors provide this information in graphical form. If you can find the charts, you can generate the data yourself. One method would be to create a spreadsheet and manually enter all of the data yourself. That's way too time consuming and hardly worth the effort. The better solution is to use SPL Tracer. (Note: I haven't been able to get SPL Tracer to work under Windows XP)
SPL Tracer is a nice little program that lets you copy an image into the program and then "trace" the plot to create a data file. You can get the image file from a .gif, .jpg, .bmp, or even from a .pdf file.
1. Copy the picture to the clipboard (for a .pdf file, make sure the Graphics Select Tool is selected).
2. In SPL Tracer, select File -> Import Graph -> From Clipboard. The graph should then appear in the window (I would recommend using the smaller window size, rather than full screen)
3. The next step is to set the alignment for the graph. Under Alignment, select Register Low Frequency, enter a frequency value, and then align the blue line with that frequency on the graph. Click the graph once you have the alignment set properly. Repeat this process for the high frequency. If you are generating a frequency response data file (.frd), register the high and low amplitudes. If you are doing an impedance file (.zma), register the high and low impedance, along with the units. (Base 10 would be a log scale, i.e. 1, 10, 100 ohm all at equal intervals. Base 2 would be 2, 4, 8, 16... at equal intervals. Base 1 is a linear scale)
4. Begin tracing the graph by selecting Trace -> Start SPL Trace if you are tracing an SPL graph, or Trace -> Start Impedance Trace if you are tracing an impedance graph.
5. There are two different ways to trace the graph. The first is to use the mouse. Line up the white line with the graph on the far left and click the mouse. The gray area will advance, and is ready for another data point. Align the white line with the graph and click again. Continue until you have traced the entire graph. The other method is to use the up/down arrow keys and the Enter key. You will need to initially use the mouse to capture the first point.
6. Once you have completed tracing the graph, select Trace -> Stop Trace. To save the file, select Yes. A dialog box will appear. Select a location and file name to save the file as. The appropriate file extension will be provided.
You have just completed generating your own .frd and .zma files. The only problem is, those files were probably generated on a very large baffle. Your speakers will probably have a relatively narrow baffle. Let's fix that...
Now that we have .frd and .zma files for our drivers, we need to design the baffle layout. Use the BDS Spreadsheet to layout the size and location of the drivers. (You will need Microsoft Excel to use this spreadsheet) The spreadsheet is a little intimidating initially. Read the Operations Manual for a better description of how to use the program. Once you finally get it figured out, generate the driver responses on the highest accuracy setting. (It will take a while to crunch the numbers). Near the top of the worksheet there is an option to save the response. For each driver, save the resulting baffle response. Make sure you name them so you know which response belongs to which driver.
(Note: This is actually one of the more difficult steps of the whole process. Make sure you take your time and experiment with different driver arrangements, baffle sizes, and edge treatments. The goal is to design a baffle that produces the smoothest response.)
So I've got all the files, now
None of the tools we've used so far have taken phase into account. This is where the FRC spreadsheet comes in handy. It allows you to import the .frd files you have generated, combine them, and then generate the minimum phase data. I'm not sure why it doesn't want to work for me, but I've had some trouble with the combining part. There is a way around that, which will be discussed later. (If you can get everything to combine properly, just use the FRC to do the combination, it should be simpler that way.) Here's my method:
Load in a frequency response file (either the driver, or the baffle response) in the "Driver Base" column, by pressing "Execute". Select the file you want to load. The data should load, and you should see a graph of the frequency response. Just above the graph is an area for generating the phase. Select "Precise Phase and Group Delay", then select "Driver Base" from the drop down menu. Selecting "Extract Min Phase" begins the generation process. Depending on the number of points in the data file, it may take a while. Once the phase has been generated, save the file. This is accomplished by going back to the Driver Base column, pressing the "Load" button (it should toggle to say "Save" after you push it), then pressing "Execute". Rename the file if you wish, or just keep the same name. Repeat this process for all drivers and baffle response files.
Setting up Speaker Workshop
Open Speaker Workshop (SW) and open a new project. I like to create new folders for things like the enclosure, crossover, raw driver data, etc. This can be done by either selecting Resource -> New -> Folder, or by right clicking in the project tree window and selecting New -> Folder. The next step is to import all of the .frd and .zma files we have created. Import the files by either selecting Resource -> Import... or by right clicking in the project tree and selecting Import... A window will pop up allowing you to select a file to import. There are a number of file types you are allowed to import, but we are only concerned with the .ZMA and .FRD files. Select the file you want and hit Open. This will import the file to the projects base directory. You can move the file to a different folder by simply dragging it to the appropriate folder. Continue with this process until ALL of the files have been imported.
On to the fun part
Now that we have .zma and .frd files (with phase data), we can begin modeling a crossover... almost. First, we need to combine the baffle response and the raw driver data. Select one of the raw driver files in the project tree window. Copy and paste a copy of the file (Ctrl+C, Ctrl+V). (You can rename this file if you want. SW appends a ".1" extension to the end.) Select the new file (make sure it is the one selected!), then select Calculate -> Combine. A window will pop up. In the top box should be the name of the file you selected. From the drop down menu, choose " * (Times)". Click the "?" next to the bottom box and select the baffle response associated with the driver. Hit OK, and the responses will be combined. Repeat this process for all of the drivers. At this point, the response is actually 6dB higher than it would be in a 2pi environment (if you don't know what that means, find out somewhere else, I'm getting tired of typing!). If you want to correct for that, you can reduce the level of the drivers by selecting the combined file, then choosing Transform -> Scale... A window will appear that lets you choose how to scale the data. From the drop down menu, choose Subtract. Choose the dB Scale factor and enter 6. This will shift the level of the driver down by 6dB. This is particularly important if you are using one set of actual measurement for one driver, and "traced" values for a different driver. Otherwise the traced driver would show a sensitivity 6dB greater than reality. Most of the time you will be strictly using either measured or traced data (not mixed), so it's not a real major issue. Just remember that if you don't correct for it, the actual efficiency will be about 6dB less than the simulations show.
Now we have finished the data manipulation and can get down to work designing a crossover. First we need to create the actual "drivers" themselves. Right click in the project tree window and select New -> Driver. Name the driver as one of the drivers you are using. Repeat for each of the other drivers. Move the drivers to the appropriate folder, if you want. Select one of the drivers, right click on it and select Properties... Another window will pop up which contains all of the information about the driver. You can enter comments on the General tab. On the parameters tab, you can enter the T/S parameters. I'm not sure these values are used in the crossover calculations, but you can enter them here if you wish. If you want to do any enclosure modeling, you will need to fill this information in. The Data tab is the one we're most interested in. This is where the impedance and frequency response files are associated with the driver. Select the "?" next to the Impedance box, and choose the appropriate impedance file for the driver. Do the same for the Frequency response, making sure you choose the .frd file that corresponds to the combined driver/baffle response. For crossover modeling, this is all that is necessary on the Data tab. Hit OK and you are done. Repeat for each driver.
Now it is finally time to get to the crossover. For a 2-way design, we'll need 3 different crossovers: high pass, low pass, and a combined crossover. For a 3-way, you would need 4, and so on. This is because SW can only do crossover optimization with a single driver. In the project tree window, right click and select New -> Network. Name the network, and move it to the appropriate folder. Repeat for all of the necessary networks.
To create a crossover, open one of the networks. It should appear in the main window. Initially, the only thing in the network window will be the source. Add "stuff" to the crossover by right-clicking in the window and selecting Insert ->, and then selecting a component to add. You will be prompted for a name and a value for the component. You can add a driver in the same way. Select the "?" and choose a driver. A simple way to drop in a standard crossover is as follows:
1. Insert a driver.
2. Connect the driver and Source. Connecting components is achieved by selecting a component, moving the mouse over one of the terminals (should be a large circle), clicking and dragging the line to the terminal on the component to be connected. If the component already has something connected to it, the other connections will be deleted. To avoid this, hold the Shift key down while dragging. To delete a connection, select a component, click and drag from one terminal back to the same terminal. It's a little confusing, but you'll figure it out.
3. After the source and driver are connected, right-click and choose Insert -> Stock Crossover...
4. Select the order, highpass/lowpass, type and crossover frequency. Also choose the "Match To" type. Because we are going to be doing an optimization later, the type, frequency and "Match To" selections really aren't very important.
5. Hit OK and the necessary components will be installed. This is a quicker way to insert all of the components for a particular crossover type, without having to name each component, etc.
To insert a stock Zobel, repeat the process, but choose Insert - > Impedance Compensation... You can either choose a Zobel (Inductive Rise) or an impedance trap to tame a Resonance Peak. Choose the frequency (not real sure what that would be for a Zobel) and select Use Driver Impedance. Hit OK and the components will be inserted. Inserting a stock L-pad is a similar method.
Any of the components can be moved around the screen, renamed, values changed, etc. You can get to the properties of the network by right-clicking and choosing Properties... This brings up the Properties window. The first tab, General, lets you make comments, and select a few options. Under Generate, you can select whether or not you want impedance and frequency responses to be generated. Not much will happen if these aren't checked! You can also have an overview chart generated. From the Components tab, you can modify any of the "components" - resistors, capacitors, inductors. You can also change where the text for the component is displayed by clicking one of the buttons with a resistor and yellow and white boxes. For inductors, it's important to specify a DCR. This will actually change the response more than you might expect. Inductors with high DCR values will actually attenuate the response of a driver if the inductor is connected in series with the driver. From the Driver tab, you can add or delete drivers. In the offset box, you can set the relative offset of the drivers. For example, if the acoustic center of the tweeter is 1" ahead of the woofer, enter a -1 in the offset. (I think there is still some confusion about this, so entering +1 might actually be the right answer here...might want to ask on the Speaker Workshop Forum) Make sure you enter an offset value (unless the drivers were measured on the same baffle at the exact same distance). The offset will have a huge impact around the crossover frequency. Also, if you want individual responses generated for each driver, select the Individual Response box. To see what happens when you connect a driver with reverse polarity, select the Flip Polarity box.
Once all of the components are inserted in the crossover, you can begin generating impedance and response simulations. To generate the response, right-click and choose Calculate Response... A new graph will be generated showing the response of the driver/crossover response. If you had the Network Impedance selected, an impedance response will also be created. Every time SW calculates the response, the project tree collapses, so you may need to search back through to find the right file. The graph may look weird. Double clicking on the graph will bring up a window that lets you adjust the display. On the General tab, I usually turn off the Phase. For the X-axis, I usually set the range from 200-20000Hz. For the Y-axis, I usually use a range from 60 - 100 dB, with major grid lines in increments of 5.
The great thing about the SW crossover simulator is that it allows for crossover optimization. This can be a bit of a complicated process. Here are the basic steps.
Select a network in the project tree window. From the menu, choose Network -> Create Goal... A window will pop up with several selections. First, choose the ACOUSTIC response you are trying to achieve (I usually shoot for 4th order Linkwitz-Riley responses. These can usually be attained with 2nd order ELECTRICAL circuits). Make sure you select the appropriate type of crossover (high or low pass). Set a target crossover point in the Resonant Frequency box. There are several ways to set the level for the target response. My preference is to use the Absolute method. After inspecting the frequency response files, determine what you think the overall system efficiency should be. Take into account things like the baffle step and the efficiencies of each driver. You may need to do some experimenting to see what you think looks good after a few simulations. I usually try to get rid of as much of the baffle step as possible. To do this, set the level to an Absolute value that is at the level of the lower part of the baffle step. Select OK. Do the same for each of the other networks.
To perform the optimization, open a network. Select Network -> Optimize Network... A window will open that allows you to specify a range to optimize over, and the number of points to use. For low pass filters, I usually use a range from about 200 - 5000Hz. For high pass, 1000 - 15000Hz. Number of points should be set somewhere between 100 and 300. For the Target Frequency Response, select the goal you are trying to optimize to. MAKE SURE YOU PICK THE RIGHT GOAL. If you select the low pass goal when you are trying to optimize the high pass filter, you will get very screwy results. You can also select which of the components you want SW to vary. Sometimes during the optimization process, values used in a Zobel will be set extremely high or extremely small. This is an indication that the optimizer doesn't think those components are necessary. If you are sure you want them, set values for them and then un-select them when you are doing the optimization. The optimizer will adjust the other components, bu leave those as you have them. This is also a helpful feature when you are specifying the actual, available values. You can optimize, set some component values to those that are easily attainable, optimize again without varying the determined values, and so on until you have a final response.
When you hit OK, the optimizer adjusts the values until it gets a response that closely matches the target response. You will need to recalculate the response after the components have been changed (this applies to any time you change a component value). To compare the response to the goal, right-click on the graph and choose Add... Select the target response, and it will be added to the graph. If all has gone well, the simulated response will match very closely to the goal. If not, try changing something until it's closer.
You will want to experiment with different crossover topologies, optimization ranges, system efficiencies, etc. to get a better idea of the possibilities, which of course are pretty much endless. Keep in mind that the optimizer will only work with a single driver. That's why we had to create separate networks for the high pass and low pass sections.
To see what the system response will be, copy the components and drivers from both the low pass and high pass networks to the Combined network. You can copy everything by "box-selecting" all of the components and the driver, pressing Ctrl+C, then pasting them to the new network with Ctrl+V. In the combined network, make sure there is only one Source, and make sure everything is wired correctly. Calculating the response will give the overall system response. Because of phase and driver offset, some weird things could be happening around the crossover region. If there is a large dip, try flipping the tweeter polarity. The end goal is to get a system that will sum flat across the entire frequency range. Another sign of a good crossover is that if you reverse the tweeter polarity, there will be a very large null centered around the crossover point. This is an indication of good phase tracking. If things aren't looking too good, try tweaking some of the component values. You'll have to experiment to determine what values to change, and in what direction they must be changed in order to effect the desired change.
What if you are building an MTM? You will need to take an extra step... Once you have combined the frequency response for the baffle/driver for each of the drivers (the "M's" in this case), create two drivers corresponding to those files. Then create a simple network that consists of a source and the two drivers. Wire them as you plan to in the final design (series or parallel) and generate the frequency and impedance response. Create a single driver, and use the frequency response and impedance files generated from the crossover. Now you can model the low pass section of the crossover with a single driver that has the same properties as the two drivers. Pretty tricky, huh?
If you are creating a 3-way design, optimizing the band pass section of the crossover can be difficult. To create a goal, first create two individual goals - a high pass and a low pass at the desired crossover frequencies. There are two ways to create the final goal - one would be to create two drivers that use the goals as the frequency response, wire them in parallel and calculate the response. I'm pretty sure that would give the right result (although it might not...maybe 6dB too high??). The other is to "splice" the two together, somewhere in the band pass region. This might not give a real smooth transition, but would definitely be simpler. Once you figure out how to create the goal, optimization is the same as with a high pass or low pass crossover - just takes more experimentation.
Hopefully this has been a useful tutorial on how to do crossover simulations using Speaker Workshop and some of the other tools available. If something is unclear or seems just plain wrong, email me and I can answer your questions or fix whatever is wrong. At some point I may add some screen shots to make things a little clearer. I'd also recommend checking out Mark Zachmann's write up on the project he did using speaker workshop. It goes into a lot more detail and even has some pretty pictures. The Speaker Workshop Forum has lots of answers as well, and the people there will certainly be able to answer any question you have. Good luck!