Matlab - integrovanie a zobrazenie spektra signalu

Programovacie jazyky, rady, poradňa...
h.olub
King
King
Používateľov profilový obrázok
Príspevky: 1712
Registrovaný: 10 aug 2009, 11:58
Bydlisko: Bratislava

Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa h.olub »

Zdravim,

mam zadany signal

Kód: Vybrať všetko

t = [0:0.0001:0.75];

for i=1:2500
xt(i) =-2;
end

for i=2501:5000
xt(i)=0;
end
for i=5001:7501
xt(i)=2;
end
plot(t,xt),grid
z ktoreho potrebujem vypocitat spektrum pomocou Fourierivej transformacie -> http://cs.wikipedia.org/wiki/Fourierova_transformace
cize potrebujem vypocitat najskor integral, a tu som narazil na problem........
skusal som nieco taketo no niekde mam chybu.....respektive mi nieco unika(matlab zamrzne)
cisla som do integralu dosadil rucne aj s hranicami....

Kód: Vybrať všetko

syms w;
j=sqrt(-1);
nt=int(-2*exp(-j*w.*t),0,250)+int(2*exp(-j*w.*t),500,750);
vedel by ma niekto nasmeravat spravnym smerom ?
vopred vdaka
Aiden
Darca
Darca
Používateľov profilový obrázok
Príspevky: 2213
Registrovaný: 06 apr 2007, 14:28

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa Aiden »

Ak ti to pomoze, nechal som integrovanie zbehnut u seba. V prilohe mas vysledne data. Padat mi to nepadalo, ale ta symbolicka matica (nt) je dost velka, preto to pracovalo tak dlho.


//EDIT:
Pozrel som sa na to trochu. Skus tento kod a pozri sa blizsie na funkciu fft :)

Kód: Vybrať všetko

close all
clear all
clc

fs = 10000;
ts = 1/fs;
tmax = 0.75;

t = [0:ts:tmax];

for i=1:2500
data(i) = -2;
end

for i=2501:5000
data(i) = 0;
end

for i=5001:7501
data(i) = 2;
end

figure
plot(t,data);
grid on

N = length(data);
f = -fs/2:fs/(N-1):fs/2;
z = fftshift(fft(data));

figure
plot(f,abs(z))
Prílohy
holub_data.rar
(161.75 KiB) 15 stiahnutí
h.olub
King
King
Používateľov profilový obrázok
Príspevky: 1712
Registrovaný: 10 aug 2009, 11:58
Bydlisko: Bratislava

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa h.olub »

hlavne mi ide o to ci je spravne napisany ten integral, skusim nechat matlab pocitat trocha dlhsie a uvidim....
ten kod by mal dat rovnaky vysledok ako ten moj integral ak som to spravne pochopil ?

kazdopadne vdaka za reakciu, aspon viem ze to funguje :)
Aiden
Darca
Darca
Používateľov profilový obrázok
Príspevky: 2213
Registrovaný: 06 apr 2007, 14:28

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa Aiden »

Najskor by si na konci dostal podobny vysledok, ale preco si to komplikovat, ked existuje odladene fft? :)
Rubiki
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1223
Registrovaný: 03 mar 2005, 17:04
Bydlisko: BB

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa Rubiki »

Problém v matlabe s počítaním klasickej FT je v tom že dáta máš zadané diskrétne čím sa dostávaš k Diskrétnej FT a teda počítat to integrálom zo symbolickou premennou je príliš za vlasy pritiahnuté aj keď výsledok bude pravdepodobne dobrý.
Ak to chceš počítať ľahšie a nechceš používať FFT tak si pozri vzorec pre DFT a od integrálu prejdeš k jednoduchej sumácii čo je pre matlab značne jednoduchšia úloha.
Osobne aj ja odporúčam použiť FFT ako ti to napísal Aiden, je to veľmi rýchla, odladená a každým používaná metóda pre zobrazenie spektra.
h.olub
King
King
Používateľov profilový obrázok
Príspevky: 1712
Registrovaný: 10 aug 2009, 11:58
Bydlisko: Bratislava

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa h.olub »

samozrejme mate pravdu, no nevedel som ze to je v matlabe uz implementovane preto som na to isiel cez definiciu FFT....
uz to funguhe ako ma,vdaka Aiden, K+
Aiden
Darca
Darca
Používateľov profilový obrázok
Príspevky: 2213
Registrovaný: 06 apr 2007, 14:28

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa Aiden »

Niet zac. :) Ak pracujes castejsie s Matlabom, urcite odporucam kontrolovat http://www.mathworks.com/help/techdoc/ref/f16-6011.html S takmer kazdou novou verziou pribudnu nejake funkcie, ci sa doplnia stare a uz neraz sa mi stalo, ze som sa pokusal riesit problemy zbytocne komplikovane.
h.olub
King
King
Používateľov profilový obrázok
Príspevky: 1712
Registrovaný: 10 aug 2009, 11:58
Bydlisko: Bratislava

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa h.olub »

vdaka za stranku, co to som tam este nasiel...
no mam trocha problem s inverznou fft, dava mi spravny vysledok no signal je posunuty, keby sa niekto pozrel kde mam chybu :)

Kód: Vybrať všetko

fs = 10000;
ts = 1/fs;
tmax = 0.75;

t = [0:ts:tmax];

for i=1:2500
data(i) = -2;
end

for i=2501:5000
data(i) = 0;
end

for i=5001:7501
data(i) = 2;
end


subplot(4,1,1), plot(t,data), xlabel('povodny signal')
grid on

