Archived
Initial commit
This commit is contained in:
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
IO_select = 0;
|
||||||
|
Choice_1=Simulink.Variant('IO_select==0');
|
||||||
|
Choice_2=Simulink.Variant('IO_select==1');
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,73 @@
|
|||||||
|
function commbluetoothvoice_cb
|
||||||
|
%COMMBLUETOOTHVOICE_CB Sets up the Model Mask Parameters in the
|
||||||
|
% Bluetooth Voice Transmission example (commbluetoothvoice.slx) and saves
|
||||||
|
% it to the workspace
|
||||||
|
|
||||||
|
% Copyright 1996-2011 The MathWorks, Inc.
|
||||||
|
|
||||||
|
% Retrieves user information and assigns packet type
|
||||||
|
systemParams = [bdroot(gcb) '/Model Parameters'];
|
||||||
|
h=get_param(systemParams,'MaskValues');
|
||||||
|
if(h{1,1}=='HV1')
|
||||||
|
set_param(systemParams,'MaskVisibilities',{'on','off','off'});
|
||||||
|
HV_Type=1;
|
||||||
|
assignin('base','HV_Type',1);
|
||||||
|
assignin('base','Slot_Pair',1);
|
||||||
|
elseif(h{1,1}=='HV2')
|
||||||
|
HV_Type=2;
|
||||||
|
assignin('base','HV_Type',2);
|
||||||
|
set_param(systemParams,'MaskVisibilities',{'on','on','off'});
|
||||||
|
if(h{2,1}== '1&2')
|
||||||
|
Slot_Pair=1;
|
||||||
|
assignin('base','Slot_Pair',1);
|
||||||
|
else
|
||||||
|
Slot_Pair=2;
|
||||||
|
assignin('base','Slot_Pair',2);
|
||||||
|
end
|
||||||
|
|
||||||
|
else
|
||||||
|
set_param(systemParams,'MaskVisibilities',{'on','off','on'});
|
||||||
|
HV_Type=3;
|
||||||
|
assignin('base','HV_Type',3)
|
||||||
|
if(h{3,1}=='1&2')
|
||||||
|
Slot_Pair=1;
|
||||||
|
assignin('base','Slot_Pair',1);
|
||||||
|
elseif(h{3,1}=='3&4')
|
||||||
|
Slot_Pair=2;
|
||||||
|
assignin('base','Slot_Pair',2);
|
||||||
|
else
|
||||||
|
Slot_Pair=3;
|
||||||
|
assignin('base','Slot_Pair',3);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
% Define Slot_Ts and other variables depending on packet type
|
||||||
|
Slot_Ts=(1/1600);
|
||||||
|
assignin('base','Slot_Ts', (1/1600));
|
||||||
|
switch HV_Type
|
||||||
|
case 1
|
||||||
|
assignin('base','Tx_Ts',Slot_Ts*2);
|
||||||
|
assignin('base','Num_Slots_Rate',2);
|
||||||
|
assignin('base','Num_Payload_Bits',80);
|
||||||
|
assignin('base','Slot_Enable_Phase',0); % Slot Pair
|
||||||
|
case 2
|
||||||
|
assignin('base','Tx_Ts',Slot_Ts*4);
|
||||||
|
assignin('base','Num_Slots_Rate',4);
|
||||||
|
assignin('base','Num_Payload_Bits',160);
|
||||||
|
if Slot_Pair == 3
|
||||||
|
error(message('comm:commbluetoothvoice_cb:InvalidSlot'));
|
||||||
|
end;
|
||||||
|
assignin('base','Slot_Enable_Phase',Slot_Pair*2-2); % Slot Pair
|
||||||
|
case 3
|
||||||
|
assignin('base','Tx_Ts',Slot_Ts*6);
|
||||||
|
assignin('base','Num_Slots_Rate',6);
|
||||||
|
assignin('base','Num_Payload_Bits',240);
|
||||||
|
assignin('base','Slot_Enable_Phase',Slot_Pair*2-2); % Slot Pair
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
%COMMBLUETOOTHVOICE_INIT Initializes variables for Bluetooth Voice Transmission
|
||||||
|
% example (commbluetoothvoice.slx)
|
||||||
|
|
||||||
|
% Copyright 1996-2012 The MathWorks, Inc.
|
||||||
|
|
||||||
|
% Set input wave sample rate to be 8kHz
|
||||||
|
Input_Fs=8000;
|
||||||
|
sigin = audioread('commbluetoothvoice_input.wav');
|
||||||
|
|
||||||
|
% Coefficients for speech interpolation
|
||||||
|
[y,interp_coeffs]=interp(ones(1,10),8);
|
||||||
|
|
||||||
|
% Header Information
|
||||||
|
% Header_Info=[Slave_Address;Packet_Type;Flow_Control;ARQ;Sequence];
|
||||||
|
Slave_Address= [1 0 1]';
|
||||||
|
Packet_Type= [1 0 1 0]';
|
||||||
|
Flow_Control= [1];
|
||||||
|
ARQ=[1];
|
||||||
|
Sequence=[1];
|
||||||
|
Access_Code=zeros(72,1); Access_Code(1:2:72)=1;
|
||||||
|
|
||||||
|
% Initialize 1,0,1,0, sequence
|
||||||
|
One_Zero_Payload=zeros(240,1);
|
||||||
|
One_Zero_Payload(1:2:240)=1;
|
||||||
|
|
||||||
|
% Set Seeds
|
||||||
|
hop_seed=randseed(1);
|
||||||
|
awgn_channel_seed=randseed(2);
|
||||||
|
awgn_802_seed=randseed(3);
|
||||||
|
rate_802_seed=randseed(4);
|
||||||
|
data_seed=randseed(5);
|
||||||
|
|
||||||
|
% Hop frequency if fixed
|
||||||
|
fixed_hop_freq=20;
|
||||||
|
|
||||||
|
% Assign payload bits
|
||||||
|
Num_Payload_Bits=80;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,24 @@
|
|||||||
|
Copyright (c) 2015, Juan Pinzon
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in
|
||||||
|
the documentation and/or other materials provided with the distribution
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
Binary file not shown.
@@ -0,0 +1,148 @@
|
|||||||
|
function varargout = pruebasonido(varargin)
|
||||||
|
% PRUEBASONIDO MATLAB code for pruebasonido.fig
|
||||||
|
% PRUEBASONIDO, by itself, creates a new PRUEBASONIDO or raises the existing
|
||||||
|
% singleton*.
|
||||||
|
%
|
||||||
|
% H = PRUEBASONIDO returns the handle to a new PRUEBASONIDO or the handle to
|
||||||
|
% the existing singleton*.
|
||||||
|
%
|
||||||
|
% PRUEBASONIDO('CALLBACK',hObject,eventData,handles,...) calls the local
|
||||||
|
% function named CALLBACK in PRUEBASONIDO.M with the given input arguments.
|
||||||
|
%
|
||||||
|
% PRUEBASONIDO('Property','Value',...) creates a new PRUEBASONIDO or raises the
|
||||||
|
% existing singleton*. Starting from the left, property value pairs are
|
||||||
|
% applied to the GUI before pruebasonido_OpeningFcn gets called. An
|
||||||
|
% unrecognized property name or invalid value makes property application
|
||||||
|
% stop. All inputs are passed to pruebasonido_OpeningFcn via varargin.
|
||||||
|
%
|
||||||
|
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
|
||||||
|
% instance to run (singleton)".
|
||||||
|
%
|
||||||
|
% See also: GUIDE, GUIDATA, GUIHANDLES
|
||||||
|
|
||||||
|
% Edit the above text to modify the response to help pruebasonido
|
||||||
|
|
||||||
|
% Last Modified by GUIDE v2.5 11-Sep-2020 17:26:52
|
||||||
|
|
||||||
|
% Begin initialization code - DO NOT EDIT
|
||||||
|
gui_Singleton = 1;
|
||||||
|
gui_State = struct('gui_Name', mfilename, ...
|
||||||
|
'gui_Singleton', gui_Singleton, ...
|
||||||
|
'gui_OpeningFcn', @pruebasonido_OpeningFcn, ...
|
||||||
|
'gui_OutputFcn', @pruebasonido_OutputFcn, ...
|
||||||
|
'gui_LayoutFcn', [] , ...
|
||||||
|
'gui_Callback', []);
|
||||||
|
if nargin && ischar(varargin{1})
|
||||||
|
gui_State.gui_Callback = str2func(varargin{1});
|
||||||
|
end
|
||||||
|
|
||||||
|
if nargout
|
||||||
|
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
|
||||||
|
else
|
||||||
|
gui_mainfcn(gui_State, varargin{:});
|
||||||
|
end
|
||||||
|
% End initialization code - DO NOT EDIT
|
||||||
|
|
||||||
|
% --- Executes just before pruebasonido is made visible.
|
||||||
|
function pruebasonido_OpeningFcn(hObject, eventdata, handles, varargin)
|
||||||
|
% This function has no output args, see OutputFcn.
|
||||||
|
% hObject handle to figure
|
||||||
|
% eventdata reserved - to be defined in a future version of MATLAB
|
||||||
|
% handles structure with handles and user data (see GUIDATA)
|
||||||
|
% varargin command line arguments to pruebasonido (see VARARGIN)
|
||||||
|
|
||||||
|
% Choose default command line output for pruebasonido
|
||||||
|
handles.output = hObject;
|
||||||
|
|
||||||
|
% Update handles structure
|
||||||
|
guidata(hObject, handles);
|
||||||
|
|
||||||
|
% UIWAIT makes pruebasonido wait for user response (see UIRESUME)
|
||||||
|
% uiwait(handles.figure1);
|
||||||
|
|
||||||
|
set(handles.popupmenu1,'Value',1);
|
||||||
|
init_player(handles,'sigin','Input_Fs');
|
||||||
|
|
||||||
|
|
||||||
|
% --- Outputs from this function are returned to the command line.
|
||||||
|
function varargout = pruebasonido_OutputFcn(hObject, eventdata, handles)
|
||||||
|
% varargout cell array for returning output args (see VARARGOUT);
|
||||||
|
% hObject handle to figure
|
||||||
|
% eventdata reserved - to be defined in a future version of MATLAB
|
||||||
|
% handles structure with handles and user data (see GUIDATA)
|
||||||
|
|
||||||
|
% Get default command line output from handles structure
|
||||||
|
varargout{1} = handles.output;
|
||||||
|
|
||||||
|
function init_player(handles,sig_base_varname, fs_base_varname)
|
||||||
|
%sig_base_varname name of the variable in the base workspace containing the
|
||||||
|
% sound to play
|
||||||
|
%fs_base_varname name of the variable in the base workspace containing the
|
||||||
|
% sampling frequency
|
||||||
|
myGui=guidata(handles.figure1);
|
||||||
|
myGui.freqSam = evalin('base',fs_base_varname);
|
||||||
|
myGui.datasound = evalin('base',sig_base_varname);
|
||||||
|
myGui.player=audioplayer(myGui.datasound,myGui.freqSam);
|
||||||
|
myGui.flag=2;
|
||||||
|
guidata(handles.figure1,myGui)
|
||||||
|
|
||||||
|
|
||||||
|
% --- Executes on button press in play.
|
||||||
|
function play_Callback(hObject, eventdata, handles)
|
||||||
|
% hObject handle to play (see GCBO)
|
||||||
|
% eventdata reserved - to be defined in a future version of MATLAB
|
||||||
|
% handles structure with handles and user data (see GUIDATA)
|
||||||
|
myGui=guidata(handles.figure1);
|
||||||
|
if(myGui.flag==2)
|
||||||
|
myGui.flag=1;
|
||||||
|
disp('2');
|
||||||
|
play(myGui.player);
|
||||||
|
else
|
||||||
|
if(myGui.flag == 1)
|
||||||
|
disp('1');
|
||||||
|
myGui.flag=0;
|
||||||
|
pause(myGui.player);
|
||||||
|
else
|
||||||
|
disp('0');
|
||||||
|
myGui.flag=1;
|
||||||
|
resume(myGui.player)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
guidata(handles.figure1,myGui);
|
||||||
|
|
||||||
|
% --- Executes on button press in stop.
|
||||||
|
function stop_Callback(hObject, eventdata, handles)
|
||||||
|
% hObject handle to stop (see GCBO)
|
||||||
|
% eventdata reserved - to be defined in a future version of MATLAB
|
||||||
|
% handles structure with handles and user data (see GUIDATA)
|
||||||
|
myGui=guidata(handles.figure1);
|
||||||
|
myGui.flag=2;
|
||||||
|
stop(myGui.player);
|
||||||
|
guidata(handles.figure1,myGui);
|
||||||
|
|
||||||
|
|
||||||
|
% --- Executes on selection change in popupmenu1.
|
||||||
|
function popupmenu1_Callback(hObject, eventdata, handles)
|
||||||
|
% hObject handle to popupmenu1 (see GCBO)
|
||||||
|
% eventdata reserved - to be defined in a future version of MATLAB
|
||||||
|
% handles structure with handles and user data (see GUIDATA)
|
||||||
|
|
||||||
|
contents = cellstr(get(hObject,'String')); % returns popupmenu1 contents as cell array
|
||||||
|
selected_signame = contents{get(hObject,'Value')}; % returns selected item from popupmenu1
|
||||||
|
|
||||||
|
init_player(handles,selected_signame,'Input_Fs')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% --- Executes during object creation, after setting all properties.
|
||||||
|
function popupmenu1_CreateFcn(hObject, eventdata, handles)
|
||||||
|
% hObject handle to popupmenu1 (see GCBO)
|
||||||
|
% eventdata reserved - to be defined in a future version of MATLAB
|
||||||
|
% handles empty - handles not created until after all CreateFcns called
|
||||||
|
|
||||||
|
% Hint: popupmenu controls usually have a white background on Windows.
|
||||||
|
% See ISPC and COMPUTER.
|
||||||
|
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
||||||
|
set(hObject,'BackgroundColor','white');
|
||||||
|
end
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
The simple Audio Player GUI from Matlab Central File Exchange
|
||||||
|
https://ch.mathworks.com/matlabcentral/fileexchange/53443-simple-audio-player-gui
|
||||||
|
allowing to play a selected file has been modified to allowing
|
||||||
|
playing the input and output audio signals of the commbluetoothvoice demo.
|
||||||
|
Copyright (c) 2020, HES-SO Valais
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,73 @@
|
|||||||
|
function commbluetoothvoice_cb
|
||||||
|
%COMMBLUETOOTHVOICE_CB Sets up the Model Mask Parameters in the
|
||||||
|
% Bluetooth Voice Transmission example (commbluetoothvoice.slx) and saves
|
||||||
|
% it to the workspace
|
||||||
|
|
||||||
|
% Copyright 1996-2011 The MathWorks, Inc.
|
||||||
|
|
||||||
|
% Retrieves user information and assigns packet type
|
||||||
|
systemParams = [bdroot(gcb) '/Model Parameters'];
|
||||||
|
h=get_param(systemParams,'MaskValues');
|
||||||
|
if(h{1,1}=='HV1')
|
||||||
|
set_param(systemParams,'MaskVisibilities',{'on','off','off'});
|
||||||
|
HV_Type=1;
|
||||||
|
assignin('base','HV_Type',1);
|
||||||
|
assignin('base','Slot_Pair',1);
|
||||||
|
elseif(h{1,1}=='HV2')
|
||||||
|
HV_Type=2;
|
||||||
|
assignin('base','HV_Type',2);
|
||||||
|
set_param(systemParams,'MaskVisibilities',{'on','on','off'});
|
||||||
|
if(h{2,1}== '1&2')
|
||||||
|
Slot_Pair=1;
|
||||||
|
assignin('base','Slot_Pair',1);
|
||||||
|
else
|
||||||
|
Slot_Pair=2;
|
||||||
|
assignin('base','Slot_Pair',2);
|
||||||
|
end
|
||||||
|
|
||||||
|
else
|
||||||
|
set_param(systemParams,'MaskVisibilities',{'on','off','on'});
|
||||||
|
HV_Type=3;
|
||||||
|
assignin('base','HV_Type',3)
|
||||||
|
if(h{3,1}=='1&2')
|
||||||
|
Slot_Pair=1;
|
||||||
|
assignin('base','Slot_Pair',1);
|
||||||
|
elseif(h{3,1}=='3&4')
|
||||||
|
Slot_Pair=2;
|
||||||
|
assignin('base','Slot_Pair',2);
|
||||||
|
else
|
||||||
|
Slot_Pair=3;
|
||||||
|
assignin('base','Slot_Pair',3);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
% Define Slot_Ts and other variables depending on packet type
|
||||||
|
Slot_Ts=(1/1600);
|
||||||
|
assignin('base','Slot_Ts', (1/1600));
|
||||||
|
switch HV_Type
|
||||||
|
case 1
|
||||||
|
assignin('base','Tx_Ts',Slot_Ts*2);
|
||||||
|
assignin('base','Num_Slots_Rate',2);
|
||||||
|
assignin('base','Num_Payload_Bits',80);
|
||||||
|
assignin('base','Slot_Enable_Phase',0); % Slot Pair
|
||||||
|
case 2
|
||||||
|
assignin('base','Tx_Ts',Slot_Ts*4);
|
||||||
|
assignin('base','Num_Slots_Rate',4);
|
||||||
|
assignin('base','Num_Payload_Bits',160);
|
||||||
|
if Slot_Pair == 3
|
||||||
|
error(message('comm:commbluetoothvoice_cb:InvalidSlot'));
|
||||||
|
end;
|
||||||
|
assignin('base','Slot_Enable_Phase',Slot_Pair*2-2); % Slot Pair
|
||||||
|
case 3
|
||||||
|
assignin('base','Tx_Ts',Slot_Ts*6);
|
||||||
|
assignin('base','Num_Slots_Rate',6);
|
||||||
|
assignin('base','Num_Payload_Bits',240);
|
||||||
|
assignin('base','Slot_Enable_Phase',Slot_Pair*2-2); % Slot Pair
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
%COMMBLUETOOTHVOICE_INIT Initializes variables for Bluetooth Voice Transmission
|
||||||
|
% example (commbluetoothvoice.slx)
|
||||||
|
|
||||||
|
% Copyright 1996-2012 The MathWorks, Inc.
|
||||||
|
% modified for Matlab 2022a by mag, HES-SO Valais, course SDi
|
||||||
|
|
||||||
|
% Set input wave sample rate to be 8kHz
|
||||||
|
Input_Fs=8000;
|
||||||
|
sigin = audioread('commbluetoothvoice_input.wav');
|
||||||
|
|
||||||
|
% Coefficients for speech interpolation
|
||||||
|
[y,interp_coeffs]=interp(ones(1,10),8);
|
||||||
|
|
||||||
|
% Header Information
|
||||||
|
% Header_Info=[Slave_Address;Packet_Type;Flow_Control;ARQ;Sequence];
|
||||||
|
Slave_Address= [1 0 1]';
|
||||||
|
Packet_Type= [1 0 1 0]';
|
||||||
|
Flow_Control= [1];
|
||||||
|
ARQ=[1];
|
||||||
|
Sequence=[1];
|
||||||
|
Access_Code=zeros(72,1); Access_Code(1:2:72)=1;
|
||||||
|
|
||||||
|
% Initialize 1,0,1,0, sequence
|
||||||
|
One_Zero_Payload=zeros(240,1);
|
||||||
|
One_Zero_Payload(1:2:240)=1;
|
||||||
|
|
||||||
|
% Set Seeds
|
||||||
|
% modified by mag: replaced randseed() by ''
|
||||||
|
hop_seed=1;
|
||||||
|
awgn_channel_seed=2;
|
||||||
|
awgn_802_seed=3;
|
||||||
|
rate_802_seed=4;
|
||||||
|
data_seed=5;
|
||||||
|
|
||||||
|
% Hop frequency if fixed
|
||||||
|
fixed_hop_freq=20;
|
||||||
|
|
||||||
|
% Assign payload bits
|
||||||
|
Num_Payload_Bits=80;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
+87
@@ -0,0 +1,87 @@
|
|||||||
|
function plot_complex_sig(x,samples_per_symbol,Nmax,plot_style)
|
||||||
|
% plot_complex_sig(x) plots a one-dimensional complex signal as points
|
||||||
|
% in 3-D space : x-axis is the sample (time) axis, y-axis is the real part,
|
||||||
|
% and z-axis the imaginary part
|
||||||
|
%
|
||||||
|
% plot_complex_sig(x,samples_per_symbol) plots all samples in blue and
|
||||||
|
% one sample per symbol in red.
|
||||||
|
%
|
||||||
|
% plot_complex_sig(x,samples_per_symbol,Nmax) only plots the first Nmax
|
||||||
|
% samples.
|
||||||
|
%
|
||||||
|
% plot_complex_sig(x,samples_per_symbol,Nmax,'arrows') use arrows from
|
||||||
|
% (i_sample,0,0) instead of points to represent samples.
|
||||||
|
%
|
||||||
|
% version compatible with Simulink Version 7.3 (R2009a)
|
||||||
|
|
||||||
|
%% process function arguments and perform various tests on function
|
||||||
|
|
||||||
|
nargchk(1,3,nargin);
|
||||||
|
|
||||||
|
if nargin<2
|
||||||
|
samples_per_symbol = 1;
|
||||||
|
end
|
||||||
|
|
||||||
|
if (isstruct(x))
|
||||||
|
if(~isfield(x,'signals'))
|
||||||
|
error('unsupported data type')
|
||||||
|
else
|
||||||
|
if (x.signals.dimensions ~= 1)
|
||||||
|
error('does not support multidimensional signals')
|
||||||
|
else
|
||||||
|
vals = x.signals.values;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else % should be array
|
||||||
|
vals = x;
|
||||||
|
end
|
||||||
|
|
||||||
|
if nargin<3
|
||||||
|
Nmax=length(vals);
|
||||||
|
end
|
||||||
|
|
||||||
|
if nargin<4
|
||||||
|
plot_style = 'points';
|
||||||
|
end
|
||||||
|
|
||||||
|
if (~isnumeric(vals))
|
||||||
|
error('unsupported data type')
|
||||||
|
elseif (isreal(vals))
|
||||||
|
error('numbers are not complex')
|
||||||
|
end
|
||||||
|
|
||||||
|
if ((samples_per_symbol < 1) || ~(round(samples_per_symbol)==samples_per_symbol))
|
||||||
|
error('samples_per_symbol must be a strictly positive integer')
|
||||||
|
end
|
||||||
|
|
||||||
|
if ~strcmp(plot_style,'points') && ~strcmp(plot_style,'arrows')
|
||||||
|
error('possible values for plot plot_style are : "points" and "arrows"')
|
||||||
|
end
|
||||||
|
%% function implementation
|
||||||
|
|
||||||
|
sel=(1:Nmax)';
|
||||||
|
abs_max = max(abs(x(sel)));
|
||||||
|
if (samples_per_symbol==1)
|
||||||
|
if strcmp(plot_style,'points')
|
||||||
|
plot3(sel,real(vals(sel)),imag(vals(sel)),'.');
|
||||||
|
elseif strcmp(plot_style,'arrows')
|
||||||
|
quiver3(sel,zeros(size(sel)),zeros(size(sel)),zeros(size(sel)),real(vals(sel)),imag(vals(sel)),0);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
plot3(sel,real(vals(sel)),imag(vals(sel)),'.');
|
||||||
|
hold on
|
||||||
|
sel= (1:samples_per_symbol:Nmax)';
|
||||||
|
if strcmp(plot_style,'points')
|
||||||
|
plot3(sel,real(vals(sel)),imag(vals(sel)),'.r');
|
||||||
|
elseif strcmp(plot_style,'arrows')
|
||||||
|
quiver3(sel,zeros(size(sel)),zeros(size(sel)),zeros(size(sel)),real(vals(sel)),imag(vals(sel)),0);
|
||||||
|
end
|
||||||
|
hold off
|
||||||
|
end
|
||||||
|
ylim([-abs_max,abs_max])
|
||||||
|
zlim([-abs_max,abs_max])
|
||||||
|
axis vis3d
|
||||||
|
grid on
|
||||||
|
xlabel('samples');
|
||||||
|
ylabel('real');
|
||||||
|
zlabel('imag');
|
||||||
Executable
+28
@@ -0,0 +1,28 @@
|
|||||||
|
function show_histogram(histogram,Vmin,Vmax)
|
||||||
|
% show_histogram((histogram,Vmin,Vmax) plots in a figure
|
||||||
|
% an histogram computed by the Signal Processing Blockset 'Histogram'
|
||||||
|
% block and exported to the Matlab Workspace through a 'Signal to
|
||||||
|
% Workspace' block. The 'Signal to Workspace' block has to be
|
||||||
|
% configured to output a one-dimensional array.
|
||||||
|
%
|
||||||
|
% histogram is the name of the variable containing the histogram
|
||||||
|
% as a one-dimensional array
|
||||||
|
% Vmin, Vmax are, respectively, the minimal input value and
|
||||||
|
% the maximal input value, as specified in the dialog box of the
|
||||||
|
% 'Histogram' block.
|
||||||
|
|
||||||
|
% compatible with Matlab R2012b
|
||||||
|
|
||||||
|
if ~isnumeric(histogram)
|
||||||
|
error('histogram is expected to be an array of numbers !');
|
||||||
|
end
|
||||||
|
if ndims(histogram)>2 || (size(histogram,1)~=1 && size(histogram,2)~=1)
|
||||||
|
error('histogram is expected to be a one-dimensional array !');
|
||||||
|
end
|
||||||
|
|
||||||
|
Nbins=length(histogram);
|
||||||
|
delta=(Vmax-Vmin)/Nbins;
|
||||||
|
hx = Vmin+delta/2:delta:Vmax;
|
||||||
|
hy = histogram;
|
||||||
|
|
||||||
|
bar(hx,hy);
|
||||||
Binary file not shown.
@@ -0,0 +1,87 @@
|
|||||||
|
function plot_complex_sig(x,samples_per_symbol,Nmax,plot_style)
|
||||||
|
% plot_complex_sig(x) plots a one-dimensional complex signal as points
|
||||||
|
% in 3-D space : x-axis is the sample (time) axis, y-axis is the real part,
|
||||||
|
% and z-axis the imaginary part
|
||||||
|
%
|
||||||
|
% plot_complex_sig(x,samples_per_symbol) plots all samples in blue and
|
||||||
|
% one sample per symbol in red.
|
||||||
|
%
|
||||||
|
% plot_complex_sig(x,samples_per_symbol,Nmax) only plots the first Nmax
|
||||||
|
% samples.
|
||||||
|
%
|
||||||
|
% plot_complex_sig(x,samples_per_symbol,Nmax,'arrows') use arrows from
|
||||||
|
% (i_sample,0,0) instead of points to represent samples.
|
||||||
|
%
|
||||||
|
% version compatible with Simulink Version 7.3 (R2009a)
|
||||||
|
|
||||||
|
%% process function arguments and perform various tests on function
|
||||||
|
|
||||||
|
nargchk(1,3,nargin);
|
||||||
|
|
||||||
|
if nargin<2
|
||||||
|
samples_per_symbol = 1;
|
||||||
|
end
|
||||||
|
|
||||||
|
if (isstruct(x))
|
||||||
|
if(~isfield(x,'signals'))
|
||||||
|
error('unsupported data type')
|
||||||
|
else
|
||||||
|
if (x.signals.dimensions ~= 1)
|
||||||
|
error('does not support multidimensional signals')
|
||||||
|
else
|
||||||
|
vals = x.signals.values;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else % should be array
|
||||||
|
vals = x;
|
||||||
|
end
|
||||||
|
|
||||||
|
if nargin<3
|
||||||
|
Nmax=length(vals);
|
||||||
|
end
|
||||||
|
|
||||||
|
if nargin<4
|
||||||
|
plot_style = 'points';
|
||||||
|
end
|
||||||
|
|
||||||
|
if (~isnumeric(vals))
|
||||||
|
error('unsupported data type')
|
||||||
|
elseif (isreal(vals))
|
||||||
|
error('numbers are not complex')
|
||||||
|
end
|
||||||
|
|
||||||
|
if ((samples_per_symbol < 1) || ~(round(samples_per_symbol)==samples_per_symbol))
|
||||||
|
error('samples_per_symbol must be a strictly positive integer')
|
||||||
|
end
|
||||||
|
|
||||||
|
if ~strcmp(plot_style,'points') && ~strcmp(plot_style,'arrows')
|
||||||
|
error('possible values for plot plot_style are : "points" and "arrows"')
|
||||||
|
end
|
||||||
|
%% function implementation
|
||||||
|
|
||||||
|
sel=(1:Nmax)';
|
||||||
|
abs_max = max(abs(x(sel)));
|
||||||
|
if (samples_per_symbol==1)
|
||||||
|
if strcmp(plot_style,'points')
|
||||||
|
plot3(sel,real(vals(sel)),imag(vals(sel)),'.');
|
||||||
|
elseif strcmp(plot_style,'arrows')
|
||||||
|
quiver3(sel,zeros(size(sel)),zeros(size(sel)),zeros(size(sel)),real(vals(sel)),imag(vals(sel)),0);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
plot3(sel,real(vals(sel)),imag(vals(sel)),'.');
|
||||||
|
hold on
|
||||||
|
sel= (1:samples_per_symbol:Nmax)';
|
||||||
|
if strcmp(plot_style,'points')
|
||||||
|
plot3(sel,real(vals(sel)),imag(vals(sel)),'.r');
|
||||||
|
elseif strcmp(plot_style,'arrows')
|
||||||
|
quiver3(sel,zeros(size(sel)),zeros(size(sel)),zeros(size(sel)),real(vals(sel)),imag(vals(sel)),0);
|
||||||
|
end
|
||||||
|
hold off
|
||||||
|
end
|
||||||
|
ylim([-abs_max,abs_max])
|
||||||
|
zlim([-abs_max,abs_max])
|
||||||
|
axis vis3d
|
||||||
|
grid on
|
||||||
|
xlabel('samples');
|
||||||
|
ylabel('real');
|
||||||
|
zlabel('imag');
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
function show_histogram(histogram,Vmin,Vmax)
|
||||||
|
% show_histogram((histogram,Vmin,Vmax) plots in a figure
|
||||||
|
% an histogram computed by the Signal Processing Blockset 'Histogram'
|
||||||
|
% block and exported to the Matlab Workspace through a 'Signal to
|
||||||
|
% Workspace' block. The 'Signal to Workspace' block has to be
|
||||||
|
% configured to output a one-dimensional array.
|
||||||
|
%
|
||||||
|
% histogram is the name of the variable containing the histogram
|
||||||
|
% as a one-dimensional array
|
||||||
|
% Vmin, Vmax are, respectively, the minimal input value and
|
||||||
|
% the maximal input value, as specified in the dialog box of the
|
||||||
|
% 'Histogram' block.
|
||||||
|
|
||||||
|
% compatible with Matlab R2012b
|
||||||
|
|
||||||
|
if ~isnumeric(histogram)
|
||||||
|
error('histogram is expected to be an array of numbers !');
|
||||||
|
end
|
||||||
|
if ndims(histogram)>2 || (size(histogram,1)~=1 && size(histogram,2)~=1)
|
||||||
|
error('histogram is expected to be a one-dimensional array !');
|
||||||
|
end
|
||||||
|
|
||||||
|
Nbins=length(histogram);
|
||||||
|
delta=(Vmax-Vmin)/Nbins;
|
||||||
|
hx = Vmin+delta/2:delta:Vmax;
|
||||||
|
hy = histogram;
|
||||||
|
|
||||||
|
bar(hx,hy);
|
||||||
Reference in New Issue
Block a user