Matlab firpm не работает для больших массивов данных AFR - PullRequest
1 голос
/ 17 октября 2011

Вот быстрый и грязный код для создания высокоточного эквалайзера:

bandPoints = 355;
for n = 1:bandPoints
         x = (n / (bandPoints + 2));
         f = (x*x)*(22000-20)+20; % 20...22000
         freqs(n) = f;
         niqfreqs(n) = f/22050.0;
         amps(n) = 0;        
end

amps(bandPoints+1) = 0; % firpm needs even numbers
niqfreqs(bandPoints+1) = 1; % firpm needs even numbers

% set some point to have a high amplitude

amps(200) = 1;
fircfs = firpm(101,niqfreqs,amps);

[h,w] = freqz(fircfs,1,512);
plot(w/pi,abs(h));
legend('firpm Design')

но это дает мне

Warning:
  *** FAILURE TO CONVERGE ***
  Probable cause is machine rounding error.

и все коэффициенты РПИ равны 0.

Если я уменьшу параметр n со 101 до 91, firpm работает без ошибок, но частотная характеристика далека от желаемой. И принимая во внимание, что я хочу рассчитать коэффициенты FIR для аппаратного модуля FIR DSP, который поддерживает до 12288 отводов, как я могу заставить Matlab рассчитать необходимые коэффициенты? firpm способен сделать это или мне нужно использовать другой подход (обратное БПФ) как в Matlab, так и позже в моем C ++ коде приложения?

1 Ответ

0 голосов
/ 18 октября 2011

О, кажется, что алгоритм MP действительно не может справиться с этим, поэтому мне нужно другое решение:

http://www.eetimes.com/design/embedded/4212775/Designing-very-high-order-FIR-filters-with-zero-stuffing

Полагаю, мне придется придерживаться обратного БПФ.

...