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

📄 dsimsoft_export.m

📁 一个仿真测试4FSK信号的matlab环境GUI程序。可以查看基带IQ波形、眼图、星座图。并可以仿真高斯白噪声、瑞利衰减对信号的影响。
💻 M
📖 第 1 页 / 共 5 页
字号:
                        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 + -