Advertisement
matikap2

przyklad z zielinskiego

May 25th, 2018
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.60 KB | None | 0 0
  1. % Ćwiczenie: Projektowanie nierekursywnych filtrów cyfrowych metodą okien z zastosowaniem okna
  2. % Kaisera
  3. % Podaj parametry filtra (np. pasmowozaporowego)
  4.  fpr = 1000; % częstotliwość próbkowania [Hz]
  5.  fd1 = 150; % częstotliwość dolna 1 [Hz]
  6.  fd2 = 200; % częstotliwość dolna 2 [Hz]
  7.  fg1 = 300; % częstotliwość górna 1 [Hz]
  8.  fg2 = 350; % częstotliwość górna 2 [Hz]
  9.  dp = 0.001; % oscylacje w paśmie przepustowym np. 0.1, 0.01, 0.001
  10.  ds = 0.0001; % oscylacje w paśmie zaporowym np. 0.001, 0.001, 0.0001
  11.  typ = 'bs'; % lp=LowPass, hp=HighPass, bp=BandPass, bs=BandStop
  12. % Oblicz parametry okna
  13.  if (typ=='lp') % Filtr LP
  14.  df=fd2-fd1; fc=((fd1+fd2)/2)/fpr; wc=2*pi*fc;
  15.  end
  16.  if (typ=='hp') % Filtr HP
  17.  df=fg2-fg1; fc=((fg1+fg2)/2)/fpr; wc=2*pi*fc; end
  18.  if (typ=='bp' | typ=='bs') % Filtr BP lub BS
  19.  df1=fd2-fd1; df2=fg2-fg1; df=min(df1,df2);
  20.  f1=(fd1+(df/2))/fpr; f2=(fg2-(df/2))/fpr; w1=2*pi*f1; w2=2*pi*f2;
  21.  end
  22. % dp=((10^(Ap/20))-1)/((10^(Ap/20))+1); % opcjonalne przeliczenie Ap i As w [dB]
  23. % ds=10^(-As/20); % na dp i ds
  24.  d=min(dp,ds); A=-20*log10(d);
  25.  if (A>=50) beta=0.1102*(A-8.7); end
  26.  if (A>21 & A<50) beta=(0.5842*(A-21)^0.4)+0.07886*(A-21); end
  27.  if (A<=21) beta=0; end
  28.  if (A>21) D=(A-7.95)/14.36; end
  29.  if (A<=21) D=0.922; end
  30.  N=(D*fpr/df)+1; N=ceil(N); if(rem(N,2)==0) N=N+1; end
  31.  N
  32.  pause
  33.  M = (N-1)/2; m = 1 : M; n = 1 : N;
  34. % Wygeneruj okno
  35.  w = besseli( 0, beta * sqrt(1-((n-1)-M).^2/M^2) ) / besseli(0,beta);
  36.  plot(n,w); title('Funkcja okna'); grid; pause
  37. % Wygeneruj odpowiedź impulsową filtra
  38.  if (typ=='lp') h=2*fc*sin(wc*m)./(wc*m); h=[ fliplr(h) 2*fc h]; end % filtr LP
  39.  if (typ=='hp') h=-2*fc*sin(wc*m)./(wc*m); h=[ fliplr(h) 1-2*fc h]; end % filtr HP
  40.  if (typ=='bp') % filtr BP
  41.  h = 2*f2*sin(w2*m)./(w2*m) - 2*f1*sin(w1*m)./(w1*m);
  42.  h = [ fliplr(h) 2*(f2-f1) h];
  43.  end
  44.  if (typ=='bs') % filtr BS
  45.  h = 2*f1*sin(w1*m)./(w1*m) - 2*f2*sin(w2*m)./(w2*m);
  46.  h = [ fliplr(h) 1+2*(f1-f2) h];
  47.  end
  48.  plot(n,h); title('Odp impulsowa filtra'); grid; pause
  49. % Wymnóż odp impulsową filtra z funkcją okna
  50.  hw = h.* w;
  51.  plot(n,hw,'b'); title('Odpowiedz impulsowa filtra z oknem'); grid; pause
  52. % Charakterystyka częstotliwościowa
  53.  NF = 1000; fmin = 0; fmax = fpr/2; % wartości parametrów charakterystyki
  54.  f = fmin : (fmax-fmin)/(NF-1) : fmax; % częstotliwość
  55.  w = 2*pi*f/fpr; % pulsacja
  56.  HW = freqz(hw,1,w); % widmo Fouriera
  57.  plot(f,abs(HW)); grid; title('Moduł'); xlabel('freq [Hz]'); pause
  58.  plot(f,20*log10(abs(HW))); grid; title('Moduł dB'); xlabel('[Hz]'); ylabel('dB');
  59. pause
  60.  plot(f,unwrap(angle(HW))); grid; title('FAZA'); xlabel('[Hz]'); ylabel('[rad]'); pause
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement