-
Data: 2013-07-06 10:02:30
Temat: Re: program do symulacji obróbki audio ?
Od: Miroslaw Kwasniak <m...@i...zind.ikem.pwr.wroc.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Michał Lankosz <m...@t...pl> wrote:
> największa próbka z 10-ciu kolejnych (pętla for, może da się ją ominąć?):
> data2 = max(data1(i:i+10));
i:i+10 to też pętla ;) Ale ukryta - taki zabieg nazywamy w octave/matlabie
wektoryzacją zagadnienia.
> liczby rozdzielone dwukropkiem oznaczają przedział
> tylko że trzeba w pętli ten wektor sklejać, tzn za każdym obiegiem pętli
> doklejać kolejną wartość, coś w rodzaju:
> data3 = [];
> for i=1:10:data_length % i inkementuje się co 10!
> data2 = max(data1(i:i+10));
> data3 = [data3, data2];
> endfor
> no i teraz już ten filter.
Modyfikacje Twojego rozwiązania:
1) Polecenia "data3 = []" i "data3 = [data3, data2]" to wygodny zapis dla
nieznanej długości data3, ale kosztują: w każym obiegu pętli wykonujesz
dodatkowo niepotrzebne operacje:
-- utwórz nową tablicę data3 o długości length(data3)+1
-- skopiuj starą do nowej
-- skasuj starą
Remedium: prealokacja tablicy
L=floor(length(data1)/10);
data3=zeros(1,L);
for i=1:L
data3[i]= max(data1((i-1)*10+(1:10)))
endfor
2) Na ogół 10<L, więc lepiej zmienić kolejność jawnej i niejawnej pętli,
jawne (czyli niezwektoryzowane) wykonują się wolniej
Remedium poniżej (przy założeniu, że data1 jest wektorem kolumnowym);
ii=1:10:length(data1);
data3=data1(ii).';
for i=1:9
data3=max([ data3; data1(i+ii).' ]);
endfor
3) Obie pętle można w tym zagadnienu zwektoryzować, ale tu opłacalność
pewnie żadna, a czytelność kodu spada:
l=length(data1);
i=ones(10,l/10);
i(1,:)=1:10:l;
i=cumsum(i);
data3=max(data1(i));
clear i;
;)
Następne wpisy z tego wątku
- 06.07.13 11:45 sundayman
- 07.07.13 01:16 Michał Lankosz
- 07.07.13 03:06 sundayman
- 07.07.13 12:43 Miroslaw Kwasniak
- 07.07.13 15:40 sundayman
- 07.07.13 18:59 Michał Lankosz
- 08.07.13 03:29 sundayman
- 08.07.13 08:15 Michał Lankosz
Najnowsze wątki z tej grupy
- stara idea nowe hardware
- Dzwonek gong z transformatorem
- espnow przerywa na jeziorze?
- 8080
- Portowanie CP/M
- radyjko
- Re: Basen i chłodzenie w w wentylacji mechanicznej
- Akumulatory VRLA
- ładowarka zmarła
- Podstawa bezpiecznikowa jako rozłącznik DC
- Napięcie akumulatora wyłączające UPS / jakie nowe akumulatory do UPS?
- nawigacja satelitarna
- SmartLife/Tuya i osuszanie -- mordowanie z zimną krwią...
- Głośnik piezoelektryczny
- Mala autonomiczna kamera monitoringu
Najnowsze wątki
- 2024-07-17 Lublin => Full Stack Java Developer <=
- 2024-07-17 Lublin => Java Full Stack Developer (+Angular) <=
- 2024-07-17 Turek => IT Project Manager (experience with C#) <=
- 2024-07-17 Warszawa => Mobile React Native Developer <=
- 2024-07-05 eSIM na czym polega
- 2024-07-15 Roaming poza unią
- 2024-07-16 Jak tanio dzwonic do Wielkiej Brytani?
- 2024-07-16 Dzień bez ICE
- 2024-07-15 Spalinówki płoną doszczętnie
- 2024-07-15 Pojemność akumulatora
- 2024-07-15 Elektryk8i dalej płoną.
- 2024-07-15 Motodziennik #284 NOWY MG HS z hybrydą oraz wraca FORD CAPRI (jako SUV)
- 2024-07-14 [FILM] SAMOCHODY ELEKTRYCZNE DO WIELKIE ŚCIEMA? TYLKO FAKTY!
- 2024-07-14 Znieczulica w narodzie
- 2024-07-13 Protect Your PC with IObit Malware Fighter Pro 11.3.0.1346 Multilingual