cannot get fftshift to shift frequency
    5 views (last 30 days)
  
       Show older comments
    
I am  trying to verify an FFT computation by producing the original signal.  Below I explain the situation. My question is in CAPS below
VACCL.csv has the following format. (no line spaces)
sec         VACCL
0              1
0.125     1.002
0.25        1.002
0.375     1.007
0.5          1.002
0.625     1.002
0.75        1
0.875     1.002
1              1.005
1.125     1.005
1.25        1.005
1.375     1.002
1.5          1.002
in command line I typed:
TT = readtimetable(VACCL.csv');
 Using signal analysis tool on TT, I was able to plot the original signal and a frequency response.  The frequency response was plotted in Hz, but signal time was plotted in hours. In input file VACCL.csv, time was given in seconds. 
I then Imported VACCL.csv as matrix with 64 bit double precision and typed
 Y = fft(VACCL)
 Y was generated in the workspace  as complex double: 2 columns: one real, one Imaginary
When I plotted Y(:,2)  on sig analyzer, the display was  identical to original signal analyzer result except for axis labels: the signal was plotted in samples, while the normalized frequency was plotted from 0 to 1.0
Then I typed:
Y_SHIFTED = fftshift(Y)
When I plotted Y_SHIFTED in signal analyzer, 
the time signal was broken in two halfs, left and right,  and the two halves switched, while 
the frequency remained normalized from 0 to 1.0.
HOW DO I GET THE FREQUENCY SHIFTED RATHER THAN THE SIGNAL?
2 Comments
Accepted Answer
  Star Strider
      
      
 on 22 Nov 2019
        You need to create the frequency vector yourself.  
Try this: 
VACCL = [   0            1
        0.125        1.002
         0.25        1.002
        0.375        1.007
          0.5        1.002
        0.625        1.002
         0.75            1
        0.875        1.002
            1        1.005
        1.125        1.005
         1.25        1.005
        1.375        1.002
          1.5        1.002];
Ts = mean(diff(VACCL(:,1)));                    % Sampling Interval
Fs = 1/Ts;                                      % Sampling Frequency
Fn = Fs/2;                                      % Nyquist Frequency
L = size(VACCL,1);                              % Signal Length
VACCLv = VACCL(:,2);                            % Signal Vector
Y = fft(VACCLv)/L;                              % Fourier Transform
Y_SHIFTED = fftshift(Y);                        % Shift
Fv = linspace(-Fn, Fn, size(Y,1));              % * Frequency Vector *
figure
plot(Fv, abs(Y_SHIFTED))
grid
 Experiment to get different results.  
0 Comments
More Answers (1)
  Sk Group
      
 on 27 Oct 2021
                                                                 Frequency shifting Prove: DFT{x(n)e^(j(2*pi/N)nl = X(K-l)
For detailed post and complete code visit: https://www.swebllc.com/frequency-shifting-property-in-matlab-  complete-prove-code-output/
0 Comments
See Also
Categories
				Find more on Measurements and Feature Extraction in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


