commit bb7f798573ef2c95488e77aa28b0ac20ba08b222 Author: github-classroom[bot] <66690702+github-classroom[bot]@users.noreply.github.com> Date: Wed Sep 27 06:23:10 2023 +0000 Initial commit diff --git a/0_Integration/original audio.zip b/0_Integration/original audio.zip new file mode 100644 index 0000000..946dea5 Binary files /dev/null and b/0_Integration/original audio.zip differ diff --git a/0_Integration/original audio/le-12h30_20190922_standard_developpement-5_038acef4-3b84-484f-95a4-f094938a7b9d-128k.mp3 b/0_Integration/original audio/le-12h30_20190922_standard_developpement-5_038acef4-3b84-484f-95a4-f094938a7b9d-128k.mp3 new file mode 100755 index 0000000..2698745 Binary files /dev/null and b/0_Integration/original audio/le-12h30_20190922_standard_developpement-5_038acef4-3b84-484f-95a4-f094938a7b9d-128k.mp3 differ diff --git a/0_Integration/source_audio.wav b/0_Integration/source_audio.wav new file mode 100644 index 0000000..662c882 Binary files /dev/null and b/0_Integration/source_audio.wav differ diff --git a/0_Integration/superlab_demo.slx b/0_Integration/superlab_demo.slx new file mode 100644 index 0000000..6fc6c2e Binary files /dev/null and b/0_Integration/superlab_demo.slx differ diff --git a/0_Integration/superlab_demo_init.m b/0_Integration/superlab_demo_init.m new file mode 100644 index 0000000..1ece1e0 --- /dev/null +++ b/0_Integration/superlab_demo_init.m @@ -0,0 +1,3 @@ +IO_select = 0; +Choice_1=Simulink.Variant('IO_select==0'); +Choice_2=Simulink.Variant('IO_select==1'); \ No newline at end of file diff --git a/A_AD_DA/A1.slx b/A_AD_DA/A1.slx new file mode 100644 index 0000000..834a941 Binary files /dev/null and b/A_AD_DA/A1.slx differ diff --git a/A_AD_DA/A2.slx b/A_AD_DA/A2.slx new file mode 100644 index 0000000..47e8702 Binary files /dev/null and b/A_AD_DA/A2.slx differ diff --git a/B_ChannelCoding/B1.slx b/B_ChannelCoding/B1.slx new file mode 100644 index 0000000..73cdf3b Binary files /dev/null and b/B_ChannelCoding/B1.slx differ diff --git a/B_ChannelCoding/B2.slx b/B_ChannelCoding/B2.slx new file mode 100644 index 0000000..391c5ee Binary files /dev/null and b/B_ChannelCoding/B2.slx differ diff --git a/C_BaseBand/C1.slx b/C_BaseBand/C1.slx new file mode 100644 index 0000000..ede6436 Binary files /dev/null and b/C_BaseBand/C1.slx differ diff --git a/C_BaseBand/C2.slx b/C_BaseBand/C2.slx new file mode 100644 index 0000000..bd8b22d Binary files /dev/null and b/C_BaseBand/C2.slx differ diff --git a/D_Broadband/D1.slx b/D_Broadband/D1.slx new file mode 100644 index 0000000..e32d612 Binary files /dev/null and b/D_Broadband/D1.slx differ diff --git a/D_Broadband/D2.slx b/D_Broadband/D2.slx new file mode 100644 index 0000000..2e86672 Binary files /dev/null and b/D_Broadband/D2.slx differ diff --git a/D_Broadband/D3.slx b/D_Broadband/D3.slx new file mode 100644 index 0000000..d03e197 Binary files /dev/null and b/D_Broadband/D3.slx differ diff --git a/E_Piconet/E1.slx b/E_Piconet/E1.slx new file mode 100644 index 0000000..0beecab Binary files /dev/null and b/E_Piconet/E1.slx differ diff --git a/E_commbluetoothvoice_Matlab_2016b/commbluetoothfreqhop.slx b/E_commbluetoothvoice_Matlab_2016b/commbluetoothfreqhop.slx new file mode 100755 index 0000000..357136f Binary files /dev/null and b/E_commbluetoothvoice_Matlab_2016b/commbluetoothfreqhop.slx differ diff --git a/E_commbluetoothvoice_Matlab_2016b/commbluetoothvoice.slx b/E_commbluetoothvoice_Matlab_2016b/commbluetoothvoice.slx new file mode 100755 index 0000000..1024dc8 Binary files /dev/null and b/E_commbluetoothvoice_Matlab_2016b/commbluetoothvoice.slx differ diff --git a/E_commbluetoothvoice_Matlab_2016b/commbluetoothvoice_cb.m b/E_commbluetoothvoice_Matlab_2016b/commbluetoothvoice_cb.m new file mode 100755 index 0000000..aa58384 --- /dev/null +++ b/E_commbluetoothvoice_Matlab_2016b/commbluetoothvoice_cb.m @@ -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 + + + + + + + diff --git a/E_commbluetoothvoice_Matlab_2016b/commbluetoothvoice_init.m b/E_commbluetoothvoice_Matlab_2016b/commbluetoothvoice_init.m new file mode 100755 index 0000000..7d4baad --- /dev/null +++ b/E_commbluetoothvoice_Matlab_2016b/commbluetoothvoice_init.m @@ -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; + + + + diff --git a/E_commbluetoothvoice_Matlab_2016b/commbluetoothvoice_input.wav b/E_commbluetoothvoice_Matlab_2016b/commbluetoothvoice_input.wav new file mode 100755 index 0000000..5506713 Binary files /dev/null and b/E_commbluetoothvoice_Matlab_2016b/commbluetoothvoice_input.wav differ diff --git a/E_commbluetoothvoice_Matlab_2016b/commbluetoothvoice_lib.slx b/E_commbluetoothvoice_Matlab_2016b/commbluetoothvoice_lib.slx new file mode 100755 index 0000000..51b4bb0 Binary files /dev/null and b/E_commbluetoothvoice_Matlab_2016b/commbluetoothvoice_lib.slx differ diff --git a/F_Bluetooth/AudioPlayer/license.txt b/F_Bluetooth/AudioPlayer/license.txt new file mode 100644 index 0000000..b54ef12 --- /dev/null +++ b/F_Bluetooth/AudioPlayer/license.txt @@ -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. diff --git a/F_Bluetooth/AudioPlayer/pruebasonido.fig b/F_Bluetooth/AudioPlayer/pruebasonido.fig new file mode 100644 index 0000000..737ac5b Binary files /dev/null and b/F_Bluetooth/AudioPlayer/pruebasonido.fig differ diff --git a/F_Bluetooth/AudioPlayer/pruebasonido.m b/F_Bluetooth/AudioPlayer/pruebasonido.m new file mode 100644 index 0000000..2293178 --- /dev/null +++ b/F_Bluetooth/AudioPlayer/pruebasonido.m @@ -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 diff --git a/F_Bluetooth/AudioPlayer/readme.txt b/F_Bluetooth/AudioPlayer/readme.txt new file mode 100644 index 0000000..4274e51 --- /dev/null +++ b/F_Bluetooth/AudioPlayer/readme.txt @@ -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 \ No newline at end of file diff --git a/F_Bluetooth/commbluetoothfreqhop.slx b/F_Bluetooth/commbluetoothfreqhop.slx new file mode 100644 index 0000000..357136f Binary files /dev/null and b/F_Bluetooth/commbluetoothfreqhop.slx differ diff --git a/F_Bluetooth/commbluetoothvoice.slx b/F_Bluetooth/commbluetoothvoice.slx new file mode 100644 index 0000000..d6434b3 Binary files /dev/null and b/F_Bluetooth/commbluetoothvoice.slx differ diff --git a/F_Bluetooth/commbluetoothvoice_cb.m b/F_Bluetooth/commbluetoothvoice_cb.m new file mode 100644 index 0000000..aa58384 --- /dev/null +++ b/F_Bluetooth/commbluetoothvoice_cb.m @@ -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 + + + + + + + diff --git a/F_Bluetooth/commbluetoothvoice_init.m b/F_Bluetooth/commbluetoothvoice_init.m new file mode 100644 index 0000000..cb4b509 --- /dev/null +++ b/F_Bluetooth/commbluetoothvoice_init.m @@ -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; + + + + diff --git a/F_Bluetooth/commbluetoothvoice_input.wav b/F_Bluetooth/commbluetoothvoice_input.wav new file mode 100644 index 0000000..5506713 Binary files /dev/null and b/F_Bluetooth/commbluetoothvoice_input.wav differ diff --git a/F_Bluetooth/commbluetoothvoice_lib.slx b/F_Bluetooth/commbluetoothvoice_lib.slx new file mode 100644 index 0000000..51b4bb0 Binary files /dev/null and b/F_Bluetooth/commbluetoothvoice_lib.slx differ diff --git a/Z_utils/change_mdl_wks_data_whose_src_is_mdl_file.pdf b/Z_utils/change_mdl_wks_data_whose_src_is_mdl_file.pdf new file mode 100755 index 0000000..522b675 Binary files /dev/null and b/Z_utils/change_mdl_wks_data_whose_src_is_mdl_file.pdf differ diff --git a/Z_utils/compare_audio_files.slx b/Z_utils/compare_audio_files.slx new file mode 100755 index 0000000..39b400f Binary files /dev/null and b/Z_utils/compare_audio_files.slx differ diff --git a/Z_utils/plot_complex_sig.m b/Z_utils/plot_complex_sig.m new file mode 100755 index 0000000..ad01d4e --- /dev/null +++ b/Z_utils/plot_complex_sig.m @@ -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'); \ No newline at end of file diff --git a/Z_utils/show_histogram.m b/Z_utils/show_histogram.m new file mode 100755 index 0000000..8afba62 --- /dev/null +++ b/Z_utils/show_histogram.m @@ -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); \ No newline at end of file diff --git a/change_mdl_wks_data_whose_src_is_mdl_file.pdf b/change_mdl_wks_data_whose_src_is_mdl_file.pdf new file mode 100644 index 0000000..522b675 Binary files /dev/null and b/change_mdl_wks_data_whose_src_is_mdl_file.pdf differ diff --git a/plot_complex_sig.m b/plot_complex_sig.m new file mode 100644 index 0000000..400ad7b --- /dev/null +++ b/plot_complex_sig.m @@ -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'); \ No newline at end of file diff --git a/show_histogram.m b/show_histogram.m new file mode 100644 index 0000000..e2c9ba1 --- /dev/null +++ b/show_histogram.m @@ -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); \ No newline at end of file