<< Chapter < Page | Chapter >> Page > |
This module refers to LabVIEW, a software development environment that features a graphical programming language. Please see the LabVIEW QuickStart Guide module for tutorials and documentation that will help you: | |
•Apply LabVIEW to Audio Signal Processing | |
•Get started with LabVIEW | |
•Obtain a fully-functional evaluation edition of LabVIEW |
Additive synthesis builds up complex sounds from simple sounds (sinusoids). Additive synthesis implies more than just doing Fourier series, though: each sinusoidal component is assigned its own frequency and amplitude trajectory (resulting in a partial), so complex, time-varying sounds can be generated by summing these partials together.
In this project you will create an oscillator whose output tracks a specified amplitude and frequency trajectory. With this general-purpose oscillator you can define multiple frequency/amplitude trajectories that can be combined to create complex sounds. In particular, you will design the sound so that its spectrogram makes a recognizable picture!
If you have not done so already, please study the prerequisite modules Additive Synthesis Concepts and Additive Synthesis Techniques . If you are relatively new to LabVIEW, consider taking the course LabVIEW Techniques for Audio Signal Processing which provides the foundation you need to complete this mini-project activity, including working with arrays, creating subVIs, playing an array to the soundcard, and saving an array as a .wav sound file.
Develop a subVI called gposc.vi that accepts a frequency trajectory (in Hz), an amplitude trajectory, and a sampling frequency (in Hz) to produce a sinusoidal output whose amplitude and frequency tracks the two input trajectories, respectively. The two trajectories are arrays that should be of the same length.
Demonstrate that your oscillator works properly by showing the output of your VI (spectrogram and .wav file) for the amplitude and frequency trajectories produced by a LabVIEW MathScript node that contains the following code:
ff=[linspace(200,1600,2.5*fs) ...
linspace(1600,800,1.5*fs)];
aa=[linspace(1,0,3*fs) ...linspace(0,0.75,fs)];
where
fs
is the sampling frequency in Hz,
ff
is the output frequency trajectory (also in Hz), and
aa
is the amplitude trajectory (between 0 and 1). Use a sampling frequency of 5 kHz when you make the spectrogram and soundfile.
Plot the trajectories
ff
and
aa
and compare to your spectrogram.
Remember, the instantaneous frequency of your general-purpose sinusoidal oscillator is related to the time-varying phase of the sine function. That is, if the sinusoidal signal is defined as $y(t)=\mathrm{sin}(\theta (t))$ , then the instantaneous frequency of the sinusoid is $\omega (t)=d\theta (t)/dt$ radians per second. Because you are given a frequency trajectory that relates to $\omega (t)$ , which mathematical operation yields the phase function $\theta (t)$ ?
Here's a LabVIEW coding tip: You will find the built-in VI "Mathematics | Integ and Diff | Integral x(t)" to be essential for this part of the project.
You can make your spectrogram art project sound more musically appealing when you design the frequency trajectories to account for frequency perception ; refer to Perception of Sound for a detailed treatment of this subject. Design your trajectories in "log space" (using logarithmic graph paper) and then convert to actual frequency just before invoking your general-purpose sinusoidal oscillator.
Review Additive Synthesis Techniques to learn how to create your frequency trajectories for this part of the project.
The discussion of Part 2 pertains to the design of your amplitude trajectories, as well. Perception of intensity (loudness) is also logarithmic (refer to Perception of Sound and review the section on intensity perception). In this part you will design your amplitude trajectory in "log space," but now using traditional decibels (dB). An intensity trajectory can be converted to amplitude by "undoing" the equation that relates a value to the same value expressed in decibels: ${X}_{\text{dB}}=20{\mathrm{log}}_{10}(X)$ .
Experiment with your spectrogram display device to learn the intensity-to-color mapping. Specifically, you could produce a sinusoidal signal with increasing intensity values over time, then match up the plotted colors to the known intensity values.
Design a spectrogram picture using multiple frequency/amplitude trajectories. Include your paper-and-pencil drawing of the spectrogram as part of your deliverables. Use your creativity to make an interesting and recognizable picture.
Better designs will go beyond straight lines to include curved lines such as arcs, exponentials, parabolas, sinusoids, polynomials, spline interpolations, and so on.
Include a .wav file of the sound associated with your spectrogram picture.
Notification Switch
Would you like to follow the 'Musical signal processing with labview -- additive synthesis' conversation and receive update notifications?