2012-06-19 63 views
0

我正在用Matlab創建連續聲音(40赫茲)並用節拍調製聲音(請參閱下面的簡單代碼)。我的問題是我想在EEG實驗中使用這種聲音作爲刺激,但是節拍和正在進行的40Hz頻率會產生很多頻率。我怎樣才能減少頻率的數量?我還用fft來檢查我用這種刺激產生的極端頻率(太多)。有沒有更好的方法來創建一個sinmple節拍?我做錯了什麼?我希望這已經夠清楚了,謝謝用Matlab在節拍中編程聲音

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

回答

0

我覺得你的問題在於數學。

您正在乘以一個正弦波與sqare波(見這裏:https://en.wikipedia.org/wiki/Square_wave)+一個偏移量(但這並不重要,因爲它具有頻率0)。

當您通過方波(無限頻率)的變換來卷積峯值(對於正弦)時,這與頻率空間中的相同。

我認爲最簡單的解決辦法是,而不是你自己創建使用維基百科的公式,只是前幾個學期一浪的方波(取決於您希望如何接近得到了去方形)

+0

謝謝很多,我寫了這個小函數,你的意思是這樣嗎?函數Sine = SquareGen(Freq,Duration,Samp,Smooth) if nargin <4,Smooth = 20;結束 Sine = sin((1:持續時間* Samp)* 2 * pi * Freq/Samp); 爲iWave = 1:2:平滑 如果iWave> 1 諧波= SIN((1:持續時間* SAMP)* 2 * PI *(頻率* iWave)/桑普/ iWave; 正弦=正弦+諧波; 端 結束 – Maneaie

+0

是的,它很難閱讀,但看起來是正確的。 – bdecaf