Невозможно сгенерировать матрицу коэффициентов в MATLAB

У меня есть следующий фрагмент кода, и я пытаюсь вычислить матрицу коэффициентов, a_k, чтобы решить линейную систему, чтобы получить h[n], импульсную характеристику. Я использую обратное быстрое преобразование Фурье.

N = 9; % period is chosen to be 16
n = 0:N-1; %vector for x must start at n = 0
for k = 1:9
    y3 = zeros(1,9);
    y3(k+1) = N/2;
    y3(N - k + 1) = N/2;  
end
x3 = ifft(y3);

figure;
subplot(2,2,1);stem(n,real(x3));xlabel('n'); //line 52
ylabel('real(x3)');axis([0 N-1 -1 1]);
subplot(2,2,2);stem(n,imag(x3));xlabel('n');
ylabel('imag(x3)');axis([0 N-1 -1 1]);
subplot(2,2,3);stem(n,real(y3)/N);xlabel('k');
ylabel('real(a_k)');axis([0 N-1 -1 1]);
subplot(2,2,4);stem(n,imag(y3)/N);xlabel('k');
ylabel('imag(a_k)');axis([0 N-1 -1 1]);

Однако, когда я запускаю этот код, я получаю следующую ошибку:

Error using stem (line 43)
X must be same length as Y.

Error in fft_examples (line 52)
subplot(2,2,1);stem(n,real(x3));xlabel('n');

Я не уверен, где я ошибаюсь. Я знаю, что матрица k от 1 до 9. Следовательно, я сделал цикл for. Значения y становятся несоответствующими.


person Community    schedule 25.02.2017    source источник
comment
Можете ли вы отметить строки 43 и 52 в своем коде?   -  person frederick99    schedule 26.02.2017
comment
Matlab автоматически расширит матрицу или вектор при назначении значения, которое в противном случае выходит за пределы. Например, t=[1, 2]; t(3) = 3; дает t=[1, 2, 3]. Строка y3(k+1) = N/2; всегда будет присваивать десятое значение в последнем цикле для k=9   -  person Maurits    schedule 26.02.2017
comment
Для строки 43 это говорит о строке 43 внутри фактического определения stem. Не в самом коде.   -  person    schedule 26.02.2017


Ответы (1)


size(real(x3))  % --> 1 10
size(n)         % --> 1 9

Так что они не одного размера. Вы увеличиваете размер y3 в y3(k+1) = N/2;

Кроме того, почему вы хотите создавать матрицу y3 на каждой итерации: y3 = zeros(1,9);

person smttsp    schedule 25.02.2017
comment
Хм, так что, если мой H(e^{...}) имеет следующие значения для периода 9, могу ли я просто иметь следующее? y3 = [1 1 1 0 0 0 0 1 1]; x3 = ifft(y3); - person ; 26.02.2017
comment
y3 находится в частотной области или в пространстве? - person smttsp; 26.02.2017
comment
y3 — частотная область - person ; 26.02.2017
comment
Если вы уверены, что ifft это то, что вы хотите сделать, вы можете просто сделать это: x3 = ifft(y3); Синтаксис и идея верны на основе вашего объяснения. - person smttsp; 26.02.2017