CONVERT FREQUENCY DOMAIN DATA TO TIME DOMAIIN
i have .csv file which contains frequency (Hz), magnitude(dB), phase(degrees). these data are range from 20hz to 2000000Hz(2MHz) and these are non uniformly spaced. i want to convert these data in time domain. i have done ifft code for that. is it correct ?
% Load CSV data
data = readmatrix(filenames{file_idx});
% Extract columns (adjust indices if your CSV has different column order)
freq = data(:, 1); % Frequency in Hz
mag_dB = data(:, 2); % Magnitude in dB
phase_deg = data(:, 3); % Phase in degrees
% Convert to linear magnitude and radians
mag_linear = 10.^(mag_dB/20);
phase_rad = deg2rad(phase_deg);
% Store original data
results{file_idx}.freq_orig = freq;
results{file_idx}.mag_dB_orig = mag_dB;
results{file_idx}.phase_deg_orig = phase_deg;
% Determine frequency range
f_min = min(freq);
f_max = max(freq);
% Use power of 2 for efficient FFT
N_fft = 2^nextpow2(length(freq) * 8);
% Calculate number of positive frequency bins
n_pos = floor(N_fft/2) + 1;
% Create frequency vector for FFT bins
freq_fft_positive = linspace(f_min, f_max, n_pos);
% Interpolate magnitude and phase
mag_fft = interp1(freq, mag_linear, freq_fft_positive, ‘pchip’, ‘extrap’);
phase_fft = interp1(freq, (phase_rad), freq_fft_positive, ‘pchip’, ‘extrap’);
H_fft_pos = mag_fft .* exp(1j * phase_fft);
% Initialize full spectrum
H_full = zeros(1, N_fft);
% Place positive frequencies (DC to Nyquist)
H_full(1:n_pos) = H_fft_pos;
% Mirror for negative frequencies (conjugate symmetry)
if mod(N_fft, 2) == 0
H_full(n_pos+1:N_fft) = conj(H_fft_pos(end-1:-1:2));
else
H_full(n_pos+1:N_fft) = conj(H_fft_pos(end:-1:2));
end
% Perform IFFT
h_time = ifft(H_full, ‘symmetric’);
% Create time vector
fs = 2 * f_max;
dt = 1 / fs;
t = (0:N_fft-1) * dt;i have .csv file which contains frequency (Hz), magnitude(dB), phase(degrees). these data are range from 20hz to 2000000Hz(2MHz) and these are non uniformly spaced. i want to convert these data in time domain. i have done ifft code for that. is it correct ?
% Load CSV data
data = readmatrix(filenames{file_idx});
% Extract columns (adjust indices if your CSV has different column order)
freq = data(:, 1); % Frequency in Hz
mag_dB = data(:, 2); % Magnitude in dB
phase_deg = data(:, 3); % Phase in degrees
% Convert to linear magnitude and radians
mag_linear = 10.^(mag_dB/20);
phase_rad = deg2rad(phase_deg);
% Store original data
results{file_idx}.freq_orig = freq;
results{file_idx}.mag_dB_orig = mag_dB;
results{file_idx}.phase_deg_orig = phase_deg;
% Determine frequency range
f_min = min(freq);
f_max = max(freq);
% Use power of 2 for efficient FFT
N_fft = 2^nextpow2(length(freq) * 8);
% Calculate number of positive frequency bins
n_pos = floor(N_fft/2) + 1;
% Create frequency vector for FFT bins
freq_fft_positive = linspace(f_min, f_max, n_pos);
% Interpolate magnitude and phase
mag_fft = interp1(freq, mag_linear, freq_fft_positive, ‘pchip’, ‘extrap’);
phase_fft = interp1(freq, (phase_rad), freq_fft_positive, ‘pchip’, ‘extrap’);
H_fft_pos = mag_fft .* exp(1j * phase_fft);
% Initialize full spectrum
H_full = zeros(1, N_fft);
% Place positive frequencies (DC to Nyquist)
H_full(1:n_pos) = H_fft_pos;
% Mirror for negative frequencies (conjugate symmetry)
if mod(N_fft, 2) == 0
H_full(n_pos+1:N_fft) = conj(H_fft_pos(end-1:-1:2));
else
H_full(n_pos+1:N_fft) = conj(H_fft_pos(end:-1:2));
end
% Perform IFFT
h_time = ifft(H_full, ‘symmetric’);
% Create time vector
fs = 2 * f_max;
dt = 1 / fs;
t = (0:N_fft-1) * dt; i have .csv file which contains frequency (Hz), magnitude(dB), phase(degrees). these data are range from 20hz to 2000000Hz(2MHz) and these are non uniformly spaced. i want to convert these data in time domain. i have done ifft code for that. is it correct ?
% Load CSV data
data = readmatrix(filenames{file_idx});
% Extract columns (adjust indices if your CSV has different column order)
freq = data(:, 1); % Frequency in Hz
mag_dB = data(:, 2); % Magnitude in dB
phase_deg = data(:, 3); % Phase in degrees
% Convert to linear magnitude and radians
mag_linear = 10.^(mag_dB/20);
phase_rad = deg2rad(phase_deg);
% Store original data
results{file_idx}.freq_orig = freq;
results{file_idx}.mag_dB_orig = mag_dB;
results{file_idx}.phase_deg_orig = phase_deg;
% Determine frequency range
f_min = min(freq);
f_max = max(freq);
% Use power of 2 for efficient FFT
N_fft = 2^nextpow2(length(freq) * 8);
% Calculate number of positive frequency bins
n_pos = floor(N_fft/2) + 1;
% Create frequency vector for FFT bins
freq_fft_positive = linspace(f_min, f_max, n_pos);
% Interpolate magnitude and phase
mag_fft = interp1(freq, mag_linear, freq_fft_positive, ‘pchip’, ‘extrap’);
phase_fft = interp1(freq, (phase_rad), freq_fft_positive, ‘pchip’, ‘extrap’);
H_fft_pos = mag_fft .* exp(1j * phase_fft);
% Initialize full spectrum
H_full = zeros(1, N_fft);
% Place positive frequencies (DC to Nyquist)
H_full(1:n_pos) = H_fft_pos;
% Mirror for negative frequencies (conjugate symmetry)
if mod(N_fft, 2) == 0
H_full(n_pos+1:N_fft) = conj(H_fft_pos(end-1:-1:2));
else
H_full(n_pos+1:N_fft) = conj(H_fft_pos(end:-1:2));
end
% Perform IFFT
h_time = ifft(H_full, ‘symmetric’);
% Create time vector
fs = 2 * f_max;
dt = 1 / fs;
t = (0:N_fft-1) * dt; ifft MATLAB Answers — New Questions









