eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaprogram do symulacji obróbki audio ? › Re: program do symulacji obróbki audio ?
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask
    .pl!news.nask.org.pl!newsfeed.pionier.net.pl!pwr.wroc.pl!news.wcss.wroc.pl!not-
    for-mail
    From: Miroslaw Kwasniak <m...@i...zind.ikem.pwr.wroc.pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: program do symulacji obróbki audio ?
    Date: Sat, 6 Jul 2013 08:02:30 +0000 (UTC)
    Organization: Wroclaw University of Technology, Poland
    Lines: 54
    Message-ID: <kr8ium$ctf$1@z-news.wcss.wroc.pl>
    References: <kr70en$qtq$1@news.task.gda.pl>
    <51d707d0$0$1255$65785112@news.neostrada.pl>
    <kr71a8$sgg$1@news.task.gda.pl> <kr729t$ufb$2@news.task.gda.pl>
    <kr739d$jn2$1@somewhere.invalid> <kr73mj$2k2$1@news.task.gda.pl>
    <kr74s6$kcb$1@somewhere.invalid> <kr755s$kec$1@somewhere.invalid>
    <kr75l9$75q$1@news.task.gda.pl> <kr76no$977$1@news.task.gda.pl>
    <kr7ffk$oma$1@somewhere.invalid> <kr7ngu$h3h$1@news.task.gda.pl>
    <kr8g23$69o$1@somewhere.invalid>
    NNTP-Posting-Host: infrared.zind.ikem.pwr.wroc.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: z-news.wcss.wroc.pl 1373097750 13231 156.17.14.223 (6 Jul 2013 08:02:30 GMT)
    X-Complaints-To: a...@n...pwr.wroc.pl
    NNTP-Posting-Date: Sat, 6 Jul 2013 08:02:30 +0000 (UTC)
    User-Agent: tin/1.9.3-20080506 ("Dalintober") (UNIX) (Linux/2.6.32-5-686 (i686))
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:649552
    [ ukryj 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;

    ;)

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: