今日、Matlabと同じ結果を得るためにC++コード(Ooura FFTライブラリを使用)を作成するのに苦労しながら、私はついに問題と解決策を見つけました。 MATLABでOoura逆FFTの違いがMatlab ifft
振幅 - 周波数応答は、以下の方法(MATLABの内部fir2は()関数からのコード断片)で行われるのグリッドの逆係数計算:我々はバック16384個のビンを得る結果として
%H contains 8192 points of AFR data
Hconj = [H conj(H(npt-1:-1:2))]; % Fourier transform of real series
ht = real(ifft(Hconj)); % Symmetric real series
を後半は投げ捨てることができますが、前半は後でFIR係数として使用できます。
しかし、私は実質DFT RDFT()関数を使用して、大浦で同じことを行うならば、私は結果のAFRにミラー効果を作成する係数を取得し、AFRプロット上のすべての周波数は、だから、2
によって分割されています私のC++コードでは、Hを2倍(16384ポイント)作成し、ミラーリングせずに周波数データをすべて埋めました。そしてボイル!それは働いた、今私は16384ポイントを持って、8192ポイントの後にすべてを捨てて、今結果AFRはMatlabに一致します。
すべての標準FFT実装でこのミラーリングが必要であると確信しました。それは入力でミラーリングデータを必要としない、または何か他のことが起こっているかもしれないというOouraのちょっとした変わったものですか?