blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
3
SLEDOVAŤ BLOG
PHP, Arduino programátor
deadawp



Vzorkovanie signálu - MATLAB
pridal deadawp 15.1. 2020 o 21:05



Proces vzorkovania signálu má využitie v procese digitalizácie. Analógový signál je vzorkovaný vzorkovacou frekvenciou, ktorá je minimálne 2* vyššia ako maximálna frekvencia signálu. To zaručí lepšiu a vernejšiu reprezentáciu signálu v procese kvantovania, kódovania s následnou reprezentáciou signálu v analógovej forme. Čím vyššia je frekvencia, tým kvalitnejší signál získame, nakoľko perióda vzorkovania je kratšia. Implementáciu som vyhotovil v prostredí MATLAB ako semestrálny projekt, môže poslúžiť ako odrazový bod pri realizácii podobnej úlohy.
V mojej implementácii som využil tieto vzorkovacie frekvencie:

  • Vzorkovacie frekvencia --> 2*fmax
  • Vzorkovacie frekvencia --> 3*fmax
  • Vzorkovacie frekvencia --> 10*fmax

Script obsahuje niekoľko premenných, ktoré ovplyvňujú pôvodný signál a vzorkovací proces. Modifikovateľné sú údaje:

  • Čas signálu (s)
  • Maximálna frekvencia signálu (Hz)
  • Vzorkovacia frekvencia 1, 2, 3.

Z týchto údajov je vygenerovaný náhodný signál so zohľadnením maximálnej frekvencie a času. Zo vzorkovacích frekvencií sú určené jednotlivé periódy vzorkovania. Jednotlivé signály sú vykreslené do čiarového grafu.

Graf využíva funkciu stem, ktoré vizualizujú body vzorkovania signálu a následne cez plot reprezentuje spojenie týchto bodov - vzorkovaný signál na spojitej funkcii, ako analógový. V grafe je voľným okom viditeľný rozdiel medzi jednotlivými vzorkovacími frekvenciami (najmä 2*fmax a 10*fmax) a výsledným spojitým signálom. Signál s väčšou vzorkovacou frekvenciou je vernejšie reprezentovaný a viac sa podobá originálnemu signálu. Os x reprezentuje časovú rovinu, os y reprezentuje amplitúdu frekvencie signálu. Zaujímavosťou je v systéme tzv. true random generátor čísel založený na čase, nakoľko štandardný softvérový generátor je predvídateľný.

Programová implementácia:

%%Vyhotovil: Martin Chlebovec
%%Donate: 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



Prístupov 547
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDOVAŤ
Prosím prihláste sa pre možnosť pridania komentáru.
Prihláste sa, alebo použite facebook login facebook login
ĎALŠIE ČLÁNKY V BLOGU
Včelárska váha - Arduino - update
[ 23.2.2020] (príspevkov 0)
Senzorická sieť v LAN sieti - Arduino + ...
[ 14.2.2020] (príspevkov 0)
Airsoft DOMINATOR - Tlačidlový - Arduino...
[ 7.2.2020] (príspevkov 0)
Tester dosahu / štruktúra - nRF24L01 / n...
[ 6.2.2020] (príspevkov 0)
Monitor teplôt, vlhkostí - Arduino Mega ...
[ 25.1.2020] (príspevkov 0)
ThingSpeak - IoT platforma pre Arduino /...
[ 16.1.2020] (príspevkov 0)
Vzorkovanie signálu - MATLAB
[ 15.1.2020] (príspevkov 0)
Meranie napätia - Arduino
[ 13.1.2020] (príspevkov 0)
Meranie jednosmerného prúdu - Arduino
[ 12.1.2020] (príspevkov 0)
Hlasom ovládané auto - ESP8266 (NodeMCU)
[ 10.1.2020] (príspevkov 0)