由于矢量长度不同,绘制 FFT 失败
Plotting FFT fails due to vectors not having the same length
我有时间(第 1 列)和电流幅度(第 2 列)的 csv 数据。我想绘制当前的 FFT。这实际上是超过 30ns 的仿真数据,数据步长为 1ps。我可以在 MATLAB 中绘制电流与时间的关系图。但是在执行 FFT 函数时,它根本没有像它所说的那样绘制
Error using plot
Vectors must be the same length.
Error in FFT_Ideal_current_maxstep_1ps (line 25).
plot(f,Y)
谁能帮帮我?我也附上了 MATLAB 代码和 CSV 文件。
我还想绘制功率谱密度。如果有人可以提供帮助,那就太好了。我想获得超过 2GHz 或更多频谱范围的 FFT 和 psd
MATLAB 代码 1:
% open data file
fid = fopen('current_maxstep_1ps.csv');
% Read data in from csv file
readData = textscan(fid,'%f %f','Headerlines',1,'Delimiter',',');
% Extract data from readData
t = readData{1,1}(:,1);
x = readData{1,2}(:,1);
N = length(x);
ts = 0.000000000001;
Fs = 1/ts;
tmax = (N-1)*ts;
tm = 0:ts:tmax;
f = 0:Fs/(N-1):Fs/2;
y = fftshift(fft(x));
Y = abs(y);
plot(f,Y)
我还尝试了另一个 MATLAB 代码,其中绘图(这里是图片:FFT picture of code 2)但显示在时域中,我想要频谱像沿频谱的 apmlitudes 尖峰。
MATLAB 代码 2:
% open data file
fid = fopen('Ideal_current_maxstep_1ps.csv');
% Read data in from csv file
readData = textscan(fid,'%f %f','Headerlines',1,'Delimiter',',');
% Extract data from readData
xData = readData{1,1}(:,1);
yData = readData{1,2}(:,1);
Ts = 1e-12;
Fs = 1/Ts;
%Fs = 1000;
%Ts = 1/Fs;
X = fft(yData);
plot(xData, abs(X))
问题是f
和Y
的长度不一样。您可以使用 length(f)
和 length(Y)
来检查它。原因是 fft
也计算负频率。因此,您应该定义 f
如下:
f = -Fs/2:Fs/(N-1):Fs/2;
注意fft是共轭对称的,因为输入数据是真实的。
您可以使用 xlim
命令 限制绘制的频率 范围,如下所示:
xlim([0 3*10^9]) % limit x range between 0Hz and 3GHz
我有时间(第 1 列)和电流幅度(第 2 列)的 csv 数据。我想绘制当前的 FFT。这实际上是超过 30ns 的仿真数据,数据步长为 1ps。我可以在 MATLAB 中绘制电流与时间的关系图。但是在执行 FFT 函数时,它根本没有像它所说的那样绘制
Error using plot Vectors must be the same length. Error in FFT_Ideal_current_maxstep_1ps (line 25). plot(f,Y)
谁能帮帮我?我也附上了 MATLAB 代码和 CSV 文件。
我还想绘制功率谱密度。如果有人可以提供帮助,那就太好了。我想获得超过 2GHz 或更多频谱范围的 FFT 和 psd
MATLAB 代码 1:
% open data file
fid = fopen('current_maxstep_1ps.csv');
% Read data in from csv file
readData = textscan(fid,'%f %f','Headerlines',1,'Delimiter',',');
% Extract data from readData
t = readData{1,1}(:,1);
x = readData{1,2}(:,1);
N = length(x);
ts = 0.000000000001;
Fs = 1/ts;
tmax = (N-1)*ts;
tm = 0:ts:tmax;
f = 0:Fs/(N-1):Fs/2;
y = fftshift(fft(x));
Y = abs(y);
plot(f,Y)
我还尝试了另一个 MATLAB 代码,其中绘图(这里是图片:FFT picture of code 2)但显示在时域中,我想要频谱像沿频谱的 apmlitudes 尖峰。
MATLAB 代码 2:
% open data file
fid = fopen('Ideal_current_maxstep_1ps.csv');
% Read data in from csv file
readData = textscan(fid,'%f %f','Headerlines',1,'Delimiter',',');
% Extract data from readData
xData = readData{1,1}(:,1);
yData = readData{1,2}(:,1);
Ts = 1e-12;
Fs = 1/Ts;
%Fs = 1000;
%Ts = 1/Fs;
X = fft(yData);
plot(xData, abs(X))
问题是f
和Y
的长度不一样。您可以使用 length(f)
和 length(Y)
来检查它。原因是 fft
也计算负频率。因此,您应该定义 f
如下:
f = -Fs/2:Fs/(N-1):Fs/2;
注意fft是共轭对称的,因为输入数据是真实的。
您可以使用 xlim
命令 限制绘制的频率 范围,如下所示:
xlim([0 3*10^9]) % limit x range between 0Hz and 3GHz