Extract Voices from Music Signal
Implement a basic digital music synthesizer and use it to play a traditional song in a three-voice arrangement. Specify a sample rate of 2 kHz. Save the song as a MATLAB® timetable.
fs = 2e3; t = 0:1/fs:0.3-1/fs; fq = [-Inf -9:2]/12; note = @(f,g) [1 1 1]*sin(2*pi*440*2.^[fq(g)-1 fq(g) fq(f)+1]'.*t); mel = [5 3 1 3 5 5 5 0 3 3 3 0 5 8 8 0 5 3 1 3 5 5 5 5 3 3 5 3 1]+1; acc = [5 0 8 0 5 0 5 5 3 0 3 3 5 0 8 8 5 0 8 0 5 5 5 0 3 3 5 0 1]+1; song = [];forkj = 1:length(mel) song = [song note(mel(kj),acc(kj)) zeros(1,0.01*fs)];endsong = song'/(max(abs(song))+0.1);% To hear, type sound(song,fs)调=时间表(歌曲,SampleRate = fs);
OpenSignal Analyzerand drag the timetable from theWorkspace Browserto the Signal table. ClickDisplay Gridto create a two-by-two grid of displays. Add a spectrum view to the top two displays and the lower left display. Select the lower right display, clickTime-Frequencyto add a spectrogram view, and clickTimeto remove the time view. Drag the song to all four displays. Select the lower right display, and on theSpectrogramtab, specify a time resolution of0.31
second and0
% overlap between adjoining segments. Set thePower Limitsto–50
dB and–10
dB.
On theAnalyzertab, clickDuplicate创建三个副本的三倍e song. Rename the copies ashigh
,medium
, andlow
by double-clicking theNamecolumn in the Signal table. Move the copies to the top two and lower left displays.
Select all three duplicate signals in the Signal table and clickPreprocessto enter the preprocessing mode.
Select the
high
signal by clicking its name in the Signal table. SelectHighpassfrom theFunctionsgallery. In theFunction Parameterspanel, enter a passband frequency of450
Hz and increase the steepness to0.95
. ClickApply.Select the
medium
signal by clicking its name in the Signal table. SelectBandpassfrom theFunctionsgallery. In theFunction Parameterspanel, enter230
Hz and450
Hz as the lower and upper passband frequencies, respectively. Increase the steepness to0.95
. ClickApply.Select the
low
signal by clicking its name in the Signal table. SelectLowpassfrom theFunctionsgallery. In theFunction Parameterspanel, enter a passband frequency of230
Hz and increase the steepness to0.95
. ClickApply.
ClickAccept Allto save the preprocessing results and exit the mode.
View a spectrogram on each of the three displays containing filtered signals.
Remove the original signal by clearing the check box next to its name.
On theDisplaytab, clickTime-Frequencyto add a spectrogram view and clickTimeto remove the time view.
On theSpectrogramtab, specify a time resolution of
0.31
second and0
% overlap between adjoining segments. Set thePower Limitsto–50
dB and–10
dB.
Select the three filtered signals by clicking theirNamecolumn in the Signal table. On theAnalyzertab, clickExportand save the signals to a MAT-file calledmusic.mat
. In MATLAB, load the file to the Workspace. Plot the spectra of the three signals.
loadmusicpspectrum(low) holdonpspectrum(medium) pspectrum(high) holdoff
% To hear the different voices, type% sound(low.low,fs), pause(5), sound(medium.medium,fs), pause(5), sound(high.high,fs)
See Also
Apps
Functions
Related Examples
- Find Delay Between Correlated Signals
- Resolve Tones by Varying Window Leakage
- Find Interference Using Persistence Spectrum
- Modulation and Demodulation Using Complex Envelope
- Find and Track Ridges Using Reassigned Spectrogram
- Resample and Filter a Nonuniformly Sampled Signal
- Declip Saturated Signals Using Your Own Function
- Compute Envelope Spectrum of Vibration Signal
- Extract Regions of Interest from Whale Song
More About
- Using Signal Analyzer App
- Edit Sample Rate and Other Time Information
- Data Types Supported by Signal Analyzer
- Spectrum Computation in Signal Analyzer
- Persistence Spectrum in Signal Analyzer
- Spectrogram Computation in Signal Analyzer
- Scalogram Computation in Signal Analyzer
- Keyboard Shortcuts for Signal Analyzer
- Signal Analyzer Tips and Limitations