Code of Highpass filter for objective function in pso algorithm.

2 visualizaciones (últimos 30 días)
Jayasree Das
Jayasree Das el 25 de Nov. de 2023
Respondida: Pratyush Swain el 21 de Mzo. de 2025
I am trying to design an optimal linear phase high pass filter using pso algorithm but it is giving me the graph for low pass filter.Can anyone please help me with the code for high pass filter to use as objective function.
The code I am currently using is:
function [o] = objFunction(x)
M = 10;
wc = 0.5 * pi;
hr = 0;
for i = 1:(M/2)
hr = hr + 2 * x(i) * cos(wc * ((M/2) - i));
h(i) = 1-(cos(wc * (M/2)) - 1i * sin(wc * (M/2)));
end
hr = hr + x(M/2);
e1 = abs(hr - h);
o = 20 * log10(hr);
end

Respuestas (1)

Pratyush Swain
Pratyush Swain el 21 de Mzo. de 2025
Hi Jayasree,
The issue that you are facing currently is your obejctive function seems to be set up for low-pass filter.
Your current expression for (h):
h(i) = 1-(cos(wc * (M/2)) - 1i * sin(wc * (M/2)));
This above uses a fixed angle, resulting in same values of h(i) which could be why your original filter response was not shaping properly.
To modify it for a high-pass filter, you can adjust the desired response (h) and the way you compute the error (e1). Please refer to following implementation:
function [o] = objFunction(x)
M = 10;
wc = 0.5 * pi;
hr = 0;
h = zeros(1, M/2);
% Calculate the actual filter response hr
for i = 1:(M/2)
hr = hr + 2 * x(i) * cos(wc * ((M/2) - i));
end
hr = hr + x(M/2);
% Desired high-pass filter response
for i = 1:(M/2)
h(i) = -1 * (cos(wc * ((M/2) - i)) - 1i * sin(wc * ((M/2) - i)));
end
% Error between desired and actual response
e1 = abs(hr - h);
o = sum(e1);
end
Please note, for error calculation, you can also use the MSE(Mean Squared Error) as an alternative to absolute error.
Hope this helps

Categorías

Más información sobre Particle Swarm en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by