Last active
August 29, 2015 14:13
-
-
Save piotrgredowski/c7e0dcdbd059a940142a to your computer and use it in GitHub Desktop.
Okna czasowe, CPS 7.01.2015
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
clear | |
clc | |
close all | |
[y,fs]=wavread('odliczanie.wav'); %wczytujemy wartości wektora y i wartość cz. próbk. fs z pliku odliczanie.wav | |
figure | |
plot (y) %rysujemy wczytany sygnał | |
axis tight; grid on; xlabel ('Probki'); ylabel ('Amplituda'); title ('sygnal y'); %ustalamy parametry wykresu | |
%zmienne w, yw, z będą dla każdego okna nadpisywane żeby nie zrobił się bałagan w | |
%workspace'ie. | |
w=window(@rectwin,length(y)); %ustalamy rodzaj okna jako prostokątne, ważną rzeczą jest jego rozmiar. | |
%najlepiej określić go za pomocą długości wektora y - bedzie to uniwersalne | |
%niezależnie od tego jaki bedzie wektor y. Dzieki temu nie wystapi problem | |
%z rozmiarem macierzy jaki wielu ludzi mialo | |
yw=w.*y; %wymnażamy poszczególne wartości wektora okna (o tym mówi kropka) przez wartości sygnału | |
%zwykle gdy sami generujemy sygnal czy robimy sinusa, zachodzi potrzeba | |
%odwrocenia go przy mnozeniu i wtedy dokonuje transpozycji wektora - czyli | |
%po prostu dodajemy ' za y czyli mamy y' . Tutaj nie musimy tego robic, | |
%wektor y z pliku .wav jest poziomy | |
z=fft(yw); %robimy fft sygnału z nałożonym oknem | |
z=abs(z); %bierzemy wartość absolutną | |
z=z(1:(fs)/2); %tu ustalamy długość wektora z - chodzi nam o to aby nie było tego odbicia lustrzanego jakie | |
%wielu ludzi ma u siebie, chcemy wektor o długości połowy wartości częstotliwości | |
z=z/(fs/2); %w ten sposób skalujemy wartości amplitudy prążków tak aby zawierały się w przedziale <0,1> | |
figure | |
bar(z)%rysujemy sygnał z nałożonym oknem | |
axis tight;grid on;xlabel ('Czestotliwosc'); ylabel ('Amplituda'); | |
title ('Widmo rectwin'); | |
figure | |
plot(yw) | |
axis tight;grid on;xlabel ('Czestotliwosc'); ylabel ('Amplituda'); | |
title ('Sygnal rectwin'); | |
figure(8) %rysujemy sobie na wykresie 8. okno prostokątne | |
plot(w,'r') | |
title ('Okna: czerwone - prostokątne, zielone - trójkątne, niebieskie - Blackmana'); | |
%wszystko poniżej jest analogicznie tylko są zastosowane inne okna | |
%okno trójkątne | |
w=window(@triang,length(y)); | |
yw=w.*y; | |
z=fft(yw); | |
z=abs(z); | |
z=z(1:(fs/2)); | |
z=z/(fs/2); | |
figure | |
bar(z) | |
axis tight;grid on;xlabel ('Czestotliwosc'); ylabel ('Amplituda'); | |
title ('Widmo triang'); | |
figure | |
plot(yw) | |
axis tight;grid on;xlabel ('Czestotliwosc'); ylabel ('Amplituda'); | |
title ('Sygnal triang'); | |
figure(8) %rysujemy sobie na wykresie 8. okno trójkątne | |
hold on | |
plot(w,'g') | |
hold off | |
%okno Blackmana | |
w=window(@blackman,length(y)); | |
yw=w.*y; | |
z=fft(yw); %dff lub fft jest stosowane | |
z=abs(z); | |
z=z(1:(fs/2)); | |
z=z/(fs/2); | |
figure | |
bar(z) | |
axis tight;grid on;xlabel ('Czestotliwosc'); ylabel ('Amplituda'); | |
title ('Widmo blackman'); | |
figure | |
plot(yw) | |
axis tight;grid on;xlabel ('Czestotliwosc'); ylabel ('Amplituda'); | |
title ('sygnal blackman'); | |
figure(8) %rysujemy sobie na wykresie 8. okno Blackmana | |
hold on | |
plot(w,'b') | |
hold off | |
soundsc(y,fs) %odtwarzamy sobie jeszcze wczytany sygnał |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment