Форум программистов, компьютерный форум, киберфорум
Наши страницы

Scilab

Войти
Регистрация
Восстановить пароль
 
ipan79
0 / 0 / 0
Регистрация: 31.05.2015
Сообщений: 1
#1

Преобразование из Matlab в SciLAB - Scilab

31.05.2015, 18:42. Просмотров 426. Ответов 0
Метки нет (Все метки)

Здравствуйте. Необходимо преобразовать матлабовский файл в сайлаб
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
% Проект: Моделирование OFDM В SciLAB
% Студенет: Челноков Иван
% Научный руководитель: Лысенко Алексей
% *************** ФАЙЛ ОСНОВНОЙ ПРОГРАММЫ ***************%
% Это основной файл программы OFDM моделирования
% В качестве источника данных требуется 256-цветное растровое изображение
% формата BMP
% В работе используются 5 файлов:
% ofdm_parameters.m, ofdm_base_convert.m, ofdm_modulate.m,
% ofdm_frame_detect.m, ofdm_demod.m
% ####################################################### %
% ************* СИСТЕМА ИНИЦИАЛИЗАЦИИ OFDM МОДЕЛИРОВАНИЯ: ************* %
% **** Настройка параметров и получение источника данных(изображение) **** %
% ####################################################### %
% Turn off exact-match warning to allow case-insensitive input files
warning('off','MATLAB:dispatcher:InexactMatch');
clear all;  %Очищает предыдущие данные в рабочем поле SciLAB
close all;  % Закрывает все предыдущие графики и рисунки
fprintf('\n\n##########################################\n')
fprintf('#*********** OFDM МОДЕЛИРОВАНИЕ **********#\n')
fprintf('##########################################\n\n')
% вызываем скрипт ofdm_parameters.m для настройки системных параметров OFDM
ofdm_parameters;
% сохраняем параметры для приемника
save('ofdm_parameters');
% читаем данные из входного файла
x = imread(file_in);
% организовываем чтение данных с изображения для обработки OFDM
h = size(x,1);
w = size(x,2);
x = reshape(x', 1, w*h);
baseband_tx = double(x);
% convert original data word size (bits/word) to symbol size (bits/symbol)
% symbol size (bits/symbol) is determined by choiceof modulation method
baseband_tx = ofdm_base_convert(baseband_tx, word_size, symb_size);
% save original baseband data for error calculationlater
save('err_calc.mat', 'baseband_tx');
% ####################################################### %
% ******************* OFDM TRANSMITTER ****************** %
% ####################################################### %
tic;  % start stopwatch
% generate header and trailer (an exact copy of theheader)
f = 0.25;
header = sin(0:f*2*pi:f*2*pi*(head_len-1));
f=f/(pi*2/3);
header = header+sin(0:f*2*pi:f*2*pi*(head_len-1));
% arrange data into frames and transmit
frame_guard = zeros(1, symb_period);
time_wave_tx = [];
symb_per_carrier = ceil(length(baseband_tx)/carrier_count);
fig = 1;
if (symb_per_carrier > symb_per_frame)  % === multiple frames === %
    power = 0;
    while~isempty(baseband_tx)
        % number of symbols per frame
        frame_len = min(symb_per_frame*carrier_count,length(baseband_tx));
        frame_data = baseband_tx(1:frame_len);
        % update the yet-to-modulate data
        baseband_tx = baseband_tx((frame_len+1):(length(baseband_tx)));
        % OFDM modulation
        time_signal_tx = ofdm_modulate(frame_data,ifft_size,carriers,...
            conj_carriers, carrier_count, symb_size, guard_time, fig);
        fig = 0; %indicate that ofdm_modulate() has already generated plots
        % add a frame guard to each frame of modulated signal
        time_wave_tx = [time_wave_tx frame_guard time_signal_tx];
        frame_power = var(time_signal_tx);
    end
    % scale the header to match signal level
    power = power + frame_power;
    % The OFDM modulated signal for transmission
    time_wave_tx = [power*header time_wave_tx frame_guard power*header];
else  % === single frame === %
    % OFDM modulation
    time_signal_tx = ofdm_modulate(baseband_tx,ifft_size,carriers,...
        conj_carriers, carrier_count, symb_size, guard_time, fig);
    % calculate the signal power to scale the header
    power = var(time_signal_tx);
    % The OFDM modulated signal for transmission
    time_wave_tx = ...
        [power*header frame_guard time_signal_tx frame_guard power*header];
end
% show summary of the OFDM transmission modeling
peak = max(abs(time_wave_tx(head_len+1:length(time_wave_tx)-head_len)));
sig_rms = std(time_wave_tx(head_len+1:length(time_wave_tx)-head_len));
peak_rms_ratio = (20*log10(peak/sig_rms));
fprintf('\nSummary of the OFDM transmission and channel modeling:\n')
fprintf('Peak to RMS power ratio at entrance of channel is:%f dB\n', ...
    peak_rms_ratio)
 
% ####################################################### %
% **************** COMMUNICATION CHANNEL **************** %
% ####################################################### %
% ===== signal clipping ===== %
clipped_peak = (10^(0-(clipping/20)))*max(abs(time_wave_tx));
time_wave_tx(find(abs(time_wave_tx)>=clipped_peak))...
    = clipped_peak.*time_wave_tx(find(abs(time_wave_tx)>=clipped_peak))...
    ./abs(time_wave_tx(find(abs(time_wave_tx)>=clipped_peak)));
% ===== channel noise ===== %
power = var(time_wave_tx);  % Gaussian (AWGN)
SNR_linear = 10^(SNR_dB/10);
noise_factor = sqrt(power/SNR_linear);
noise = randn(1,length(time_wave_tx)) * noise_factor;
time_wave_rx = time_wave_tx + noise;
% show summary of the OFDM channel modeling
peak = max(abs(time_wave_rx(head_len+1:length(time_wave_rx)-head_len)));
sig_rms = std(time_wave_rx(head_len+1:length(time_wave_rx)-head_len));
peak_rms_ratio = (20*log10(peak/sig_rms));
fprintf('Peak to RMS power ratio at exit of channel is: %f dB\n', ...
    peak_rms_ratio)
% Save the signal to be received
save('received.mat', 'time_wave_rx', 'h', 'w');
fprintf('#******** OFDM data transmitted in %f seconds ********#\n\n', toc)
% ####################################################### %
% ********************* OFDM RECEIVER ******************* %
% ####################################################### %
disp('Press any key to let OFDM RECEIVER proceed...')
pause;
clear all;  % flush all data stored in memory previously
tic;  % start stopwatch
% invoking ofdm_parameters.m script to set OFDM system parameters
load('ofdm_parameters');
% receive data
load('received.mat');
time_wave_rx = time_wave_rx.';
end_x = length(time_wave_rx);
start_x = 1;
data = [];
phase = [];
last_frame = 0;
unpad = 0;
if rem(w*h, carrier_count)~=0
    unpad = carrier_count - rem(w*h, carrier_count);
end
num_frame=ceil((h*w)*(word_size/symb_size)/(symb_per_frame*carrier_count));
fig = 0;
for k = 1:num_frame
    if k==1 || k==num_frame || rem(k,max(floor(num_frame/10),1))==0
        fprintf('Demodulating Frame #%d\n',k)
    end
    % pick appropriate trunks of time signal to detect data frame
    if k==1
        time_wave = time_wave_rx(start_x:min(end_x, ...
            (head_len+symb_period*((symb_per_frame+1)/2+1))));
    else
        time_wave = time_wave_rx(start_x:min(end_x, ...
            ((start_x-1) + (symb_period*((symb_per_frame+1)/2+1)))));
    end
    % detect the data frame that only contains the useful information
    frame_start = ...
        ofdm_frame_detect(time_wave, symb_period, envelope, start_x);
    if k==num_frame
        last_frame = 1;
        frame_end = min(end_x, (frame_start-1) + symb_period*...
            (1+ceil(rem(w*h,carrier_count*symb_per_frame)/carrier_count)));
    else
        frame_end=min(frame_start-1+(symb_per_frame+1)*symb_period, end_x);
    end
    % take the time signal abstracted from this frame to demodulate
    time_wave = time_wave_rx(frame_start:frame_end);
    % update the label for leftover signal
    start_x = frame_end - symb_period;
    if k==ceil(num_frame/2)
        fig = 1;
    end
    % demodulate the received time signal
    [data_rx, phase_rx] = ofdm_demod...
        (time_wave, ifft_size, carriers, conj_carriers, ...
        guard_time, symb_size, word_size, last_frame, unpad, fig);
    if fig==1
        fig = 0;  % indicate that ofdm_demod() has already generated plots
    end
    phase = [phase phase_rx];
    data = [data data_rx];
end
phase_rx = phase;  % decoded phase
data_rx = data;  % received data
% convert symbol size (bits/symbol) to file word size (bits/byte) as needed
data_out = ofdm_base_convert(data_rx, symb_size, word_size);
fprintf('#********** OFDM data received in %f seconds *********#\n\n', toc)
% ####################################################### %
% ********************** DATA OUTPUT ******************** %
% ####################################################### %
% patch or trim the data to fit a w-by-h image
if length(data_out)>(w*h)  % trim extra data
    data_out = data_out(1:(w*h));
elseif length(data_out)<(w*h)  % patch a partially missing row
    buff_h = h;
    h = ceil(length(data_out)/w);
    % if one or more rows of pixels are missing, show amessage to indicate
    if h~=buff_h
        disp('WARNING: Output image smaller than original')
        disp(' due to data loss in transmission.')
    end
    % to make the patch nearly seamless,
    % make each patched pixel the same color as the oneright above it
    if length(data_out)~=(w*h)
        for k=1:(w*h-length(data_out))
            mend(k)=data_out(length(data_out)-w+k);
        end
        data_out = [data_out mend];
    end
end
% format the demodulated data to reconstruct a bitmap image
data_out = reshape(data_out, w, h)';
data_out = uint8(data_out);
% save the output image to a bitmap (*.bmp) file
imwrite(data_out, file_out, 'bmp');
% ####################################################### %
% ****************** ERROR CALCULATIONS ***************** %
% ####################################################### %
% collect original data before modulation for errorcalculations
load('err_calc.mat');
fprintf('\n#**************** Summary of Errors ****************#\n')
% Let received and original data match size and calculate data loss rate
if length(data_rx)>length(baseband_tx)
    data_rx = data_rx(1:length(baseband_tx));
    phase_rx = phase_rx(1:length(baseband_tx));
elseif length(data_rx)<length(baseband_tx)
    fprintf('Data loss in this communication = %f%% (%d out of %d)\n', ...
        (length(baseband_tx)-length(data_rx))/length(baseband_tx)*100, ...
        length(baseband_tx)-length(data_rx), length(baseband_tx))
end
% find errors
errors = find(baseband_tx(1:length(data_rx))~=data_rx);
fprintf('Total number of errors = %d (out of %d)\n', ...
    length(errors), length(data_rx))
% Bit Error Rate
fprintf('Bit Error Rate (BER) = %f%%\n',length(errors)/length(data_rx)*100)
% find phase error in degrees and translate to -180to +180 interval
phase_tx = baseband_tx*360/(2^symb_size);
phase_err = (phase_rx - phase_tx(1:length(phase_rx)));
phase_err(find(phase_err>=180)) = phase_err(find(phase_err>=180))-360;
phase_err(find(phase_err<=-180)) = phase_err(find(phase_err<=-180))+360;
fprintf('Average Phase Error = %f (degree)\n', mean(abs(phase_err)))
% Error pixels
x = ofdm_base_convert(baseband_tx, symb_size, word_size);
x = uint8(x);
x = x(1:(size(data_out,1)*size(data_out,2)));
y = reshape(data_out', 1, length(x));
err_pix = find(y~=x);
fprintf('Percent error of pixels of the received image = %f%%\n\n', ...
    length(err_pix)/length(x)*100)
fprintf('##########################################\n')
fprintf('#******** END of OFDM Simulation ********#\n')
fprintf('##########################################\n\n')
Но вот что пишет сайлаб:
****** Начало сессии mfile2sci() ******
Файл для преобразования: C:/Users/днс/Desktop/Диплом/Входной_тракт/ofdm/main.m
Путь к файлу результатов: C:/SCILAB TO MATLAB/
Рекурсивный режим: ВЫКЛ
Только числовые значения использованы в M-file: НЕТ
Режим расширенного вывода: 3
Форматировать код программы: НЕТ
Чтение M-файла...
Чтение M-файла: Готово
Изменение синтаксиса...
Изменение синтаксиса: Готово
Преобразование макроса в дерево...
Преобразование M-tree...
!! L.16: message_id проигнорирован в следующей строке.
L.19: Нет простого эквивалента, поэтому вызывается mtlb_fprintf().
L.20: Нет простого эквивалента, поэтому вызывается mtlb_fprintf().
L.21: Нет простого эквивалента, поэтому вызывается mtlb_fprintf().
! L.23: mtlb(ofdm_parameters) может быть заменена с помощью ofdm_parameters() или ofdm_parameters будь ofdm_parameters M-файлом или нет.
!! L.23: Неизвестная функция ofdm_parameters не преобразована, используется исходная последовательность вызова.
! L.27: mtlb(file_in) может быть заменена с помощью file_in() или file_in будь file_in M-файлом или нет.
!! L.27: Функция Matlab imread ещё не преобразована, используется исходная последовательность вызова.
! L.31: reshape(mtlb_double(mtlb_t(x)),1,w*h) может быть заменено с помощью:
! --> reshape(mtlb_t(x),1,w*h) если mtlb_t(x) не является матрицей символьных строк.
!! L.31: Внимание: Matlab reshape() запрещает одноэлементное множество более высокой размерности, это не распространяется на матрицы.
!--error 10000
Извлечение value из «operation» tlist ещё не реализовано.
at line 18 of function %operatio_e called by :
at line 48 of function sci_reshape called by :
[sci_equiv]=sci_reshape(mtlb_expr)
in execstr instruction called by :
at line 38 of function funcall2sci called by :
at line 51 of function expression2sci called by :
at line 53 of function equal2sci called by :
at line 11 of function instruction2sci called by :
at line 75 of function mtlbtree2sci called by :
at line 95 of function m2sci called by :
at line 224 of function mfile2sci called by :
at line 142 of function cb_m2sci_gui called by :
then %oldgcbo = gcbo; end;gcbo = getcallbackobject("-6befa837:14daa19229f:-7f72");cb_m2sci_gui;if exists("%oldgcbo") then gcbo = %oldgcbo; else clear gcbo; end
while executing a callback
Подскажите, пожалуйста решение проблемы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2015, 18:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразование из Matlab в SciLAB (Scilab):

Преобразование Matlab в Scilab - Scilab
Добрый день! Нужно выполнить преобразование в scilab. У меня встроен преобразователь, но почему-то он не работает :( Читаю гайд по...

Преобразовать из MATLAB в Scilab - Scilab
Добрый день! Нужно выполнить преобразование из MATLAB в Scilab. 1.Запускаю редактор m-файлов и ввожу следующую программу: ...

Преобразование Mathlab в scilab - Scilab
Здравствуйте! Нужно преобразовать из mathlab в scilab x=; y=; net=newff(,,{'tansig','purelin'},'trainbfg'); ...

Уравнения в SCILAB - Scilab
Здравствуйте! Помогите пожалуйста решить уравнения в scilab. Задание №1. Решить квадратное уравнение ...

Фракталы на Scilab - Scilab
Кто нибудь строил простенькие фракталы с помощю Scilab-а. Нужен любой работающий пример.

Scilab и Fortran - Scilab
В теме http://www.cyberforum.ru/scilab/thread1612707.html я уже отписывался о тормознутости Scilab при обработке матриц большой...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2015, 18:42
Привет! Вот еще темы с ответами:

Применение LaTex в Scilab - Scilab
Что такое LaTex и как его применить можно в программном коде Scilab?

Ошибки в коде scilab-5.5.2 - Scilab
Доброго времени суток. Нужна помощь в scilab При выполнении кода пишет : ...

Перевод из Mathlab в Scilab - Scilab
Здраствуйте! Не получается сделать преобразование из Matlab в Scilab. Выдает ошибку 37 Как быть? sym Y1z Y2z Y3z Y4z c21 c31...

Неправильное умножение scilab - Scilab
Доброго времени суток. Мне тут задали сделать курсовую в SciLab`e, но не буду углубляться в подробности. Первая часть - сделать фильтр...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.