在matlab / octave中不使用啁啾创建扫频波类型的信号?

时间:2014-01-02 16:05:09

标签: matlab signal-processing octave

如何在不使用啁啾功能的情况下在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秒。

enter image description here

2 个答案:

答案 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