How to get argument of complex exponential?
10 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Voss
2022-5-29
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
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!