SYSU_SECE_MATLAB_数字信号处理_06
快速傅里叶变换、时频域抽样及数字滤波器


figure(1)%题目一(1)
xn=[1,0.5,0,0.5,1,1,0.5,0];
N=length(xn);
n=0:N-1;
X_DFT=fft(xn,N);
subplot(2,1,1);stem(n,abs(X_DFT),'filled');title('DFT(x(n))');
x_IDFT=ifft(X_DFT,N);
subplot(2,1,2);stem(n,x_IDFT,'filled');title('IDFT(X_DFT)');
%=====================================================================
figure(2)%题目一(2) N=8
xn=[1,0.5,0,0.5,1,1,0.5,0];
N=length(xn);
Fs=20;%采样频率
N1=8;%N1==N
D=2*pi*Fs/N;%计算模拟频率分辨率
k=floor(-(N-1)/2:(N-1)/2);%频率显示范围对应[-pi,pi]
X=fftshift(fft(xn,N));%作FFT且移位pi
subplot(2,1,1);plot(k*D,abs(X),'o:');title('幅度频谱');%横轴化为模拟频率
subplot(2,1,2);plot(k*D,angle(X),'o:');title('相位频谱');
figure(3)%题目一(2) N=32
N2=32;
xn=[xn,zeros(1,N2-N-1)];
D=2*pi*Fs/N2;%计算模拟频率分辨率
k=floor(-(N2-1)/2:(N2-1)/2);%频率显示范围对应[-pi,pi]
X=fftshift(fft(xn,N2));%作FFT且移位pi
subplot(2,1,1);plot(k*D,abs(X),'o:');title('幅度频谱');%横轴化为模拟频率
subplot(2,1,2);plot(k*D,angle(X),'o:');title('相位频谱');
figure(4)%题目一(2) N=64
N3=64;
xn=[xn,zeros(1,N3-N-1)];
D=2*pi*Fs/N3;%计算模拟频率分辨率
k=floor(-(N3-1)/2:(N3-1)/2);%频率显示范围对应[-pi,pi]
X=fftshift(fft(xn,N3));%作FFT且移位pi
subplot(2,1,1);plot(k*D,abs(X),'o:');title('幅度频谱');%横轴化为模拟频率
subplot(2,1,2);plot(k*D,angle(X),'o:');title('相位频谱');



figure(5)%题目二 N=8
Ts=0.2;%采样周期
Fs=1/Ts;%采样频率
N=8;n=0:N-1;
xn=0.5.^n;
D=2*pi*Fs/N;%计算模拟频率分辨率
k=floor(-(N-1)/2:(N-1)/2);%频率显示范围对应[-pi,pi]
X=fftshift(fft(xn,N));%作FFT且移位pi
subplot(2,1,1);plot(k*D,abs(X));title('N=8 幅度频谱');%横轴化为模拟频率
subplot(2,1,2);stairs(k*D,angle(X));title('N=8 相位频谱');
figure(6)%题目二 N=32
Ts=0.2;%采样周期
Fs=1/Ts;%采样频率
N=32;n=0:N-1;
xn=0.5.^n;
D=2*pi*Fs/N;%计算模拟频率分辨率
k=floor(-(N-1)/2:(N-1)/2);%频率显示范围对应[-pi,pi]
X=fftshift(fft(xn,N));%作FFT且移位pi
subplot(2,1,1);plot(k*D,abs(X));title('N=32 幅度频谱');%横轴化为模拟频率
subplot(2,1,2);stairs(k*D,angle(X));title('N=32 相位频谱');
figure(7)%题目二 N=64
Ts=0.2;%采样周期
Fs=1/Ts;%采样频率
N=64;n=0:N-1;
xn=0.5.^n;
D=2*pi*Fs/N;%计算模拟频率分辨率
k=floor(-(N-1)/2:(N-1)/2);%频率显示范围对应[-pi,pi]
X=fftshift(fft(xn,N));%作FFT且移位pi
subplot(2,1,1);plot(k*D,abs(X));title('N=64 幅度频谱');%横轴化为模拟频率
subplot(2,1,2);stairs(k*D,angle(X));title('N=64 相位频谱');
%%%由以上可见,N值取得越大,即序列保留的越长,曲线精度越高



figure(8)%题目三(1)
dt=0.1;fm=1;
t=-5:dt:5;
f=sinc(t);
subplot(4,1,1);plot(t,f);title('sinc(t)原连续时间信号波形');
fs=fm;Ts=1/fs;%确定采样频率和采样周期
n=-5:Ts:5;
f=sinc(n);
subplot(4,1,2);stem(n,f,'filled');title('fs=fm=1Hz时抽样信号的波形')
fs=2*fm;Ts=1/fs;%确定采样频率和采样周期
n=-5:Ts:5;
f=sinc(n);
subplot(4,1,3);stem(n,f,'filled');title('fs=2*fm=2Hz时抽样信号的波形')
fs=3*fm;Ts=1/fs;%确定采样频率和采样周期
n=-5:Ts:5;
f=sinc(n);
subplot(4,1,4);stem(n,f,'filled');title('fs=3*fm=3Hz时抽样信号的波形')
%===================================================================
figure(9)%题目三(2)求解原连续信号波形和抽样信号所对应的幅度谱
dt=0.1;fm=1;Tm=1/fm;
wm=2*pi*fm;
t=-5:dt:5;
N=length(t);k=0:N-1;
w=k*wm/N;
f=sinc(t);
F=f*exp(-j*t'*w)*dt;%对原信号进行傅里叶变换
subplot(2,1,1);plot(w/(2*pi),abs(F));title('sinc(t) 原连续时间信号的幅度谱');
%============
fm=1;
fs=fm;Ts=1/fs;%确定采样频率和采样周期
n=-5:Ts:5;
f=sinc(n);%生成抽样信号
N=length(n);
wm=2*pi*fs;
k=0:N-1;
w=k*wm/N;
F=f*exp(-j*n'*w)*Ts;%对抽样信号进行傅里叶变换
subplot(2,1,2);plot(w/(2*pi),abs(F));title('fs=fm=1Hz 时抽样信号的幅度谱')
axis([0,2,-0.1,1.5]);
%============
figure(10)
fm=1;
fs=2*fm;Ts=1/fs;%确定采样频率和采样周期
n=-5:Ts:5;
f=sinc(n);%生成抽样信号
N=length(n);
wm=2*pi*fs;
k=0:N-1;
w=k*wm/N;
F=f*exp(-j*n'*w)*Ts;%对抽样信号进行傅里叶变换
subplot(2,1,1);plot(w/(2*pi),abs(F));title('fs=2*fm=2Hz 时抽样信号的幅度谱')
axis([0,2,-0.1,1.5]);
%============
fm=1;
fs=3*fm;Ts=1/fs;%确定采样频率和采样周期
n=-5:Ts:5;
f=sinc(n);%生成抽样信号
N=length(n);
wm=2*pi*fs;
k=0:N-1;
w=k*wm/N;
F=f*exp(-j*n'*w)*Ts;%对抽样信号进行傅里叶变换
subplot(2,1,2);plot(w/(2*pi),abs(F));title('fs=3*fm=3Hz 时抽样信号的幅度谱')
axis([0,2,-0.1,1.5]);
%==========================================================================
figure(11)%题目三(3)用时域卷积的方法(内插公式)重建信号
%用时域信号与理想滤波器系统的单位冲激响应进行卷积积分
fm=1;Tm=1/fm;
dt=0.01;
t=-5:dt:5;
x=sinc(t);
subplot(2,1,1);plot(t,x);title('用时域卷积的方法(内插公式)重建原信号');
f0=1;T0=1/f0;dt=0.01;
fs=3*fm;Ts=1/fs;%确定采样频率和周期
n=0:5/Ts;
t=0:Ts:5;
x=sinc(n/fs);%生成抽样信号
T_N=ones(length(n),1)*t-n'*Ts*ones(1,length(t));
xa=x*sinc(fs*pi*T_N);
subplot(2,1,2);plot(t,xa);title('用时域卷积的方法(内插公式)重建原信号');



figure(12) %题目四
Ts=1;N_=[3,5,10]; %频域抽样点数
%使用的数字频率,默认采样周期Ts=1
for i=1:3
N=N_(i);
D=2*pi/(Ts*N); %求出模拟频率分辨率
kn=floor(-(N-1)/2:-1/2);%建立负频率段向量
kp=floor(0:(N-1)/2); %建立正频率段向量
w=[kp,kn]*D;
X=2+4*exp(-j*w)+6*exp(-j*2*w)+4*exp(-j*3*w)+2*exp(-j*4*w);
n=0:N-1;
x=ifft(X,N)
subplot(3,1,i);stem(n*Ts,abs(x));title(['观察频域抽样点数N对时间混叠的影响'])
end
%离散序列频域抽样定理
disp(['假定有限长序列x(n)的长度为M,频域抽样点数为N,则原时域信号不失真的由频域抽样恢复的条件是:' ...
'(1)如果x(n)不是有限长序列,则必然产生混叠,产生误差;' ...
'(2)如果x(n)是有限长序列,且频域抽样点数N小于序列长度M,则x(n)以N为周期进行周期延拓也将' ...
'造成混叠,从中不能无失真的恢复出原信号x(n);' ...
'(3)如果x(n)是有限长序列,且频域抽样点数N大于或等于序列长度M,则从中能无失真的恢复出原信号。'])


figure(13) %题目五
wc=3.14;
Ts=0.1;
N=500;
D=2*pi/(Ts*N); %求模拟频率分辨率
M=floor(wc/D); %求有效频率边界值的下标25
Xa=[zeros(1,M),1,zeros(1,N-2*M+1),1,zeros(1,M-1)];%误差不可避免?
n=-(N-1)/2:(N-1)/2; %建立时间向量
xa=abs(fftshift(ifft(Xa/Ts,N)));
plot(n*Ts,xa);
title('连续信号xa(t)波形')


%题目六
b=[0.1,-0.4,0.4,-0.1];
a=[1,0.3,0.55,0.2];
[sos,g]=tf2sos(b,a) %由直接型转换为级联型
[r,p,k]=residuez(b,a) %由直接型转换为并联型
[K,C]=tf2latc(b,a) %由直接型转换成格型





% 以上程序中使用到的部分MATLAB函数
% fft 利用FFT函数计算矢量的离散傅里叶变换
% ifft 计算矢量的傅里叶逆变换
% fftshift 对fft的输出进行重新排列,将零频分量移到频谱的中心
% [K,C]=tf2latc 将零极点IIR系统由直接型转换为格型结构
% [num,den]=latc2tf 将零极点IIR系统由格型结构转换为直接型
上述题目基本全部改编/出自自西安电子科技大学出版社出版的《数字信号处理实验(MATLAB版)》,可以在其中找到原理部分,我们理论课使用的教材也是西电的:《数字信号处理》(第四版)高西全 丁玉美
声明:不保证代码的正确性,只是提供一种思路……