Matlab 怎么对信号进行采样

我现在有个课题:录一段自己的话再用Matlab进行抽样,和FFT变换,球时域和频域的图像,求程序代码。抽样间隔和抽样频率怎么自己调整?... 我现在有个课题:录一段自己的话再用Matlab 进行抽样,和FFT变换,球时域和频域的图像,求程序代码。
抽样间隔和抽样频率怎么自己调整?
展开
 我来答
百度网友faadf46
高粉答主

2019-09-14 · 说的都是干货,快来关注
知道答主
回答量:4556
采纳率:0%
帮助的人:69.8万
展开全部

1、打开MATLAB,新建脚本。

2、在编辑器里输入代码。

3、Tp是观察时间,我们设置为64微妙,即64/1000;接着输入的代码是产生M长采样序列x(n)。

4、把实验内容中给定的值设置好;再把给定的模拟信号式子输入进去。

5、subplot(3,2,1)的意思是:三行两列,在第一个位置作图。

6、代码输入完毕后,点击运行。

7、得到结果,对信号进行采样。

云倾城001
推荐于2017-10-06 · TA获得超过1209个赞
知道小有建树答主
回答量:585
采纳率:0%
帮助的人:398万
展开全部

任意信号的采样后恢复是有条件的,必须是采样频率大于两倍的信号截至频率才行。
//文件名 main.m

clear;
clc;
f0=10000; %用来模拟 模拟信号的 数字信号的采样频率 fs<<f0
f=[10 50 100];%f是模拟信号的频率表 max(f)<250;
fs=500; %信号的采样频率
N=500;%数字信号的样点数
%模拟信号的生成
s=signal_generate(f,f0,N);
subplot(4,1,1);plot(s);axis([1 N min(s) max(s)]);
%采样点数,间隔的计算
deltaN=f0/fs
Ns=N/deltaN
%采样
for i=1:Ns
sd(i)=s((i-1)*deltaN+1);
end
subplot(4,1,2);stem(sd,'.');axis([1 Ns min(s) max(s)]);
%恢复出方波信号
sp=[];
for i=1:Ns
 sp=[sp sd(i)*ones(1,deltaN)];
end
subplot(4,1,3);plot(sp);axis([1 N min(s) max(s)]);
%低通滤波恢复出原始信号
 Wm=fs/f0
 level=5/Wm
 b=low_filter(Wm,level);
 delay=level/2;
 sp=[sp zeros(1,delay)];
 so=filter(b,1,sp);
 so=so(delay+1:delay+N)/deltaN;
 subplot(4,1,4);plot(so);axis([1 N min(s) max(s)]);

//文件名 signal_generate.m

function s=signal_generate(f,f0,N)
f0=10000; 
num=length(f);
s=zeros(1,N);
for i=1:num
 s=s+sin(f(i)*2*pi*(1:N)/f0);
end

//文件名 low_filter.m

function b=low_filter(Wm,level);
Nm=ceil(Wm/2*level);
H=zeros(1,level);
H(1:Nm)=ones(1,Nm);
H(Nm+1)=0.5;
H(level-Nm+1)=-0.5;
H(level-Nm+2:level)=-ones(1,Nm-1);
theta=-(level-1)/level*pi*(0:level-1);    %phase
Hg=H.*exp(j*theta);
b=real(ifft(Hg));
b=b/(sum(b.^2));

新建这三个文件后,拷贝在统一个目录里,运行main.m就可以了, 每一个过程都有相应的图形显示。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huxuec
2009-06-23 · TA获得超过2625个赞
知道小有建树答主
回答量:1095
采纳率:75%
帮助的人:577万
展开全部
可以在windows自带的录音工具,里面调节
默认44.1KHz,16bit,双声道
还可以采样后自己在MATLAB程序里面再次采样

例如现在的声音片段:myvoice.wav
clear
[y,f,b]=wavread('myvoice.wav');
l=length(y);%采样点数
t=l/f;%采样时间
%现在y:l*2双声道,f=44.1e3,b=16
%需要20e3Hz的采样频率,得到新数据y2
f2=20e3;
l2=t*f2;

B=l/l2;

for i=1:l2
y2(i,:)=y(round(i*B),:);%重新采样
end

subplot(211)
plot(y);
subplot(212)
plot(y2);

wavwrite(y2,20e3,'new.wav');
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式