1

advertisement
1
ВВЕДЕНИЕ............................................................................................................. 2
1. РАЗРАБОТКА ПОЛОСОВЫХ ФИЛЬТРОВ ДЛЯ СИНТЕЗАТОРА
ЗВУКА. .................................................................................................................... 3
1.1 ГРАФИЧЕСКИЙ ЭКВАЛАЙЗЕР............................................................................. 3
1.2 ПРОЕКТИРОВАНИЕ ПОЛОСОВЫХ ФИЛЬТРОВ. .................................................... 4
1.2.1 ФНЧ. ......................................................................................................... 5
1.2.2 ФВЧ........................................................................................................... 9
2. РАЗРАБОТКА ПРОГРАММЫ ДЛЯ АНАЛИЗА ЗВУКОВЫХ
ФАЙЛОВ ПАКЕТЕ MATLAB. ......................................................................... 10
ЗАКЛЮЧЕНИЕ ................................................................................................... 12
ЛИТЕРАТУРА. .................................................................................................... 13
ПРИЛОЖЕНИЯ .................................................................................................. 14
ПРИЛОЖЕНИЕ 1. ................................................................................................... 14
ПРИЛОЖЕНИЕ 2. ................................................................................................... 16
ПРИЛОЖЕНИЕ 3 .................................................................................................... 17
ПРИЛОЖЕНИЕ 4 .................................................................................................... 18
ПРИЛОЖЕНИЕ 5 .................................................................................................... 18
ПРИЛОЖЕНИЕ 6. ................................................................................................... 20
2
Введение.
Грубо говоря, частотный спектр человеческого голоса можно условно
разделить на три диапазона, согласно входящим в них звукам - взрывным,
гласным и шипящим. Взрывные звуки лежат в диапазоне от 125 Гц до 250 Гц
и "отвечают" за разборчивость речи, так как именно они позволяют нам
определить, кто именно говорит. На долю гласных, которые лежат в
диапазоне от 350 Гц до 2000 Гц, приходится максимальное количество
голосовой энергии. Шипящие в диапазоне от 1500 Гц до 4000 Гц несут
сравнительно мало энергии, однако от них зависит четкость и разборчивость
речи.
Частотный диапазон от 63 Гц до 500 Гц содержит около 60% всей энергии
голоса, однако на его долю приходится лишь 5% информационного
наполнения речи. Диапазон от 500 Гц до 1 кГц содержит около 35%
информации, а остальные 60% информационного наполнения приходятся на
долю "шипящего" диапазона от 1 кГц до 8 кГц, который несет лишь 5%
энергии.
Уменьшая уровень сигнала в области низких частот и "поднимая" диапазон
1..5 кГц, мы можем повысить субъективно воспринимаемую четкость и
разборчивость речи или вокала. Подъем частотной характеристики в области
100..250 Гц делает вокал гулким и "грудным". Вырезание участка 150..500 Гц
приводит к тому, что голос начинает звучать "как в трубе", открыто и пусто.
"Провалы" отдельных участков АЧХ в диапазоне 500..1000 Гц делают голос
жестче, а подъемы в области 1 кГц и 3 кГц придают вокалу металлический
"носовой" оттенок. Вырезание участков в диапазоне 2..5 кГц делает голос
вялым, безжизненным и неразборчивым, а усиление частот 4..10 кГц
приводит к появлению яркости и "искристости.
Таким образом, для разработке звукового синтезатора потребуется
разделить звуковой сигнал по частотным диапазонам, а затем изменять
процент содержащейся в суммарном файле.
Сигнал будет разделен по средствам полосовых фильтров.
3
1. Разработка полосовых фильтров для синтезатора звука.
1.1 Графический эквалайзер
Графический эквалайзер - это просто набор полосовых фильтров с
фиксированными срединными частотами и переменным коэффициентом
усиления, которым можно управлять при помощи ползунка. В качестве
регуляторов принято использовать именно ползунки, так как положение их
ручек представляет собой некое подобие создаваемой эквалайзером АЧХ.
Именно поэтому такие эквалайзеры принято называть "графическими" пользователь как бы рисует ползунками необходимую ему кривую АЧХ.
Графические эквалайзеры можно встретить в бытовых системах Hi-Fi,
однако основные области их применения - это звукозапись,
звуковоспроизведение и акустическая коррекция помещений.
Рисунок 1 АЧХ
Графический эквалайзер - это набор полосовых фильтров, которые
полностью изолируют друг от друга определенные полосы частот. АЧХ
идеального полосового фильтра показана на рисунке 1. Для того, чтобы
иметь возможность управлять частотной характеристикой во всем звуковом
спектре, такие фильтры необходимо соединить параллельно (рисунок 2). На
вход всех фильтров подается один и тот же сигнал, и задача каждого фильтра
состоит лишь в том, чтобы усилить или ослабить "свой" участок спектра в
соответствии с положением регулятора коэффициента усиления (ползунка).
4
Рисунок 2 Параллельное соединение фильтров.
Срединные частоты полосовых фильтров графического эквалайзера
обычно "равномерно" распределены по октавным интервалам. Существуют
эквалайзеры с "шагом" в одну треть или одну шестую октавы. Каждая октава
соответствует степени двойки, поэтому шаг в октаву со срединной частоты
100 Гц будет выглядеть следующим образом: 200 Гц. 400 Гц. 800 Гц и т.д.
Для шага в 1/3 октавы коэффициент умножения будет равен 2 в степени 1/3,
что примерно равно 1.26. При первой срединной частоте в 100 Гц следующие
частоты будут равны 126 Гц, 159 Гц, 200 Гц и т.д. Предпочтительные для
использования в эквалайзерах частоты фильтров описаны в специальном
стандарте ISO.
1.2 Проектирование полосовых фильтров.
Проектирование
цифрового
фильтра
сводится
к
определению
коэффициентов {ai}, {bi} и определении структуры фильтра.
Спроектируем семь полосовых фильтров с серединными частотами .
Полосовой фильтр – совокупность двух фильтров ФНЧ (фильтр нижних
частот) и ФВЧ (фильтр верхних частот).
Идеальная АЧХ полосового фильтра приведена на рисунке 3.
Рисунок 3. АЧХ полосового фильтра.
5
1.2.1 ФНЧ.
Для проектирования ФНЧ в пакете Matlab возможно два пути
 Воспользоваться встроенным проектировщиком
