Ich habe einen angepassten Filter, den ich seine Frequenzgang in Matlab plotten möchte.Matlab Element-weise Macht - kann nicht verstehen, wie es funktioniert
Die Filterantwort ist: H (f) =
Ich habe versucht, es zu plotten mit:
%Freqency_Response_of_wiener_filter
f = linspace(-1e3,1e3,1e5);
H = ((2*pi*f)^2+10^6)/(11*(2*pi*f)^2+10^6+10^4);
plot(f,H);
xlabel('f')
ylabel('H(f)')
, die nicht funktioniert, gibt mir Fehler von 'Matrix Dimensionen müssen übereinstimmen' Art. Ich lese über ‚elementweise Macht‘, dann die genau zu passen scheint, was ich brauche, und änderte H
zu:
H = ((2*pi*f).^2+10^6)/(11*(2*pi*f).^2+10^6+10^4);
dies in der Tat Grundstück etwas, was einfach nicht ich :) will Ich habe auch versucht
H = ((2*pi)^2*f.^2+10^6)/(11*(2*pi)^2*f.^2+10^6+10^4);
ohne Glück. Der einzige Weg, habe ich es Arbeit ist:
%Freqency_Response_of_wiener_filter
f = linspace(-1e3,1e3,1e5);
for i=1:length(f)
H(i) = ((2*pi*f(i))^2+10^6)/(11*(2*pi*f(i))^2+10^6+10^4);
end
plot(f,H);
Warum ist ‚elementweise Macht‘ nicht für mich arbeiten?
Mehr noch - was genau ist der Unterschied zwischen normalem Betrieb und elementweisem Betrieb? Weil zum Beispiel hier: An Introduction to Matlab, gibt es dieses Grundstück:
a = 0:.01:5;
b = cos(2*pi*a);
plot(a,b)
und dann diese:
x = 2:.1:4;
y = 1./x;
plot(x,y)
xlabel('x');
ylabel('y');
und ich keinen Unterschied zwischen ihnen nicht sagen. Warum brauchte man auf der ersten Stufe keine "elementweise Operation", während in der zweiten es war?
Danke.
Einfache Faustregel: Wenn Sie elementweise Operationen ausführen wollen: Chuck in einen Punkt vor jedem '/', '*' und '^'.Es ist ein wenig übertrieben, d. H. '2. * pi' macht nichts anderes als' 2 * pi', da beide bereits Skalare sind, aber zumindest würde es Sie davor bewahren, diese Art von schwer zu findenden Fehlern zu debuggen. – Adriaan
Ich zweite Adriaan Kommentar. Sie brauchen es nicht, um einen Skalar mit einer Matrix zu multiplizieren, aber wenn Sie zwei Matrizen ('x, y') mit einem Skalar (' k') dazwischen haben, können Sie Probleme beim Debuggen bekommen: 'x * k' und 'k * y' funktionieren beide, aber' x * k * y' verursacht einen Fehler. Anstatt herauszufinden, wo der Punkt/die Punkte platziert werden sollen, setze einfach beide Orte: 'x. * K. * Y'. –