-2

時間(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コードがあります(ここに画像があります:コード2のFFT画像)が、時間領域で表示され、周波​​数スペクトルに沿った振幅のスパイクのような周波数スペクトルが必要です。

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))
4

1 に答える 1

1

問題は、 と の長さが同じfではないことです。とYで確認できます。その理由は、負の周波数も計算するためです。したがって、次のように定義する必要があります。length(f)length(Y)fftf

f = -Fs/2:Fs/(N-1):Fs/2;

入力データが実数であるため、fft は共役​​対称であることに注意してください。

次のコマンドを使用して、プロットされる周波数範囲を制限できます。xlim

xlim([0 3*10^9]) % limit x range between 0Hz and 3GHz

ここに画像の説明を入力

于 2017-06-06T11:28:19.523 に答える