Advertisement
worms005

LAB5 PPS

Dec 8th, 2016
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.66 KB | None | 0 0
  1. %%%%LAB5
  2. N = 1000; Fs = 100; f1 = 20; f2 = 22.05; n = (0:N-1)'/Fs;
  3. % sygnaly w dziedzinie czasu (mala litera)
  4. %x = sin(2 * pi * f1 * n) + sin(2 * pi * f2 * n);
  5. %x2 = sin(2 * pi * f2 * n);
  6. % sygnaly w dziedzinie czestotliwosci (wielka litera)
  7. %X = fft(x);
  8. %X2 = fft(x2); % przeciek widma!
  9. % pojedyncza czestotliwosc, ale sie "rozplywa"
  10. % po chlopsku: df = Fs/N = 0.1 Hz
  11. % funkcja Fouriera nie jest w stanie policzyc dla tej wartosci, wiec
  12. % jest przeciek widma
  13.  
  14. % lub: niepelna liczba okresow
  15. % fft zaklada, ze sygnal jest okresowy, wiec "przykleja"
  16. % dla f1 jest dobrze, dla f2 przy sklejeniu bedzie przeskok
  17.  
  18. %rysujwidmo(X2, Fs, 0, 'r*');
  19.  
  20. % metoda zminimalizowania: okienkowanie
  21. % x(t) * w(t) => splot => x(f) *. w(f)
  22. %w = hamming(N);
  23. %y = x .* w;
  24. %W = fft(w); Y = fft(y);
  25. %           g  r  b
  26. % wyciek stlumiony
  27. %rysujwidmo([X, W, Y], Fs);
  28. x = sin(2 * pi * f2 * n); X = fft(x);
  29. y = [x; zeros(N, 1)]; Y = fft(y); % Y = fft(x, 2 * N);
  30. % srednik - dodaje w pionie
  31.  
  32. rysujwidmo(X, Fs, 0, 'b.-'); hold on;
  33. rysujwidmo(Y, Fs, 0, 'r*-'); %hold off;
  34.  
  35. w = [ones(N, 1); zeros(N, 1)]; W = fft(w);
  36. rysujwidmo(W, Fs, 0, 'go-'); hold off;
  37.  
  38.  
  39.  
  40.  
  41. %%%%%%%%%%%%%%%%%%%%RYSUJE WIDMO%%%%%%%%
  42. function rysujwidmo(X, Fs, Ph, c)  
  43.     if nargin < 4, c = ' '; end;
  44.     if nargin < 3, Ph = 0; end;
  45.     if nargin < 2, Fs = 2; end;
  46.     N = size(X, 1);
  47.     N2 = N/2;
  48.     f = ((-N2:N2 - 1)/N) * Fs; % f czasami jako omega
  49.     X = fftshift(X) + eps;
  50.     if(Ph) % ogladamy widmo czasowe i czestotliwosciowe
  51.         subplot(2, 1, 1); plot(f, 20*log10(abs(X)));
  52.         subplot(2, 1, 2); plot(f, unwrap(angle(X)));
  53.     else
  54.         plot(f, 20*log10(abs(X)), c);
  55.     end
  56. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement