Nehmen Sie die unten stehende einfache Frequenzbereich-Bandpassfilteroperation. . .
NFFT = 128;
x = randn(NFFT,1);
H = zeros(NFFT,1);
H(10:20) = 1;
y = ifft(H.*fft(x), 'symmetric');
Dies ergibt eine echte Ausgabe, da ich das konjugierte symmetrische Flag für die ifft-Operation verwende.
Ich möchte eine Funktion, die die konjugierte symmetrische Version von H zurückgibt, daher muss ich mich nicht auf die integrierte symmetrische Option in Matlabs ifft verlassen. NFFT kann eine beliebige positive ganze Zahl sein. Dies könnte man so etwas nennen. .
H(10:20) = 1;
H = MakeConjSym(H);
Antworten:
Symmetrische Mittel konjugieren
dh das Vorzeichen des Imaginärteils ist entgegengesetzt, wennx < 0
Die FFT eines realen Signals ist konjugiert symmetrisch. Eine Hälfte des Spektrums sind die positiven Frequenzen und die andere Hälfte sind die negativen. Die negativen Koeffizienten sind konjugiert mit den positiven.
Wenn Sie also filtern, muss Ihre Hüllkurve sowohl die positiven als auch die entsprechenden negativen Frequenzen ausführen, damit sich die imaginären Bits aufheben.
In Ihrem Beispiel macht H nur die Hälfte. Deshalb enthält der Ausgang imaginäre Bits. Was du willst ist
quelle
Sie müssen nur sicherstellen, dass
quelle
Mit den anderen Antworten habe ich eine MATLAB-Funktion geschrieben, um das auszuführen, was Sie benötigen:
Wie im Code erwähnt, unterstützt MATLAB Coder keine symmetrische IFFT, sodass eine dedizierte, fest codierte Funktion erforderlich ist, wenn die Codekompilierung das Ziel ist. Der bereitgestellte Code sollte sowohl FFTs mit gerader als auch mit ungerader Länge unterstützen.
Die Formatierung sieht im Kern etwas besser aus .
quelle