I'm trying to create a seamless loop using a "non-periodic" signal using interpolation to smooth out the beginning and the end but I'm still getting a click at the beginning when it loops and I listen to it. Can interpolation do this?
Please Note that the equation is done this way to create a "non-periodic" signal to test when a signal does not start and end at the zero crossings.
I used audacity to zoom in and play the loops. I've included images along with the matlab/octave code.
% combines sig to create seamless loop clear all,clc,tic; fs=44100; dirpathtmp=strcat('/tmp/'); %/home/rat/Documents/octave/eq_research/main/transform/voice fn=strcat('atest1',sprintf('%02d',fs),'.wav'); t1=linspace(0,2*pi,fs); %need to round off no decimals t2=linspace(0,2*pi,fs); %need to round off no decimals t3=linspace(0,2*pi,fs); %need to round off no decimals %Create signal in different arrays y1=sin(7*t1); y2=sin(12*t2); y3=cos(2.2*t3); yt=y1+y2+y3; ytnorm=(yt/max(abs(yt))*.8); %normalize signal %change end points to stddev number ytnorm_std=std(ytnorm); %for loop to replace points to create seamless loop ytnorm(1)=0; %set first point to 0 ytnorm(fs)=0; %set last point to zero for kk=2:1:15; kk ytnorm(kk)=interp1(t1,ytnorm,kk,'spline'); ytnorm((fs+1)-kk)=interp1(t1,ytnorm,((fs+1)-kk),'spline'); end; wavwrite([ytnorm'] ,fs,16,strcat(dirpathtmp,fn)); plot(ytnorm) fprintf('\nfinally Done-elapsed time -%4.4fsec- or -%4.4fmins- or -%4.4fhours-\n',toc,toc/60,toc/3600);