⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 txtester.asv

📁 一个仿真测试4FSK信号的matlab环境GUI程序。可以查看基带IQ波形、眼图、星座图。并可以仿真高斯白噪声、瑞利衰减对信号的影响。
💻 ASV
📖 第 1 页 / 共 3 页
字号:
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);
strTitle = get(handles.axes_main, 'Title');
switch strTitle
    case {handles.AxesTitle_Plot_ISigImported, ...
            handles.AxesTitle_Plot_QSigImported}
        Ts = 1/(4800*param.mod.nSamp*param.rrc.OverSamp);
    case {handles.AxesTitle_Plot_ISigFilter, ...
            handles.AxesTitle_Plot_QSigFilter}
        Ts = 1/(4800*param.mod.nSamp);
    case {handles.AxesTitle_Plot_IQPhaseImported, ...
            handles.AxesTitle_Plot_IQPhaseFilter}
        if strcmp(strTitle, handles.AxesTitle_Plot_IQPhaseImported)
            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 handles.AxesTitle_Plot_DemodSig
        Ts = 1/4800
    case handles.AxesTitle_Plot_RRCcoef
        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.
function edt_PlotNum_From_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edt_PlotNum_from (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




% --- Executes on button press in chkb_NewFigure.
function chkb_NewFigure_Callback(hObject, eventdata, handles)


% --- Executes on mouse press over axes background.
function axes_main_ButtonDownFcn(hObject, eventdata, handles)
ax = get(handles.axes_main, 'CurrentPoint');
%assignin('base','a',a);
set(handles.txt_CursorAxis, 'string', ...
    sprintf('x: %f,  y: %f,  z: %f',ax(1,1),ax(1,2),ax(1,3)));
axes(handles.axes_main);
hold on;
plot(ax(1,1),ax(1,2), 'rd');
%text(ax(1,1),ax(1,2), 'o')
hold off;


function param = GetParam(handles)
param.mod.Fd = str2num(get(handles.edt_Mod_Fd, 'string'));
param.mod.Index = str2num(get(handles.edt_Mod_Index, 'string'));
param.mod.nSamp = str2num(get(handles.edt_Mod_nSamp, 'string'));

param.rrc.Order = str2num(get(handles.edt_RRC_Order, 'string'));
param.rrc.OverSamp = str2num(get(handles.edt_RRC_OverSamp, 'string'));
param.rrc.RollOff = str2num(get(handles.edt_RRC_RollOff, 'string'));
param.rrc.Delay = param.rrc.Order/(2*param.rrc.OverSamp);

% ====================================================================
% --- Executes on selection change in list_Signal.
function list_Signal_Callback(hObject, eventdata, handles)
if strcmp(get(handles.list_Signal, 'string'), '<empty>'),
    return
else
    val = get(handles.list_Signal, 'value');
    switch val
        case {1,2,5,6,9,11}
            set(handles.btn_Plot, 'enable', 'on');
            set([handles.btn_Plot3, handles.btn_Polar], 'enable', 'off');
        case {3,7}
            set([handles.btn_Plot, handles.btn_Plot3, ...
                handles.btn_Polar], 'enable', 'on');
        case {4,8,10}
            set([handles.btn_Plot, handles.btn_Plot3, ...
                handles.btn_Polar], 'enable', 'off');
        otherwise
            return
    end
end

% --- Executes during object creation, after setting all properties.
function list_Signal_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), ...
        get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -