I’m tring to create in Matlab a continuous sound (40 Hz) and modulate the sound with a beat (see the easy code below). My problem is that I want to use this sound as a stimulus in an EEG experiment, but the beat and the ongoing 40 Hz frequency create a lot of frequencies. How can I reduce the number of frequencies? I also used an fft to check wich frequencies I was generating with this stimulus (too many). Is there any better way to create a sinmple beat? Am I doing everything wrong? I hope it was clear enough, Thanks
clear all
Accent = 3; % amplitude for the beat
Freq = 40; % frequency
Dur = 4; % Duration
Samp = 48000; % sampling points
%% signal
Sine = sin((1:Dur*Samp)*2*pi*Freq/Samp);
Beat = repmat([ones(1,Samp/8)*Accent ones(1,Samp/8) ones(1,Samp/8)*Accent ones(1,Samp/8) repmat(ones(1,Samp/8),1,4)],1,Dur);
S = Sine.*Beat;
S = S/max(abs(S));
% plot(S)
% sound(S,Samp)
FT = abs(fft(S));
%% plots
subplot(2,1,1)
plot(S); title(['Signal ' num2str(Freq) ' Hz + Beat'])
subplot(2,1,2)
plot(((0:length(S)-1)/length(S))*Samp,FT);
title('Signal FFT')
xlabel('Frequency')
axis([0 45 0 1])
I think your problem lies in math.
You are multiplying a sine with a sqare wave (see here: https://en.wikipedia.org/wiki/Square_wave) + an offset (but this is not important as it has freq. 0).
This is the same in frequency space when you convolute a peak (for the sine) with the transform of the square wave (which has infinite frequencies).
I think the simplest solution would be instead of a square wave you create yourself a wave using the formula from wikipedia and just the first few term (depending how close you’d like got get to square shape)