Synthesize windowed signal after LPC
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I am trying to check the functionality of lpc() function in matlab. So, - I read a wav file using audioread(), - Make blocks of 320 samples, with 50% overlap - Multiply each block by hamming window, - Get LPC coeff of each block by lpc() - Get LP Residual by inverse filter - Get back the original signal block by LPC coeff and LP Residual - Add the blocks together using overlap-add method.
However, the output is totally distorted. Not sure what is wrong with my code.
[yr,fr] = audioread('myaudio.wav');
initlen = length(yr); % Signal length
windowsize = 320;
overlapsize = 160;
framelength = 160;
blocks = ceil(initlen/framelength);
hammingwindow = hamming(windowsize);
extrazeros = (windowsize-framelength)/2;
yr_work = padarray(yr, extrazeros, 'pre'); % Pad zeros at the beginning
extrazeros = extrazeros + (blocks*framelength) - initlen;
yr_work = padarray(yr_work, extrazeros, 'post'); % Pad zeros at the end
est_yr = zeros(windowsize, blocks); % Array of processed blocks
for i=1:framelength:(blocks*framelength)
yr_w = yr_work(i:i+windowsize-1);
yr_w = yr_w.*hammingwindow; % apply Hamming window
a = lpc(yr_w, lpcorder);
res_yr_w = filter(a,1,yr_w); % LP Residual by inverse filter
est_yr(:, ceil(i/framelength)) = filter(1,a,res_yr_w);
end
% add blocks together
yd = zeros(initlen, 1); % final output
for i=1:blocks
arrstart = ((i-1)*framelength) + 1;
arrend = arrstart + framelength - 1;
yd(arrstart:arrend) = est_yr(overlapsize+1:end,i);
end
0 Kommentare
Antworten (0)
Siehe auch
Kategorien
Mehr zu Linear Prediction finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!