How to get argument of complex exponential?
8 views (last 30 days)
Show older comments
Dear all,
I feel a bit ashamed to ask such question but I am quite upset by the outcome of , where z is a chosen complex, which does not give what I expect.
Let's be more precise:
% axis parameters
dt = 6.25e-3*1e-9; % [s] sampling time
Nsamp = 1024*16; % [] number of samples
t = 0:dt:(Nsamp-1)*dt; % [s] array of time values
% signal construction
nu = 193.41e12; % [Hz] frequency
CFO = exp(1i*2*pi*nu.*t); % [] Carrier Frequency Offset signal, so "my z"
% getting the angle
ARG = unwrap(angle(CFO)); % [] it should give an ARRAY of size (1;16,384): 2*pi*nu*t
p = polyfit(t,ARG,1) % [rad/s]it should return [2*pi*nu,0]
2*pi*nu
But it does not give the pulsation I used to construct my signal.
What did I miss?
Does anyone have an idea?
Thanks a lot,
Best,
louis
0 Comments
Accepted Answer
Voss
on 29 May 2022
The "sampling time" is not small enough. It must be less than 1/(2*nu) - i.e., sampling rate greater than 2*nu - to avoid aliasing.
nu = 193.41e12; % [Hz] frequency
p0 = 2*pi*nu % target "pulsation"
fs = 2.01*nu; % sufficient sampling rate
p1 = get_pulsation(nu,fs) % matches target
fs = 1/(6.25e-3*1e-9); % original sampling rate
p2 = get_pulsation(nu,fs) % does not match
fs = 1.99*nu; % *nearly* sufficient sampling rate
p3 = get_pulsation(nu,fs) % does not match
function out = get_pulsation(nu,fs)
% signal construction
dt = 1/fs; % [s] sampling time
Nsamp = 1024*16; % [] number of samples
t = 0:dt:(Nsamp-1)*dt; % [s] array of time values
CFO = exp(1i*2*pi*nu.*t); % [] Carrier Frequency Offset signal, so "my z"
% getting the angle
ARG = unwrap(angle(CFO)); % [] it should give an ARRAY of size (1;16,384): 2*pi*nu*t
p = polyfit(t,ARG,1); % [rad/s]it should return [2*pi*nu,0]
out = p(1);
end
More Answers (0)
See Also
Categories
Find more on Matrix Indexing 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!