Jump to content

    

как сделать эквалайзер

Мне нужно усилить частоты в диапазоне 370...430 Гц на 9 дБ. 

АЧХ должна получиться примерно как на картинке. Как такое делается?

На картинке по вертикали дБ, по горизонтали Гц.

 

afc.png

Share this post


Link to post
Share on other sites

MATLAB, fdatool, опция Arbitrary Magnitude.
Сам решал примерно такую же задачу. Вот та тема

 

Share this post


Link to post
Share on other sites

Вот это да! Никогд не знал о существовании Arbitrary Magnitude.

Там есть даже более подходящий для меня режим Peaking. Спасибо! 

Share this post


Link to post
Share on other sites

поскольку прошел ту же самую задачу в несколько более расширенном виде напишу. Нужно просто получить импульсный отклик нужного эквалайзера, делается посредством IIFT от АЧХ при обнуленной ФЧХ (можно и не при обнуленной, а заданной). А потом просто свертка. Свертка тоже быстрая конечно, через FFT-IFFT. 

По ссылке жуть конечно, этак через дцать лет людей понимающих, что собственно происходит не останется и везде будет "возьми в матлабе пакет ХХХ и вызови функцию YYY)/ 

Share this post


Link to post
Share on other sites
On 8/2/2019 at 4:26 AM, DASM said:

поскольку прошел ту же самую задачу в несколько более расширенном виде напишу. Нужно просто получить импульсный отклик нужного эквалайзера, делается посредством IIFT от АЧХ при обнуленной ФЧХ (можно и не при обнуленной, а заданной). А потом просто свертка. Свертка тоже быстрая конечно, через FFT-IFFT. 

После ifft при обнуленной ФЧХ обязательно надо делать перестановку импульсной характеристики.

Нельзя прямо сразу сверку с результатом ifft! 

Ещё желательно окошком после перестановки. 

Share this post


Link to post
Share on other sites
4 hours ago, bahurin said:

После ifft при обнуленной ФЧХ обязательно надо делать перестановку импульсной характеристики.

Нельзя прямо сразу сверку с результатом ifft! 

Ещё желательно окошком после перестановки. 

Это да. Опустил детали. Тут разбираюсь с кодом fir2 матлаба. Там такие строки вот. 

dt = 0.5 .* (nn - 1);
rad = -dt .* sqrt(-1) .* pi .* (0:npt-1) ./ (npt-1);
H = H .* exp(rad);
H = [H conj(H(npt-1:-1:2))];   % Fourier transform of real series.
ht = real(ifft(H));            % Symmetric real series.
b = ht(1:nn);         % Raw numerator.
b = b .* wind(:).';   % Apply window.

H - изначально требуемая АЧХ. А зачем умножение на комплексную экспоненту? У меня вроде и так работает.. 

LEN = length(ftab);
y = zeros(1, 2*LEN);
y(1) = 1;
y(2:LEN) = ftab(1:end-1);
y(LEN+1:end) = flip(ftab);
imp = ifft(y, NPOINTS * 2);
imp = ifftshift(iff);

Вроде нутром понятно, что в Матлабе правильно, а у меня нет, но не соображу. У меня тож работает как надо. Правда фильтр вроде вдвое длиннее выходит. Поясните плиз

Share this post


Link to post
Share on other sites

В первом случае формируется линейная фчх. Что бы не переставлять результат.  Во втором случае фчх, равная 0 и как следствие - перестановка результата.  Оба варианта правильные.

bahurin про это написал.

Share this post


Link to post
Share on other sites
20 hours ago, thermit said:

В первом случае формируется линейная фчх. Что бы не переставлять результат.  Во втором случае фчх, равная 0 и как следствие - перестановка результата.  Оба варианта правильные.

bahurin про это написал.

Спасибо. Похоже дошел до стадии собаки, которая вроде понимает, а написать не может ). 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this