📄 dsimsoft_export.m
字号:
msgbox(['Receiver for Test.', ...
' No need to set this parameters.'], ...
'No need to set');
return
end
end
end
end
end
if choice ~= 2 && choice ~= 4 && choice ~= 6
SetParam(choice);
else
return
end
end
% ===================================================================
% Import parameters
% -------------------------------------------------------------------
function btn_ParamImport_Callback(hObject, eventdata, handles)
handles.str = [handles.str; {'->> Importing parameters...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
path = strcat(handles.CurrentPath, '\Parameters\');
cd(path);
[FileName,PathName,FilterIndx] = ...
uigetfile({'*.mat','Mat-files(*.mat)';'*.*','All files(*.*)'},...
'Import Parameters');
if FilterIndx
param = load(FileName);
setappdata(handles.output, 'src', param.src);
setappdata(handles.output, 'mod', param.mod);
setappdata(handles.output, 'rrc', param.rrc);
setappdata(handles.output, 'awgn', param.awgn);
setappdata(handles.output, 'fade', param.fade);
handles.str = [handles.str; {'->> Importing parameters... Done!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
else
handles.str = [handles.str; ...
{'->> Importing parameters... Failed, user cancel!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
end
guidata(handles.output, handles);
cd(handles.CurrentPath);
%set(handles.btn_Apply, 'enable', 'on');
% ===================================================================
% --- Executes on button press in btn_ParamExport.
% -------------------------------------------------------------------
function btn_ParamExport_Callback(hObject, eventdata, handles)
handles.str = [handles.str; {'->> Exporting parameters...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
src = getappdata(handles.output, 'src');
mod = getappdata(handles.output, 'mod');
rrc = getappdata(handles.output, 'rrc');
awgn = getappdata(handles.output, 'awgn');
fade = getappdata(handles.output, 'fade');
path = strcat(handles.CurrentPath, '\Parameters\');
cd(path);
[FileName,PathName,FilterIndx] = ...
uiputfile({'*.mat','Mat-files(*.mat)';'*.*','All files(*.*)'},...
'Export Parameters');
if FilterIndx
save(FileName, 'src', 'mod', 'rrc', 'awgn', 'fade');
handles.str = [handles.str; ...
{['->> Exporting parameters... Done!', ...
' Path:', path, FileName]}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
else
handles.str = [handles.str; ...
{'->> Exporting parameters... Failed, user cancel!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
end
guidata(handles.output, handles);
cd(handles.CurrentPath);
% ===================================================================
% --- Executes on button press in btn_TxDataExport.
% -------------------------------------------------------------------
function btn_TxDataExport_Callback(hObject, eventdata, handles)
set(handles.output, 'pointer', 'watch');
handles.str = [handles.str; ...
{'->> Exporting transmitter baseband result...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
y_Len = length(handles.data.yFading);
Data = [real(handles.data.yFading)'; imag(handles.data.yFading)'];
path = strcat(handles.CurrentPath, '\Data\');
cd(path);
[FileName,PathName,FilterIndx] = ...
uiputfile(...
{'*.txt', 'text files(*.txt)'; '*.*', 'All files(*.*)'}, ...
'Export Modulated Data');
if FilterIndx
fid = fopen(FileName, 'w');
hPro = waitbar(0, 'Export Data', 'Name', 'Exporting Data...');
pause(0.01);
interval = fix(y_Len/100);
for i = 1:100
fprintf(fid, '%8.7f\t%8.7f\n', Data(:,(i-1)*interval+1:i*interval));
waitbar(i/100, hPro, ['Percentage:',num2str(i),'% '], hPro);
end
fprintf(fid, '%8.7f\t%8.7f\n', Data(:,i*interval+1:y_Len));
close(hPro);
fclose(fid);
handles.str = [handles.str; ...
{['->> Exporting transmitter baseband result... Done!', ...
' Path:', path, FileName]}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
else
handles.str = [handles.str; ...
{'->> Exporting transmitter baseband result... Failed, user cancel!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
end
guidata(handles.output, handles);
set(handles.output, 'pointer', 'arrow');
cd(handles.CurrentPath);
% ====================================================================
% --- Executes on button press in btn_TxDataSave.
% ====================================================================
function btn_TxDataSave_Callback(hObject, eventdata, handles)
set(handles.output, 'pointer', 'watch');
handles.str = [handles.str; ...
{'->> Saving source signal...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
Len = length(handles.data.x);
path = strcat(handles.CurrentPath, '\Source\');
cd(path);
[FileName,PathName,FilterIndx] = ...
uiputfile({'*.txt', 'text files(*.txt)';'*.*', ...
'All files(*.*)'},'Save Source');
if FilterIndx
fid = fopen(FileName, 'w');
hPro = waitbar(0,'Save Source','Name','Saving Source Signal...');
pause(0.01);
if Len/100 ~= fix(Len/100)
msgbox(['Since the source bit numbers was not multiples of 100, ', ...
'a few bit may be lost.'], ...
'Warning', 'warn');
interval = fix(Len/100);
else
interval = Len/100;
end
for i = 1:100
fprintf(fid, '%d\n', handles.data.x((i-1)*interval+1:i*interval));
waitbar(i/100, hPro, ['Percentage:',num2str(i),'% '], hPro);
end
close(hPro);
fclose(fid);
handles.str = [handles.str; ...
{['->> Saving source signal... Done!', ...
' Path:', path, FileName]}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
else
handles.str = [handles.str; ...
{'->> Saving source signal... Failed, user cancel!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
end
guidata(handles.output, handles);
set(handles.output, 'pointer', 'arrow');
cd(handles.CurrentPath);
% ======================================================================
% --- Executes on button press in btn_RxDataImport.
% ======================================================================
function btn_RxDataImport_Callback(hObject, eventdata, handles)
set(handles.output, 'pointer', 'watch');
handles.str = [handles.str; ...
{'->> Importing modulated(also Noise&Fading) data...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
%mod = getappdata(handles.output, 'mod');
%rrc = getappdata(handles.output, 'rrc');
path = strcat(handles.CurrentPath, '\Data\');
cd(path);
[FileName,PathName,FilterIndx] = uigetfile(...
{'*.txt', 'text files(*.txt)'; '*.*', 'All files(*.*)'}, ...
'Import Data');
if FilterIndx,
fid = fopen(FileName, 'r');
[Data, Count] = fscanf(fid, '%f');
fclose(fid);
rData = Data(1:2:end);
iData = Data(2:2:end);
Data = rData + j*iData;
handles.data.yFading = Data;
guidata(handles.output, handles);
set(handles.btn_APPLY, 'enable', 'on')
handles.str = [handles.str; ...
{'->> Importing modulated(also Noise&Fading) data... Done!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
else
handles.str = [handles.str; ...
{['->> Importing modulated(also Noise&Fading) data...', ...
' Failed, user cancel!']}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
end
guidata(handles.output, handles);
set(handles.output, 'pointer', 'arrow');
set(handles.btn_APPLY, 'enable', 'on');
set(handles.btn_RxDataImport, 'enable', 'off');
cd(handles.CurrentPath);
% ===================================================================
% --- Executes on button press in btn_RxDataSave.
% -------------------------------------------------------------------
function btn_RxDataSave_Callback(hObject, eventdata, handles)
set(handles.output, 'pointer', 'watch');
handles.str = [handles.str; ...
{'->> Saving demodulated result...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
Len = length(handles.data.z);
path = strcat(handles.CurrentPath, '\Demod\');
cd(path);
[FileName,PathName,FilterIndx] = ...
uiputfile({'*.txt', 'text files(*.txt)';'*.*', ...
'All files(*.*)'},'Save demod data');
if FilterIndx
fid = fopen(FileName, 'w');
hPro = waitbar(0,'Save Demod','Name','Saving demod result...');
pause(0.01);
if Len/100 ~= fix(Len/100)
msgbox(['Since the source bit numbers was not multiples of 100, ', ...
'a few bit may be lost.'], ...
'Warning', 'warn');
interval = fix(Len/100);
else
interval = Len/100;
end
for i = 1:100
fprintf(fid, '%d\n', handles.data.z((i-1)*interval+1:i*interval));
waitbar(i/100, hPro, ['Percentage:',num2str(i),'% '], hPro);
end
close(hPro);
fclose(fid);
handles.str = [handles.str; ...
{['->> Saving demodulated result... Done!', ...
' Path:', path, FileName]}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
else
handles.str = [handles.str; ...
{'->> Saving demodulated result... Failed, user cancel!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
end
guidata(handles.output, handles);
set(handles.output, 'pointer', 'arrow');
cd(handles.CurrentPath);
% --- Executes on button press in btn_APPLY.
function btn_APPLY_Callback(hObject, eventdata, handles)
set(handles.output, 'Pointer', 'watch');
param.src = getappdata(handles.output, 'src');
param.mod = getappdata(handles.output, 'mod');
param.rrc = getappdata(handles.output, 'rrc');
param.awgn = getappdata(handles.output, 'awgn');
param.fade = getappdata(handles.output, 'fade');
PlotListStr = [];
ScatterListStr = [];
if (get(handles.radiobtn_Sim, 'value') && ...
get(handles.chkb_Sim_Tx, 'value')) || ...
(get(handles.radiobtn_Test, 'value') && ...
get(handles.chkb_Test_Tx, 'value'))
handles.str = [handles.str; {'->> Generating Source Signal...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
Data.x = randsrc(param.src.BitNum/2,1,[0:3],param.src.InitSeed);
Data.x = 2*(Data.x+1)-5;
handles.str = [handles.str; {'->> Generating Source Signal... Done!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
handles.str = [handles.str; {'->> Modulating signal using CP4FSK...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
Data.y = cpfskmod_new(Data.x, 4, param.mod.Index, ...
param.mod.nSamp, param.mod.Fd);
handles.str = [handles.str; {'->> Modulating signal using CP4FSK... Done!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
handles.str = [handles.str; {'->> Filtering data using RRC filter...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
rrcfltcoef = rcosine(param.mod.Fd*param.mod.nSamp, ...
param.mod.Fd*param.mod.nSamp*param.rrc.OverSamp, 'fir/sqrt', ...
param.rrc.RollOff, param.rrc.Delay);
% up sample the signal
yUp = upsample(Data.y, param.rrc.OverSamp);
% conpensated
yUp = [yUp;zeros(param.rrc.Order,1)];
% filter
Data.yTx = filter(rrcfltcoef,1,yUp);
handles.str = [handles.str; {'->> Filtering data using RRC filter... Done!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
handles.str = [handles.str; {'->> Adding Guass White Noise...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
powertype = {'db','linear'};
if strcmp(param.awgn.power, '<measured>')
Data.yNoise = awgn(Data.yTx, param.awgn.EbNo, 'measured', ...
param.awgn.InitSeed, powertype{param.awgn.powertype});
else
Data.yNoise = awgn(Data.yTx, param.awgn.EbNo, ...
str2num(param.awgn.power), param.awgn.InitSeed, ...
powertype{param.awgn.powertype});
end
handles.str = [handles.str; {'->> Adding Guass White Noise... Done!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
handles.str = [handles.str; {'->> Adding Rayleigh Fading...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
chan = rayleighchan(param.fade.Td, param.fade.FrqShift, ...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -