赞
踩
首先声明:我是MATLAB初学者,只做笔记记录。
clc;
close all;
fdata=160*1000; % 数据速率160k
T=1/fdata; %信号周期
N_sample=10; %每个周期的采样点数
dt=T/N_sample;
d0_1=[ones(1,N_sample/2),-1*ones(1,N_sample/2)];
d0_2=[-ones(1,N_sample/2),ones(1,N_sample/2)];
d1_1=[ones(1,N_sample)];
d1_2=-1*ones(1,N_sample);
N_data=100;
fm0_seq=randi([0,1],1,N_data); % 产生N_data个0 1 交替的序列
FM0_WAVE=[];
if fm0_seq(1)==0 %先判断第一个数据是 0 还是 1;
FM0_WAVE=[FM0_WAVE d0_1];
else
FM0_WAVE=[FM0_WAVE d1_1];
end
for i=2:N_data
if FM0_WAVE(length(FM0_WAVE))==-1
if fm0_seq(i)==0
FM0_WAVE=[FM0_WAVE d0_1];
else
FM0_WAVE=[FM0_WAVE d1_1];
end
else
if fm0_seq(i)==0
FM0_WAVE=[FM0_WAVE d0_2];
else
FM0_WAVE=[FM0_WAVE d1_2];
end
end
end
fs=1/dt; %采样频率
N_all=N_data*N_sample; %总的采样点数
df=fs/N_all;
t=0:dt:(N_all-1)*dt;
f=0:df:(N_all-1)*df;
sf=fft(FM0_WAVE);
sf=fftshift(sf); %fft三件套
f=f-N_all*df/2;
subplot(2,1,1),plot(t,FM0_WAVE);
axis([0 (N_all-1)*dt -2 2]);
subplot(2,1,2),plot(f/1000,abs(sf));
xlabel("频率/kHz")
可以多运行几次,因为数据是随机的,每次的频谱也不一样。
注意3个要素:采样频率、采样点数、频率分辨率(三者中只有两个变量是独立的)。
MATLAB是如何构建FFT算法的呢?MATLAB在计算时并不关注采样频率,也不关注采样间隔,只关注采样点数,即做多少个点的FFT,而我们想分析信号的频谱,就必须规定采样频率或者频率分辨率(二者取其一),并用plot函数(构成一 一映射关系)将其绘制即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。