Odpovedať 
 
Hodnotenie témy:
  • 0 Hlasov - 0 Priemer
  • 1
  • 2
  • 3
  • 4
  • 5
Vzorkovanie signálu - MATLAB
12-15-2019, 18:48
Príspevok: #1
Vzorkovanie signálu - MATLAB
Rád by som sa podelil s implementáciou vzorkovania signálu v prostredí MATLAB pre 3 vzorkovacie frekvencie pre úlohu, ktorú som realizoval vrámci semestrálnej práce... Snáď sa niekomu hodí do budúcna...

Vzorkovanie signálu je významným členom procesu digitalizácie analógového signálu. Kvalitným vzorkovaním je možné spätne repredukovať signál takmer bez strát.
Popis scriptu:
  • Náhodný generátor čísel vygeneruje časový rámec 1 až 10 sekúnd.
  • Z týchto vstupných údajov script vygeneruje náhodnú postupnosť so zohľadnením maximálnej frekvencie.
  • Pôvodný analógový signál je vizualizovaný v čiarovom grafe.
  • Signál bude vzorkovaný s frekvenciami 2*fmax, 3*fmax a 10*fmax.
  • Na základe vzorkovacích frekvencií script vypočíta vzorkovaciu frekvenciu.
  • Vzorkovacia frekvencia určuje, ako často bude signál vzorkovaný. Čím nižšie číslo, tým kvalitnejšie vzorkovanie získame.
  • Vzorkovaný signál je vizualizovaný do grafu ako krivka, rovnako tak i digitálne s bodmi vzorkovania.
  • Grafické spracovanie poukazuje na kvalitu vzorkovaného signálu voči pôvodnému signálu a stratám pri nižšej frekvencii vzorkovania.
[Obrázok: 1ZETtRI.png]
Kód:
%%Vyhotovil: Martin Chlebovec
%%Donate na pivko: https://paypal.me/chlebovec

close all; %% zatvor figure, okno
clear all; %% Vymaž premenné a ich hodnoty
rng shuffle %% náhodný generátor čísel, časový - true random generator


tmax = randi([1 10]) %%generuj max. časovu oblasť od do
t = 0:0.1:tmax; %%vytvor maticove pole
f_max = randi([1 5]) %%generuj max frekvenciu (amplitúdu)

figure(1) %%vytvor jedno okno pre grafy
%%generuj nahodnu maticu spojitych signalov (analógový signál)
signal = (f_max)*rand(1,length(t));

%%podgraf
subplot(7,1,1)
%%vykreslenie spojitej krivky zelenej farby (generovaný signál)
plot(t,signal,'-g');
title('Náhodne generovaný analógový singál'); %%Nadpis grafu
xlabel('Čas (s)'); %Popis osi x
ylabel('Frekv. (Hz)'); %Popis osi y
hold on
grid %%hodnoty x a y osí
f_vzorkovacia = 2*f_max %%vzorkovacia frekvencia 2*fmax
f_vzorkovacia3 = 3*f_max %%vzorkovacia frekvencia 3*fmax
f_vzorkovacia10 = 10*f_max %%vzorkovacia frekvencia 10*fmax

T_vzorkovacia = 1/f_vzorkovacia %vzorkovacia perioda pre 2*fmax
T_vzorkovacia3 = 1/f_vzorkovacia3 %vzorkovacia perioda pre 3*fmax
T_vzorkovacia10 = 1/f_vzorkovacia10 %vzorkovacia perioda pre 10*fmax

%%vzorkovacie kroky z diskretnej hodnoty 0 - max. casova hodnota signalu
kroky = 0:T_vzorkovacia:max(t)
kroky3 = 0:T_vzorkovacia3:max(t)
kroky10 = 0:T_vzorkovacia10:max(t)
%%interpolacia - prienik funkcnych hodnot signalu v casovych bodoch periody
vzorkovanie_body = interp1(t,signal,kroky);
vzorkovanie_body3 = interp1(t,signal,kroky3);
vzorkovanie_body10 = interp1(t,signal,kroky10);
hold on

subplot(7,1,2) %%podgraf
%%čiarové reprezentácie funkčných hodnôt s bodmi amplitúdy vzorkovania
stem(kroky,vzorkovanie_body,'Color','b');
hold on
%%úsečka opisujúca periódu vzorkovania medzi 2 vzorkovaniami
plot([kroky(2) kroky(3)],[0 0],'-k','LineWidth',3);
%%ukončovacie body úsečky so znakmi < --- > pre interval
scatter(kroky(2),0,'<','k')
scatter(kroky(3),0,'>','k')
%%popis úsečky s textom Tvz
text((kroky(2)/2+kroky(3))/2,-0.3,'Tvz','Color','black', 'Fontsize', 12);
title('Vzorkovaný signál --> fvz = 2*fmax'); %%nadpis podgrafu
xlabel('Čas (s)'); %Popis osi x
ylabel('Frekv. (Hz)'); %Popis osi y
hold on

subplot(7,1,3) %%podgraf
plot(kroky,vzorkovanie_body,'-b');
title('Priebeh vzorkovaného signálu --> fvz = 2*fmax'); %%nadpis podgrafu
xlabel('Čas (s)'); %Popis osi x
ylabel('Frekv. (Hz)'); %Popis osi y

subplot(7,1,4) %%podgraf
stem(kroky3,vzorkovanie_body3,'Color','r');
hold on
plot([kroky3(2) kroky3(3)],[0 0],'-k','LineWidth',3);
scatter(kroky3(2),0,'<','k')
scatter(kroky3(3),0,'>','k')
text((kroky3(2)/2+kroky3(3))/2,-0.3,'Tvz','Color','black', 'Fontsize', 12);
title('Vzorkovaný signál --> fvz = 3*fmax');
xlabel('Čas (s)'); %Popis osi x
ylabel('Frekv. (Hz)'); %Popis osi y
hold on

subplot(7,1,5) %%podgraf
plot(kroky3,vzorkovanie_body3,'-r'); %vykreslenie spojitej funkcie - krivky
title('Priebeh vzorkovaného signálu --> fvz = 3*fmax');
xlabel('Čas (s)'); %Popis osi x
ylabel('Frekv. (Hz)'); %Popis osi y



subplot(7,1,6) %%podgraf
stem(kroky10,vzorkovanie_body10,'Color','k');
hold on
plot([kroky10(2) kroky10(3)],[0 0],'-k','LineWidth',3);
scatter(kroky10(2),0,'<','k')
scatter(kroky10(3),0,'>','k')
text((kroky10(2)/2+kroky10(3))/2,-0.3,'Tvz','Color','black', 'Fontsize', 12);
title('Vzorkovaný signál --> fvz = 10*fmax');
xlabel('Čas (s)'); %Popis osi x
ylabel('Frekv. (Hz)'); %Popis osi y
hold on

subplot(7,1,7) %%podgraf
plot(kroky10,vzorkovanie_body10,'-k'); %vykreslenie spojitej funkcie - krivky
title('Priebeh vzorkovaného signálu --> fvz = 10*fmax');
xlabel('Čas (s)'); %Popis osi x
ylabel('Frekv. (Hz)'); %Popis osi y
Vyhľadať všetky príspevky tohoto používateľa
Citovať príspevok v odpovedi
Odpovedať 


Skok na fórum:




Kontakty | matlab.sk | Nahor | Na obsah | Odľahčený (archivačný) mód | RSS