фильтров
 Воспользоваться функциями Matlab
Пойдем по первому пути, воспользуемся Filter Design & Analys Tool.
Для ФНЧ частота среза ω1=300 Гц . Спроектируем рекурсивный фильтр
Баттерворта. АЧХ фильтра рассчитывается по формуле (1)
(1)
где ω0=ω1=512 Гц
n – порядок фильтра.
От того какой порядок выбрать зависит не только крутизна среза фильтра,
но и время вычислительного процесса и отклик на единичный импульс.
Порядок фильтра – компромисс между скоростью вычислений и качеством
фильтрации.
Пусть n=3. На рисунке 4 приведена АЧХ и ФЧХ фильтра Баттерворта 3 –го
порядка.
Рисунок 4. АЧХ и ФЧХ.
6
На рисунке 5 приведен отклик на единичный импульс, как видно фильтр
быстро успокаивается.
Рисунок 5. Реакция на единичный импульс.
Для того, чтобы фильтр был устойчивым необходимо, чтобы нули функций
находились в единичной окружности. На рисунке 6 приведены нули
полинома Баттерворта.
7
Рисунок 6. Нули и полюсы ФНЧ.
Проведем эксперимент с полученным фильтром. Для этого генерируем
сигнал, состоящий из суммы синусов с частотами 200 Гц, 1000 Гц и 20000
Гц. Для имитации АЦП введен блок 1/z Схема и результат эксперимента
приведена на рисунке 7. В схему включен постоянный множитель 120 для
того, чтобы компенсировать потери амплитуды. (файл filter 300).
8
Рисунок 7. Схема и результат эксперимента.
Таким образом, получен ФНЧ, который действует согласно заявленным
требованиям.
Если отфильтровать таким способом сигнал, то получим результат
приведенный на рисунке 8.
9
Рисунок 8. Отфильтрованный сигнал.
1.2.2 ФВЧ.
Спроектируем ФВЧ с частотой среза 512 Гц Выберем рекурсивный фильтр
3 –го порядка на полиномах Баттерворта.
На рисунке 9 приведены АЧХ и ФЧХ фильтра.
Рисунок 9. АЧХ и ФЧХ ФВЧ.
10
2. Разработка программы для анализа звуковых файлов пакете
Matlab.
Для изучения звуковых сигналов была разработана программа в среде
Matlab. Интерфейс программы приведен на рисунке. Листинг программы
находится в Приложении 1.
Рисунок 10. Интерфейс.
Интерфейс состоит из
 Кнопка «Старт». По этой кнопке управление передается программе
