Lab module 1: part 1 Objectives: 1. Design a digital filter. 2. Build a block diagram for simulation. 3. Run a parameterized simulation. 4. Build a hierarchical model. 5. Use DAVIS to display results and manipulate graphs. 1-1 Conventions: Please read the lab description first before you start. The tasks can be found in both lab description or in a box. • Tasks that are important to the particular lab will be indicated by a ✎ boxed in : - If there are several steps, they will be numbered (i, ii, iii, ...) - If there is only one step, it will be indicated by a ◆. and • If a task is embedded in the descriptory text, it will appear in underlined bold type. So please do not overlook these! • A % indicates a command that should be typed from a UNIX shell window. As you progress, the steps will no longer be detailed! 1-2 Sample rate converion in Speech Transmission. Content of the project : Part 1: Sample Rate Conversion page 4 Tools introduced: cbde, QED, xsds, DAVIS A: Design a LPF with QED B: Test the LPF in COSSAP C: Use the LPF in sample rate conversion (down sampling) simulation D: Sample rate reconstruction Part 2: Create a Dual Tone Multi Frequency (DTMF) Digit Generator as a Hierarchical Model page 28 Exercices (optional) : I. Design Another FIR Filter for Part 1 page 31 II. Design an IIR Filter for Part 1 (A) page 32 1-3 Part 1: Sample Rate Conversion (48 kHz to 8 kHz) In order to reduce the sampling rate and to avoid aliasing at this lower rate, you must first filter the input. You will design a 3400 Hz lowpass filter using QEDesign and run a simple simulation to demonstrate that the filter works. You will then use this filter in a simulation that downsamples to 8 kHz. You will use the provided src_down schematic to downsample from 48 kHz to 8 kHz. The block diagrams roughly depict the idea. We will use a sine wave generator (sampled at 48kHz) instead of sampled speech data. sample rate: 8 kHz sample rate: 48 kHz sine wave generator write to output file lowpass filter out_8k.cb Later, you will build a schematic src_up to upsample from 8 kHz to 48 kHz. sample rate: 48 kHz sample rate: 8 kHz read from file out_8k.cb lowpass filter write to implicit dataset automaticallynamed file; use DAVIS to display 1-4 A. Design a lowpass filter (LPF) with QED. 1. ( ) Login and go to the COSSAP configuration directory (c under your COSSAP project directory, training). Start up the COSSAP Block Editor, from where you can also launch the other COSSAP tools. ✎ i. % scp training This switches you to the training project and puts you in the c directory. ii. % cbde & The first time you start up the block editor, it will take a while since it builds up all the fonts; it will not go through this step again next time. iii. In the COSSAP Block Editor, move the mouse to Tools and hold the left mouse button and pull down to qed. You will see some messages like: "QED requires X windows for ..." in the UNIX window where you started cbde. Then you will see a QEDesign 2000 window with pull-down menu items. 2. ( ) Design a FIR lowpass filter. There are Lab Reference Pages after Lab 3. As you do certain tasks in the three labs, please write down the page number as indicated. Afterwards, the pages will serve as a task index for you. ☞ Write down this page number in your Lab Reference Pages. MISC: Filter Design Tool. ✎ i. Use the left mouse button to pull down the menu Design -> FIR Filter Design Next Use the following specification: sample rate passband stopband passband ripple stopband ripple 48000 3400 4000 1 40 Next Use the default Kaiser window method and the estimated number of coefficients (filter length). You do not need to enter/change the desired filter length. ii. Note here the number of taps: 1-5 __________ Next You should now see six plots, each in a separate window. You can also find the information about the filter by expanding any of the windows to the point that you see the displayed text under the graph. To scale the display, use (1) Output -> Plot Control E.g., change the frequency range. Press the Plot button and notice the change in your displays. Close the window when you no longer need it. (2) Press down the right mouse button and select an area in the window of your interest (the first 4 windows), then release the mouse button and you will notice the in your displays. Click the right mouse button in the window again to undo the scaling. 3. ( ) Create a (generic) filter coefficient file. ✎ i. Output -> Quantization Options Quantization Switch -on Quantization Type -Floating Number of Bits -24 (length of the mantissa) In our case, only the section for Realization Type for FIR Filters is pertinent. No scaling should be selected. Accept Close ii. Output -> Create Coefficient File lpf4-48 (File Name) Accept You will see a message: "lpf4-48.flt has been created." Close 1-6 4. ( ) Create a COSSAP dataset. ✎ ◆ Output -> Create COSSAP dataset Select the filename that you created above. Use the default options. The field "fixed format" has no meaning for a floating point dataset. COSSAP cannot process files with comments. Accept You should get a message: "lpf4-48.abl has been created." Cancel (the Create COSSAP Dataset window) 5. ( ) Leave QED. ✎ ◆ System -> exit 6. ( ) You can use the text editor to look at the files with the filter coefficients. Since you started cbde from your c directory of the training project, the files will be there. You should now be in the c directory of the training COSSAP project. lpf4-48.flt contains the QED coefficient output. lpf4-48.abl is in the ASCII_BL_EOR data format for use as a COSSAP input dataset for COSSAP model FIRDS. Conclusion: You have learned how to: • design a filter with QED. 1-7 B. Test the filter in COSSAP. 1. ( ) Open the ready-made design schematic for simulation. ✎ i. File -> Open Design Type: Library: Design: Schematics CDIR lpf_test.sch OK This configuration generates a sum of two sinusoids as input and uses the FIR filter. This could be any kind of FIR filter, e.g., lowpass or highpass, but you will configure it with your LPF coefficients that you generated in QED. The add_2sin block is an instantiation of a hierarchical model, indicated by the double-line horizontal borders of the block. The other blocks with single-line borders are instantiations of primitive models. The XWAVE blocks are used to start up displays during the simulation. 2. ( ) Practice zooming in and out of the design. ☞ Write down this page number in your Lab Reference Pages. BLOCK EDITOR: Zoom. ✎ i. Press and hold the right mouse button somewhere within the empty space of the schematic. Pull down to Zoom In. Your mouse cursor should now be a magnifying glass instead of an arrow. ii. Press and hold the left mouse button around the area that you want to zoom into. When you release the left button, you will be zoomed into that area. Note that the cursor is still a magnifying glass. If you want to further zoom in, press, hold, and release again. iii. To cancel the zoom operation, press the middle mouse button. Note that the cursor returns to an arrow. iv. To return to the full view, press the right mouse button and pull down to Zoom Full. v. You can also zoom in using the button on the left menu bar. Press the Zoom In button on the left menu bar. Note the magnifying glass mouse cursor. Instead of selecting an area by pressing and holding the left mouse button, you can also simply press the left mouse button once on the area in which you want to zoom. vi. Return to the full view. 1-8 3. ( ) Look at the online information for FIRDS. ✎ i. click with the left mouse button on FIRDS (the arrow should point to somewhere within the block border, but not on any of the text inside the border). The block border should have changed from solid to dashed lines. If it does not, press the middle mouse button to cancels whatever you had selected and select FIRDS again. ii. While the block is still selected (indicated by the dashed lines) move the mouse outside of the block. Hold the R mouse button. Note that you get the Zoom menu. Now move the mouse within the selected block. Hold the R mouse button. You see a menu which applies to this selected instance. Pull down to View Mdef. You can now view the model definition file of this instance. The file has read-only permissions (i.e., you can not change it). The words that start with a period (.) are called tokens. You will probably be most interested in the DESCRIPTION. When it comes time to configure the instance you will probably be interested in the PARAMETERS, INPUT_PORTS, OUTPUT_PORTS, INPUT_DATASETS, and OUTPUT_DATASETS. Note that not all models have parameters, input datasets, etc. iii. To close the window displaying the mdef file, File -> Exit 4. ( ) Configure FIRDS with the coefficients of the filter you designed. ☞ Write down this page number in your Lab Reference Pages. BLOCK EDITOR: Configure an input dataset. ✎ i. Make sure that FIRDS is still selected (border in dashed lines). With the mouse inside the block, use the R button to pull down to Configure Instances. Leave the Implementation set as DEFAULT_IMPLEMENTATION. ii. For the Input Dataset, you must assign a dataset ID (some "handle" or mnemonic by which you refer to the entire dataset). Click on the blank field under ID and enter, e.g., coeffs. You may leave the File Type as implicit (default). iii. Click on the field under File Format and hold the R mouse button. You will see a list of different file types. Pull down to ASCII_BL_EOR. QED writes out coefficients in this format. iv. Click on the field under File Name and enter: 1-9 ${COSSAP_USER_C}/lpf4-48.abl v. OK (Currently, if you do not fully specify the filename with path information (or use a COSSAP environment variable) but simply type lpf4-48.abl (without prefixing it with the COSSAP environment variable), your design would pass the check design step, since it looks for the file in the project's c directory. However, when you simulate, you would get a message like: Cannot open file. Unknown file.) To be explicit about the location of your file, you may prefix it with the COSSAP environment variable, ${COSSAP_USER_C}, referring to your c directory, your configuration directory. Likewise, ${COSSAP_USER_D} refers to your d (development) and ${COSSAP_USER_V} refers to your v (viewing) directory. 5. ( ) Check the design for errors (e.g., unconfigured instances, unconnected instances). ✎ i. Click on the Check Design icon on the top toolbar. You will see the situations that are checked. You can designate what situations should be checked and whether warnings or errors should be communicated. You can use the defaults. Push the Check Design button. ii. You should see the message: CONGRATULATIONS, NO ERRORS! If you do not, correct the errors and/or warnings and check your design again. When you get the above message, Cancel and Close both of the Check Design windows. (If you get the message Symbol out-of-date, cancel the check design windows. Go to the Edit menu and pull down to Update Symbols. If all symbols are updated, this Edit -> Update Symbols menu option will be grayed out.) 6. ( ) Run the simulation. The exit mask has already been set for this example. The two XWAVE blocks comprise the mask. To see the exit mask, select the ATTRIB TABLE icon on the top toolbar. You will see that both xwave instances M3 and M2 belong to Mask 01. There are no other exit masks set. The simulation ends once both XWAVE blocks have set their exit flags , i.e., processed SignalElementsToProcess (which have been pre-configured to 1000 for each of the XWAVE blocks). ☞ Write down this page number in your Lab Reference Pages. SIMULATION: Run a Simulation. ✎ i. Create a netlist for simulation. Netlist -> Create 1-10 Your Target should be the COSSAP Stream Driven Simulator (SDS). Library should display CDIR. Netlists for the SDS can only be created in the c directory. The Name contains the automatically assigned netlist name and cannot be changed. You can enter a short description which will appear under the .SHORT_DESCRIPTION token in the to-be-generated model definition (.mdef) file. If your netlist name was, e.g., 355, there would be a s00355.mdef file in your c directory after this create netlist step. ii. Push the Create&Start button. Standard output messages appear in the window from which you started the CBDE. You will see messages like the following: ☞ Possible errors: • If you see the words UNKNOWN DATA-TYPE, doublecheck the configuration of the FIRDS input dataset. Your file format is probably incorrect. (There is a certain amount of overhead involved when utilizing the interactive displays. The start-up may be a little slow depending on your workstation. This has nothing to do with simulation speed.) You should see two windows open up for displaying the input and the output of the filter. Note that the high frequency sinusoid has been filtered out. How do you know which monitor corresponds to which block in the block diagram? Turn the page ... 1-11 ☞ Write down this page number in your Lab Reference Pages. SIMULATION: What instance does the interactive display correspond to? You can find out which xwave display corresponds to which block output simply by selecting the graph within its sheet, then automatically the corresponding name is highlighted in both the workbook and dataset windows. The window is displaying the output samples of this highlighted instance name. If the instance name contains a dot separator, that indicates a hierarchical model. E.g., M0.M2 means instance M2 of the hierarchical model M0 (at the top level of the schematic). iv. What is the model label name (the name on the block) of the M0.M2 instance? __________________ Hint: Select the M0 instance. Now the Push In icon in the top toolbar is selectable (i.e., no longer greyed out). Push the Push In button. Find the instance name M2. v. You may close both DAVIS display windows. To close a DAVIS display window, pull down the menu with the left mouse button File -> close for the last appeared DAVIS window ( slave window ) File -> exit for the first appeared DAVIS window ( master window ) 1-12 In fact the first appeared DAVIS window is the master and the second one is a slave monitored by it. Deleting the master would directly delete both windows. This is the clean method; don’t use the window manager menu to close the window. 7. ( ) Save the schematic (overwrite the lpf_test schematic). ✎ ◆ File -> Save select lpf_test.sch OK You can also simply click on the <Save File> symbol under edit to save the changes to the same file. Conclusion: You have learned how to: • configure a model with an input dataset • start a simulation You have seen: • xwave DAVIS displays 1-13 C. Use your LPF in the sampling rate conversion simulation. 1. ( ) Close the lpf_test schematic (File -> Close). Open the src_down schematic. This design downsamples a 48 kHz sampled sine signal to an 8 kHz sampled signal. The design uses the DMPNR block which saves samples to a file. The frequency of the sine wave is a simulation parameter. If we were going to use this schematic with real 48 kHz-sampled speech data, we would replace the add_sin block with the RSTR block. RSTR would restore samples from an input file. 2. ( ) Configure the instances. ✎ i. Configure the FIRDS input dataset with your filter coefficients. Select FIRDS. Hold the R mouse button and pull down to Configure Instances, OR press the Config icon in the top toolbar. ID: File Type: File Format: File Name: coeffs implicit ASCII_BL_EOR ${COSSAP_USER_C}/lpf4-48.abl ii. Configure the parameter, DecimationFactor, of SRDEC with the value 6. Select SRDEC. Press Config icon. Set the Parameter Expression to 6 iii. The DMPNR blocks have been partially configured for you. DMPNR requires both parameters (indicating which samples to save to a file) and an output dataset. Select one of the DMPNR blocks and then select the other DMPNR block by using the middle mouse button. Both DMPNR blocks should have dashed borders. Push the Config button in the top toolbar. You should now have two Configure Instance windows, one for each DMPNR instance. The window title indicates which instance name (M1 and M2). What is the SAMPLING_TIME configured to for: DMPNR (M1) _________________ DMPNR (M2) _________________ 1-14 This SAMPLING_TIME is used by DAVIS when displaying the samples saved by DMPNR, where the default plot format is to display sample value vs. TIME. This value is only to aid you in understanding the time associated with the samples. iv. Configure the output dataset for each of the DMPNR blocks. ☞ Write down this page number in your Lab Reference Pages. BLOCK EDITOR: Implicit / explicit output dataset. The default file type (IMPLICIT) indicates that data will be written to an automatically named COSSAP_BINARY (default format) file. Note the scroll bar under the Output Dataset attribute. The scroll bar is here because all the fields do not fit in the display window. Move the slider to the far right. Now you can see the Plot Format. If this output dataset is displayed in DAVIS, the default plot format (1) will be to display the samples vs. TIME. To see the other plot formats (used when displaying the data in DAVIS), select the field under Plot Format and hold the right mouse button. We will accept the default values for DMPNR instance M1, but we still must assign the dataset id. This should be a name that's intuitive to you, e.g., in_48k, for DMPNR (M1). We do not need a file name since this will be assigned automatically (IMPLICIT file type). We would like to save the data in DMPNR(M2) to an explicitly named file so that we can use it in the next section of lab, where we will reconstruct the 48 kHz signal from the 8 kHz signal. Since we will be using DAVIS to display this file and we will also be using this file in our next simulation, this file should be written to the c directory. Configure the output dataset, e.g., with: ID: File File File Plot Type: Format: Name: Format: out_8k EXPLICIT COSSAP_BINARY ${COSSAP_USER_C}/out_8k.cb 1 v. Everything should be properly configured and connected. Check the design. Push the Check Design icon in the top toolbar. Fix any error messages until you get the message: CONGRATULATIONS, NO ERRORS! SIN_GEN_TBL has been pre-configured for you. Take a look at the parameters. A variable, $SIN_FREQ, has been used. This variable is a simulation parameter and must be set to a numerical value in the assignment file. 3. ( ) Assign a value to the simulation parameter. ☞ Write down this page number in your Lab Reference Pages. BLOCK EDITOR: Assign a value to a simulation parameter. 1-15 ✎ i. Netlist -> Create In the text area for the Assignment, type: src_down.asn Push the Edit button. You are now in the default editor. ☞ Write down this page number in your Lab Reference Pages. BLOCK EDITOR: Change default editor. To change the default viewing editor to xedit, for example, put the following in your .cshrc file: setenv COSSAP_VIEWER xedit This would be used when you can change files, e.g., when creating an assignment file. For those non-UNIX experts : exit the COSSAP block editor, logout of your account and login again in order that the environment variables are changed. You see several lines that start with dash-dash (--). These are comments. A terse syntax explanation is available in the file comments. See Block Diagram Editor (index: assignment files) for more information. ii. Edit the file to set the SIN_FREQ simulation parameter to equal 1700. { SIN_FREQ := 1700; -- (I) } iii. Save the edited file (e.g., in vi edit mode, :wq! ) iv. Stay in the Create COSSAP Netlist window. 4. ( ) Create a netlist and start the simulation. ✎ i. Write down the simulation number: ________________ ii. Create&Start Note that very time you click on the Create or Create&Start the simulation number will be incremented by 1. 5. ( ) Display the results in DAVIS. ☞ Write down this page number in your Lab Reference Pages. DAVIS : Display results. 1-16 ✎ i. In the COSSAP Block Editor, start DAVIS (Tools -> DAVIS). Open the simulation by clicking on the button File -> Open Simulation. Make sure that the simulation number of the netlist you wrote in step (4) above is already set in the number dropdown of the “open simulation” dialog window, which shoud be the case if the simulation has properly ended. Alternatively, you can click on the popup menu arrow beside to see what simulations have completed and are available for viewing in the v directory. If you do this, you select the netlist (simulation) number just by clicking on it. Select the dataset in_48k by clicking on it in the dataset list box and then press the OK button. Now you see the sin_gen_tbl block output appearing on the DAVIS window. You can have a more precise view of the graph simply by zooming on an area of the graph : for that purpose simply push the + key of the keybord and select an area in the graph bu draging and droping the mouse. If you want to see the whole waveform again click on the zoom full button. ii. In order to overlay the now appearent waveform with the out_8k graph, open the simulation like before, select the in_8k dataset, select Visuallization -> To Selected Sheet and click on the OK button. Now you see the two waveforms. The delay for the first sample to "ripple" through the long FIR filter is apparent. To remove the filter delay and have a better signal alignment, you can use DELR model to delete the filter delay at the beginning of the simulation; see part D. Conclusion: You have learned how to: • configure instances with parameters and datasets • set up a simulation assignment file • use DAVIS to display results 1-17 ☞ Write down this page number in your Lab Reference Pages. DAVIS : Graph symbol. graph symbol : here a lozange 6. The waveforms are shown with lines connecting the samples. To demonstrate the difference in samples/unit time, change the graph attributes to show sample markers. ☞ Write down this page number in your Lab Reference Pages. DAVIS : Change attributes of graphs. Double click either on the waveform or on the corresponding graph name in the Visualization box. The Graph Options dialog box should appear as it is represented on next figure : 1-18 Cross the Show check box of the Markers area and select the squares in the Type dropdown. Make them smaller or bigger by using the Size dropdown and select the color you prefer by using the Color dropdown. You can see the results of these modifications by clicking on the Apply button. Now quit this Graph Options dialog box and repeat the same operation for the other waveform : this time you may add circle markers. Now let’s see how to scale the display other than using the zooming device. Just double click on the framed coordinate at the top of the y axis. Then a Zoom Area dialog box appears on the screen, like in next figure : 1-19 Now you can change the attributes inside each edit box in order to define the limits of the area containing what you want to see. You may also want to have a global view of the graph for one or both dimensions : click on Fit X, Fit Y or Fit X-Y buttons if so. Once you have finished playing with the scaling capabilities close the dialog box and return to the main DAVIS window. At last close the DAVIS application by selecting file Æ exit in the master DAVIS window and without saving the changes when you are proposed to. Try and increase or reduce the size of the displaying window. Select one of the bottom corners of the window frame and drag it outward to make it smaller. Note that its contents doesn't shrink. If you want to resize the picture within the displaying DAVIS window, you must click on the Zoom + button ( or simply press the + key of your keybord ). Then you can see that your mouse pointer is no longer an arrow but a zooming pattern. Now drag the mouse in order to surround the area you want to display, then drop it. If you want the largest diplay of your picture,click on the resize full button : at the bottomright part of the DAVIS window. It is also possible to make zooming in only the x or y dimension by clicking previously on one of the lock button : also at the bottom-right part of the DAVIS window. Clicking on both of them will freeze the zooming capabilities of DAVIS. ☞ Write down this page number in your Lab Reference Pages. DAVIS : Resize picture. 1-20 D. Use your LPF in the reconstruction (8 kHz -> 48 kHz) sampling rate conversion simulation. 1. Iconize or exit DAVIS, and in cbde, if you still have it up. Save then close the src_down design schematic. 2. ( ) Now you will create a schematic from scratch to reconstruct the 48kHz signal from the 8 kHz signal which you stored to the file out_8k.cb in your c directory. The blocks you will need are depicted in Figure 2: RSTR SREXP FIRDS DELR MULS DMPNR Figure 2 ✎ i. Instantiate the necessary models. Click on the Instance button in the left toolbar. Select the text window by Select Models by and hold the left mouse button. You can choose your models by names, libraries, etc. Since you have been given the names of the models and they come from different libraries, Names will be the most useful for you. 1-21 Select the text field by Model Name Filter and type rst*. Now in the Models window all models that start with the rst string (case-insensitive) are displayed. You can now select RSTR from the window and its one line description is displayed.. Now when you move the cursor to the schematic area you'll see a crosshair mouse cursor and an outline of where the instance will be placed if you press the left mouse button. Press the left mouse button in the place where you want to instantiate RSTR. Move the mouse and notice that you still have the crosshair cursor and the outlined instance. You can continue to place RSTR instances by pressing the left mouse button. Since we only want one instance, press the middle mouse button to cancel the operation. Note the cursor returns to an arrow. ☞ Write down this page number in your Lab Reference Pages. BLOCK EDITOR: Instantiate models. Continue instantiating the other models. You can change the orientation of the model during instantiation or after you have instantiated it. During instantiation, when you are in the schematic area and see the outline of the instance, press the right mouse button and you can rotate, flip horizontal, or flip vertical. After this, you will see the outline of the newly-oriented instance. Press the left button to instantiate the model in the cbde. You can press the right mouse button again and change the orientation again. Once you have instantiated a model, you can change the orientation by selecting the block and holding down the right mouse button within the block. ☞ Write down this page number in your Lab Reference Pages. BLOCK EDITOR: Change orientation of instances. ii. Connect the instances with nets. Zoom in a little closer on the instances that you want to connect. Push the Net button on the left toolbar. Click on the triangle output port of the RSTR instance and click on the input port triangle of SREXP. You should now see both triangles filled in, indicating a connection between the two instances. Remember that you are still in net connect mode until you press the middle mouse button to cancel it (or select some other functionality, e.g., the select button). Continue connecting the instances. 1-22 iii. Configure the instances as follows: ☞ Write down this page number in your Lab Reference Pages. BLOCK EDITOR: Configure instances. RSTR input dataset ID: in File Type: IMPLICIT File Format: COSSAP_BINARY File Name: ${COSSAP_USER_C}/out_8k.cb (the file which we wrote to in the src_down design) SREXP RateFactor $upsample_value By configuring this parameter with a COSSAP variable (starting with a $), we are creating a simulation parameter. FIRDS (same as in the last simulation ...) ID: coeffs File Type: IMPLICIT File Format: ASCII_BL_EOR File Name: ${COSSAP_USER_C}/lpf4-48.abl DELR NUM_ITEMS ($FilterLength-1)/2 if odd $FilterLength is odd, and $FilterLength/2 if$FilterLength is even. Or int($FilterLength/2). (This DELete Real model is needed because of the delay through the downsample filter and this upsample filter, where we assume we're using the same filter) MULS Scalar (scaling) real($upsample_value) DMPNR FIRST_ITEM 1 NUM_ITEMS 500 SAMPLING_TIME 1/48000.0 If you do not use the real number 48000.0 (as opposed to the integer number 48000), you will get an integer divide and SAMPLING_TIME will be considered to be 0.0. For the output dataset, use the defaults and assign it a dataset id, e.g., reconstruct_48k. Remember, no filename is necessary since the File Type is IMPLICIT (automatically named). iv. Set an exit mask that contains DMPNR. ☞ Write down this page number in your Lab Reference Pages. BLOCK EDITOR: Set an exit mask. 1-23 Edit -> Attributes (Alternatively, you could have chosen the ATTRIB TABLE icon on the top toolbar). The SDS index tab stands for Stream Driven Simulator. DCG stands for DSP Code Generator. Make sure the SDS tab is selected. We will only be setting one exit mask. In the column under Mask 01, for the dmpnr instance, type or pull down to YES. OK v. Check the design for errors. You should see three messages (non-verbatim): (1) Design (untitled). You must save the schematic as, e.g., src_up.sch. (File -> Save As) (2) Unsupported data type for parameter FilterLength. This is a simulation parameter which we used to configure DELR. COSSAP cannot infer the data type (real or integer). We must define the type (step vi). (3) rstr is not included in any exit mask. It is possible to include RSTR in an exit mask, but we have excluded it (NO) in step (iv) above. This message is OK for this design. Take care of any other error messages you see. vi. Define the simulation parameters' types. Edit -> Configure Design This window displays all the simulation parameters and what instances have been configured with simulation parameters. Note that the Type for FilterLength is <?>. This must be declared as I (integer) or R (real). Select the text field for the Type of FilterLength. Hold the right mouse button and pull down to I. vii. Check the design for errors. You should only see the warning about rstr and the exit mask. 3. ( ) Create an assignment file to configure the simulation parameters. ☞ Write down this page number in your Lab Reference Pages. BLOCK EDITOR: Create an assignment file. ✎ i. Netlist -> Create In the text area for the Assignment, type: src_up.asn Push the Edit button. ii. Edit the file: 1-24 { FilterLength := upsample_value := <X>; 6; -- (I) -- (I) } where <X> = the value you wrote down in Part 1, e.g., 179 iii. Save the edited file (e.g., in vi edit mode, :wq! ) iv. Stay in the Create COSSAP Netlist window. 4. ( ) Create a netlist and start the simulation. ✎ i. Create&Start ii. Write down the simulation netlist number: ________________ PROBLEMS? error in input dataset ... • Did you fully specify the filename, including the path, e.g., ${COSSAP_USER_C}/...? • Is the file the right file type? 5. ( ) Save the schematic as src_up. 6. ( ) When the simulation is done, use the DAVIS window that you opened in Part 1 (C) (if exited, start up a new one) to display the results. Push open simulation button Make sure the simulation number is selected in the Visualization window dropdown select To Same New Sheet in the Display New Sheet window select In New Window press OK button when done. A new slave DAVIS window should appear. You should see the reconstructed sine wave on it, again at the 48 kHz sample rate. If you see one value at x=0, check the configuration of the DMPNR instance. SAMPLING_TIME should be 1/48000.0 (i.e., divided by a REAL number). Re-run the simulation. ii. Calculate the FFT of this signal in DAVIS. ☞ Write down this page number in your Lab Reference Pages. DAVIS : Calculate an FFT. Push the calculator button : a calculator should appear : 1-25 click on the FFT header then type mag(fft(reconstruct_48k_07004_1)) in the result; Instead of typing, you can also click mag, fft and then double click reconstruct_48k_07004_1 in the simulation result dataset in the calculator browsing window. Push the Apply button and then the calculation results should automatically replace the current graph in the DAVIS window. Close the calculator. If you want to see both graph and its fft magnitude then in the same DAVIS window : click on the Windows menu select Show All Sheets Æ In Splitters iii. Open up another picture to display the FFT result. ☞ Write down this page number in your Lab Reference Pages. DAVIS : Open up another DAVIS picture. click on the Windows menu select Show All Sheets Æ In Windows Now you see the FFT of the 1700 Hz sine wave that we've reconstructed in a new DAVIS window. iv. Calculate the FFT of the original sine wave signal from the src_down simulation. 1-26 Open the simulation with the Part C(4) simulation number dataset id : in_48k select To Same New Sheet and In New Window Now you see the waveform of the original 48 kHz signal in an other new slave DAVIS window. Calculate the FFT of this signal and when doing it select also To New Sheet and In New Window in Calculator Instead of using the whole in_48k signal, you can also Select, say, in_48k[1..500], for the calculation of FFT. Now you see the FFTs of both signals in two different windows. You may see both on the same window simply by draging one different result into an already displaying window. Conclusion: You have learned how to: • create a simulation from scratch • create an exit mask • use and define a simulation parameter • use DAVIS to calculate an FFT of a waveform 1-27 Part 2: Create a DTMF digit generator as a hierarchical model. Create a hierarchical model called ADD_SIN that adds two sinusoids. It should have three parameters: sin1 (frequency of sinusoid 1), sin2, samp_freq. SIN_GEN_TBL ADD2 SIN_GEN_TBL ☞ Write down this page number in your Lab Reference Pages. BLOCK EDITOR: Create a hierarchical model. 1. ( ) Create a new file. Insert and configure the instances. Use ADD2 and two instances of SIN_GEN_TBL. To configure one of the SIN_GEN_TBL models use, for example: NumberOfItems = int(10 * $samp_freq / $sin1) NumberOfPeriods = 10 A = 1.0 Leave the Configure Instance window open; let’s call this M0. (Recall: the integer parameters NumberOfItems and NumberOfPeriods are defined as follows: since 2π(f/fs) NumberOfItems=2π NumberOfPeriods, f/fs=NumberOfPeriods/ NumberOfItems. As long as this ratio is correct, the correct sine wave will be generated.) ☞ Write down this page number in your Lab Reference Pages. BLOCK EDITOR: Copy parameters from one instance to another. Select the other instance of SIN_GEN_TBL and open its Configure Instance window; let’s call this M1. In the M0 Configure window, select Expression in the Parameter row. You should see all three parameter values highlighted: Edit -> Copy Row In the M1 Configure window, select Expression in the Parameter row. You should see all three parameter values (blank) highlighted: Edit -> Paste Row Change $sin1 to $sin2. 1-28 That is, the other SIN_GEN_TBL model should be: NumberOfItems = int(10 * $samp_freq / $sin2) NumberOfPeriods = 10 A = 1.0 2. Route the nets from the SIN_GEN_TBL models to ADD2. 3. ( ) Indicate and rename the output port. ✎ i. Push the OUTPUT button from the left toolbar. Move it to the area in the schematic where you would like it, and press the left mouse button to instantiate it. ii. Push the NET button. Route the net from the ADD2 Output port triangle to the output port you just placed. iii. Rename this output port to add_sin_out. Edit -> Configure Design Select the text field under Output Port Name and change the automatically generated name to add_sin_out. Stay in the Configure Design window. 4. ( ) Define the data types of the parameters we are using, which will become parameters of our hierarchical model. Lengthen the window a little. Note that more parameter names show up in the window. Note that the types of the parameters are <?>. We must define these to be R (real) or I (integer). Define all of them to be I (integer). You can do this at once by selecting Type and then setting it to I. (You can ofcourse define it to be R (real)). 5. ( ) Check the design. You may see an error message about an untitled schematic. In fact, this is ok for an hierarchical model, since after the model creation (see below), the schematic is automatically saved. However, you can also save your schematic. 6. ( ) Create the model and put it in the training library. ☞ Write down this page number in your Lab Reference Pages. BLOCK EDITOR: Put hierarchical model in a library. ✎ ◆ Netlist -> Create This time your Target should be set to COSSAP hierarchical model instead of COSSAP Stream Driven Simulator. Library: TRAINING Name: add_sin 1-29 Create Symbol: (should be marked) Add a Short Description (optional). Creat 7. ( ) Test your hierarchical model using the lpf_test schematic. i. Open the lpf_test schematic that you were using in Part 1 B. ii. Select the add_2sin instance. iii. Edit -> Delete iv. Add the instance add_sin that you just created in the place where add2_sin was. If you place its port right on the remaining net, it will be connected (indicated by the filled triangle). If not, you will need to connect a net going out of add_sin to the remaining portion of the net. v. Configure your add_sin block with: sin1 2400 sin2 5000 samp_freq 48000 Note that the text “2700 + 6500 Hz.” on the schematic was inserted manually. It has nothing to do with what you configured your add_sin with. You may want to either delete this text or change it to correlate with the configuration you used. vi. Make sure that the target is set back to Stream Driven Simulator! Create&Start the simulation. If you get a message that the replacement model, add_sin, is outof-date with respect to its master, do the following: Edit -> Update Symbols Update Conclusion: You have learned how to: • build a hierarchical model • edit your schematic 1-30 EXERCISE I. Design another FIR filter with QED. Use similar design specifications as you used in Part 1 (A). You may want to change, e.g., the window or maybe the passband and/or stopband ripple. Use the layout, src_up, that you used in Part 1 (D) and run a two iteration simulation. The first iteration would be with the original FIR, the second with the new FIR. Use a parameterized input dataset for FIRDS. For the dataset id of FIRDS, enter a variable, e.g., $coeff_id. The other dataset fields will then be ignored. You will then make the assignments in an assignment file. Your assignment file should look like: { FilterLength := (the length of your first FIR); upsample_value := 6; coeff_id := ("coeffs1", 0, 0, 'i', "ASCII_BL_EOR", "${COSSAP_USER_C}/lpf4-48.abl"); } { FilterLength := (the length of your second FIR); upsample_value := 6; coeff_id := ("coeffs2", 0, 0, 'i', "ASCII_BL_EOR", "${COSSAP_USER_C}/NewFilterName"); } 1-31 EXERCISE II. Design an IIR filter. Use the same specification as in Part 1 (A). Use the default settings (bilinear transformation, cascaded 2nd order, elliptic). Note the savings in coefficients needed. Note the non-linear phase and the pole-zero plot. Save the coefficients in a COSSAP input dataset. To do this, you must quantize the coefficients and then save the coefficients to a file before making a COSSAP dataset. Output -> Quantization Options Quantization Switch -on Quantization Type -Floating Number of Bits -24 (length of the mantissa) When selecting quantization options, choose the second order section (floating point -- 4 multiplies) under the category, "Realization Type for Cascaded Sections." The other sections, e.g., "Realization Type for Parallel Sections," etc. do not apply to our filter. The locations of the poles and zeros affect the frequency response of the system. Poles near points of the unit circle correspond to frequencies to be emphasized; zeros correspond to frequencies to be de-emphasized. Poles must be within the unit circle in order for the filter to be stable. To experiment with the effect of poles and zeros, use the Design -> Graphical Pole/Zero Design feature of QED. Selecting File -> Input will copy the poles and zeros from your IIR design. You can then move them around, etc., and see the effect it has on your magnitude response. Select the Object (Pole, Zero), and then you can place the mouse on such an object and move it around. Create a COSSAP simulation to demonstrate that the filter works. In place of FIRDS, you will have to use the IIRDS_CBQ4 (IIR defined by DataSet Cascaded Biquad Structure, 4 multiplies) model. 1-32
© Copyright 2024