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

📄 dsimsoft_export.m

📁 一个仿真测试4FSK信号的matlab环境GUI程序。可以查看基带IQ波形、眼图、星座图。并可以仿真高斯白噪声、瑞利衰减对信号的影响。
💻 M
📖 第 1 页 / 共 5 页
字号:
        %axis([0, max(t), -0.6 0.6])
        maxLen = length(t);
    case 10,
        t = [0:length(data.yNoise)-1]'/(mod.Fd*mod.nSamp*rrc.OverSamp);
        plot(t, unwrap(angle(data.yNoise)), 'g-');
        strTitle = handles.AxesTitle_Plot_IQTxPhaseNoise;
        strxLabel = 'Time (s)';
        stryLabel = 'Phase (radian)';
        %axis square;
        maxLen = length(data.yNoise);
    case 11,
        t = [0:length(data.yFading)-1]'/(mod.Fd*mod.nSamp*rrc.OverSamp);
        plot(t, real(data.yFading), 'b-');
        strTitle = handles.AxesTitle_Plot_ITxSigFade;
        strxLabel = 'Time (s)';
        stryLabel = 'Amplitude';
        %axis([0, max(t), -0.6 0.6])
        maxLen = length(t);
    case 12,
        t = [0:length(data.yFading)-1]'/(mod.Fd*mod.nSamp*rrc.OverSamp);
        plot(t, imag(data.yFading), 'r-');
        strTitle = handles.AxesTitle_Plot_QTxSigFade;
        strxLabel = 'Time (s)';
        stryLabel = 'Amplitude';
        %axis([0, max(t), -0.6 0.6])
        maxLen = length(t);
    case 13,
        t = [0:length(data.yFading)-1]'/(mod.Fd*mod.nSamp*rrc.OverSamp);
        plot(t, unwrap(angle(data.yFading)), 'y-');
        strTitle = handles.AxesTitle_Plot_IQTxPhaseFade;
        strxLabel = 'In-Phase Signal';
        stryLabel = 'Quadrature-Phase Signal';
        %axis square;
        maxLen = length(data.yFading);
    case 14,
        t = [0:length(data.yDown)-1]'/(mod.Fd*mod.nSamp);
        plot(t, real(data.yDown), 'b-');
        strTitle = handles.AxesTitle_Plot_IRxSigFilter;
        strxLabel = 'Time (s)';
        stryLabel = 'Amplitude';
        %axis([0, max(t), -1.5 1.5])
        maxLen = length(t);
    case 15,
        t = [0:length(data.yDown)-1]'/(mod.Fd*mod.nSamp);
        plot(t, imag(data.yDown), 'r-');
        strTitle = handles.AxesTitle_Plot_QRxSigFilter;
        strxLabel = 'Time (s)';
        stryLabel = 'Amplitude';
        %axis([0, max(t), -1.5 1.5])
        maxLen = length(t);
    case 16,
        t = [0:length(data.yDown)-1]'/(mod.Fd*mod.nSamp);
        plot(t, unwrap(angle(data.yDown)), 'c-');
        strTitle = handles.AxesTitle_Plot_IQRxPhaseFilter;
        strxLabel = 'In-Phase Signal';
        stryLabel = 'Quadrature-Phase Signal';
        %axis square;
        maxLen = length(data.yDown);
    case 17,
        t = [0:length(data.z)-1]'/mod.Fd;
        stem(t, data.z, 'r.');
        strTitle = handles.AxesTitle_Plot_DemodSig;
        strxLabel = 'Time (s)';
        stryLabel = 'Amplitude';
        axis([0 max(t) -6 6]);
        maxLen = length(t);
    otherwise
        return
end

SetSlider(handles, maxLen);
SetAxes(handles, strTitle, strxLabel, stryLabel);
set(handles.output, 'Pointer', 'arrow');

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

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

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

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

axes(handles.axes_main);

switch val
    case 4,
        t = [0:length(handles.data.y)-1]'/(mod.Fd*mod.nSamp);
        plot3(real(handles.data.y), imag(handles.data.y), t, 'g-');
        strTitle = handles.AxesTitle_Plot3_IQTxPhaseMod;
        strxLabel = 'Real part';
        stryLabel = 'Image part';
        strzLabel = 'Time (s)';
    case 7,
        t = [0:length(handles.data.yTx)-1]'/(mod.Fd*mod.nSamp*rrc.OverSamp);
        plot3(real(handles.data.yTx), imag(handles.data.yTx), t, 'm-');
        strTitle = handles.AxesTitle_Plot3_IQTxPhaseFilter;
    case 10,
        t = [0:length(handles.data.yNoise)-1]'/...
            (mod.Fd*mod.nSamp*rrc.OverSamp);
        plot3(real(handles.data.yNoise), imag(handles.data.yNoise), t, 'c-');
        strTitle = handles.AxesTitle_Plot3_IQTxPhaseNoise;
    case 13,
        t = [0:length(handles.data.yFading)-1]'/...
            (mod.Fd*mod.nSamp*rrc.OverSamp);
        plot3(real(handles.data.yFading), imag(handles.data.yFading), t, 'y-');
        strTitle = handles.AxesTitle_Plot3_IQTxPhaseFade;
    case 16,
        t = [0:length(handles.data.yDown)-1]'/(mod.Fd*mod.nSamp);
        plot3(real(handles.data.yDown), imag(handles.data.yDown), t, 'g-');
        strTitle = handles.AxesTitle_Plot3_IQRxPhaseFilter;
    otherwise
        
end

strxLabel = 'Real part';
stryLabel = 'Image part';
strzLabel = 'Time (s)';
SetAxes(handles, strTitle, strxLabel, stryLabel, strzLabel);
SetSlider(handles, length(t));
set(handles.output, 'pointer', 'arrow');

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

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

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

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

axes(handles.axes_main);

switch val
    case 4,
        polar(unwrap(angle(handles.data.y)), ...
            abs(handles.data.y), 'g-');
        strTitle = handles.AxesTitle_Polar_IQTxPhaseMod;
        maxLen = length(handles.data.y);
    case 7,
        polar(unwrap(angle(handles.data.yTx)), ...
            abs(handles.data.yTx), 'm-');
        strTitle = handles.AxesTitle_Polar_IQTxPhaseFilter;
        maxLen = length(handles.data.yTx);
    case 10,
        polar(unwrap(angle(handles.data.yNoise)), ...
            abs(handles.data.yNoise), 'c-');
        strTitle = handles.AxesTitle_Polar_IQTxPhaseNoise;
        maxLen = length(handles.data.yNoise);
    case 13,
        polar(unwrap(angle(handles.data.yFading)), ...
            abs(handles.data.yFading), 'y-');
        strTitle = handles.AxesTitle_Polar_IQTxPhaseFade;
        maxLen = length(handles.data.yFading);
    case 16,
        polar(unwrap(angle(handles.data.yDown)), ...
            abs(handles.data.yDown), 'g-');
        strTitle = handles.AxesTitle_Polar_IQRxPhaseFilter;
        maxLen = length(handles.data.yDown);
    otherwise
        
end

strxLabel = 'Angle (radian)';
stryLabel = 'Radius';
SetAxes(handles, strTitle, strxLabel, stryLabel);
SetSlider(handles, maxLen);
set(handles.output, 'pointer', 'arrow');


% --- Executes on button press in btn_ScatterPlot.
function btn_ScatterPlot_Callback(hObject, eventdata, handles)
index = get(handles.popup_Scatter, 'value');
str = get(handles.popup_Scatter, 'string');

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

switch str{index}
    case 'Modulated SIG (Tx)',
        data = handles.data.y;
        N = mod.nSamp;
        strTitle = 'Scatter Plot: Modulated SIG (Tx)';
    case 'After RRC Filter (Tx)',
        data = handles.data.yTx;
        N = mod.nSamp*rrc.OverSamp;
        strTitle = 'Scatter Plot: After RRC Filter (Tx)';
    case 'Gauss White Noise (Tx)',
        data = handles.data.yNoise;
        N = mod.nSamp*rrc.OverSamp;
        strTitle = 'Scatter Plot: Gauss White Noise (Tx)';
    case 'After Rayleigh Fading (Tx)',
        data = handles.data.yFading;
        N = mod.nSamp*rrc.OverSamp;
        strTitle = 'Scatter Plot: After Rayleigh Fading (Tx)';
    case 'Received filter (Rx)',
        data = handles.data.yDown;
        N = mod.nSamp;
        strTitle = 'Scatter Plot: Received filter (Rx)';
    otherwise
        return
end

if get(handles.chkb_NewFigure, 'value')
    h = [];
else
    h = getappdata(handles.output, 'hSctt');
    if ~ishandle(h)
        h = [];
    end
end
hSctt = scatterplot(data, N, 0, 'g.', h);
ss = get(0, 'ScreenSize');
set(hSctt, 'Name', strTitle, 'NumberTitle', 'off', ...
    'position', [1/3*ss(3), 1/3*ss(4), 1/3*ss(3), 2/5*ss(4)], ...
    'color', 'white');
title(strTitle);
setappdata(handles.output, 'hSctt', hSctt);

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



% --- Executes on selection change in popup_Scatter.
function popup_Scatter_Callback(hObject, eventdata, handles)



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


% =================================================================
%  sub function  SetAxes

% -----------------------------------------------------------------
function SetAxes(handles, strtitle, strxlabel, strylabel, strzlabel)
if nargin<5
    strzlabel = [];
end
set(handles.axes_main, 'XGrid', 'on');
set(handles.axes_main, 'YGrid', 'on');
set(handles.axes_main, 'XMinorTick', 'on');
set(handles.axes_main, 'YMinorTick', 'on');
title(strtitle);
xlabel(strxlabel);
ylabel(strylabel);
if ~isempty(strzlabel)
    set(handles.axes_main, 'ZGrid', 'on');
    set(handles.axes_main, 'ZMinorTick', 'on');
    zlabel(strzlabel);
end



% ================================================================
function SetSlider(handles,maxLen)
set([handles.slider_AxesAdjust_From, ...
    handles.slider_AxesAdjust_To], 'max', maxLen);
set([handles.slider_AxesAdjust_From, ...
    handles.slider_AxesAdjust_To], 'min', 0);
set(handles.slider_AxesAdjust_From, 'value', 1);
set(handles.slider_AxesAdjust_To, 'value', maxLen);
set(handles.txt_AxisFrom, 'string', num2str(1));
set(handles.txt_AxisTo, 'string', num2str(maxLen));
set([handles.slider_AxesAdjust_From, handles.slider_AxesAdjust_To], ...
    'SliderStep', [8/maxLen,80/maxLen])


% =================================================================
% ---   Sub Function, Adjust axis

% =================================================================
function AdjustAxis(handles, FromVal, ToVal)
mod = getappdata(handles.output, 'mod');
rrc = getappdata(handles.output, 'rrc');

strTitle = get(get(handles.axes_main, 'Title'), 'string');

axes(handles.axes_main);

switch strTitle
    case {handles.AxesTitle_Plot_ITxSigFilter, ...
            handles.AxesTitle_Plot_QTxSigFilter, ...
            handles.AxesTitle_Plot_ITxSigNoise, ...
            handles.AxesTitle_Plot_QTxSigNoise, ...
            handles.AxesTitle_Plot_ITxSigFade, ...
            handles.AxesTitle_Plot_QTxSigFade, ...
            handles.AxesTitle_Plot_IQTxPhaseFilter, ...
            handles.AxesTitle_Plot_IQTxPhaseNoise, ...
            handles.AxesTitle_Plot_IQTxPhaseFade}
        Ts = 1/(mod.Fd*mod.nSamp*rrc.OverSamp);
        
    case {handles.AxesTitle_Plot_ITxSigMod, ...
            handles.AxesTitle_Plot_QTxSigMod, ...
            handles.AxesTitle_Plot_IRxSigFilter, ...
            handles.AxesTitle_Plot_QRxSigFilter, ...
            handles.AxesTitle_Plot_IQTxPhaseMod, ...
            handles.AxesTitle_Plot_IQRxPhaseFilter}
        Ts = 1/(mod.Fd*mod.nSamp);
        
    case {handles.AxesTitle_Plot_SourceSig, ...
            handles.AxesTitle_Plot_DemodSig}
        Ts = 1/mod.Fd;
        
    %case {handles.AxesTitle_Plot_IQTxPhaseMod, ...
    %        handles.AxesTitle_Plot_IQTxPhaseFilter, ...
    %        handles.AxesTitle_Plot_IQTxPhaseNoise, ...
    %        handles.AxesTitle_Plot_IQTxPhaseFade, ...
    %        handles.AxesTitle_Plot_IQRxPhaseFilter},
    %    if strcmp(strTitle, handles.AxesTitle_Plot_IQTxPhaseMod)
    %        data = handles.data.y;
    %        color = 'c-';
    %    end
    %    if strcmp(strTitle, handles.AxesTitle_Plot_IQTxPhaseFilter),
    %        data = handles.data.yTx;
    %        color = 'm-';
    %    end
    %    if strcmp(strTitle, handles.AxesTitle_Plot_IQTxPhaseNoise),
    %        data = handles.data.yNoise;
    %        color = 'g-';
    %    end
    %    if strcmp(strTitle, handles.AxesTitle_Plot_IQTxPhaseFade),
    %        data = handles.data.yFading;
    %        color = 'y-';
    %    end
    %    if strcmp(strTitle, handles.AxesTitle_Plot_IQRxPhaseFilter),
    %        data = handles.data.yDown;
    %        color = 'c-';
    %    end

⌨️ 快捷键说明

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