Если вы запустите код выше В этой строке E = sum((y-xx).^2)/N
размеры матрицы должны совпадать. Появляется ошибка.
Как решить код, не касаясь файла функции?
[y,Fs] = audioread('handel.wav');
WSIZE = ceil(0.01 * Fs);
WBLOCK = floor(length(y) / WSIZE);
Spectrum = zeros(128, WBLOCK);
for k = 0: WBLOCK-1
yk = k * WSIZE +1 : (k+1) * WSIZE;
yb = (y(yk))';
[x, wk] = dft(yb,128);
Spectrum(:,k+1) = transpose(abs(x));
end
xx = idft(Spectrum);
N = size(y,1);
E = sum((y-xx).^2)/N
figure;
subplot(2,2,1); plot(y);
subplot(2,2,2); plot(xx);
subplot(2,2,3); plot(E);
Это код функции dft
и функции idft
.
dft
функция
function [X,wk] = dft(x, K)
if length(x) < K
xx = zeros(1,K);
xx(1:length(x)) = x;
else
xx= x;
end
N = length(xx);
n = [0:1:N-1];
k = [0:1:K-1];
wk = (2 *pi / K) *k;
w = exp(-1j *2 *pi / K);
X = xx / N * w .^ (n'*k);
idft
функция
function [xn] = idft(Xk, N)
N = length(Xk);
n = [0:1:N-1];
k = [0:1:N-1];
WN = exp(j * 2*pi/N);
nk = n'*k;
WNnk = WN .^ nk;
xn = (Xk * WNnk) / N ;