Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %--------------------------------------------------------------------------
- % wczytanie sygnału x z pliku
- %--------------------------------------------------------------------------
- [x,fpx]=audioread('mbi04dziur.wav');
- Nx=length(x); % wyznaczenie ilości próbek sygnału x
- t1=0: 1/fpx: (Nx-1)/fpx; % generowanie osi czasu
- %--------------------------------------------------------------------------
- % widmo sygnału x
- %--------------------------------------------------------------------------
- Nf1=2^nextpow2(Nx); % liczba próbek widma, pierwsza potęga dwójki po wartości Nx (liczbie próbek sygnału x)
- N1=Nf1/2+1; % pozbycie się lustrzanego odbicia wykresu
- v1=fft(x,Nf1); % wyznaczenie widma zespolonego
- w1=abs(v1); % wyznaczenie widma amplitudowego
- f1=linspace(0,fpx/2,N1); % generowanie osi częstotliwości
- %--------------------------------------------------------------------------
- % decymacja sygnału x
- %--------------------------------------------------------------------------
- dr=3; % wartość rzędu decymacji
- y=decimate(x,dr); % decymacja sygnału y
- fpy=fpx/dr; % częstotliwość sygnału y
- Ny=length(y); % ilość próbek sygnału y
- t2=0:1/fpy: (Ny-1)/fpy; % generowanie osi czasu
- subplot (4,2,1);
- plot (t2,y);
- title('Wykres 1')
- xlabel('czas')
- ylabel('sygnał')
- %--------------------------------------------------------------------------
- % widmo zdecymowanego sygnału x
- %--------------------------------------------------------------------------
- Nf2=2^nextpow2(Ny); % liczba próbek widma, pierwsza potęga dwójki po wartości Ny (liczbie próbek sygnału y)
- N2=Nf2/2+1; % pozbycie się lustrzanego odbicia wykresu
- v2=fft(y,Nf2); % wyznaczenie widma zespolonego
- w2=abs(v2); % wyznaczenie widma amplitudowego
- f2=linspace(0,fpy/2,N2); % generowanie osi częstotliwości
- subplot (4,2,2);
- plot (f2,w2(1:N2)); % wizualizacja widma
- title ('Wykres 2')
- xlabel('częstotliwość')
- ylabel ('widmo')
- %--------------------------------------------------------------------------
- % filtr dolnoprzepustowy
- %--------------------------------------------------------------------------
- M=201; % długość odpowiedzi impulsowej filtra
- fpf = 800; % częstotliwość graniczna (odcięcia)
- fpf1=(fpf/fpy)*2; % unormowanie częstotliwości granicznej
- h=fir1(M-1,fpf1, 'low'); % filtr dolnoprzepustowy
- th=0: 1/fpy : (M-1)/fpy; % generowanie osi czasu
- %--------------------------------------------------------------------------
- % widmo funkcji transmitancji
- %--------------------------------------------------------------------------
- vh=fft(h, Nf2); % wyznaczenie widma zespolonego
- wh=abs(vh); % wyznaczenie widma amplitudowego
- subplot (4,2,3);
- plot (f2, wh(1:N2));
- title ('Wykres 3')
- xlabel('częstotliwość')
- ylabel ('widmo')
- %--------------------------------------------------------------------------
- % filtracja sygnału y przez stworzony wcześniej filtr
- %--------------------------------------------------------------------------
- yf = filter(h, 1, y); % zapisanie przefiltrowanego sygnału do zmiennej yf
- %--------------------------------------------------------------------------
- % widmo sygnału po filtracji
- %--------------------------------------------------------------------------
- v3=fft(yf, Nf2); % wyznaczenie widma zespolonego
- w3=abs(v3); % wyznaczenie widma amplitudowego
- subplot (4,2,4);
- plot (f2, w3(1:N2)) % wizualizacja widma
- title ('Wykres 4')
- xlabel('częstotliwość')
- ylabel ('widmo')
- %--------------------------------------------------------------------------
- % sygnał złożony z sinusów i szumu
- %--------------------------------------------------------------------------
- fp13=150; % częstotliwość próbkowania
- n13=1500; % liczba próbek
- t131=0:1/fp13:2; % generowanie osi czasu
- t132=2:1/fp13:4; % generowanie osi czasu
- t133=4:1/fp13:8; % generowanie osi czasu
- t134=8:1/fp13:10; % generowanie osi czasu
- f131=2; % nadanie zmiennej wartości 2Hz
- f132=6; % nadanie zmiennej wartości 6Hz
- y133=1/3*randn(1,601); % szum o rozkładzie normalnym i amplitudzie jeden
- f134=2; % nadanie zmiennej wartości 2Hz
- y131=sin(2*pi*f131*t131); % generowanie sinusoidy
- y132=sin(2*pi*f132*t132+pi/4); % generowanie sinusoidy z fazą 45*
- y134=sin(2*pi*f134*t134+pi/2); % generowanie sinusoidy z fazą 90*
- y13=[y131 y132 y133 y134]; % złożenie sygnałów (suma wektorów)
- t13=[t131 t132 t133 t134]; % złożenie osi czasu (suma wektorów)
- subplot (4,2,5);
- plot (t13,y13);
- title ('Wykres 5')
- xlabel ('czas')
- ylabel('sygnał')
- %--------------------------------------------------------------------------
- % autokorelacja sygnału
- %--------------------------------------------------------------------------
- tau_max=400; % przesunięcie- liczba próbek o jaką ma być przesunięty sygnał
- [r14,t14] = xcorr(y13, y13, tau_max, 'biased'); % obliczanie autokorelacji i automatyczne wygenerowanie odpowiedniej osi
- subplot (4,2,6);
- plot (t14,r14);
- title ('Wykres 6')
- xlabel('przesunięcie')
- ylabel('współczynnik korelacji')
- %--------------------------------------------------------------------------
- % sygnał sinusoidalny
- %--------------------------------------------------------------------------
- f15=2; % nadanie zmiennej wartości 2Hz
- y15=sin(2*pi*f15*t13); % generowanie sygnału sinusoidalnego
- %subplot (428);
- %plot (t13,y15);
- %--------------------------------------------------------------------------
- % korelacja sygnału sinusoidalnego i sygnału z wykresu 5
- %--------------------------------------------------------------------------
- [r15,t15]=xcorr(y13,y15, 'biased');
- subplot (4,2,7);
- plot (t15,r15)
- title ('Wykres 7')
- xlabel('przesunięcie')
- ylabel('współczynnik korelacji')
- sound (x, 1.3*fpx);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement