如何在不使用啁啾功能的情况下在octave / matlab中创建扫频波信号。我想这样做是因为我试图从octave / matlab生成的特定音频信号中创建一个扫描信号而不仅仅是一个简单的sin波。
我尝试将一些代码拼凑在一起MATLAB - produce a swept non-cosine wave? 但当fs = 8000
时,遇到问题,信号长度不是秒%test sweep / chirp
clc
clear all
freq=200
fs=8000;
t=linspace(0,2*pi(1:freq/fs),fs); %
for nn=1:freq
data(nn)=sin(nn*t(nn));
end
wavwrite([data'] ,fs,32,strcat('/tmp/del.wav')); %export file
plot(data(1:200))
这是信号图的图像以及我的问题和问题:
1)注意由于事实I,情节不会达到8000个样本 如果我这样做会出错。
2)它假设从1-200hz开始超过1秒。
答案 0 :(得分:1)
您可以使用此脚本执行所需操作。当你没有尝试索引名为“pi”的数组时,请记住“pi”之后的“*”。
%test sweep / chirp
clc
clear all
freq1=20;
freq2=200;
fs=44100;
lenS=5;
t=1/fs:1/fs:lenS; %
f=freq1:(freq2-freq1)/length(t):freq2-(freq2-freq1)/length(t);
data=sin(2*pi*f.*t);
wavwrite([data'] ,fs,32,strcat('/tmp/del.wav')); %export file
plot(t,data)
wavplay(data,fs)
我在Matlab中写过这个,不知道它会如何在八度音阶中起作用......
答案 1 :(得分:1)
如果有人需要,此代码将停止并以给定频率启动。
clc, clear all,clf
start_freq=200;
end_freq=1000;
fs_rate=44100;
len_of_sig=10; %len in seconds
t=linspace(0,2*pi*len_of_sig,fs_rate*len_of_sig);
f0= start_freq; %inital frequency
f1= (end_freq/2)+(start_freq/2);%ending frequency formula
f=f0:(f1-f0)/length(t):f1-(f1-f0)/length(t);
data=.8*cos(f.*t);
data = data - mean(data); %fix dc offset %needed or amp could be off and cleans up spectrum of signal
wavwrite([data'] ,fs_rate,32,strcat('/tmp/del.wav')); %export file