1

以下は、高精度のイコライザーを作成するための簡単で汚いコードです。

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.

すべての FIR 係数は 0 です。

n パラメータを 101 から 91 に下げると、firpmエラーなしで動作しますが、周波数応答は望ましいものとはほど遠いものです。また、最大 12288 タップをサポートするハードウェア DSP FIR モジュールの FIR 係数を計算したいことを考慮して、Matlab に必要な係数を計算させるにはどうすればよいですか? firpmこれを実行できますか、それとも、Matlab と後でアプリケーション C++ コードの両方で別のアプローチ (逆 FFT) を使用する必要がありますか?

4

1 に答える 1

0

ああ、MPアルゴリズムは実際にはこれを処理できないようですので、他の解決策が必要です:

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

その場合、逆FFTに固執する必要があると思います。

于 2011-10-18T11:41:27.813 に答える