SAUND_analiz.m. Листинг программы находится в Приложении 2
1. Программа загружает звуковой файл формата
wav.
Программный пакет Matlab может работать со звуковыми
файлами только в wav, с другими форматами Matlab не работает.
Формат wav несжатый формат, поэтому размеры файлов
сравнительно велики.
2. Далее программа определяет частоту дискретизации, количество
бит на отсчет.
3. Вырезает массив заданной длины.
4. Формирует графическое изображение сигнала.
5. Отдает управление модели Simulink. Модели Simulink делит
входящий сигнал по частотным диапазонам, для этого
11
используются полосовые фильтры описанные выше.
приведена на рисунке.
Модель
Рисунок 11. Модели Simulink
 Кнопка «>>>>>». По этой кнопке управление передается программе
Vpered.m Листинг программы приведен в Приложении 3. Программа
перемешает прослушиваемый фрагмент вперед по звуковому файлу.
После чего запускает Модели Simulink, тем самым обновляя рабочую
область.
 Кнопка «<<<<<».По этой кнопке управление передается программе
Nazad.m Листинг программы приведен в Приложении 4. Программа
перемешает прослушиваемый фрагмент назад по звуковому файлу.
После чего запускает Модели Simulink, тем самым обновляя рабочую
область.
 Кнопка «Стоп». Очищает графическую область
 Кнопка«Фильтр».
Передает
управление
программе
SINTEZATOR_filter.m Листинг программы приведен в Приложении 5.
Программа выбирает массив в зависимости от положения ползунка.
Заменяет график сигнала графиком отфильтрованного сигнала.
Воспроизводит звук после фильтра.
 Кнопка «Sound». Передает управление программе SSSSSS1.m
