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

📄 receivertest.asv

📁 一个仿真测试4FSK信号的matlab环境GUI程序。可以查看基带IQ波形、眼图、星座图。并可以仿真高斯白噪声、瑞利衰减对信号的影响。
💻 ASV
📖 第 1 页 / 共 3 页
字号:
set([handles.btn_Constellation handles.btn_Filtered ... 
    handles.btn_Noise handles.btn_NoiseFading ...
    handles.btn_SaveResult handles.btn_SaveSource ... 
    handles.rdbtn_SourceSignal handles.rdbtn_IQphase ...
    handles.rdbtn_IQphase_Filtered handles.rdbtn_IQphase_Noise ...
    handles.rdbtn_IQphase_NoiseFade], 'enable', 'on');
set(handles.rdbtn_SourceSignal, 'value', 1);
set([handles.rdbtn_IQphase, handles.rdbtn_IQphase_Filtered, ...
    handles.rdbtn_IQphase_Noise, handles.rdbtn_IQphase_NoiseFade], ...
    'value', 0)

set(handles.btn_Apply, 'enable', 'off');
set(handles.txt_Status, 'string', 'Status: Completed.');
set(handles.output, 'Pointer', 'arrow');


% --- Executes on button press in btn_About.
function btn_About_Callback(hObject, eventdata, handles)
About;

% --- Executes on button press in btn_Help.
function btn_Help_Callback(hObject, eventdata, handles)



% --- Executes on button press in btn_Exit.
function btn_Exit_Callback(hObject, eventdata, handles)
btnPress = questdlg('Really to QUIT the simulation system?', ...
    'QUIT', 'OK', 'Cancel', 'Cancel');
if strcmp(btnPress, 'OK')
    close;
end

