Waves and Reflection



Overview

The objective of this project is to become familiar with:

Project

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% first, connect your bluetooth speaker and a microphone (an ear phone mic will work)
% then, paste this into a maatlab script file ( .m file) and run it
%
% audioSweep test
%
%copyright 2020 by Thomas P. Weldon
% all rights reserved
%
%  outputs a sinusoidal sweep to a speaker
%  reads microphone input
%  displays signal on oscilloscope along with a voltage=frequncy/1000
%  works best using the microphone on earphones at test location
%

clear all
close all hidden
clc

minFreq=150       % begin freq sweep ~20% below mode n=1
maxFreq=8*minFreq % this is likely high enough for you to see modes n=1,2,3
fstep=minFreq/20;
tfreq=0.05          % time spent at each freq
amplitude=0.2     % sine out amplitude
scopetimewidth=30 % scope width seconds
sampleRate=44100; % audio sample rate

%microphone input
deviceReader = audioDeviceReader;
micdevices = getAudioDevices(deviceReader)
deviceReader=audioDeviceReader(sampleRate,'Device','Built-in Microphone')
deviceReader.Device='Built-in Microphone'; %
deviceReader.SampleRate=sampleRate;
deviceReader.SamplesPerFrame=1024*2;

deviceWriter = audioDeviceWriter;
spkrdevices = getAudioDevices(deviceWriter)
deviceWriter.Device='S111 BT';   % bluetooth speaker purchased for this course
%deviceWriter.Device='Default';
%deviceWriter.Device='Built-in Output';
deviceWriter.SampleRate=deviceReader.SampleRate;
deviceWriter.ChannelMappingSource='Property';
deviceWriter.ChannelMapping=1;
samplesPerFrame = deviceReader.SamplesPerFrame;

sineSource  = audioOscillator( ...
      'Frequency', minFreq, ...
      'Amplitude', amplitude, ...
      'SignalType', 'sine', ...
      'SampleRate', deviceWriter.SampleRate, ...
      'SamplesPerFrame', deviceReader.SamplesPerFrame);

scope = dsp.TimeScope( ...
    'NumInputPorts',1, ...
    'LayoutDimensions',[2,1], ...
    'SampleRate',deviceReader.SampleRate, ...
    'TimeSpan',scopetimewidth, ...
    'BufferLength',deviceReader.SampleRate*scopetimewidth, ...
    'YLimits',[-0.1,0.1], ...
    'TimeSpanOverrunAction',"Scroll");
scope.NumInputPorts=2;
scope.YLimits=[-0.1,0.1];
 
 sineFreq = sineSource.Frequency
 sineSource.Frequency = sineFreq;
  
    tic
    while toc<3  
    x = sineSource(); deviceWriter(x);
    signal = deviceReader();scope(signal.*0,sineFreq/1000)
    end
 
scope.reset

  tic
    while toc<1
    x = sineSource(); deviceWriter(x);
    signal = deviceReader();scope(signal.*0,sineFreq/1000)
    end
   
while true
        %sineFreq = 1.025*sineFreq  ; % could use exponential sweep
        sineFreq = sineFreq +fstep  ;
        disp(['frequency=' num2str(sineFreq) ] )
        if sineFreq > maxFreq
            break
        end
        sineSource.Frequency = sineFreq;
    tic
    while toc<tfreq
    x = sineSource(); deviceWriter(x);
    signal = deviceReader();
    scope(signal,sineFreq/1000)
    %scopout=sineFreq/1000
    end
    %pause(1)  
end

release(deviceReader)
release(deviceWriter)


zz
Fig. 01


z
Fig. 02


z      z
Fig. 03


z
Fig. 04


z
Fig. 05



PROJECT REPORT



 







Copyright  2020 T. Weldon

MATHCAD is a trademark of PTC INC.  MATLAB and Simulink are registered trademarks of The Math Works, Inc.  All other product or service names are the property of their respective owners.