I/Q modulator

25 views (last 30 days)
Dov
Dov on 8 Jul 2024
Commented: Dov on 11 Jul 2024
Hello,
Is there a way to drive the I/Q modulator tool in the RF blockset with an I/Q data file instead of a sinewave?
thansk,

Accepted Answer

Umar
Umar on 8 Jul 2024
Edited: Walter Roberson on 8 Jul 2024
Hi Dov,
In Simulink's RF Blockset, the I/Q modulator tool typically accepts sinewaves as inputs for modulation. However, there is a way to drive the I/Q modulator tool with an I/Q data file instead of a sinewave. This approach allows for more flexibility and the ability to use pre-recorded or generated I/Q data for modulation.
To achieve this, you can follow these steps:
Prepare the I/Q Data File: Create or obtain the I/Q data file that you want to use for modulation. The file should contain the In-phase (I) and Quadrature (Q) components of the signal.
Read the I/Q Data File: Use appropriate blocks in Simulink to read the I/Q data file. You can use the "From File" block to read the data from a file and feed it into the I/Q modulator.
Connect the I/Q Data to the I/Q Modulator: Connect the I/Q data obtained from the file to the input of the I/Q modulator tool in the RF Blockset. This will replace the sinewave input with the I/Q data for modulation.
Here is a simple example in Simulink demonstrating how to drive the I/Q modulator tool with an I/Q data file:
% Create a From File block to read the I/Q data file
iq_data = dsp.SignalSource('Signal', 'IQ_Data.mat', 'SamplesPerFrame', 1);
% Connect the I/Q data to the I/Q modulator
iq_modulator = comm.IQModulator;
modulated_signal = iq_modulator(iq_data());
By following these steps and adapting the example code to your specific requirements and file format, you can effectively drive the I/Q modulator tool in the RF Blockset with an I/Q data file. This method offers versatility and the ability to work with various types of signals beyond sinewaves.
Please let me know if you have further questions.
  7 Comments
Walter Roberson
Walter Roberson on 9 Jul 2024
TimeInterval = 0.01; %change as appropriate. Should be same as 1/sampling_frequency
DataArray = as appropriate. Each row corresponds to a different time
TimeVector = (0:size(DataArray,1)-1) * TimeInterval;
TS = timeseries(DataArray, TimeVector);
Dov
Dov on 11 Jul 2024
thanks Walter,

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!