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

📄 dsimsoft_export.m

📁 一个仿真测试4FSK信号的matlab环境GUI程序。可以查看基带IQ波形、眼图、星座图。并可以仿真高斯白噪声、瑞利衰减对信号的影响。
💻 M
📖 第 1 页 / 共 5 页
字号:
        param.fade.DelayVec, param.fade.GainVec);
    Data.yFading = filter(chan, Data.yNoise);
    handles.str = [handles.str; {'->> Adding Rayleigh Fading... Done!'}];
    set(handles.edt_Process, 'string', handles.str);
    pause(0.01);
    
    PlotListStr = {...
        'Source Signal'; ...
        'In-Phase (Mod baseband)'; ...
        'Quadrature-Phase (baseband)'; ...
        'I/Q Phase (Mod)'; ...
        'In-Phase (After TxRRC)'; ...
        'Quadrature-Phase (after TxRRC)'; ...
        'I/Q Phase (Tx Filterd)'; ...
        'I-Phase (AWGN)'; ...
        'Quadrature-Phase (AWGN)'; ...
        'I/Q Phase (AWGN)'; ...
        'In-Phase (Rayleigh Fade)'; ...
        'Quadrature-Phase (Rayleigh Fade)'; ...
        'I/Q Phase (Rayleigh Fade)'};
    
    ScatterListStr = {...
        'Modulated SIG (Tx)'; ...
        'After RRC Filter (Tx)'; ...
        'Gauss White Noise (Tx)'; ...
        'After Rayleigh Fading (Tx)'};
else
    Data.yFading = handles.data.yFading;
end

if isempty(PlotListStr)
    PlotListStr = {...
        'In-Phase (Rayleigh Fade)'; ...
        'Quadrature-Phase (Rayleigh Fade)'; ...
        'I/Q Phase (Rayleigh Fade)'};
end

if isempty(ScatterListStr)
    ScatterListStr = {...
        'After Rayleigh Fading (Tx)'};
end

if (get(handles.radiobtn_Sim, 'value') && ...
        get(handles.chkb_Sim_Rx, 'value')) || ...
        (get(handles.radiobtn_Test, 'value') && ...
        get(handles.chkb_Test_Rx, 'value'))
    set(handles.output, 'Pointer', 'watch');
    handles.str = [handles.str; {'->> Filtering Received 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);
    handles.str = [handles.str; {'->> Filtering Received Data... Done!'}];
    set(handles.edt_Process, 'string', handles.str);
    pause(0.01);
    
    handles.str = [handles.str; {'->> Starting Demodulation...'}];
    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; {'->> Starting Demodulation... Done'}];
    set(handles.edt_Process, 'string', handles.str);
    pause(0.01);
    
    PlotListStr = [PlotListStr; ...
        {'In-Phase (After RxRRC)'}; ...
        {'Quadrature-Phase (After RxRRC)'}; ...
        {'I/Q Phase (After RxRRC)'}; ...
        {'Demodulated Signal'}];
    
    ScatterListStr = [ScatterListStr; ...
        {'Received filter (Rx)'}];
end

% starting plot. 
handles.str = [handles.str; {'->> Starting plot...'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);

% only Transmitter, or both Transmitter and Receiver for Simulation.
if (get(handles.radiobtn_Sim, 'value') && ...
        get(handles.chkb_Sim_Tx, 'value')) || ...
        (get(handles.radiobtn_Test, 'value') && ...
        get(handles.chkb_Test_Tx, 'value'))
    t = [0:param.src.BitNum/2-1]'/param.mod.Fd;
    maxLen = length(t);
    axes(handles.axes_main);
    stem(t, Data.x, 'r.');
    strTitle = handles.AxesTitle_Plot_SourceSig;
    strxLabel = 'Time (s)';
    stryLabel = 'Amplitude';
    SetAxes(handles, strTitle, strxLabel, stryLabel);
    axis([0 max(t) -6 6]);
end

% only Receiver
if (get(handles.radiobtn_Sim, 'value') && ...
        ~get(handles.chkb_Sim_Tx, 'value') && ...
        get(handles.chkb_Sim_Rx, 'value')) || ...
        (get(handles.radiobtn_Test, 'value') && ...
        get(handles.chkb_Test_Rx, 'value'))
    t = [0:length(Data.yFading)-1]'/...
        (param.mod.Fd*param.mod.nSamp*param.rrc.OverSamp);
    maxLen = length(t);
    axes(handles.axes_main);
    plot(t, real(Data.yFading), 'r-');
    strTitle = handles.AxesTitle_Plot_ITxSigFade;
    strxLabel = 'Time (s)';
    stryLabel = 'Amplitude';
    SetAxes(handles, strTitle, strxLabel, stryLabel);
end

SetSlider(handles, maxLen);
handles.str = [handles.str; {'->> Starting plot... Done!'}];
set(handles.edt_Process, 'string', handles.str);
pause(0.01);

handles.data = Data;
guidata(handles.output, handles);
%assignin('base', 'data', Data);

set(handles.list_Variable, 'string', PlotListStr, ...
    'value', 1);
set(handles.popup_Scatter, 'string', ScatterListStr, ...
    'value', 1);

% if used for simulation
if get(handles.radiobtn_Sim, 'value')
    set([handles.btn_TxDataExport, handles.btn_TxDataSave, ...
        handles.btn_RxDataImport, handles.btn_RxDataSave], ...
        'enable', 'off');
end

% if used for TEST DSP/FPGA,
if get(handles.radiobtn_Test, 'value')
    % if only transmitter
    if get(handles.chkb_Test_Tx, 'value') && ...
            ~get(handles.chkb_Test_Rx, 'value')
        set([handles.btn_TxDataExport, handles.btn_TxDataSave], ...
            'enable', 'on');
        set([handles.btn_RxDataImport, handles.btn_RxDataSave], ...
            'enable', 'off');
    else
        % only Receiver
        if ~get(handles.chkb_Test_Tx, 'value') && ...
                get(handles.chkb_Test_Rx, 'value')
            set([handles.btn_TxDataExport, handles.btn_TxDataSave, ...
                handles.btn_RxDataImport], 'enable', 'off');
            set(handles.btn_RxDataSave, 'enable', 'on');
        end
    end
end

%set(handles.btn_APPLY, 'enable', 'off');
set(handles.btn_Plot, 'enable', 'on');
set(handles.btn_ScatterPlot, 'enable', 'on');
set(handles.output, 'Pointer', 'arrow');


% --- Executes on button press in btn_Exit.
function btn_Exit_Callback(hObject, eventdata, handles)
my_closereq(handles);


% --- Executes on button press in btn_Help.
function btn_Help_Callback(hObject, eventdata, handles)
open('UserGuide.pdf');

% ===================================================================
% --- 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.txt_AxisFrom, 'string', num2str(FromVal));
else
    msgbox('''From'' value must less than ''To'' value', ...
        'ERROR', 'ERROR', 'modal');
    set(handles.txt_AxisFrom, 'string', num2str(ToVal));
    set(handles.slider_AxesAdjust_From, 'value', ToVal);
    FromVal = ToVal - 1;
end
AdjustAxis(handles, FromVal, ToVal);

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.txt_AxisTo, 'string', num2str(ToVal));
else
    ToVal = FromVal + 1;
    msgbox('''From'' value must less than ''To'' value', ...
        'ERROR', 'ERROR', 'modal');
    set(handles.txt_AxisTo, '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)
if isequal(get(hObject,'BackgroundColor'), ...
        get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor',[.9 .9 .9]);
end



% =================================================================
% --- Executes on selection change in list_Variable.

% -----------------------------------------------------------------
function list_Variable_Callback(hObject, eventdata, handles)
if strcmp(get(handles.list_Variable, 'string'), '<empty>'),
    return
else
    val = get(handles.list_Variable, 'value');
    if (get(handles.radiobtn_Sim, 'value') && ...
            ~get(handles.chkb_Sim_Tx, 'value') && ...
            get(handles.chkb_Sim_Rx, 'value')) || ...
            (get(handles.radiobtn_Test, 'value') && ...
            get(handles.chkb_Test_Rx, 'value'))
        val = val + 10;
    end
    switch val
        case {4,7,10,13,16}
            set([handles.btn_Plot3, handles.btn_Polar], 'enable', 'on');
        otherwise
            set([handles.btn_Plot3, handles.btn_Polar], 'enable', 'off');
    end
end

function list_Variable_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), ...
        get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% =================================================================
% --- Executes on button press in btn_Plot.

% -----------------------------------------------------------------
function btn_Plot_Callback(hObject, eventdata, handles)
set(handles.output, 'Pointer', 'watch');

src = getappdata(handles.output, 'src');
mod = getappdata(handles.output, 'mod');
rrc = getappdata(handles.output, 'rrc');
data = handles.data;

val = get(handles.list_Variable, 'value');
axes(handles.axes_main);

if (get(handles.radiobtn_Sim, 'value') && ...
        ~get(handles.chkb_Sim_Tx, 'value') && ...
        get(handles.chkb_Sim_Rx, 'value')) || ...
        (get(handles.radiobtn_Test, 'value') && ...
        get(handles.chkb_Test_Rx, 'value'))
    val = val + 10;
end

switch val
    case 1,
        t = [0:src.BitNum/2-1]'/mod.Fd;
        stem(t, data.x, 'r.');
        strTitle = handles.AxesTitle_Plot_SourceSig;
        strxLabel = 'Time (s)';
        stryLabel = 'Amplitude';
        axis([0 max(t) -6 6]);
        maxLen = length(t);
    case 2,
        t = [0:length(data.y)-1]'/(mod.Fd*mod.nSamp);
        plot(t, real(data.y), 'b-');
        strTitle = handles.AxesTitle_Plot_ITxSigMod;
        strxLabel = 'Time (s)';
        stryLabel = 'Amplitude';
        axis([0, max(t), -1.5 1.5])
        maxLen = length(t);
    case 3,
        t = [0:length(data.y)-1]'/(mod.Fd*mod.nSamp);
        plot(t, imag(data.y), 'r-');
        strTitle = handles.AxesTitle_Plot_QTxSigMod;
        strxLabel = 'Time (s)';
        stryLabel = 'Amplitude';
        axis([0, max(t), -1.5 1.5])
        maxLen = length(t);
    case 4,
        t = [0:length(data.y)-1]'/(mod.Fd*mod.nSamp);
        plot(t, unwrap(angle(data.y)), 'c-');
        strTitle = handles.AxesTitle_Plot_IQTxPhaseMod;
        strxLabel = 'Time (s)';
        stryLabel = 'Phase (radian)';
        %axis square;
        %axis([-1.2 1.2 -1.2 1.2])
        maxLen = length(data.y);
    case 5,
        t = [0:length(data.yTx)-1]'/(mod.Fd*mod.nSamp*rrc.OverSamp);
        plot(t, real(data.yTx), 'b-');
        strTitle = handles.AxesTitle_Plot_ITxSigFilter;
        strxLabel = 'Time (s)';
        stryLabel = 'Amplitude';
        axis([0, max(t), -0.6 0.6])
        maxLen = length(t);
    case 6,
        t = [0:length(data.yTx)-1]'/(mod.Fd*mod.nSamp*rrc.OverSamp);
        plot(t, imag(data.yTx), 'r-');
        strTitle = handles.AxesTitle_Plot_QTxSigFilter;
        strxLabel = 'Time (s)';
        stryLabel = 'Amplitude';
        axis([0, max(t), -0.6 0.6])
        maxLen = length(t);
    case 7,
        t = [0:length(data.yTx)-1]'/(mod.Fd*mod.nSamp*rrc.OverSamp);
        plot(t, unwrap(angle(data.yTx)), 'm-');
        strTitle = handles.AxesTitle_Plot_IQTxPhaseFilter;
        strxLabel = 'Time (s)';
        stryLabel = 'Phase (radian)';
        %axis square;
        %axis([-1.2 1.2 -1.2 1.2])
        maxLen = length(data.yTx);
    case 8,
        t = [0:length(data.yNoise)-1]'/(mod.Fd*mod.nSamp*rrc.OverSamp);
        plot(t, real(data.yNoise), 'b-');
        strTitle = handles.AxesTitle_Plot_QTxSigNoise;
        strxLabel = 'Time (s)';
        stryLabel = 'Amplitude';
        %axis([0, max(t), -0.6 0.6])
        maxLen = length(t);
    case 9,
        t = [0:length(data.yNoise)-1]'/(mod.Fd*mod.nSamp*rrc.OverSamp);
        plot(t, imag(data.yNoise), 'r-');
        strTitle = handles.AxesTitle_Plot_QTxSigNoise;
        strxLabel = 'Time (s)';
        stryLabel = 'Amplitude';

⌨️ 快捷键说明

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