Skip to content

Instantly share code, notes, and snippets.

@piotrgredowski
Last active August 29, 2015 14:13
Show Gist options
  • Save piotrgredowski/c7e0dcdbd059a940142a to your computer and use it in GitHub Desktop.
Save piotrgredowski/c7e0dcdbd059a940142a to your computer and use it in GitHub Desktop.
Okna czasowe, CPS 7.01.2015
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ł
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment