📄 testsignal.m
字号:
%writen by Ziwei Chen
clc;close all;clear all;
%产生模拟信号x(t)
t=[0:0.00001:1];
f1=500;f2=2000;
xt=5*sin(2*pi*f1*t)+2.5*cos(2*pi*f2*t);
h1=figure;
set(h1,'name','进行频谱分析的信号(时间连续信号)');
plot(t,xt);
xlabel('时间t (单位:s)');ylabel('幅度x(t)');
title('模拟时间信号x(t)');
%计算采样周期Ts及采样点数N,对原时间信号进行截断,选取Tp时间进行观察
fs=10000;Ts=1/fs;
%F=2;
N=128; %N=fs/F
Tp=N*Ts %最小记录时间(对信号的观察时间)
%N=128;f=4;
fo=fopen('testdata.dat','w');%d:\MATLAB701\work
n=0:N-1;
%对模拟信号进行采样,得到序列信号x(n)
%for n=1:N
%x(n)=1+cos(2.*pi*n*f/N)+4*cos(2.*pi*4*n*f/N);
xn=5*sin(2*pi*f1*n*Ts)+2.5*cos(2*pi*f2*n*Ts);
xn=xn.*4096;
fprintf(fo,' .word %d\r\n',fix(xn));%fprintf(fo,' %x\r\n',fix(xn));
%end
fclose(fo);
XF=fft(xn)/N;
h2=figure;
set(h2,'name','频谱分析的结果(频谱信号:实部 蓝 ;虚部 红)');
plot(0:N-1,real(XF));
hold on;
plot(0:N-1,imag(XF),'r');
zoom on;
%对序列信号x(n)进行谱分析,得到信号的频谱
k=[0:N-1];
XK=fft(xn,N);
h3=figure;
set(h3,'name','频谱分析的结果(频谱信号)');
plot(fs*k/N,abs(XK));grid on;
set(gca,'XTickMode','manual','XTick',[0,500,1000,1500,2000]);
xlabel('频率f (单位:Hz)');ylabel('幅度|Z(j2\pif)|');
title('信号的幅度谱(离散频谱)');
%对序列信号x(n)的频谱X(k)进行IFFT,恢复原序列信号
xn2=(1/N)*conj(fft(conj(XK),N));
h4=figure;
set(h4,'name','恢复之后的时间离散信号');
stem(n,abs(xn2));
xlabel('时间n');ylabel('幅度x(n)');
title('恢复之后的离散时间信号x(n)')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -