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

📄 receivertest.asv

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

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

% ================================================================
% --- Executes on button press in chkb_AWGN.
function chkb_AWGN_Callback(hObject, eventdata, handles)
if get(handles.chkb_AWGN,'value')
    set(handles.edt_AWGN_EbNo,'enable','on');
else
    set(handles.edt_AWGN_EbNo,'enable','off');
end
set(handles.btn_Apply, 'enable', 'on');

% --- Executes on button press in chkb_Fading.
function chkb_Fading_Callback(hObject, eventdata, handles)
if get(handles.chkb_Fading,'value')
    set([handles.edt_Fading_FrqShift, handles.edt_Fading_DelayVec, ...
        handles.edt_Fading_GainVec], 'enable', 'on');
else
    set([handles.edt_Fading_FrqShift, handles.edt_Fading_DelayVec, ...
        handles.edt_Fading_GainVec], 'enable', 'off');
end
set(handles.btn_Apply, 'enable', 'on');

% ====================================================================
function edt_Fading_GainVec_Callback(hObject, eventdata, handles)
value = str2num(get(handles.edt_Fading_GainVec,'string'));
if isempty(value)
    msgbox('Get a invalid number in the ''Gain Vec'' Edit field. Check again!','ERROR','ERROR');
    return
end
set(handles.btn_Apply, 'enable', 'on');

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

% =====================================================================
% --- Executes on button press in btn_LoadParam.
function btn_LoadParam_Callback(hObject, eventdata, handles)
set(handles.txt_Status, 'string', 'Status: Importing Parameters...');
pause(0.01);
path = strcat(handles.CurrentPath, '\Parameters\');
cd(path);
[FileName,PathName,FilterIndx] = ...
    uigetfile({'*.mat','Mat-files(*.mat)';'*.*','All files(*.*)'},'Import Parameters');
if FilterIndx
   load(FileName);
   if exist('param','var')
       SetParam(handles, param);
       set(handles.txt_Status, 'string', 'Status: Importing Parameters... Done');
       pause(0.01)
   else
       set(handles.txt_Status, 'string', ...
           'Status: Importing Parameters... Failed, wrong format parameter');
       pause(0.01);
   end
else
    set(handles.txt_Status, 'string', ...
        'Status: Importing Parameters... Failed, user cancel!');
    pause(0.01);
end
cd(handles.CurrentPath);
set(handles.btn_Apply, 'enable', 'on');

% --- Executes on button press in btn_SaveParam.
function btn_SaveParam_Callback(hObject, eventdata, handles)
set(handles.txt_Status, 'string', 'Status: Saving Parameters...');
pause(0.01)
param = GetParam(handles);
path = strcat(handles.CurrentPath, '\Parameters\');
cd(path);
[FileName,PathName,FilterIndx] = ...
    uiputfile({'*.mat','Mat-files(*.mat)';'*.*','All files(*.*)'},'Save Parameters');
if FilterIndx
    save(FileName, 'param');
    set(handles.txt_Status, 'string', 'Status: Saving Parameters... Done');
    pause(0.01)
else
    set(handles.txt_Status, 'string', ...
        'Status: Saving Parameters... Failed, user cancel!');
    pause(0.01)
end
cd(handles.CurrentPath);

% --- Executes on button press in btn_SaveResult.
function btn_SaveResult_Callback(hObject, eventdata, handles)
set(handles.txt_Status, 'string', 'Status: Saving Result Data...');
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(*.*)'},'Save Result Data');
if FilterIndx
    fid = fopen(FileName, 'w');
    hPro = waitbar(0,'Save Data','Name','Saving Data...');
    pause(0.01);
    interval = fix(y_Len/100);
    for i = 1:100
        fprintf(fid, '%6.5f\t%6.5f\n', Data(:,(i-1)*interval+1:i*interval));
        waitbar(i/100, hPro, ['Percentage:',num2str(i),'% '], hPro);
    end
    fprintf(fid, '%6.5f\t%6.5f\n', Data(:,i*interval+1:y_Len));
    close(hPro);
    fclose(fid);
    set(handles.txt_Status, 'string', 'Status: Saving Result Data... Done');
    pause(0.01);
else
    set(handles.txt_Status, 'string', ...
        'Status: Saving Result Data... Failed, user cancel!');
    pause(0.01)
end
cd(handles.CurrentPath);

% --- Executes on button press in btn_SaveSource.
function btn_SaveSource_Callback(hObject, eventdata, handles)
% hObject    handle to btn_SaveSource (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
set(handles.txt_Status, 'string', 'Status: Saving Source Signal...');
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 Data','Name','Saving Source...');
    pause(0.01);
    interval = fix(Len/100);
    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);
    set(handles.txt_Status, 'string', 'Status: Saving Source Signal... Done');
    pause(0.01);
else
    set(handles.txt_Status, 'string', ...
        'Status: Saving Source Signal... Failed, user cancel!');
    pause(0.01)
end
cd(handles.CurrentPath);

% --- Executes on button press in btn_Apply.
function btn_Apply_Callback(hObject, eventdata, handles)
set(handles.txt_Status, 'string', 'Status: Collecting and Checking Parameters...');
set(handles.output, 'Pointer', 'watch');
pause(0.01);

param = GetParam(handles);

set(handles.txt_Status, 'string', 'Status: Collecting and Checking Parameters... Done');
pause(0.01);
% -------------------------------------------------------------------
% Generate source signal
set(handles.txt_Status, 'string', 'Status: Generating Source Signal...');
pause(0.01);
Data.x = randsrc(param.src.BitNum/2,1,[0:3],param.src.InitSeed);
Data.x = 2*(Data.x+1)-5;
assignin('base', 'x',Data.x);
set(handles.txt_Status, 'string', 'Status: Generating Source Signal... Done');
pause(0.01)

% modulation using CP4FSK method
set(handles.txt_Status, 'string', 'Status: Modulating signal using CP4FSK...');
pause(0.01);
Data.y = cpfskmod_new(Data.x,4,param.mod.Index,param.mod.nSamp,param.mod.Fd);
assignin('base', 'y', Data.y);
set(handles.txt_Status, 'string', 'Status: Modulating signal using CP4FSK... Done');
pause(0.01);

set(handles.txt_Status, 'string', 'Status: Filtering data using RRC filter...');
pause(0.01);
% filter designed
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);

set(handles.txt_Status, 'string', 'Status: Filtering data using RRC filter... Done');
pause(0.01);

% adding noise
set(handles.txt_Status, 'string', 'Status: Adding noise and fading...');
pause(0.01);

if get(handles.chkb_AWGN, 'value')
    Data.yNoise = awgn(Data.yTx,param.awgn.EbNo,'measured',12345,'db');
else
    Data.yNoise = Data.yTx;
end

if get(handles.chkb_Fading, 'value')
    chan = rayleighchan(param.fading.Td, param.fading.FrqShift, ...
        param.fading.DelayVec, param.fading.GainVec);
    Data.yFading = filter(chan, Data.yNoise);
else
    Data.yFading = Data.yNoise;
end
set(handles.txt_Status, 'string', 'Status: Ading noise and fading... Done');
pause(0.01);

%assignin('base', 'yFading', Data.yFading);
%set(handles.txt_Status, 'string', 'Status: Filtering received data...');
%pause(0.01);
% received filter
%yRx = filter(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);

% demodulation, using cp4fsk demod function
%set(handles.txt_Status, 'string', 'Status: Demodulation... ');
%pause(0.01);
%Data.z = cpfskdemod_new(Data.yDown,4,param.mod.Index,param.mod.nSamp,param.mod.Fd);
%set(handles.txt_Status, 'string', 'Status: Demodulation... Done');
%pause(0.01);
%assignin('base', 'z',Data.z);

% Starting plot.
set(handles.txt_Status, 'string', 'Status: Starting plot... ');
pause(0.01)
axes(handles.axes_Src);
stem(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');

axes(handles.axes_RRC);
plot(rrcfltcoef,'r.');
set(handles.axes_RRC, 'xLim', [0 param.rrc.Order]);
set(handles.axes_RRC, 'XGrid','on');
set(handles.axes_RRC, 'YGrid','on');
set(handles.axes_RRC,'XMinorTick','on');
set(handles.axes_RRC,'YMinorTick','on');
title('Square Root Raised Cosine Filter-Impluse Response');
xlabel('Sample');ylabel('Amplitude');

set(handles.txt_Status, 'string', 'Status: Starting plot... Done');
pause(0.01)

handles.param = param;
handles.data = Data;
guidata(handles.output,handles);

⌨️ 快捷键说明

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