产生一个正弦波,进行傅里叶变换,并绘图展示时域和频域
该正弦波的函数表示是
y
=
s
i
n
(
ω
0
t
)
\ y=sin(\omega_0 t) \
y=sin(ω0t)
在matlab中需要敲入公式
f
=
s
i
n
(
2
π
f
0
n
T
s
)
\ f = sin(2\pi f_0nT_s) \
f=sin(2πf0nTs)
T
s
\ T_s \,
Ts为采样周期,
f
s
\ f_s\,
fs为采样频率,
T
s
=
1
/
f
s
\ T_s=1/f_s\,
Ts=1/fs
ω
0
=
2
π
f
0
\ \omega_0=2\pi f_0 \,
ω0=2πf0
f
s
≥
2
f
0
\ f_s\geq 2f_0\,
fs≥2f0此处的
f
0
\ f_0\,
f0为中心频率
%% 产生一个正弦波,进行傅里叶变换,并绘图展示时域和频域
close all;clear;
%% 参数
N = 2000;
n = 1:1:N;
fs = 1000;
Ts = 1/fs;
f_0 = 100;%中心频率,也就是信号的频率
%% 时域信号
f = sin(2*pi*f_0*n*Ts);
%% 绘图
figure(1);
subplot(3,1,1)
plot(n/fs,f);%时域,plot(t,f)的横坐标是10,polt(f)的横坐标是1000
xlabel('t/s');title('时域信号');
ff = fft(f);
subplot(3,1,2);
plot(fs*n/N,abs(ff)/N);%频域
xlabel('Hz');title('频域');
subplot(3,1,3)
k = -(N-1)/2:(N-1)/2;%将原点移动到横坐标中心
plot(fs*k/N,abs(fftshift(ff))/N);%fftshift将零频分量移动到数组中心
xlabel('Hz');title('频域(零点在中间)');
法二
clear;clc;close all;
fs = 1000;%采样率
t=0:1/fs:1-1/fs;%0-1
Ts=1/fs;
f0=100;
y = sin(2*pi*f0*t);
figure(1);
subplot(2,1,1);
plot(t,y);
xlabel("t/s");
subplot(2,1,2);
y_f=fft(y);
plot(abs(y_f));
xlabel("f/Hz");
代码三:
- 生成正弦信号,进行傅里叶变换,标准化横轴
- 生成一个矩形信号,进行傅里叶变换观察,将矩形信号和正弦信号进行相乘,观察时域,相乘后的信号进行傅里叶变换,观察可知,实现了对矩形信号的频谱搬移。
clear ;close all;clc;
%% 正弦信号的时域和频域
f=1000;%采样频率,不是函数的频率
t=0:1/f:10-1/f;
y=sin(2*pi*25*t);
y_f=fft(y);
y_f_2=fftshift(y_f);
figure;
subplot(3,1,1);%时域信号
plot(t,y);
h = (0:length(y)-1)*f/length(y);
subplot(3,1,2);%频域信号
plot(h,abs(y_f));
subplot(3,1,3);%以0为中心
n=length(y);
h_s = (-n/2:n/2-1)*(f/n);
plot(h_s,abs(y_f_2));
%% 混频,频谱搬移
rect=zeros(1,length(t));
for i=4500:1:5500
rect(i)=1;
end
figure;
subplot(3,1,1);%矩形信号频域
rect_f=fft(rect);
plot(abs(fftshift(rect_f)));
subplot(3,1,2);%矩形信号*余弦信号
mult = rect.*y;
plot(mult);
subplot(3,1,3);%矩形信号*余弦信号的频域
mult_f=fft(mult);
plot(h_s,abs(fftshift(mult_f)));