周波数ドメインからの応答を時間ドメインに変換するには、inverse Fourier transformationを実行する必要があります。 matlabでは、これは関数ifft
で行われます。
最初のファイルのデータを変数magnitude
にロードし、2番目のファイルから変数phase
にロードすることを検討してください。あなたは最初のシングル複素数行列
f_response = complex(magnitude.*cosd(phase),magnitude.*sind(phase));
f_response
あなたのトランスデューサの実際の応答があるにこれらの2つの変数をマージする必要があり、時間領域応答を得るためにifft
に供給することができます。しかし、複雑さがあり、想定される頻度の順序はifft
であると考えられます。 matlabはこれについて多くの詳細を提供していませんが、fft docsをチェックアウトすると、fft
によって返される2つの周波数ブランチがあることがわかります。周波数応答は、matlabの予想された順序に対応する方法で順序付けされなければなりません。あなたは、例えば、docs
Fs = 1000; % Sampling frequency
T = 1/Fs; % Sampling period
L = 1000; % Length of signal
t = (0:L-1)*T; % Time vector
S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
X = S + 2*randn(size(t));
Y = fft(X);
の最初の例を取る場合は、出力Y
エントリをフーリエ変換のそれぞれに対応する周波数配列は次のとおりです。正しくフーリエ変換を適用するために
f = Fs/L*[0:(L/2-1),-L/2:-1];
逆変換の場合、頻度ファイル(その内容を変数frequencies
にロードしたと仮定できる)の順序が正確にf
のように指定されているかどうかをチェックする必要があります。 f
は、規則的に増加する第1の枝を有し、次いで、負の周波数への不連続なジャンプを行うことに留意されたい。周波数の符号は、進行波の伝搬方向を表すために使用される。
[frequencies,ix] = sort(frequencies);
f_response = f_response(:,ix);
f_response = 0.5*[f_response(:,1:end-1),f_response(:,end:-1:2)];
、その後のように、ということ
t_response = ifft(f_response,[],1);
注意をすることによって、それを反転:あなたのデータは正の周波数のみを保持している場合は、あなたのように簡単に負の周波数枝を構築することができるようになるので、それは素晴らしいだろう各角度に対する応答が必要な場合は、各行を逆変換する必要があります。これは、ifft
の3番目の入力によって実現されます。
frequencies
データファイルの周波数が負の場合は、正しく注文してから、f_response
の列を適宜並べ替える必要があります。あなたが私のためにいくつかのサンプルデータをアップロードして、それをさらに助けることができるようにする必要があります。
大変感謝しています。私はこれに取り組んできました。私がMATLABとDSPを初めて使っているので、私に感謝してください。とにかく、私はこれをしました。プロットを見ている間、私はこれらが帯域制限されていないことに気がついたので、私は高いと低い周波数値をゼロに外挿しました。まだこれに取り組んでいます。あなたからの助けに感謝します。方法についてはわかりませんが、.matファイルを送信したいと思っています。 Eメール???? – Sal
追加するだけで、マグニチュード、角度、位相応答を含むファイルがあります。周波数はそのように指定されていません。それについてどうやって行くの?それが低周波通信の問題であると仮定して、あなたは何を提案しますか? – Sal
@Sal、[this](http://meta.stackexchange.com/questions/47689/how-can-i-attach-a-file-to-a-stack-overflow-post)をご覧くださいあなたの質問にファイルを追加してください。その後、質問を編集してマットファイルを追加してください。 – lucianopaz