% --- Executes on button press in btn_Constellation.
function btn_Constellation_Callback(hObject, eventdata, handles)
% hObject    handle to btn_Constellation (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
h1 = scatterplot(handles.data.y,handles.param.mod.nSamp,0,'mx');
title('Modulation Signal(Baseband)');
set(h1,'position',[400,300,300,250]);
set(h1, 'NumberTitle', 'off');
set(h1, 'Name', 'Modulation Signal(Befor filter)');
set(h1, 'MenuBar', 'none');
set(h1, 'color', 'white')

% --- Executes on button press in btn_Filtered.
function btn_Filtered_Callback(hObject, eventdata, handles)
% hObject    handle to btn_Filtered (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
h2 = scatterplot(handles.data.yTx, ...
    handles.param.rrc.OverSamp*handles.param.mod.nSamp, 0, 'mx');
title('Modulation Signal--After filter');
set(h2,'position',[400,300,300,250]);
set(h2, 'NumberTitle', 'off');
set(h2, 'Name', 'Modulation Signal(After filter)');
set(h2, 'MenuBar', 'none');
set(h2, 'color', 'white')

% --- Executes on button press in btn_Noise.
function btn_Noise_Callback(hObject, eventdata, handles)
% hObject    handle to btn_Noise (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
h3 = scatterplot(handles.data.yNoise, ...
    handles.param.mod.nSamp*handles.param.rrc.OverSamp,0,'mx');
title('After White Gauss Noise');
set(h3,'position',[400,300,300,250]);
set(h3, 'NumberTitle', 'off');
set(h3, 'Name', 'Signal After Noise');
set(h3, 'Menubar', 'none')
set(h3, 'color', 'white')

% --- Executes on button press in btn_NoiseFading.
function btn_NoiseFading_Callback(hObject, eventdata, handles)
% hObject    handle to btn_NoiseFading (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
h4 = scatterplot(handles.data.yFading, ...
    handles.param.mod.nSamp*handles.param.rrc.OverSamp,0,'mx');
title('After Noise and Fading');
set(h4,'position',[400,300,300,250]);
set(h4, 'NumberTitle', 'off');
set(h4, 'Name', 'Signal After Noise');
set(h4, 'Menubar', 'none')
set(h4, 'color', 'white')

% ==================================================================
% collecting parameters 
function param = GetParam(handles)
param.src.BitNum = str2num(get(handles.edt_Src_BitNum, 'string'));
param.src.InitSeed = str2num(get(handles.edt_Src_InitSeed, 'string'));

param.mod.Fd = str2num(get(handles.edt_Mod_Fd, 'string'));
%param.mod.FrqDev = str2num(get(handles.edt_Mod_FrqDev, '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);

if get(handles.chkb_AWGN,'value')
    param.awgn.EbNo = str2num(get(handles.edt_AWGN_EbNo, 'string'));
else
    param.awgn.EbNo = [];
end

if get(handles.chkb_Fading, 'value')
    param.fading.Td = 1/(4800*param.mod.nSamp*param.rrc.OverSamp);
    param.fading.FrqShift = str2num(get(handles.edt_Fading_FrqShift, 'string'));
    param.fading.DelayVec = str2num(get(handles.edt_Fading_DelayVec, 'string'));
    param.fading.GainVec = str2num(get(handles.edt_Fading_GainVec, 'string'));
else
    param.fading.Td = [];
    param.fading.FrqShift = [];
    param.fading.DelayVec = [];
    param.fading.GainVec = [];
end

% ==================================================================
% Setting parameters
function SetParam(handles,param)
set(handles.edt_Src_BitNum, 'string', num2str(param.src.BitNum));
set(handles.edt_Src_InitSeed, 'string', num2str(param.src.InitSeed));

set(handles.edt_Mod_Fd, 'string', num2str(param.mod.Fd));
set(handles.edt_Mod_Index, 'string', num2str(param.mod.Index));
set(handles.edt_Mod_nSamp, 'string', num2str(param.mod.nSamp));

set(handles.edt_RRC_OverSamp, 'string', num2str(param.rrc.OverSamp));
set(handles.edt_RRC_RollOff, 'string', num2str(param.rrc.RollOff));
set(handles.edt_RRC_Order, 'string', num2str(param.rrc.Order));

if ~isempty(param.awgn.EbNo)
    set(handles.chkb_AWGN, 'value', 1);
    set(handles.edt_AWGN_EbNo, 'enable', 'on');
    set(handles.edt_AWGN_EbNo, 'string', num2str(param.awgn.EbNo));
else
    set(handles.chkb_AWGN, 'value', 0);
    set(handles.edt_AWGN_EbNo, 'enable', 'off');
end

if ~isempty(param.fading.FrqShift)
    set(handles.chkb_Fading, 'value', 1);
    %set(handles.edt_Fading_Td, 'enable', 'on');
    set(handles.edt_Fading_FrqShift, 'enable', 'on');
    set(handles.edt_Fading_DelayVec, 'enable', 'on');
    set(handles.edt_Fading_GainVec, 'enable', 'on');
    %set(handles.edt_Fading_Td, 'string', num2str(param.fading.Td));
    set(handles.edt_Fading_FrqShift, 'string', num2str(param.fading.FrqShift));
    set(handles.edt_Fading_DelayVec, 'string', num2str(param.fading.DelayVec));
    set(handles.edt_Fading_GainVec, 'string', num2str(param.fading.GainVec));
else
    set(handles.chkb_Fading, 'value', 0);
    %set(handles.edt_Fading_Td, 'enable', 'off');
    set(handles.edt_Fading_FrqShift, 'enable', 'off');
    set(handles.edt_Fading_DelayVec, 'enable', 'off');
    set(handles.edt_Fading_GainVec, 'enable', 'off');
end




% --- Executes on button press in rdbtn_SourceSignal.
function rdbtn_SourceSignal_Callback(hObject, eventdata, handles)
set(handles.txt_Status, 'string', 'Status: Plotting Source Signal...')
pause(0.01)
set(handles.rdbtn_SourceSignal, 'value', 1)
set([handles.rdbtn_IQphase, handles.rdbtn_IQphase_Filtered, ...
    handles.rdbtn_IQphase_Noise, handles.rdbtn_IQphase_NoiseFade], ...
    'value', 0)
axes(handles.axes_Src);
stem(handles.data.x,'ro-');
axis([0 50 -4 4]);
set(handles.axes_Src,'XGrid','on');
set(handles.axes_Src,'YGrid','on');
set(handles.axes_Src,'XMinorTick','on');
set(handles.axes_Src,'YMinorTick','on');
title('Source Signal');xlabel('Number');ylabel('Amplitude');

set(handles.txt_Status, 'string', 'Status: Plotting Source Signal... Done!')

% --- Executes on button press in rdbtn_IQphase.
function rdbtn_IQphase_Callback(hObject, eventdata, handles)
set(handles.txt_Status, 'string', 'Status: Plotting I/Q Phase Baseband...')
pause(0.01)
set(handles.rdbtn_IQphase, 'value', 1)
set([handles.rdbtn_SourceSignal, handles.rdbtn_IQphase_Filtered, ...
    handles.rdbtn_IQphase_Noise, handles.rdbtn_IQphase_NoiseFade], ...
    'value', 0)
axes(handles.axes_Src);
plot(unwrap(angle(handles.data.y)),'g-');
%axis([0 50 -4 4]);
set(handles.axes_Src,'XGrid','on');
set(handles.axes_Src,'YGrid','on');
set(handles.axes_Src,'XMinorTick','on');
set(handles.axes_Src,'YMinorTick','on');
title('I/Q phase baseband');xlabel('Number');ylabel('phase (radian)');
set(handles.txt_Status, 'string', 'Status: Plotting I/Q Phase Baseband... Done!')

% --- Executes on button press in rdbtn_IQphase_Filtered.
function rdbtn_IQphase_Filtered_Callback(hObject, eventdata, handles)
set(handles.txt_Status, 'string', 'Status: Plotting I/Q Phase Baseband(After Filter)...')
pause(0.01)
set(handles.rdbtn_IQphase_Filtered, 'value', 1)
set([handles.rdbtn_SourceSignal, handles.rdbtn_IQphase, ...
    handles.rdbtn_IQphase_Noise, handles.rdbtn_IQphase_NoiseFade], ...
    'value', 0)
plot(unwrap(angle(handles.data.yTx)),'c-');
%axis([0 50 -4 4]);
set(handles.axes_Src,'XGrid','on');
set(handles.axes_Src,'YGrid','on');
set(handles.axes_Src,'XMinorTick','on');
set(handles.axes_Src,'YMinorTick','on');
title('I/Q phase baseband (Filtered)');
xlabel('Number');ylabel('phase (radian)');
set(handles.txt_Status, 'string', ...
    'Status: Plotting I/Q Phase Baseband(After Filter)... Done!')

% --- Executes on button press in rdbtn_IQphase_Noise.
function rdbtn_IQphase_Noise_Callback(hObject, eventdata, handles)
set(handles.txt_Status, 'string', 'Status: Plotting I/Q Phase Baseband(After AWGN)...')
pause(0.01)
set(handles.rdbtn_IQphase_Noise, 'value', 1)
set([handles.rdbtn_SourceSignal, handles.rdbtn_IQphase_Filtered, ...
    handles.rdbtn_IQphase, handles.rdbtn_IQphase_NoiseFade], ...
    'value', 0)
plot(unwrap(angle(handles.data.yNoise)),'m-');
%axis([0 50 -4 4]);
set(handles.axes_Src,'XGrid','on');
set(handles.axes_Src,'YGrid','on');
set(handles.axes_Src,'XMinorTick','on');
set(handles.axes_Src,'YMinorTick','on');
title('I/Q phase baseband (after AWGN)');
xlabel('Number');ylabel('phase (radian)');
set(handles.txt_Status, 'string', ...
    'Status: Plotting I/Q Phase Baseband(After AWGN)... Done!')

% --- Executes on button press in rdbtn_IQphase_NoiseFade.
function rdbtn_IQphase_NoiseFade_Callback(hObject, eventdata, handles)
set(handles.txt_Status, 'string', 'Status: Plotting I/Q Phase (After AWGN & Fading)...')
pause(0.01)
set(handles.rdbtn_IQphase_NoiseFade, 'value', 1)
set([handles.rdbtn_SourceSignal, handles.rdbtn_IQphase_Filtered, ...
    handles.rdbtn_IQphase_Noise, handles.rdbtn_IQphase], ...
    'value', 0)
plot(unwrap(angle(handles.data.yFading)),'b-');
%axis([0 50 -4 4]);
set(handles.axes_Src,'XGrid','on');
set(handles.axes_Src,'YGrid','on');
set(handles.axes_Src,'XMinorTick','on');
set(handles.axes_Src,'YMinorTick','on');
title('I/Q phase baseband (Noise&Fade)');
xlabel('Number');ylabel('phase (radian)');
set(handles.txt_Status, 'string', ...
    'Status: Plotting I/Q Phase (After AWGN & Fading)... Done!')

% =========================================================================
function slider1_Callback(hObject, eventdata, handles)
function slider1_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor',[.9 .9 .9]);
end


⌨️ 快捷键说明

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