Программа регулирует звук в зависимости от положения ползунка и
воспроизводит не отфильтрованный звук. Листинг программы в
Приложении 6.
12
Заключение
В работе был спроектирован графический эквалайзер. Качество работы
синтезатора зависит прежде всего от качества работы математических
фильтров. В работе использовались рекурсивные фильтры 3 –го порядка на
полиномах Баттерворта.
Поскольку формат wap не сжатый формат, то размеры звуковых файлов
велики, т.е программе необходимо обработать файлы больших размеров.
Поэтому были выбраны фильтры 3-го порядка при увеличении порядка
фильтров качество звука улучшается, но время обсчета увеличивается.
13
Литература.
1. Чен К., Джиблин П., Ирвинг А «MATLAB в математических
исследованиях», Мир, 2001
2. Потемкин В.Г. «Система инженерных и научных расчетов MATLAB»
5.х (в 2-х томах)
Диалог-Мифи 1999г.
3. П. Бутусов, А. Половко «MATLAB для студента»
4. Сергиенко А.Б. «Цифровая обработка сигналов» Питер 2003
14
Приложения
Приложение 1.
%***************************************************************
%*
*
%*
Интерфейс для синтезатора
*
%*
*
%***************************************************************
function SINTEZATOR
%-------------------------------------------------------------------------%Глобальные переменные
global hFig1 hAxes1
global hFig2 hAxes2
global hFig3 hAxes3 step
global hBut1 hBut2 hBut3 hBut4 hBut5
global hText1 hText1 hText2 hText3 hText4 hText5 hText6 hText7
global hSlider1 hSlider2
%-------------------------------------------------------------------------%Графики
hFig1=figure
hAxes1=axes( 'Parent', hFig1, 'Color', 'green', ...
'Units','points', ...
'Position',[15 150 300 100 ],...
'FontSize',10);
%-------------------------------------------------------------------------%Кнопки
hBut1=uicontrol(hFig1,'Style','pushbutton', ...
15
'String','START', ...
'Callback','SAUND_analiz',...
'BackgroundColor','red',...
'Position',[10 10 70 30],...
'TooltipString','Запуск программ');
hBut2=uicontrol(hFig1,'Style','pushbutton', ...
'String','>>>>>>>', ...
'Callback','Vpered',...
'BackgroundColor','blue',...
'Position',[110 10 70 30],...
'TooltipString','Перемотка');
hBut3=uicontrol(hFig1,'Style','pushbutton', ...
'String','<<<<<<<', ...
'BackgroundColor','Blue',...
'Callback','Nazad',...
'Position',[210 10 70 30],...
'TooltipString','Перемотка');
hBut4=uicontrol(hFig1,'Style','pushbutton', ...
'String','STOP', ...
'Callback','Stop',...
'BackgroundColor','red',...
'Position',[310 10 70 30],...
'TooltipString','Стоп');
hBut5=uicontrol(hFig1,'Style','pushbutton', ...
'String','Filter', ...
'Callback','SINTEZATOR_filter',...
'BackgroundColor','red',...
'Position',[450 200 50 50 ],...
'TooltipString','Звук');
hBut6=uicontrol(hFig1,'Style','pushbutton', ...
'String','SOUND', ...
'Callback','SSSSSS1',...
'BackgroundColor','red',...
'Position',[450 300 50 50 ],...
'TooltipString','Звук');
%-------------------------------------------------------------------------% Бегунки
hSlider1=uicontrol(hFig1,'Style','slider', ...
'Position',[10 150 300 20], ...
'BackgroundColor','yellow',...
'HorizontalAlignment','left',...
'TooltipString','Громкость');
16
hSlider2=uicontrol(hFig1,'Style','slider', ...
'Position',[10 100 300 20], ...
'BackgroundColor','yellow',...
'HorizontalAlignment','left',...
'TooltipString','Частота');
%------------------------------------------------------------------------% Текстовое поле без редактирования
hText1=uicontrol(hFig1,'Style','text', ...
'Position',[100 130 120 15], ...
'BackgroundColor','yellow ',...
'String','The volume level ',...
'HorizontalAlignment','center');
hText2=uicontrol(hFig1,'Style','text', ...
'Position',[100 80 120 15], ...
'BackgroundColor','yellow ',...
'String','Height tone ',...
'HorizontalAlignment','center');
hText3=uicontrol(hFig1,'Style','text', ...
'Position',[20 370 130 30], ...
'String','***-----Audio analyzer-----*** ',...
'HorizontalAlignment','center');
%------------------------------------------------------------------------step=0;
Приложение 2.
% Программа для анализа звуковых сигналов
%===================================================================
=======
%Открываем звуковой файл. Файл находится в папке D:/SAUND/ 502.wav
[SAUND,Fs,bits]=wavread('D:\SAUND\502.wav',[10 60000]);
SAUND1=SAUND(:,1);
SAUND2=SAUND(:,2);
T=[0:1/(Fs*bits):(length(SAUND1)-1)*1/(Fs*bits)]';
SAUND_T=[T SAUND1];
step=0;
%--------------------------------------------------------------------------
17
%Отрисовка графических полей
plot(T,SAUND1)
%------------------------------------------------------------------------%Открываем и запускаем модель
open_system('filter_sound3.mdl')
sim('filter_sound3.mdl')
Приложение 3
global step
if step<=55000*10
[SAUND,Fs,bits]=wavread('D:\SAUND\502.wav',[1055000+step 1110000+step]);
SAUND1=SAUND(:,1);
SAUND2=SAUND(:,2);
T=[0:1/(Fs*bits):(length(SAUND1)-1)*1/(Fs*bits)]';
SAUND_T=[T SAUND1];
%-------------------------------------------------------------------------%Отрисовка графических полей
plot(T,SAUND1)
%------------------------------------------------------------------------%Открываем и запускаем модель
open_system('filter_sound3.mdl')
sim('filter_sound3.mdl')
else
step=0;
[SAUND,Fs,bits]=wavread('D:\SAUND\502.wav',[1055000+step 1110000+step]);
SAUND1=SAUND(:,1);
SAUND2=SAUND(:,2);
T=[0:1/(Fs*bits):(length(SAUND1)-1)*1/(Fs*bits)]';
SAUND_T=[T SAUND1];
%-------------------------------------------------------------------------%Отрисовка графических полей
plot(T,SAUND1)
end
18
step=step+55000;
Приложение 4
global step
if step>0
[SAUND,Fs,bits]=wavread('D:\SAUND\502.wav',[1055000-step 1110000-step]);
SAUND1=SAUND(:,1);
SAUND2=SAUND(:,2);
T=[0:1/(Fs*bits):(length(SAUND1)-1)*1/(Fs*bits)]';
SAUND_T=[T SAUND1];
%-------------------------------------------------------------------------%Отрисовка графических полей
plot(T,SAUND1)
%------------------------------------------------------------------------%Открываем и запускаем модель
open_system('filter_sound3.mdl')
sim('filter_sound3.mdl')
else
step=0;
[SAUND,Fs,bits]=wavread('D:\SAUND\502.wav',[1055000+step 1110000+step]);
SAUND1=SAUND(:,1);
SAUND2=SAUND(:,2);
T=[0:1/(Fs*bits):(length(SAUND1)-1)*1/(Fs*bits)]';
SAUND_T=[T SAUND1];
%-------------------------------------------------------------------------%Отрисовка графических полей
plot(T,SAUND1)
end
step=step+55000;
Приложение 5
global hSlider1 hSlider2
19
slider_value1 = get( hSlider1,'Value');
slider_value2 = get( hSlider2,'Value');
if slider_value2>=0.9
f=f7;
end
if (slider_value2>=0.8)&(slider_value2<0.9)
f=f7;
end
if (slider_value2>=0.7)&(slider_value2<0.8)
f=f7;
end
if (slider_value2>=0.6)&(slider_value2<0.7)
f=f6;
end
if (slider_value2>=0.5)&(slider_value2<0.6)
f=f5;
end
if (slider_value2>=0.4)&(slider_value2<0.5)
f=f4;
end
if (slider_value2>=0.3)&(slider_value2<0.4)
f=f3;
end
if (slider_value2>=0.2)&(slider_value2<0.3)
f=f2;
end
if (slider_value2>=0.1)&(slider_value2<0.2)
f=f1;
end
if slider_value2==0
f=0;
20
end
ff=slider_value1*f*100000000;
plot([0:length(f)-1],ff);
sound(ff,Fs)
Приложение 6.
%Включаем звук
global hSlider1
slider_value1 = get( hSlider1,'Value');
SAUND2=SAUND1*slider_value1*10000;
sound(SAUND2,Fs)
Download