How to get argument of complex exponential?
조회 수: 8 (최근 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!