以下は、高精度のイコライザーを作成するための簡単で汚いコードです。
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) を使用する必要がありますか?