数字信号处理matlab基础例题相关

离散傅里叶变换(DFT)

已知序列x(n)={1 2 4 3},试用MATLAB求其离散傅里叶变换X(k),然后再求X(k)的离散傅里叶反变换x(n),并对结果进行比较。

dft与dftmtx均可实现傅里叶变换后者可以看作是傅里叶变换所形成的正交基
y=dftmtx(4)*x与y=dft(x)等价,dftmtx产生的矩阵元素均为旋转因子的行列倍(也就是系数,都需要后面再乘一个x)
A.’ 表示求A得非共轭转置矩阵, A’ 表示求A得共轭转置矩阵,在下述应用无所谓因为不包含虚数部分。
rand(m,n)表示产生0-1之间的m行n列的随机数
display()为显示函数,将括号内内容所指代的对象显示到命令窗口去
conj为做共轭
利用dft求idft两个方法
%其一:先将X(K)取共轭,再直接调用FFT,在对运算结果取共轭并乘以常数1/N
%其二:先调用FFT计算X(K)的DFT,然后把运算结果翻褶后平移N位,最后乘以常数1/N
display (xn)显示函数,将xk的内容以xk= XXX 显示到命令窗口,去掉括号就直接显示xk

%计算DFT
xn=[1 2 4 3]';%矩阵A'作用为求A得共轭转置矩阵,A.'为求A的非共轭转置矩阵
%x=rand(4,1);y=dftmtx(4)*x与y=dft(x)等价,dftmtx产生的矩阵元素均为旋转因子的行列倍
xk=dftmtx(4)*xn;%dft与dftmtx均可实现傅里叶变换后者可以看作是傅里叶变换所形成的正交基
display (xk)%显示函数,将xk的内容以xk= XXX 显示到命令窗口,去掉括号就直接显示xk
%计算IDFT
xk=[10 -3+1i 0 -3-1i]';%同理,对xk的矩阵做共轭转置
xn=conj(dftmtx(4))/4*xk;%利用dft求idft两个方法,conj为做共轭,此处用方法一
%其一:先将X(K)取共轭,再直接调用FFT,在对运算结果取共轭并乘以常数1/N
%其二:先调用FFT计算X(K)的DFT,然后把运算结果翻褶后平移N位,最后乘以常数1/N
display (xn)

对连续的单一频率周期信号cos(0.5pit)按采样频率fs=8fa采样,截取长度分别选N=48和N=32,用MATLAB分别绘出其离散傅里叶变换的幅度谱。

fft,进行快速傅里叶运算

%对连续的单一频率周期信号cos(0.5*pi*t)按采样频率fs=8fa采样,截取长度分别选N=48和N=32
k=16;%采样以后得到的序列为x(n)=cos(0.5*pi*n/8),,所以k应为8?
n1=[0:1:47];%以1为间隔取点,起点为0,终点为48
xn1=cos(0.5*pi*n1/k);%采样的得到的序列
subplot(221);plot(n1,xn1);grid;
xlabel('t/T');ylabel('x(n)');
xk1=fft(xn1);%对xn1做fft运算
subplot(222);stem(n1,abs(xk1),'.');grid;
xlabel('k');ylabel('X(k)');
%截止长度为32
n2=[0:1:31];
xn2=cos(0.5*pi*n2/k);
subplot(223);plot(n2,xn2);grid;
xlabel('t/T');ylabel('x(n)');
xk2=fft(xn2);
subplot(224);stem(n2,abs(xk2),'.');grid;
xlabel('k');ylabel('X(k)');
%比较图像得,当N=48时有部分频谱超出了折叠频率而导致了频谱泄露
%而N=32时并未发生频谱泄露,因为其正好截取了两个整周期(不是四个?),

猜你喜欢

转载自blog.csdn.net/Mr_Lpi/article/details/87992826