%% Diseño de un filtro fir pasoalto por el metodo de las series de %Fourier clear all; close all; fp = 11e3; fs = 3e3; fm = 44e3; fc = (fp+fs)/2; Fc = fc/fm; windows=['boxcar ';'bartlett';'hamming ';'hanning ';'blackman']; colors=['b ';'r ';'m ';'--b';'--r']; %% Numero de puntos del filtro: puede ser par o imar ya que la % funcion (-1)^n se ajustaria a par o impar depemdiendo de N N = 25; n=0:N-1; %% Al utilizar la expresión hhp[n] = (-1)^n hlp[n], tenemos que %% cambiar la frecuencia de corte a Fc = 1/2 - Fc; %% Filtro pasobajo ideal hlpi = 2*Fc*sinc(2*Fc*(n-(N-1)/2)); % $$$ delta = zeros(1,N); % $$$ delta((N+1)/2)=1; %% Aplicamos ventanas espectrales a este filtro ideal M=500; %% Nº de puntos para calcular la Resp Freq for i=1:size(windows) eval(['w=' windows(i,:) '(N);']); hlp = hlpi.*w'; %% Normalizar de forma que |H(0)|=1 hlp = hlp/sum(hlp); %% %% if (rem(N,2)==0) hhp = (-1).^n .* hlp; %% else %% hhp = delta - hlp; %% end [H,f]=freqz(hhp,1,M,fm); plot(f,abs(H),colors(i,:)); hold on; if (i==4) figure;stem(n,hhp,'o');grid;pause; eval(['print -depsc2 fir_hp_coef_N' num2str(N)]); close; figure;plot(f,20*log10(abs(H)));grid; axis([-inf inf -60 0.5]); xlabel(['Frecuencia (Hz)']); ylabel(['|H(F|']);pause; eval(['print -depsc2 fir_hp_rf_N' num2str(N)]); close; end end grid;hold off; legend('rect','bartlett','hamming','hanning','blackman'); xlabel(['Frecuencia (Hz)']); ylabel(['|H(F|']); title(['Filtro Pasoalto, fc=' num2str((0.5-Fc)*fm/1000) ... 'KHz, fm=' num2str(fm/1000) 'KHz, N=' num2str(N)]); eval(['print -depsc2 fir_hp_wind_N' num2str(N)]); pause;close