read and use .txt file
4 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
hi,
I was wondering if there's a way to read the .txt file i attached and use it to calculate other parameters. The .txt file reports the transfer function of my system with frequency, amplitude and phase respectively in the first, second and third column. Now, i need to calculate another parameter of the system in function of the transfer function. Assuming, for example, that my transfer function is called H, i need to calculate another parameter G = H*100/(1-H). Is there anyone who can tell me how to do it?
3 commentaires
Star Strider
le 26 Déc 2021
Reference — how to use LTSpice values in Matlab and earlier posts by the same OP, how to plot transfer function exported from LTSpice, how to use LTSpice values in Matlab, how to find the transfer function from LTspice, and perhaps others, since I may have missed a few of these prolific posts, all asking essentially the same question.
.
Réponses (2)
Meg Noah
le 26 Déc 2021
There's a lot of extra characters in your text file.
% frequency, amplitude and phase
str = fileread('draft.txt');
str = strrep(str,'{','');
str = strrep(str,'}','');
str = strrep(str,'(','');
str = strrep(str,')','');
str = strrep(str,'°','');
str = strrep(str,'''','');
str = regexprep(str, '\t', ' ');
str = regexprep(str, ' ', ' ');
str = regexprep(str, ' ', ',');
str = regexprep(str, 'dB', '');
objrec = regexp(str, '\r\n|\r|\n', 'split');
% remove empty cells (blank lines)
objrec(strlength(objrec)<1) = [];
nPts = numel(objrec);
frequency = zeros(nPts,1);
amplitude = zeros(nPts,1);
phase = zeros(nPts,1);
for iPt = 1:nPts
v = sscanf(objrec{iPt},'%f,%f,%f,');
frequency(iPt) = v(1);
amplitude(iPt) = v(2);
phase(iPt) = v(3);
end
omega = 2*pi*frequency;
H = 1./(1 + 1i*2*omega);
G = H*100.0./(1-H);
myTable = table(frequency,amplitude,phase,omega,H,G,'VariableNames', ...
{'frequency','amplitude','phase','omega','H','G'});
writetable(myTable,'myTable.xlsx');
0 commentaires
Walter Roberson
le 26 Déc 2021
It is not clear whether your second column is all negative, or if '(-' is the delimiter, the same way that the line ends in '-)' . The below code assumes that '(-' is the delimiter.
Your file does not have any degree symbols in it.
filename = 'https://www.mathworks.com/matlabcentral/answers/uploaded_files/844820/draft.txt';
S = webread(filename);
data = cell2mat(textscan(S, '%f (-%fdB,%f%*[^\n]'));
whos data
5 commentaires
Walter Roberson
le 27 Déc 2021
Modifié(e) : Walter Roberson
le 27 Déc 2021
Interesting. When I look at the file with Firefox, the line ends with -) . When I readtable() it has a degree sign. When I webread() it has U+65533
"U+FFFD (decimal 65533) is the "replacement character". When a decoder encounters an invalid sequence of bytes, it may (depending on its configuration) substitute for the corrupt sequence and continue. "
XCode and BBEdit both show the character as ∞ U+221E
When I look at the file as a hex dump, the character is U+00B0 which is the degree character.
filename = 'https://www.mathworks.com/matlabcentral/answers/uploaded_files/844820/draft.txt';
SW = webread(filename);
SW(65:75)
ans+0
ST = readtable(filename);
ST(1:3,:)
Walter Roberson
le 27 Déc 2021
Let's experiment:
filename = 'https://www.mathworks.com/matlabcentral/answers/uploaded_files/844820/draft.txt';
webopt = weboptions('CharacterEncoding', 'ISO-8859-1');
SW = webread(filename, webopt);
SW(65:75)
ans+0
That seems to have done the trick.
Voir également
Catégories
En savoir plus sur Scope Variables and Generate Names dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!