I have now manually multiplied the signal by a cosine function and applied a highpass filter, which produces close to the behaviour that I want, but I feel like it could be cleaner.
FMCWWaveform Chirp with BW = 10GHz and center frequency = 15GHz
27 views (last 30 days)
Show older comments
We're trying to use phased.FMCWWaveform to create a chirp signal with a bandwidth of 10GHz and a center frequency of 15GHz. The chirp uses a triangular waveform, which is working correctly. However, the only options for the center frequency seem to be BW/2 when SweepInterval is set to 'Positive' or 0 when SweepInterval is set to 'Symmetric'.
What we want is a triangle wave going from 10GHz to 20GHz. What we're getting is a triangle wave going from 0Hz to 10GHz. Is there a way to frequency shift the resultant waveform, either in the phased.FMCWWaveform function or with another function?
Thank you very much. I've never asked a question on here before, so please let me know if there is more information I should provide or something else I should do.
Here is our code:
%%%Chirp Signal Parameters%%%
fc = 15e9; %60G % Radar Operating Frequency
BW = 10e9; %150M % FM Sweep Bandwidth for'SweepInterval','Positive'
Tsw = 7.5e-06; % 2*Tsw = Period of Triangle
f0 = fc - BW/2; % Initial instantaneous frequency at time 0
f1 = fc + BW/2; % Instantaneous frequency at time t1,
fs = 4*BW; % (SampleRate.*SweepTime) should contain only integers.
Ts = 1/fs;
%%%Chirp Signal Definition%%%
y = phased.FMCWWaveform('SweepTime',2*Tsw,'SweepBandwidth',BW, ...
'SweepDirection','Triangle','SampleRate',fs,'SweepInterval','Positive','OutputFormat','Sweeps','NumSweeps',2);
time = 0:Ts:4*Tsw-Ts;
%%%Plots%%%
figure('Name','Chirp Singnal','NumberTitle','off');
plot( time*1e6,real(y()) );
xlabel( 'Time (\mus)' );
ylabel( 'Amplitude' );
pspectrum(real(y()),time,'spectrogram','FrequencyResolution',3e6,'OverlapPercent',75,'Leakage',0.85);
Answers (1)
Sudarsanan A K
on 23 Jan 2024
Hello Conor,
In MATLAB, the "phased.FMCWWaveform" function generates a frequency-modulated continuous-wave (FMCW) signal, and it is true that it does not directly offer an option to offset the center frequency of the chirp to an arbitrary value. However, you can indeed frequency-shift the generated signal by mixing it with a complex exponential carrier signal at the desired offset frequency.
The code you have written seems to be setting up the parameters for the chirp correctly, but since the "phased.FMCWWaveform" function doesn't natively support an arbitrary center frequency, you need to manually shift the frequency of the output.
Here is an example of how you can modify your code to apply a frequency shift to the generated chirp signal:
%%% Chirp Signal Parameters %%%
fc = 15e9; % Radar Operating Frequency
BW = 10e9; % FM Sweep Bandwidth for 'SweepInterval', 'Positive'
Tsw = 7.5e-06; % 2*Tsw = Period of Triangle
fs = 4*BW; % Sample rate
Ts = 1/fs;
%%% Chirp Signal Definition %%%
y = phased.FMCWWaveform('SweepTime',2*Tsw,'SweepBandwidth',BW, ...
'SweepDirection','Triangle','SampleRate',fs,'SweepInterval','Positive','OutputFormat','Sweeps','NumSweeps',2);
%%% Frequency Shift %%%
time = 0:Ts:4*Tsw-Ts;
shifted_freq = fc - BW/2; % Frequency to shift the chirp to the desired center frequency
shift_signal = exp(1i*2*pi*shifted_freq*time); % Complex exponential for frequency shifting
y_shifted = y() .* shift_signal.'; % Apply the frequency shift
%%% Spectrum Analysis %%%
figure('Name','Chirp Signal Spectrum','NumberTitle','off');
subplot(2,1,1);
pspectrum(real(y()),fs,'spectrogram','FrequencyResolution',3e6,'OverlapPercent',75,'Leakage',0.85);
title('Original Chirp Signal Spectrum');
subplot(2,1,2);
pspectrum(real(y_shifted),fs,'spectrogram','FrequencyResolution',3e6,'OverlapPercent',75,'Leakage',0.85);
title('Frequency-Shifted Chirp Signal Spectrum');
In this code snippet, I have added a frequency shift to the chirp signal by multiplying it with a complex exponential ("shift_signal"). This shifts the frequency content of the chirp signal such that its center frequency is at "fc".
For additional insigtht in to the use of "phased.FMCWWaveform", you can refer to the following documentation:
I hope this helps!
0 Comments
See Also
Categories
Find more on Detection, Range and Doppler Estimation 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!