内容发布更新时间 : 2025/1/10 23:26:08星期一 下面是文章的全部内容请认真阅读。
文件1 main.m clear; clc;
f0=10000; %用来模拟模拟信号的数字信号的采样频率 fs< %模拟信号的生成 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=[spsd(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)]); 文件2 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 文件3 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); Hg=H.*exp(j*theta); b=real(ifft(Hg)); b=b/(sum(b.^2)); VVV %phase