Извлечение голосов из музыкального сигнала

Реализуйте базовый синтезатор цифровой музыки и используйте его для воспроизведения традиционной песни в трехзвуковой аранжировке. Задайте частоту дискретизации 2 кГц. Сохраните песню как расписание MATLAB ®.

fs = 2e3;
t = 0:1/fs:0.3-1/fs;

l = [0 130.81 146.83 164.81 174.61 196.00 220 246.94];
m = [0 261.63 293.66 329.63 349.23 392.00 440 493.88];
h = [0 523.25 587.33 659.25 698.46 783.99 880 987.77];
note = @(f,g) [1 1 1]*sin(2*pi*[l(g) m(g) h(f)]'.*t);

mel = [3 2 1 2 3 3 3 0 2 2 2 0 3 5 5 0 3 2 1 2 3 3 3 3 2 2 3 2 1]+1;
acc = [3 0 5 0 3 0 3 3 2 0 2 2 3 0 5 5 3 0 5 0 3 3 3 0 2 2 3 0 1]+1;

song = [];
for kj = 1:length(mel)
    song = [song note(mel(kj),acc(kj)) zeros(1,0.01*fs)];
end
song = song'/(max(abs(song))+0.1);

% To hear, type sound(song,fs)

tune = timetable(seconds((0:length(song)-1)'/fs),song);

Откройте Signal Analyzer и перетащите расписание из браузера Рабочей области в таблицу Сигнал. Щелкните Отобразить сетку (Display Grid ▼), чтобы создать сетку отображения два на два. Выберите два верхних отображений и левое нижнее отображение и нажмите кнопку «Спектр», чтобы добавить вид спектра. Выберите отображение внизу справа, нажмите Time-Frequency, чтобы добавить представление спектрограммы, и нажмите Time, чтобы удалить представление времени. Перетащите песню на все четыре отображений. Выберите нижнее правое отображение и на вкладке Spectrogram задайте разрешение по времени 0,31 секунды (310 мс) и 0% перекрытия между смежными сегментами. Установите пределы степени равными -50 дБ и -10 дБ.

На вкладке Анализатор нажмите Повторить три раза, чтобы создать три копии песни. Переименуйте копии как high, medium, и low двойным щелчком по столбцу Имени в таблице Signal. Переместите копии на два верхних и нижний левые отображения.

Предварительно обработайте повторяющиеся сигналы с помощью фильтров.

  1. Выберите high щелчком по его имени в таблице Signal. На вкладке Анализатор нажмите Highpass. На появившейся вкладке Highpass введите частоту полосы пропускания 450 Гц и увеличьте крутизну до 0,95. Нажмите Highpass.

  2. Выберите medium щелчком по его имени в таблице Signal. На вкладке Analyzer нажмите Preprocessing ▼ и выберите Bandpass. На появившейся вкладке Bandpass введите 230 Гц и 450 Гц в качестве нижней и верхней частот полосы пропускания, соответственно. Увеличьте крутизну до 0,95. Щелкните Полосу пропускания.

  3. Выберите low щелчком по его имени в таблице Signal. На вкладке Анализатор нажмите Lowpass. На появившейся вкладке Lowpass введите частоту полосы пропускания 230 Гц и увеличьте крутизну до 0,95. Нажмите кнопку Lowpass.

На каждом из трёх отображений, содержащих отфильтрованные сигналы:

  1. Снимите исходный сигнал, сняв флажок рядом с его именем.

  2. На вкладке Отображение (Display) щелкните Частота-время (Time-Frequency), чтобы добавить представление спектрограммы, и нажмите Время (Time), чтобы удалить представление времени.

  3. На вкладке Spectrogram задайте разрешение по времени 0,31 секунды и 0% перекрытия между смежными сегментами. Установите пределы степени равными -50 дБ и -10 дБ.

Выберите три отфильтрованных сигнала, щелкнув их столбец Name в таблице Signal. На вкладке Analyzer нажмите экспорт и сохраните сигналы в MAT-файл под названием music.mat. В MATLAB загрузите файл в рабочую область. Постройте график спектров трех сигналов.

load music

pspectrum(low)
hold on
pspectrum(medium)
pspectrum(high)
hold off

Figure contains an axes. The axes with title Fres = 1.9536 Hz contains 3 objects of type line.

% To hear the different voices, type 
% sound(low.low,fs), pause(5), sound(medium.medium,fs), pause(5), sound(high.high,fs)

См. также

Приложения

Функции

Похожие примеры

Подробнее о

Для просмотра документации необходимо авторизоваться на сайте