N = length(data);
z = fftshift(data);
%z = fft(data,64);
f = (0:length(z)-1)'*100/length(z);

m=abs(z);
p=angle(z);
p=unwrap(p);

subplot(4,1,3), plot(f,m), ylabel('Abs.Magnite'), grid on, 
axis([0,100,0,3])
subplot(4,1,4), plot(f,p*180/pi), ylabel('Degrees'), grid on, 
axis([0,200,0,200])
xlabel('frequency [Hz]')

%spetna fft
a=ifftshift(data,64);
subplot(4,1,2),plot(f/100,a),xlabel('signal po ifft'), 
grid on

Rubiki
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1223
Registrovaný: 03 mar 2005, 17:04
Bydlisko: BB

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa Rubiki »

Mne to príde že v poslednom subplote máš zlú časovú os, prečo za časovú os dávaš f/100?
h.olub
King
King
Používateľov profilový obrázok
Príspevky: 1712
Registrovaný: 10 aug 2009, 11:58
Bydlisko: Bratislava

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa h.olub »

to som zabudol premazat ale funkciu by to nemalo ovplivnit, f/100 zobrazi frekvencie na x-ovej osi podelene 100omi.....
Rubiki
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1223
Registrovaný: 03 mar 2005, 17:04
Bydlisko: BB

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa Rubiki »

No ak čakáš rovnaký výsledok po ifft tak ich skús vykresliť s pôvodnou osou t, alebo skús vykresliť obe bez definovanej osky a porovnaj.
Výsledok je proste len vektor hodnôt a ak pri vykresľovaní dvoch rovnakých vektorov použiješ rôzny vektor časovej osi tak tam bude rozdiel práve v posune po časovej osi.
h.olub
King
King
Používateľov profilový obrázok
Príspevky: 1712
Registrovaný: 10 aug 2009, 11:58
Bydlisko: Bratislava

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa h.olub »

vdaka, som vedel ze to bude nejaka malickost :)
islo mi o to aby boli signali identicke aj po ifft, a po vykresleni bez def. osi to funguje ako ma
Rubiki
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1223
Registrovaný: 03 mar 2005, 17:04
Bydlisko: BB

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa Rubiki »

Ak tam dáš pôvodnú os t tak to bude tiež v poriadku. Problém spočíval v tom že pri určovaní vektora f budú prvky vo vektore

f = [0, 100*lenght(z)/1, 100*lenght(z)/2...... ]

pri vektore t to máš zase

t = [0, 1/10000, 2/10000....]

no a posun v grafe máš jasný.
h.olub
King
King
Používateľov profilový obrázok
Príspevky: 1712
Registrovaný: 10 aug 2009, 11:58
Bydlisko: Bratislava

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa h.olub »

nakoniec by som este potreboval poradit s DFT a spetnou DFT, je nejaka funkcia alebo ist cez definiciu ?

skusal som to podla tohto no fftgui mi pise chybu -> http://www.mathworks.com/help/techdoc/m ... r5t-1.html

Kód: Vybrať všetko

Undefined function or method 'fftgui' for input arguments of type 'double'
Rubiki
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1223
Registrovaný: 03 mar 2005, 17:04
Bydlisko: BB

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa Rubiki »

V prípade DFT neexistuje v matlabe špeciálna funkcia ktorá by počítala pôvodným algoritmom DFT.
Treba si uvedomiť čo to vlastne DFT a FFT je. FFT je algoritmus na rýchly výpočet DFT ktorý je potrebný práve preto že samotná definícia DFT je extrémne náročná na výpočet.
Pri DFT je náročnosť výpočtu N^2 s tým že N je počet diskrétnych hodnôt signálu. Pri tvojom signále to je 7501^2 čo je pekne nechutne veľký počet operácií. A pri práci s signálmi je bežné že N sa rovná aj niekoľkým miliónom.
FFT má náročnosť výpočtu oveľa nižšiu a záleží od použitej metódy s tým že matlab používa decimáciu v čase a náročnosť sa rovná N*log(pri základe 2)*N.

Takže ak chceš silou mocou skúšať pôvodnú definíciu DFT tak jedine že si to sám zadefinuješ v matlabe.
h.olub
King
King
Používateľov profilový obrázok
Príspevky: 1712
Registrovaný: 10 aug 2009, 11:58
Bydlisko: Bratislava

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa h.olub »

vdaka za objasnenie, nakoniec som to nejak dal dokopy a uspesne aj odovzdal....

este raz vdaka obom :)

//autoeditácia príspevku (15 Apr 2012, 21:04)
mal by som jednu otazkocku....

v matlabe mam obvod ktoreho vstupom je jednotkovy skok a nasledne sa snim "pohra" par funkcii a potrebujem vykreslit ten vstupny signal cez prikaz plot....
pretoze ho viem vykreslit ze nejaky modul no tam sa neda ulozit, nejake rady ?
Aiden
Darca
Darca
Používateľov profilový obrázok
Príspevky: 2213
Registrovaný: 06 apr 2007, 14:28

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa Aiden »

Neviem ci som spravne pochopil co potrebujes, ale ak mas schemu v simulinku a potrebujes v scripte/command window vykreslit plot, tak si pridaj To Workspace blok a vytvori ti premennu, ktoru pouzijes.
h.olub
King
King
Používateľov profilový obrázok
Príspevky: 1712
Registrovaný: 10 aug 2009, 11:58
Bydlisko: Bratislava

Re: Matlab - integrovanie a zobrazenie spektra signalu

Príspevok od používateľa h.olub »

pochopil si spravne, vyriesene......vdaka :)
Napísať odpoveď