samer@34: function [y,phi]=block(o,phi,T,cutoff,f) samer@34: % block - Generate block of blit signal data samer@34: % samer@34: % block :: samer@34: % blit ~'blit object' samer@34: % 0--1 ~'initial phase (in cycles)' samer@34: % N:natural ~'number of samples to compute', samer@34: % 0--1 ~'normalised frequency (1=sampling freq)', samer@34: % 0--0.5 ~'cutoff harmonics above this frequency [0.5]', samer@34: % -> [[1,N]] ~'band-limited impulse train', samer@34: % 0--1 ~'initial phase for next block'. samer@34: samer@34: m = max(1,2*floor(cutoff/f)-1); % number of harmonics to keep samer@34: y = m*f*diric(2*pi*(phi+f*(0:T-1)),m)-f; samer@34: phi = mod(phi+f*T,1); samer@34: samer@34: % If diric is not available then use this samer@34: % y=zeros(1,T); samer@34: % phase = pi*(phi+f*(0:T-1)); samer@34: % modcheck=mod(phase,pi); samer@34: % I=modcheck>0.001 & modcheck<(pi-0.001); samer@34: % y(~I) = f*m; samer@34: % y(I) = f*sin(m*phase(I))./sin(phase(I)); samer@34: samer@34: