我想在Matlab中创建连续的声音(40 Hz),并用拍子调制声音(请参见下面的简单代码)。我的问题是我想在脑电图实验中使用这种声音作为刺激,但是拍子和持续的40 Hz频率会产生很多频率。如何减少频率数量?我还使用fft来检查通过这种刺激产生的频率(太多)。有没有更好的方法来产生sin节拍?我做错了什么吗?我希望已经足够清楚了,谢谢

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])

最佳答案

我认为您的问题出在数学上。

您将正弦乘以平方波(请参见此处:https://en.wikipedia.org/wiki/Square_wave)+偏移量(但这并不重要,因为它的频率为0)。

当您用方波(具有无限频率)的变换对峰(正弦波)进行卷积时,在频率空间上也是如此。

我认为最简单的解决方案将是使用Wikipedia的公式并仅使用前几个术语来创建自己的波形,而不是使用矩形波(具体取决于您想要接近矩形的波形)

09-07 15:49