2014-11-30 4 views
1

Я разрабатываю фильтр для wavfile, на самом деле то, что я хочу сделать, это отделить диапазон определенных частот, усилить их, а затем добавить обратно в wav-файлMatlab: как получить индексы отфильтрованного вывода

[y Fs]=wavread('test_2.wav'); 
Wp = [1100 2200]/Fs; 
Ws = [1000 2500]/Fs; 
Rp = 3; Rs = 40; 
[n,Wn] = buttord(Wp,Ws,Rp,Rs) 
[b,a] = butter(n,Wn); 

z=filter(b,a,y); 
gain = 20; 
filtered = gain .* z; 

Что мне удалось сделать, чтобы отделить определенную полосу через полосовой фильтр и усилить его с помощью масштабирования, теперь я хочу добавить его обратно в wav-файл, есть ли встроенная команда, через которую я могу получить точные показатели отфильтрованного выхода (find() не работает)

+1

Я рекомендую использовать преобразование Фурье по этому вопросу. В частотной области вы можете напрямую выбирать то, что хотите усилить. Ищите (быстрое преобразование Фурье) fft в вашей помощи в matlab. Cheers – mrcl

+0

на самом деле я должен применять различные фильтры полосового фильтра для этой задачи – johnny

+0

В частотной области вы можете применить любой фильтр, который вы хотите. это просто вопрос выбора функции, которая изменяется от 0 до 1 и умножается на ваши спектры. Затем вы сохраняете частоты при их умножении на 1 и подавляете их при умножении на 0. Очевидно, вы можете использовать значения между ними для ослабления разных частот, вместо полного их подавления – mrcl

ответ

1

Вы можете использовать filtfilt.

y = filterfilt (b, a, x) выполняет цифровую фильтрацию с нулевой фазой путем обработки входных данных x в прямом и обратном направлениях.

Так что в вашем случае,

z = filtfilt(b,a,y); 
gain = 20; 
filtered = gain .* z; 
y = y + filtered; 
Смежные вопросы