TechDays

トップ «前の日記(2003-08-08) 最新 次の日記(2003-08-12)» 編集

2003-08-11 [長年日記]

_ MATLABでFFTしてIFFTするプログラム

samples = wavread('onsei3');
nsamples = length(samples);
nframes = floor((nsamples-N)/(N/4))+1;
samples2D = zeros(N,nframes);
for frame=1:nframes
   ns = 1+(N/4)*(frame-1);
   ne = N+(N/4)*(frame-1);
   samples2D(:,frame) = samples(ns:ne);
end
spectrum2D = zeros(N,nframes);
for frame=1:nframes
   spectrum2D(:,frame) = fft(samples2D(:,frame).*hamming(N));
end
mag_fft2D = abs(spectrum2D);
arg_fft2D = angle(spectrum2D);
spectrum2D = mag_fft2D.*exp(j*arg_fft2D);
output2D = zeros(N,nframes);
for frame=1:nframes
   output2D(:,frame) = real(ifft(spectrum2D(:,frame)));
   output2D(:,frame) = output2D(:,frame).*hamming(N);
end
output = zeros(nsamples,1);
for frame=1:nframes
   ns = 1+(N/4)*(frame-1);
   ne = N+(N/4)*(frame-1);
   output(ns:ne) = output(ns:ne)+output2D(:,frame);
end
output = output/max(abs(output))*0.95;
wavwrite(output, 16000, 'onsei3_enh.wav')

トップ «前の日記(2003-08-08) 最新 次の日記(2003-08-12)» 編集

過去の日記


2002|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|
2011|03|05|09|