【问题标题】:Unable to generate coefficient matrix in MATLAB无法在 MATLAB 中生成系数矩阵
【发布时间】:2018-05-15 13:14:55
【问题描述】:

我有以下一段代码,我正在尝试计算系数矩阵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 值变得不匹配。

【问题讨论】:

  • 您能在代码中标记第 43 行和第 52 行吗?
  • Matlab 在分配一个超出范围的值时会自动扩展一个矩阵或向量。例如,t=[1, 2];t(3) = 3; 给出t=[1, 2, 3]y3(k+1) = N/2; 行将始终在最后一个循环中为 k=9 分配第十个值
  • 对于第 43 行,它在实际的 stem 定义中表示第 43 行。不在代码本身中。

标签: matlab matrix fft ifft


【解决方案1】:
size(real(x3))  % --> 1 10
size(n)         % --> 1 9

所以它们的大小不一样。您正在增加 y3(k+1) = N/2; 中 y3 的大小

另外,为什么要在每次迭代中创建矩阵 y3:y3 = zeros(1,9);

【讨论】:

  • 嗯,所以如果我的H(e^{...}) 在 9 期间有以下值,我可以简单地拥有以下值吗? y3 = [1 1 1 0 0 0 0 1 1]; x3 = ifft(y3);
  • y3 是在频域还是空间?
  • y3 是频域
  • 如果您确定 ifft 是您想要做的,您可以简单地这样做:x3 = ifft(y3); 根据您的解释,语法和想法是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 2020-04-20
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多