📄 txtester_export.m
字号:
set(handles.output, 'Pointer', 'watch');
data = handles.data;
param = GetParam(handles);
val = get(handles.list_Signal, 'value');
axes(handles.axes_main);
switch val
case 3,
handles.str = [handles.str; ...
{'->> Plotting I/Q three dimension figure(Imported)...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
t = [0:length(data.yFading)-1]'/(4800*param.mod.nSamp*param.rrc.OverSamp);
plot3(real(data.yFading), imag(data.yFading), t, 'r-');
strTitle = 'I/Q three dimension figure(Imported)';
strxLabel = 'Real part';
stryLabel = 'Image part';
strzLabel = 'Time (s)';
SetAxes(handles, strTitle, strxLabel, stryLabel, strzLabel);
handles.str = [handles.str; ...
{'->> Plotting I/Q three dimension figure(Imported)... Done!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01)
case 7,
handles.str = [handles.str; ...
{'->> Plotting I/Q three dimension figure(after filter)...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
t = [0:length(data.yDown)-1]'/(4800*param.mod.nSamp);
plot3(real(data.yDown), imag(data.yDown), t, 'm-');
strTitle = 'I/Q three dimension figure(after filter)';
strxLabel = 'Real part';
stryLabel = 'Image part';
strzLabel = 'Time (s)';
SetAxes(handles, strTitle, strxLabel, stryLabel, strzLabel);
handles.str = [handles.str; ...
{'->> Plotting I/Q three dimension figure(after filter)... Done!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01)
otherwise
return
end
set(handles.output, 'Pointer', 'arrow');
% --- Executes on button press in btn_Polar.
function btn_Polar_Callback(hObject, eventdata, handles)
set(handles.output, 'Pointer', 'watch');
data = handles.data;
param = GetParam(handles);
val = get(handles.list_Signal, 'value');
axes(handles.axes_main);
switch val
case 3,
handles.str = [handles.str; {'->> Polar coordinate plot(Imported)...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
polar(unwrap(angle(data.yFading)), abs(data.yFading), 'b.');
strTitle = 'Polar Coordinate Plot(Imported)';
strxLabel = 'Angle (radian)';
stryLabel = 'Radius';
SetAxes(handles, strTitle, strxLabel, stryLabel);
handles.str = [handles.str; {'->> Polar coordinate plot(Imported)... Done!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01)
case 7,
handles.str = [handles.str; {'->> Polar coordinate plot(after filter)...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
polar(unwrap(angle(data.yDown)), abs(data.yDown), 'b.');
strTitle = 'Polar Coordinate Plot(after filter)';
strxLabel = 'Angle (radian)';
stryLabel = 'Radius';
SetAxes(handles, strTitle, strxLabel, stryLabel);
handles.str = [handles.str; {'->> Polar coordinate plot(after filter)... Done!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01)
otherwise
return
end
set(handles.output, 'Pointer', 'arrow');
% --- Executes on button press in btn_ScatterPlot.
function btn_ScatterPlot_Callback(hObject, eventdata, handles)
% hObject handle to btn_ScatterPlot (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
param = GetParam(handles);
if get(handles.chkb_NewFigure, 'value'),
if get(handles.radiobutton1, 'value'),
scatterplot(handles.data.yFading, 2);
else
if get(handles.radiobutton2, 'value'),
scatterplot(handles.data.yDown, 2);
end
end
else
%handles.hScatter = scatterplot
end
% ===================================================================
% radiobutton callback function
function radiobutton1_Callback(hObject, eventdata, handles)
set(handles.radiobutton1, 'value', 1);
set(handles.radiobutton2, 'value', 0);
function radiobutton2_Callback(hObject, eventdata, handles)
set(handles.radiobutton1, 'value', 0);
set(handles.radiobutton2, 'value', 1);
% ===================================================================
% --- Executes on button press in btn_Import.
function btn_Import_Callback(hObject, eventdata, handles)
handles.str = [handles.str; {'->> Importing modulated data...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
nSamp = str2num(get(handles.edt_Mod_nSamp, 'string'));
OverSamp = str2num(get(handles.edt_RRC_OverSamp, 'string'));
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 data... Done!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
else
handles.str = [handles.str; ...
{'->> Importing modulated data... Failed, user cancel!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
end
cd(handles.CurrentPath);
% --- Executes on button press in btn_Save.
function btn_Save_Callback(hObject, eventdata, handles)
% hObject handle to btn_Save (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% ======================================================================
% --- Executes on button press in btn_Apply.
function btn_Apply_Callback(hObject, eventdata, handles)
set(handles.output, 'Pointer', 'watch');
handles.str = [handles.str; {'->> Getting parameters...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
param = GetParam(handles);
Data = handles.data;
handles.str = [handles.str; {'->> Getting parameters... Done!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
handles.str = [handles.str; {'->> Filtering imported Data...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
% filter designed
Data.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);
% received filter
yRx = filter(Data.rrcfltcoef, 1, Data.yFading);
% down sample
yDown = downsample(yRx,param.rrc.OverSamp);
% conpensated
Data.yDown = yDown(param.rrc.Order/param.rrc.OverSamp+1:end);
%set(handles.txt_Status, 'string', 'Status: Filtering received data... Done');
%pause(0.01);
handles.str = [handles.str; {'->> Filtering imported Data... Done!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
handles.str = [handles.str; {'->> Demodulating...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
% demodulation, using cp4fsk demod function
Data.z =cpfskdemod_new(Data.yDown, 4, param.mod.Index, ...
param.mod.nSamp, param.mod.Fd);
Data.z = 2*(Data.z+1)-5;
handles.str = [handles.str; {'->> Demodulating... Done'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
handles.str = [handles.str; {'->> Starting plot...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
ListStr = {'I Signal(Imported)'; 'Q Signal(Imported)'; ...
'I/Q Phase(Imported)'; ...
'------------------------------'; 'I Signal(filtered)'; ...
'Q Signal(filtered)'; 'I/Q Phase(filtered)'; ...
'------------------------------'; 'Demodulated Signal'; ...
'------------------------------'; 'Impulse Response(RRC)'};
set(handles.list_Signal, 'string',ListStr);
set(handles.list_Signal, 'value', 1)
set(handles.btn_Apply, 'enable', 'off');
set([handles.btn_ScatterPlot, handles.btn_Plot], 'enable', 'on')
t = [0:length(Data.yFading)-1]'/(4800*param.mod.nSamp*param.rrc.OverSamp);
axes(handles.axes_main);
plot(t, real(Data.yFading), 'b-');
set(handles.axes_main, 'XMinorTick', 'on');
set(handles.axes_main, 'YMinorTick', 'on');
set(handles.axes_main, 'XGrid', 'on');
set(handles.axes_main, 'YGrid', 'on');
title('In-Phase Signal(Imported)');
xlabel('Time (s)');
ylabel('Amplitude');
handles.str = [handles.str; {'->> Starting plot... Done'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);
% Setting sliders to the proper status.
maxLen = length(Data.yFading);
SetSlider(handles, maxLen);
handles.data = Data;
guidata(handles.output, handles);
set(handles.output, 'Pointer', 'arrow');
% =================== Slider CallBack function ==================
% --- Executes on slider movement.
function slider_AxesAdjust_From_Callback(hObject, eventdata, handles)
ToVal = fix(get(handles.slider_AxesAdjust_To, 'value'));
FromVal = fix(get(handles.slider_AxesAdjust_From, 'value'));
if FromVal < ToVal
set(handles.edt_PlotNum_From, 'string', num2str(FromVal));
else
msgbox('''From'' value must less than ''To'' value', 'ERROR', 'ERROR');
set(handles.edt_PlotNum_From, 'string', num2str(ToVal));
set(handles.slider_AxesAdjust_From, 'value', ToVal);
FromVal = ToVal;
end
AdjustAxis(handles, FromVal, ToVal);
% --- Executes during object creation, after setting all properties.
function slider_AxesAdjust_From_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
% ===================================================================
% --- Executes on slider movement.
function slider_AxesAdjust_To_Callback(hObject, eventdata, handles)
ToVal = fix(get(handles.slider_AxesAdjust_To, 'value'));
FromVal = fix(get(handles.slider_AxesAdjust_From, 'value'));
if FromVal < ToVal
set(handles.edt_PlotNum_To, 'string', num2str(ToVal));
else
ToVal = FromVal;
msgbox('''From'' value must less than ''To'' value', 'ERROR', 'ERROR');
set(handles.edt_PlotNum_To, 'string', num2str(ToVal));
set(handles.slider_AxesAdjust_To, 'value', ToVal);
end
AdjustAxis(handles, FromVal, ToVal);
% --- Executes during object creation, after setting all properties.
function slider_AxesAdjust_To_CreateFcn(hObject, eventdata, handles)
% hObject handle to slider_AxesAdjust_To (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
% ---------------------- Sub Function ---------------------------
function AdjustAxis(handles, FromVal, ToVal)
param = GetParam(handles);
indx = get(handles.list_Signal, 'value');
switch indx
case {1,2}
Ts = 1/(4800*param.mod.nSamp*param.rrc.OverSamp);
case {5,6}
Ts = 1/(4800*param.mod.nSamp);
case {3,7}
if indx == 3
data = handles.data.yFading;
strTitle = 'I/Q Phase Plot(Imported)';
strxLabel = 'In-Phase Signal';
stryLabel = 'Quadrature-Phase Signal';
else
data = handles.data.yDown;
strTitle = 'I/Q Phase Plot(after filter)';
strxLabel = 'In-Phase Signal';
stryLabel = 'Quadrature-Phase Signal';
end
plot(real(data(FromVal:ToVal)), imag(data(FromVal:ToVal)), 'c-')
SetAxes(handles, strTitle,strxLabel,stryLabel);
return
case 9
Ts = 1/4800
case 11
Ts = 1;
otherwise
return
end
set(handles.axes_main, 'XLim', [FromVal ToVal]*Ts);
% =============== Edit 'PlotNum To' CallBack function ===============
function edt_PlotNum_To_Callback(hObject, eventdata, handles)
FromVal = get(handles.slider_AxesAdjust_From, 'value');
ToVal = str2num(get(handles.edt_PlotNum_To, 'string'));
max = get(handles.slider_AxesAdjust_From, 'max');
min = get(handles.slider_AxesAdjust_To, 'min');
if isempty(ToVal) || ToVal<min || ToVal>max ...
|| fix(ToVal) ~= ToVal
msgbox('Invalid value in the ''To'' field.', 'ERROR', 'ERROR');
return
else
if FromVal>ToVal,
ToVal = FromVal;
msgbox('''From'' value must less than ''To'' value', 'ERROR', 'ERROR');
set(handles.edt_PlotNum_To, 'string', num2str(ToVal));
set(handles.slider_AxesAdjust_To, 'value', ToVal);
end
end
set(handles.slider_AxesAdjust_To, 'value', ToVal);
AdjustAxis(handles, FromVal, ToVal)
% --- Executes during object creation, after setting all properties.
function edt_PlotNum_To_CreateFcn(hObject, eventdata, handles)
% hObject handle to edt_PlotNum_To (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% ============= edit PlotNum From Callback function =============
function edt_PlotNum_From_Callback(hObject, eventdata, handles)
FromVal = str2num(get(handles.edt_PlotNum_From, 'string'));
ToVal = get(handles.slider_AxesAdjust_To, 'value');
max = get(handles.slider_AxesAdjust_From, 'max');
min = get(handles.slider_AxesAdjust_To, 'min');
if isempty(FromVal) || FromVal<min || FromVal>max ...
|| fix(FromVal)~=FromVal
msgbox('Invalid value in the ''from'' field.', 'ERROR', 'ERROR');
return
else
if FromVal>ToVal,
FromVal = ToVal;
msgbox('''From'' value must less than ''To'' value', 'ERROR', 'ERROR');
set(handles.edt_PlotNum_From, 'string', num2str(FromVal));
set(handles.slider_AxesAdjust_From, 'value', FromVal);
end
end
set(handles.slider_AxesAdjust_From, 'value', FromVal);
AdjustAxis(handles, FromVal, ToVal)
% --- Executes during object creation, after setting all properties.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -