What is wrong in my code?
5 次查看(过去 30 天)
显示 更早的评论
q=readtable('a.txt');
A=q.a;
B=q.b;
C=q.c;
L=length(A);
P=length(B);
S=1;
q.complex=complex(q.d,q.e);
v=reshape(q.complex,L,[]);
X=-10.27:0.1361:10.139;
Y=-10.57:0.1401:10.4366;
v_I=16*ifft2(v.');
v_db=20*log10(v_I);
figure
imagesc(X,Y,v_db.'); grid on
axis equal
axis tight; colormap(hot);
My question is at theory wise v_I(i,j) has to be converted into v_I(e,f) where e=(i^2-j^2)/2*i and f=j and then we have to convert it into a figure. I am not able to this transform.
回答(1 个)
Abhishek
2025-8-18,8:37
编辑:Abhishek
2025-8-18,8:37
Hi @riki singh
I understand you're encountering an error when attempting to visualize a 2D complex-valued matrix using `imagesc`. The issue arises from passing complex data to a function that only supports real values.
In your code, you're performing an inverse FFT operation and then directly computing the dB scale with `log10`. You are applying `log10` directly to` v_I`, which is a complex matrix (since `ifft2` of complex data typically remains complex). Taking `log10` of complex values results in complex outputs, which `imagesc()` cannot plot.
To plot magnitude in dB, you should first take the absolute value of ` v_I`. Make the following changes in your code to compute `v_db`:
v_db = 20 * log10(abs(v_I) + eps);
I tried applying the above change, and ran the code with the given input file in MATLAB R2024b, and got the following plot:

Hope it helps.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Scatter Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!