⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timescalesola.m

📁 matlab code for discrete time signal processing overlay and a
💻 M
字号:
% TimeScaleSOLA.m
% Time Scaling with Synchronized Overlap and Add
%
% Parameters:
%
% analysis hop size     Sa = 5000		
% block length          N  = 10000
% time scaling factor   0.25 <= alpha <= 2, 0.8 - stretch, 1.2 - shrink
% overlap interval      L  = 10

clear all,close all

[signal,Fs]	=	wavread('brass_jazz.wav');
DAFx_in		=	signal';

Sa	=	input('Analysis hop size Sa in samples   = ');
N	=	input('Analysis block size N in samples  = ');
if Sa > N 
   disp('Sa must be less than N !!!')
end
M	=	ceil(length(DAFx_in)/Sa);

% Segmentation into blocks of length N every Sa samples
% leads to M segments

alpha =input('Time stretching factor alpha      = ');
Ss	  =round(Sa*alpha);
L	  =input('Overlap in samples (even)         = ');

if Ss >= N disp('alpha is not correct, Ss is >= N')
elseif Ss > N-L disp('alpha is not correct, Ss is > N-L')
end

DAFx_in(M*Sa+N)=0;
Overlap  =  DAFx_in(1:N);

% **** Main TimeScaleSOLA loop ****
for ni=1:M-1
  grain=DAFx_in(ni*Sa+1:N+ni*Sa);
  XCORRsegment=xcorr(grain(1:L),Overlap(1,ni*Ss:ni*Ss+(L-1)));		
  [xmax(1,ni),index(1,ni)]=max(XCORRsegment);
  fadeout=1:(-1/(length(Overlap)-(ni*Ss-(L-1)+index(1,ni)-1))):0;
  fadein=0:(1/(length(Overlap)-(ni*Ss-(L-1)+index(1,ni)-1))):1;
  Tail=Overlap(1,(ni*Ss-(L-1))+ ...
               index(1,ni)-1:length(Overlap)).*fadeout;
  Begin=grain(1:length(fadein)).*fadein;
  Add=Tail+Begin;
  Overlap=[Overlap(1,1:ni*Ss-L+index(1,ni)-1) ...
           Add grain(length(fadein)+1:N)];
end;
% **** end TimeScaleSOLA loop ****
% Output in WAV file
sound(Overlap,44100);
wavwrite(Overlap,Fs,'7_3_2_SOLA_brass_jazz_shrink.wav');	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -