1
0

Initial commit

This commit is contained in:
github-classroom[bot] 2023-09-27 06:23:10 +00:00 committed by GitHub
commit bb7f798573
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
38 changed files with 640 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,3 @@
IO_select = 0;
Choice_1=Simulink.Variant('IO_select==0');
Choice_2=Simulink.Variant('IO_select==1');

BIN
A_AD_DA/A1.slx Normal file

Binary file not shown.

BIN
A_AD_DA/A2.slx Normal file

Binary file not shown.

BIN
B_ChannelCoding/B1.slx Normal file

Binary file not shown.

BIN
B_ChannelCoding/B2.slx Normal file

Binary file not shown.

BIN
C_BaseBand/C1.slx Normal file

Binary file not shown.

BIN
C_BaseBand/C2.slx Normal file

Binary file not shown.

BIN
D_Broadband/D1.slx Normal file

Binary file not shown.

BIN
D_Broadband/D2.slx Normal file

Binary file not shown.

BIN
D_Broadband/D3.slx Normal file

Binary file not shown.

BIN
E_Piconet/E1.slx Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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.

Binary file not shown.

BIN
Z_utils/compare_audio_files.slx Executable file

Binary file not shown.

87
Z_utils/plot_complex_sig.m Executable file
View File

@ -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');

28
Z_utils/show_histogram.m Executable file
View File

@ -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.

87
plot_complex_sig.m Normal file
View File

@ -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');

28
show_histogram.m Normal file
View File

@ -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);