function xp = expandperiodic(x, M, dir) % Signalen x av längden N utökas till längden N+M så % att x betraktas som periodisk. % xp = expandperiodic(x, M, dir) % % x Signalen. % M Antalet sampel som signalen utökas med % dir Riktningen. Om dir är 'f' eller 'forward', utökas x så att xp % börjar med x och M sampel sätts till slutet. Om dir är 'b' eller % 'backward', slutat signalen till x och M sampel sätts till början. % xp En signal av längden M. N = length(x); Mcount = M; cwhile = true; % continue while switch dir case { 'f','F', 'forward', 'FORWARD' } % Riktningen framåt (för icke-kausal filtrering) while cwhile if Mcount > N x = [ x, x(1:N) ]; % utöka signalen med en hel period Mcount = Mcount - N; % uppdatera Mcount else % 0 < Mcount < N % Bara en del av sekvensen tillsätts x = [ x, x( 1:Mcount ) ]; cwhile = false; % sluta slingan end end case { 'b', 'B', 'backward', 'BACKWARD' } % Riktningen bakåt (för kausal filtrering) while cwhile if Mcount > N x = [ x(1:N), x ]; % utöka signalen med en hel period Mcount = Mcount - N; % uppdatera Mcount else % 0 < Mcount < N % Bara en del av sekvensen tillsätts x = [ x( (N-Mcount+1):N ) x ]; cwhile = false; % sluta slingan end end otherwise error('You must give the direction, backward or forward'); end xp = x;