Как преобразовать спектр речи во временную область

Делаю анализ речи. Я записал звук в течение 5 секунд. Применили окно Хэмминга, смещение постоянного тока и нормализацию, а также с помощью быстрого преобразования Фурье получили спектр. Я хочу услышать, насколько изменился звук. Так есть ли способ преобразовать FFT обратно во временную область?

clc,clear;
% Record your voice for 5 seconds.
%recObj = audiorecorder;
recObj = audiorecorder(96000, 16, 1);
disp('Start speaking.')
recordblocking(recObj,5);

disp('End of Recording.');
% Play back the recording.
play(recObj);
get(recObj);
myspeech = getaudiodata(recObj);
wavwrite(double(myspeech),96000,'C://Users//naveen//Desktop//unprocessed')

% Store data in double-precision array.
myRecording = getaudiodata(recObj);

% Store data in double-precision array.
myRecording = getaudiodata(recObj);

% Plot the samples.
figure,plot(myRecording),title('Original Sound');
%Offset Elimination
 a = myRecording;
 a=double(a);
 D = a-mean(a);
 figure,plot(myRecording),title('Sound after Offset Elimination');

 %normalizing
 w = D/max(abs(D));
 figure,plot(w),title('Normalized  Sound');

 %      hamming window 
 a1=double(w);
 %a1=a1';
 N=length(w);
 hmw = hamming(N);
 temp = a1.*hmw;
 a1 = temp;

 %Fast Fourier Transform 
 a2=double(a1);
 N=length(a1);
 n=ceil(log2(N));
 nz=2^n;
 fs = 96000;
 x_z=0*[1:nz];
 x_z(1:N)=a2;
 X=fft(x_z);
 x1=abs(X);
 wq=double(0:nz-1)*(fs/nz);
 figure,stem(wq,x1),title('Spectrum');    
 xlabel('Frequency (Hz)');
 ylabel('Magnitude of FFT Coefficients');

 nz1=round(nz/2)
 x2=x1(1:nz1);
 w1=wq(1:nz1);
 figure,plot(w1,x2);
 title('Half Length Spectrum of Sound');
 nz2=nz1*10;

person Naveen Cherian    schedule 06.04.2014    source источник


Ответы (2)


Как и fft, вы также можете применить ifft, обратное преобразованию Фурье (http://www.mathworks.es/es/help/matlab/ref/ifft.html)

person enric.cornella    schedule 06.04.2014
comment
Это сработало. Я применил ifft для восстановления исходного сигнала. Спасибо - person Naveen Cherian; 30.05.2017

Использование функции abs() для сложных данных — это операция с потерями, которая отбрасывает любую фазовую информацию. Информация о фазе кодирует формы сигналов, а также синхронизацию любых переходных процессов в окне БПФ. Поскольку эта информация была отброшена, спектр амплитуды или спектрограмма сами по себе не могут быть преобразованы обратно в звук, который звучит как исходная речь.

Но если вы сохраните полные комплексные результаты БПФ, то комплексный IFFT может использоваться в каком-то процессе ресинтеза.

person hotpaw2    schedule 06.04.2014