您好,我也想要那个“用MATLAB实现对一个任意信号进行采样和恢复 ”的程序,您能给我发一下吗?

我的邮箱zhukl@foxmail.com
2025-03-12 18:00:41
推荐回答(2个)
回答1:

文件1
文件名 main.m
clear;
clc;
f0=10000; %用来模拟 模拟信号的 数字信号的采样频率 fs<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)]);

文件1 结束

文件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
文件2 结束

文件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); %phase
Hg=H.*exp(j*theta);
b=real(ifft(Hg));
b=b/(sum(b.^2));

文件3 结束

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

%*******************************************************************%

%f—余弦信号的频率

% M—基2 FFT幂次数 N=2^M为采样点数,这样取值是为了便于作基2的FFT分析

%2. 采样频率Fs

%*******************************************************************%

function samples(f,Fs,M)

N=2^M; % fft点数=取样总点数

Ts=1/Fs; % 取样时间间隔

T=N*Ts; % 取样总时间=取样总点数*取样时间间隔

n=0:N-1;

t=n*Ts;

Xn=cos(2*f*pi*t);

subplot(2,1,1);

stem(t,Xn);

axis([0 T 1.1*min(Xn) 1.1*max(Xn)]);

xlabel('t -->');

ylabel('Xn');

Xk=abs(fft(Xn,N));

subplot(2,1,2);

stem(n,Xk);

axis([0 N 1.1*min(Xk) 1.1*max(Xk)]);

xlabel('frequency -->');

ylabel('!Xk!');

%*******************************************************************%

假如有一个1Hz的余弦信号y=cos(2*π*t),对其用4Hz的采样频率进行采样,共采样32点,只需执行samples(1,4,5),即可得到仿真结果。

软件仿真实验内容如下表所示:

仿真参数
f
Fs
Wo(计算)
Xn(图形)
Xk(图形)

(1,4,5)

另外记录图形,并标图号

(1,8,5)

(2,8,6)

回答2:

同求