How can I calculate and plot the spectral power density of Square Root Raised Cosine Pulse using fft?

11 visualizzazioni (ultimi 30 giorni)
I was given the following Matlab function which takes 4 parameters as arguments and returns a Square Root Raised Cosine pulse.
function [phi, t] = srrc_pulse(T, Ts, A, a)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% phi = srrc_pulse(T, Ts, A, a) %
% OUTPUT %
% phi: truncated SRRC pulse, with parameter T, %
% roll-off factor a, and duration 2*A*T %
% t: time axis of the truncated pulse %
% INPUT %
% T: Nyquist parameter or symbol period (real number) %
% Ts: sampling period (Ts=T/over) %
% where over is a positive INTEGER called oversampling factor %
% A: half duration of the pulse in symbol periods (positive INTEGER) %
% a: roll-off factor (real number between 0 and 1) %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
t = [-A*T:Ts:A*T] + 10^(-8); % in order to avoid division by zero problems at t=0.
if (a>0 && a<=1)
num = cos((1+a)*pi*t/T) + sin((1-a)*pi*t/T) ./ (4*a*t/T);
denom = 1-(4*a*t./T).^2;
phi = 4*a/(pi*sqrt(T)) * num ./ denom;
elseif (a==0)
phi = 1/(sqrt(T)) * sin(pi*t/T)./(pi*t/T);
else
phi = zeros(length(t),1);
disp('Illegal value of roll-off factor')
return
end
For example let's suppose that T=1, Ts=1/10, A=4 and a=0. So I invoke the method like that:
phi1 = srrc_pulse(1, 1/10, 4, 0)
What I want to do next is to find the Fourier Transform of this pulse at L equally spaced points (for example L=1000) across the frequency axis from -(Fs/2) to Fs/2 where Fs is the sampling frequency, using the fft function and then plot what I get so I can have a visual approach of the spectral power density of the pulse. My problem is that I can see the plot only for the positive values of frequency, and I cannot see the negative ones. I have also attached an image of what I get on the plot. My code is the following. Any help would be greatly appreciated!
%

Risposta accettata

Nishitha Ayyalapu
Nishitha Ayyalapu il 17 Ott 2013
Modificato: Nishitha Ayyalapu il 17 Ott 2013
I edited your inital code to go from single-sided spectrum to two-sided.
Fs = 10; %Sampling frequency
T = 1/Fs; %Symbol period
L = 1000; %Number of points
t = (0:L-1)*T; %Time vector
phi1 = srrc_pulse(1, 1/10, 4, 0); %SRRC pulse
figure
plot(Fs*t(1:50), phi1(1:50));
NFFT = 2^nextpow2(L);
Y = fft(phi1, NFFT)./L;
Y2 = fftshift(fft(phi1, NFFT)./L);
f = Fs/2*linspace(0,1,NFFT/2+1);
f2 = ((0:NFFT-1) -ceil((NFFT-1)/2))/NFFT/T;
figure
plot(f, 2*abs(Y(1:NFFT/2+1))); %one sided
figure
plot(f2, 2*abs(Y2)); %two sided

Più risposte (1)

Nishitha Ayyalapu
Nishitha Ayyalapu il 17 Ott 2013
However to answer how to get negative frequency axis:
1.) Do fftshit
2.) change frequency axis accordingly.
Below is the link which answered how to do that

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by