次のような周波数領域のデータがあります。
これは、ベクトル x の周波数ポイントの振幅を含むベクトル Y があることを意味します。例えば
f = [0 1 2 3 4 5 6 7 8 9 10]
Y = [0 0 0 0 0 1 0 0 0 0 0]
逆フーリエ変換を実行すると、周波数 5Hz の正弦波が得られます。
MATLAB 関数 ifft は、Y と f を時間領域に変換できます。ベクトルを時間領域 y および t と呼びましょう。指定されたサンプリング周波数と指定された信号長で時間領域データを取得する方法を探しています。たとえば、信号長が 1 秒で、サンプリング周波数が 1000Hz の時間領域データが必要です。
MATLAB の ifft 関数の出力は常に入力と同じ長さなので、必要なサンプリング周波数と信号長を得るために入力として何を指定すればよいかわかりません。
要約すると、MATLAB 関数を作成しようとしています。
[t,y] = custom_ifft(f,Y,sampling_frequency,signal_length)
これは、周波数ドメイン データ (f,Y) を時間ドメイン データ (t,y) に変換します。ここで、時間ベクトル t の長さは、信号の長さ (たとえば 1 秒) とサンプリング周波数 ( length(y) /signal_length ) は、sampling_frequency で指定できます
編集:あなたの答えに、あなたのアイデアを実装する方法をMATLABコードに含めてください。私はすでにそれを行う方法の概念を持っていますが、実際の実装を機能させることはできません. 具体的には、 ifft 関数の入力引数として何を指定するかを尋ねています。
y = ifft(input_arg);
(f,Y,sampling_frequency,signal_length) がわかっている場合に input_arg を作成する方法を MATLAB コードで探しています。
期待どおりに機能しない私の実装は次のとおりです。
Y = [0 zeros(1,100) 1 0 0 zeros(1,500) 0 0 1 zeros(1,100)];
Y_interp = interp1(Y,linspace(1,length(Y),2*length(Y)));
y = ifft(Y) ;
y_interp = ifft(Y_interp);
figure;
plot(y);
figure;
plot(real(y_interp));
figure;
plot(abs(y_interp));