博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数字信号处理实验(一)——DTFT
阅读量:5875 次
发布时间:2019-06-19

本文共 3065 字,大约阅读时间需要 10 分钟。

1、MATLAB自编绘图函数

function [] = signal_write(X,w,flag)% X:数据% w:频率向量 magX=abs(X);angX=angle(X); realX=real(X);imagX=imag(X);if(flag == 1)    figure();    magX=abs(X);angX=angle(X);    realX=real(X);imagX=imag(X);    subplot(2,2,1);plot(w/pi,magX);grid    xlabel('以pi为单位的频率');title('幅度部分');ylabel('幅度')    subplot(2,2,3);plot(w/pi,angX);grid    xlabel('以pi为单位的频率');title('相角部分');ylabel('弧度')    subplot(2,2,2);plot(w/pi,realX);grid    xlabel('以pi为单位的频率');title('实部');ylabel('实部')    subplot(2,2,4);plot(w/pi,imagX);grid    xlabel('以pi为单位的频率');title('虚部');ylabel('虚部')endif(flag == 2)    plot(w/pi,magX);grid    xlabel('以pi为单位的频率');title('幅度部分');ylabel('幅度')endif(flag == 3)    plot(w/pi,angX);grid    xlabel('以pi为单位的频率');title('相角部分');ylabel('弧度')endif(flag == 4)    plot(w/pi,realX);grid    xlabel('以pi为单位的频率');title('实部');ylabel('实部')endif(flag == 5)    plot(w/pi,imagX);grid    xlabel('以pi为单位的频率');title('虚部');ylabel('虚部')end

 

2、DTFT变换函数

function[X]=dtft(x,n,w,flag)%计算离散时间付里叶变换%[X]=dtft(x,n,w)%X=在w频率点上的DTFT数组%x=n点有限长度序列%n=样本位置向量%w=频率点位置向量X = x * (exp(-j).^(n' * w)); if(flag == 1)    signal_write(X,w,1);end

 

3、采样代码

function [  ] = caiyang(Fs,N,jt,flag)%UNTITLED3 此处显示有关此函数的摘要%   此处显示详细说明%   Dt  模拟时间间隔:在特定精度下信号为模拟的 %   t   模拟时刻序列 %   n   离散时间索引%   Ts  采样周期 %   Fs  采样频率%   xa  在特定精度下,由离散信号逼近模拟信号%   jt  是否需要重构%   flag  5  第五题 %         6  第六题Dt=0.00005;             % 模拟时间间隔:在特定精度下信号为模拟的Ts=1/Fs;                % 采样周期 n=-N:1:N;               % 离散时间索引nTs=n*Ts;               % 序列时刻索引t=-N*Ts:Dt:N*Ts;        % 模拟时刻序列 if flag == 5   xa=exp(-1000*abs(t));       % 在特定精度下,由离散信号逼近模拟信号   x1=exp(-1000*abs(nTs));     % Fs=5000 样本/s:x1为采样后的离散时间序列 endif flag == 6   xa=sin(1000*pi*t);       % 在特定精度下,由离散信号逼近模拟信号   x1=sin(1000*pi*nTs);     % Fs=5000 样本/s:x1为采样后的离散时间序列    endif flag == 7    xa = sin(20*pi*t + pi/4);    x1 = sin(20*pi*nTs + pi/4);endK  = 500;                      % 对pi进行K等分:相当于对单位园2pi进行1000等分 dk = pi/K;                     % pi 的等分步进索引 w  = 0 : dk : pi;              % 角度步进索引 X  = x1 * exp(-j* n'*w);       % 对x1序列做离散傅立叶变换 Xr = real(X);w  = [-fliplr(w),w(2:end)];    % 定义w负半轴 Xr = [fliplr(Xr),Xr(2:end)];   % 由于实部偶对称,得到Xr的负半轴  if jt == 1   figure();   % 绘出xa   subplot(3,1,1)   plot(t*1000,xa);hold on            % 绘出x(jw)   stem(n*Ts*1000,x1,'r.'),hold off,title('时域波形')    % 绘出以pi归一化的数字频率对应的频域实部波形   subplot(3,1,2);plot(w/pi,Xr);title('频域波形')           subplot(3,1,3)   chonggou(x1,Fs,N);endif jt == 0   figure();   % 绘出xa   subplot(2,1,1);   plot(t*1000,xa);hold on            % 绘出x(jw)   stem(n*Ts*1000,x1,'r.'),hold off,title('时域波形')    % 绘出以pi归一化的数字频率对应的频域实部波形   subplot(2,1,2);plot(w/pi,Xr);title('频域波形')      end

 

4、重构代码

function [  ] = chonggou(x1,Fs,N)%UNTITLED4 此处显示有关此函数的摘要%   此处显示详细说明%   x1 抽样序列%   Fs 采样率%   t  时间轴%   Dt 离散间隔,模拟信号Dt  = 0.00005;             % 模拟时间间隔:在特定精度下信号为模拟的n   = -N:N;nTs = n/Fs;t   = -N/Fs:Dt:N/Fs;        % 模拟时刻序列 xa  = x1 * sinc(Fs*(ones(length(nTs),1) * t-nTs'*ones(1,length(t))));      % 内插重构plot(t*1000,xa, 'k' ),hold onstem(nTs*1000,x1, 'r.' ),hold off ,title('重构波形' )axis([-N/Fs*1000,N/Fs*1000,min(x1),max(x1)]);end

转载地址:http://uhzix.baihongyu.com/

你可能感兴趣的文章
Scrum实施日记 - 一切从零开始
查看>>
关于存储过程实例
查看>>
配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...
查看>>
AIX 7.1 install python
查看>>
PHP盛宴——经常使用函数集锦
查看>>
重写 Ext.form.field 扩展功能
查看>>
Linux下的搜索查找命令的详解(locate)
查看>>
福利丨所有AI安全的讲座里,这可能是最实用的一场
查看>>
开发完第一版前端性能监控系统后的总结(无代码)
查看>>
Python多版本情况下四种快速进入交互式命令行的操作技巧
查看>>
MySQL查询优化
查看>>
【Redis源码分析】如何在Redis中查找大key
查看>>
关于链接文件的探讨
查看>>
android app启动过程(转)
查看>>
Linux—源码包安装
查看>>
JDK8中ArrayList的工作原理剖析
查看>>
安装gulp及相关插件
查看>>
如何在Linux用chmod来修改所有子目录中的文件属性?
查看>>
Applet
查看>>
高并发环境下,Redisson实现redis分布式锁
查看>>