Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %%%%LAB5
- N = 1000; Fs = 100; f1 = 20; f2 = 22.05; n = (0:N-1)'/Fs;
- % sygnaly w dziedzinie czasu (mala litera)
- %x = sin(2 * pi * f1 * n) + sin(2 * pi * f2 * n);
- %x2 = sin(2 * pi * f2 * n);
- % sygnaly w dziedzinie czestotliwosci (wielka litera)
- %X = fft(x);
- %X2 = fft(x2); % przeciek widma!
- % pojedyncza czestotliwosc, ale sie "rozplywa"
- % po chlopsku: df = Fs/N = 0.1 Hz
- % funkcja Fouriera nie jest w stanie policzyc dla tej wartosci, wiec
- % jest przeciek widma
- % lub: niepelna liczba okresow
- % fft zaklada, ze sygnal jest okresowy, wiec "przykleja"
- % dla f1 jest dobrze, dla f2 przy sklejeniu bedzie przeskok
- %rysujwidmo(X2, Fs, 0, 'r*');
- % metoda zminimalizowania: okienkowanie
- % x(t) * w(t) => splot => x(f) *. w(f)
- %w = hamming(N);
- %y = x .* w;
- %W = fft(w); Y = fft(y);
- % g r b
- % wyciek stlumiony
- %rysujwidmo([X, W, Y], Fs);
- x = sin(2 * pi * f2 * n); X = fft(x);
- y = [x; zeros(N, 1)]; Y = fft(y); % Y = fft(x, 2 * N);
- % srednik - dodaje w pionie
- rysujwidmo(X, Fs, 0, 'b.-'); hold on;
- rysujwidmo(Y, Fs, 0, 'r*-'); %hold off;
- w = [ones(N, 1); zeros(N, 1)]; W = fft(w);
- rysujwidmo(W, Fs, 0, 'go-'); hold off;
- %%%%%%%%%%%%%%%%%%%%RYSUJE WIDMO%%%%%%%%
- function rysujwidmo(X, Fs, Ph, c)
- if nargin < 4, c = ' '; end;
- if nargin < 3, Ph = 0; end;
- if nargin < 2, Fs = 2; end;
- N = size(X, 1);
- N2 = N/2;
- f = ((-N2:N2 - 1)/N) * Fs; % f czasami jako omega
- X = fftshift(X) + eps;
- if(Ph) % ogladamy widmo czasowe i czestotliwosciowe
- subplot(2, 1, 1); plot(f, 20*log10(abs(X)));
- subplot(2, 1, 2); plot(f, unwrap(angle(X)));
- else
- plot(f, 20*log10(abs(X)), c);
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement