Writing data to table with for loops
6 views (last 30 days)
Show older comments
Danielle Rivera
on 10 Jun 2019
Commented: Danielle Rivera
on 11 Jun 2019
I currently have the data displayed as a printed equation in the Command window, but I would rather have it set up in a table with individual variable names. I simplified the code to just the parts that would affect the table, but I'm not sure how to get it to actually print the values how I want. The variable names for the table would be Output (from spurs(m,n)), m_value, LO_value, n_value, and RF_value
for LO = 11:2:21
lo = [0 1 2 3 4 5].*LO
for RF = 2:0.1:18
rf = [1; 2; 3; 4; 5]*RF
rf = rf(:)
spurs = [(lo(1)-rf) (lo(2)-rf) (lo(3)-rf) (lo(4)-rf) (lo(5)-rf) lo(6)-rf]
for m = [1 2 3 4 5]
for n = [1 2 3 4 5 6]
if spurs(m,n) > 3 && spurs(m,n) < 5.1
Print = [num2str(spurs(m,n)), ' = ', num2str(m), '*', num2str(LO), '-', num2str(n), '*', num2str(RF)];
disp(Print)
end
end
end
end
end
3 Comments
Guillaume
on 11 Jun 2019
This line:
rf = rf(:)
does nothing since you've made sure to create a column vector in the previous line.
This line:
spurs = [(lo(1)-rf) (lo(2)-rf) (lo(3)-rf) (lo(4)-rf) (lo(5)-rf) lo(6)-rf]
is simply:
spurs = lo - rf; %if on R2016b or later
%spurs = bsxfun(@minus, lo, rf); %on earlier versions
Note that none of the loops are needed, you could just create a 4D matrix (m x n x RF x LO) in one go:
LO = 11:2:21;
RF = 2:0.1:18;
n = 0:5;
m = 1:5;
[mm, nn, rf, lo] = ndgrid(m, n, RF, LO);
spurs = nn .* lo - mm .* rf;
Accepted Answer
Guillaume
on 11 Jun 2019
Edited: Guillaume
on 11 Jun 2019
As commented you don't need loops to construct all your spurs:
LO = 11:2:21;
RF = 2:0.1:18;
n = 0:5;
m = 1:5;
[mm, nn, rf, lo] = ndgrid(m, n, RF, LO);
spurs = nn .* lo - mm .* rf;
It's then trivial to create a table from that:
tokeep = spurs > 3 & spurs < 5.1
result = table(mm(tokeep), nn(tokeep), rf(tokeep), lo(tokeep), spurs(tokeep), 'VariableNames', {'m', 'n', 'RF', 'LO', 'spur'})
There is no point in splitting that table into several tables according to LO. It will only complicate further processing.
3 Comments
Guillaume
on 11 Jun 2019
You probably don't need a loop for your plotting. It probably can be done all at once for each LO. For example to plot RF vs m for each LO:
figure; hold on;
rowfun(@(m, rf, lo) plot(m, rf, 'DisplayName', sprintf('LO = %d', lo(1))), result, 'GroupingVariables', 'LO', 'InputVariables', {'m', 'RF', 'LO'});
legend('show'); xlabel('m'); ylabel('RF');
it's probably not what you're plotting, so what are you plotting exactly?
I only get 631 rows but whatever the height why does it matter? Again, splitting it makes processing harder not easier.
More Answers (0)
See Also
Categories
Find more on Logical 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!