Ошибка при использовании .* Целые числа можно комбинировать только с целыми числами того же класса или скалярными удвоениями.

привет, я новичок в графическом интерфейсе Matlab, у меня есть текстовый файл, который я конвертирую в двоичный, а затем передаю этот двоичный файл в функцию mfsk, но он дает мне следующую ошибку, пожалуйста, помогите мне как можно скорее, я опубликую свой полный код, что я могу сделать, пожалуйста.... ..

Error using  .* 
Integers can only be combined with integers of the same class, or scalar doubles.
Error in GUI2>menu_mscheme_mfsk
filename= uigetfile('*.txt','File select text');
txt = fopen(filename); 
txtbits = fread(txt, inf, '*ubit1', 'b');
openvar('txtbits');
fclose(txt);
fileID = fopen(filename);
C = textscan(fileID,'%s');
i = C{1}{1};
dec2bin(i);
fclose(fileID);
celldisp(C);
set(handles.text3,'string',filename);
set(handles.text4,'string',txtbits);
handles.binary=txtbits;
guidata(hObject, handles);
Callback (line 217) d_xover_den =((4*pi./lambda).^2*(1+alpha)*SNR_unc./(2*Gr*Gt).*b*B*noise*NF.*Ton*(1- 1/CG)); Error in gui_mainfcn (line 96) feval(varargin{:}); Error in GUI2 (line 43) gui_mainfcn(gui_State, varargin{:});

мой текстовый код

filename= uigetfile('*.txt','File select text');
txt = fopen(filename); 
txtbits = fread(txt, inf, '*ubit1', 'b');
openvar('txtbits');
fclose(txt);
fileID = fopen(filename);
C = textscan(fileID,'%s');
i = C{1}{1};
dec2bin(i);
fclose(fileID);
celldisp(C);
set(handles.text3,'string',filename);
set(handles.text4,'string',txtbits);
handles.binary=txtbits;
guidata(hObject, handles);

мой код mfsk

decimal=handles.binary
N=decimal;
charact = {'b-+','b-o','b-v','b-^','b-*'};
j=0;
for N=50:20:150
j=j+1;
b=2;    
L = decimal
freq=linspace(0.3,7,20)*1e+9;
lambda=1e+8./freq;
B = 1e+6;  % Bandwidth
n = 5;  % Path loss
noise = 4e-21;
P_ckt=0.02;  % watt 
% Ton=0.1;   % sec
Ton=L*2^b./(b*B);
SNR_unc = 10;
K=24;
N_o_K = 30/24;
alpha = 1.9;  
n=6;  % path loss component
E_comp = 5;    % To CONFORM the value
Gt = 1;
Gr = 1;
CG = 10;   % Code Gain
NF = 1; % noise-factor
d_xover_num = (P_ckt*Ton*(N/K-1)+L*E_comp*N/K);
d_xover_den = ((4*pi./lambda).^2*(1+alpha)*SNR_unc./(2*Gr*Gt).*b*B*noise*NF.*Ton*(1-   1/CG));
d_xover = (d_xover_num./d_xover_den).^(1/n);
% d_xover = abs(d_xover);
axes(handles.abc)
plot(freq,d_xover,charact{j});
hold on
xlabel('Carrier Frequency'), ylabel('Cross-over distance (m)')
grid on
hold on
end
legend ('N=50','N=70','N=90','N=110','N=130')

person faseeh    schedule 26.03.2014    source источник
comment
Предлагаю устранить проблему самостоятельно. Установите точку останова на строку. Щелкнув правой кнопкой мыши и оценив выбор, вы можете быстро проверить, какая часть строки вызывает ошибку. Очевидно, что одна часть умножения является целым числом, а другая нет. Преобразуйте обе стороны в один и тот же класс, чтобы избежать ошибки.   -  person Daniel    schedule 27.03.2014


Ответы (1)


Вы можете проверить decimal. Дескриптор читается с использованием fread как txtbits = fread(txt, inf, '*ubit1', 'b'), который имеет точность *ubit1. Из документации вы увидите, что это читает текст и возвращает данные в виде целых чисел без знака. Это тогда несовместимо с вектором frequency, который имеет тип double. Вам нужно преобразовать данные в тот же формат.

Тем не менее, я бы в будущем рекомендовал использовать отладчик и попытаться сначала отладить код самостоятельно.

person patrik    schedule 27.03.2014