Ошибка в размерах матрицы, которые не совпадают в Matlab - PullRequest
0 голосов
/ 03 мая 2020

Если вы запустите код выше В этой строке 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 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...