用matlab表示周期方波序列(离散时间的)并画出频谱

题目如图:

img


我的代码如下,感觉用阶跃函数表示出方波序列的话不太对劲,画出来的图不太对

img

https://blog.csdn.net/qq_42477169/article/details/90729219

你得数据发给我

以下代码可以实现对输入的周期方波序列的频谱图绘制,并使用椭圆滤波器滤波后得到滤波后的信号及其频谱图。

fs = 100000; %采样频率
T = 1/fs; %采样间隔
N = 1000; %采样点数
t = -0.002:T:0.002;
f = -fs/2 : fs/N : fs/2-fs/N;

% 生成周期方波序列
x = square(2*pi*1000*t,50); 

% 绘制原始信号及其频谱图
figure(1);
subplot(2,1,1);
plot(t,x);
xlabel('Time');
ylabel('Amplitude');
title('Original Signal: Periodic Square Wave');
grid on;
subplot(2,1,2);
sp_x = abs(fftshift(fft(x,N)))/N;
plot(f,sp_x);
xlabel('Frequency');
ylabel('Magnitude');
title('Frequency Spectrum of Original Signal');
grid on;

% 设计滤波器
Wp = 3100*2*pi/(fs*pi); % 通带频率
Wr = 4800*2*pi/(fs*pi); % 阻带频率
Ap = 1; % 通带最大纹波
Ar = 60; % 阻带最小衰减

[N1,wc1] = ellipord( Wp , Wr , Ap , Ar );
[b,a] = ellip(N1,Ap,Ar,wc1,'low'); 

% 绘制滤波器的幅相特性
figure(2);
freqz(b,a,1024,fs);
title('Magnitude and Phase Response of Elliptic Low-pass Filter');

% 使用滤波器进行滤波
y = filter(b,a,x);

% 绘制滤波后的信号及其频谱图
figure(3);
subplot(2,1,1);
plot(t,y);
xlabel('Time');
ylabel('Amplitude');
title('Filtered Signal');
grid on;
subplot(2,1,2);
sp_y = abs(fftshift(fft(y,N)))/N;
plot(f,sp_y);
xlabel('Frequency');
ylabel('Magnitude');
title('Frequency Spectrum of Filtered Signal');
grid on;

其中的注释可以更好地理解每一步的意义和实现方式。绘制的图像也可以帮助理解信号和滤波器的效果。