19 views (last 30 days)
Show older comments
Honey about 9 hours ago
Commented: Star Strider about 7 hours ago
Accepted Answer: Star Strider
- 550mvp.csv
%%
folder = 'C:\Users\haneu\OneDrive\바탕 화면\New folder (2)';
filename = '550mvp.csv';
data = readtable(fullfile(folder,filename));
frequency = table2array(data(3:end,1));
amplitude = table2array(data(3:end,2));
figure,plot(frequency/1e6,amplitude)
xlim([0,15])
xlabel('Frequency [MHz]'),
grid on,
ylabel('Amplitude[dBV]')
0 Comments Show -2 older commentsHide -2 older comments
Show -2 older commentsHide -2 older comments
Sign in to comment.
Sign in to answer this question.
Accepted Answer
Star Strider about 2 hours ago
Edited: Star Strider about 1 hour ago
Open in MATLAB Online
You cannot reliably invert a Fourier transforom unless you also have the phase information. Lacking the phase information, you can still invert it, however the result will not be reliable and may not reflect the actual time-domain signal. The best approach is to record the time-domain signal and calculate the Fourier transform afterwards.
One approach —
RL = readlines('550mvp.csv');
H1 = split(RL(1,:),',');
H2 = split(RL(2,:),',');
T1 = readtable('550mvp.csv', 'HeaderLines',2);
T1.Properties.VariableNames = H1.'
T1 = 4002x2 table
x-axis 1 ___________ __________ -2.46e-05 0.025633 -2.4575e-05 0.019603 -2.455e-05 0.0099925 -2.4525e-05 0.0015126 -2.45e-05 -0.0065276 -2.4475e-05 -0.014568 -2.445e-05 -0.023048 -2.4425e-05 -0.030648 -2.44e-05 -0.036678 -2.4375e-05 -0.042709 -2.435e-05 -0.044719 -2.4325e-05 -0.048739 -2.43e-05 -0.052759 -2.4275e-05 -0.052759 -2.425e-05 -0.056339 -2.4225e-05 -0.052759
NrMissing = nnz(ismissing(T1))
NrMissing = 4
T1 = fillmissing(T1, 'linear');
figure
plot(T1{:,1}, T1{:,2})
grid
xlabel(H2(1,:))
ylabel(H2(2,:))
L = height(T1)
L = 4002
Fn = max(T1{:,1}); % Nyquist Frequency
Fs = Fn*2; % Sampling Frequency
Ts = 1/Fs; % Sampling Interval
Lt = 2*L; % Assumed Length Of Original Time-Domain Signal
t = linspace(0, Lt-1, Lt)/Fs; % Time Vector
v = ifft([T1{:,2}; flip(T1{:,2})],'symmetric');
v = 8004x1
-48.7696 31.5389 -0.9678 -10.0265 0.5044 6.0149 -0.5402 -4.1703 0.5625 2.9814
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
figure
plot(t, v)
grid
xlabel('Time')
ylabel('Volt')
xlim([min(t) max(t)])
figure
plot(t, v)
grid
xlabel('Time')
ylabel('Volt')
xlim([min(t) 1E-6])
This initially re-creates the full ‘original’ two-sided Fourier ttransform by appending a flipped version of the original one-sided Fourier transform to it and then doing the inversion. The highest frequency is assumed to be the Nyquist frequency here, and the sampling frequency and sampling intervals are calculatted from it.
.
EDIT — Corrected typographical errors.
EDIT — (14 Jul 2024 at 13:24)
Forgot the symmetry flag in the ifft call. Added now.
.
6 Comments Show 4 older commentsHide 4 older comments
Show 4 older commentsHide 4 older comments
John D'Errico 7 minutes ago
Direct link to this comment
https://www.mathworks.com/matlabcentral/answers/2137168-i-enabled-fft-function-in-oscillioscope-and-it-saved-the-data-as-fft-amplitude-dbv-and-frequency-d#comment_3210908
Always a pleasure to read a good answer.
Honey less than a minute ago
Direct link to this comment
https://www.mathworks.com/matlabcentral/answers/2137168-i-enabled-fft-function-in-oscillioscope-and-it-saved-the-data-as-fft-amplitude-dbv-and-frequency-d#comment_3210913
I see the amplitude I gave was in mili Volt peak to peak.Is there a posibility to plot a spectrogram with current data I have.I see time domain signals are not exactly the same you are right the pase information is lacking.
Honey 2 minutes ago
Direct link to this comment
https://www.mathworks.com/matlabcentral/answers/2137168-i-enabled-fft-function-in-oscillioscope-and-it-saved-the-data-as-fft-amplitude-dbv-and-frequency-d#comment_3210918
I appreciate your help. :)
Star Strider 4 minutes ago
Direct link to this comment
https://www.mathworks.com/matlabcentral/answers/2137168-i-enabled-fft-function-in-oscillioscope-and-it-saved-the-data-as-fft-amplitude-dbv-and-frequency-d#comment_3210923
@John D'Errico — I very much appreciate your compliment!
@Honey — As always, my pleasure!
To plot the spectrogram, use the reconstructed time-dopmain signal, or preferably tthe original time-domain signal if you have it. I generally prefer the pspectrum function witth the 'spectrogram' option because it calculates the power spectrum spectrogram (units are dB), not the power density spectrogram (units are dB/Hz).
Honey 7 minutes ago
Direct link to this comment
https://www.mathworks.com/matlabcentral/answers/2137168-i-enabled-fft-function-in-oscillioscope-and-it-saved-the-data-as-fft-amplitude-dbv-and-frequency-d#comment_3210928
hey thanks for your help I got the time domain data save its saved seperately in Csv file for fft and time domain.sorry for the trouble:p
Star Strider 30 minutes ago
Direct link to this comment
https://www.mathworks.com/matlabcentral/answers/2137168-i-enabled-fft-function-in-oscillioscope-and-it-saved-the-data-as-fft-amplitude-dbv-and-frequency-d#comment_3210938
@Honey — No trouble at all!
Here’s my one-sided Fourier transform function, in the event you want to use it —
function [FTs1,Fv] = FFT1(s,t)
% Arguments:
% s: Signal Vector
% t: Associated Time Vector
t = t(:);
L = numel(t);
if size(s,2) == L
s = s.';
end
Fs = 1/mean(diff(t));
Fn = Fs/2;
NFFT = 2^nextpow2(L);
FTs = fft((s - mean(s)) .* hann(L).*ones(1,size(s,2)), NFFT)/sum(hann(L));
Fv = Fs*(0:(NFFT/2))/NFFT;
% Fv = linspace(0, 1, NFFT/2+1)*Fn;
Iv = 1:numel(Fv);
FTs1 = FTs(Iv,:);
end
I wrote it because I was simply tired of typing the same code every time I wanted to use the fft function.
.
Sign in to comment.
More Answers (0)
Sign in to answer this question.
See Also
Tags
- signal processing
- fft
- data acquisition
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- Deutsch
- English
- Français
- United Kingdom(English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)
Contact your local office