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);