Matalab 实现正余弦函数的傅里叶变化与反傅里叶变化

Matalab 实现正余弦函数的傅里叶变化与反傅里叶变化

这是《通信原理》课程的第一次作业,本文介绍了如何使用 MATLAB 实现正余弦函数的傅里叶变换与反傅里叶变换,并附带了相应的代码和实现效果图。在这过程中,还会涉及一些必要的知识点。

1. 实现效果图

matalab效果图

2.代码

%test1:不同的正弦余弦信号然后经过傅里叶变化后画图

x = linspace(0, 20*pi, 100);    %生成x的值,值的范围为(020*pi),共生成100的点

% 计算正弦函数和余弦函数的值,自己写的正弦余弦函数,可以根据自己的需求进行更改函数
y_sin = 2*sin(x);
y_cos = 2*cos(3*pi*x);

% 使用fft函数进行傅里叶变换
Y_sin = fft(y_sin);
Y_cos = fft(y_cos);

% 计算频率轴上的数据点
f = linspace(0, 1, length(Y_sin));

% 绘制原正弦函数的图像
subplot(2, 3, 1); % 创建一个 2x3 的图像区域,并选择第一个子图
plot(x, y_sin, 'b', 'LineWidth', 2); % 使用蓝色线条绘制正弦函数
title('Sine Function');
xlabel('x');
ylabel('sin(x)');

% 绘制原余弦函数的图像
subplot(2, 3, 2); % 选择第二个子图
plot(x, y_cos, 'r', 'LineWidth', 2); % 使用红色线条绘制余弦函数
title('Cosine Function');
xlabel('x');
ylabel('cos(x)');


% 绘制函数进行傅里叶变换结果的图像
subplot(2, 3, 3); % 
stem(f, abs(Y_sin), 'b', 'LineWidth', 2); % 使用蓝色柱状图绘制正弦函数的频谱幅度
title('Sine Function Fourier Transform');
xlabel('Frequency (Hz)');
ylabel('Magnitude');

subplot(2, 3, 4); % 
stem(f, abs(Y_cos), 'r', 'LineWidth', 2); % 使用红色柱状图绘制余弦函数的频谱幅度
title('Cosine Function Fourier Transform');
xlabel('Frequency (Hz)');
ylabel('Magnitude');


% 进行反傅里叶变换并绘制图像
subplot(2, 3, 5); % 第五个
y_sin_reconstructed = ifft(Y_sin); % 对正弦函数的频谱进行反傅里叶变换
plot(x, real(y_sin_reconstructed), 'b', 'LineWidth', 2); % 使用蓝色线条绘制反傅里叶变换结果
title('Sine Function Inverse Fourier Transform');
xlabel('x');
ylabel('Amplitude');

subplot(2, 3, 6); % 第六个
y_cos_reconstructed = ifft(Y_cos); % 对余弦函数的频谱进行反傅里叶变换
plot(x, real(y_cos_reconstructed), 'r', 'LineWidth', 2); % 使用红色线条绘制反傅里叶变换结果
title('Cosine Function Inverse Fourier Transform');
xlabel('x');
ylabel('Amplitude');

3. 代码解析

在给定的代码中,实现了以下步骤:

  1. 生成自变量 x 的值,范围为 (0, 20π),共生成 100 个点。
  2. 计算正弦函数和余弦函数的值。
  3. 使用 fft 函数对正弦函数和余弦函数进行傅里叶变换,得到频域表示。
  4. 计算频率轴上的数据点。
  5. 绘制原始正弦函数和余弦函数的图像。
  6. 绘制正弦函数和余弦函数经过傅里叶变换后的频域表示图像。
  7. 使用 ifft 函数对频域数据进行反傅里叶变换,得到恢复的时域信号。
  8. 绘制正弦函数和余弦函数进行反傅里叶变换后的恢复时域信号图像。

4.傅里叶变换简介

傅里叶变换是一种将时域信号转换为频域信号的数学工具。它可以将一个信号分解成一系列复杂振幅和相位的正弦和余弦函数。傅里叶变换在信号处理、通信和图像处理等领域有广泛应用。

傅里叶变换的公式如下:
F ( k ) = ∫ − ∞ ∞ f ( x ) ⋅ e − 2 π i k x d x F(k) = \int_{-\infty}^{\infty} f(x) \cdot e^{-2\pi i k x} dx F(k)=f(x)e2πikxdx

其中, f ( x ) f(x) f(x) 为原始信号, F ( k ) F(k) F(k) 为频域表示。

5. 傅里叶逆变换公式

傅里叶逆变换是将频域信号转换回时域信号的过程。傅里叶逆变换的公式如下:
f ( x ) = ∫ − ∞ ∞ F ( k ) ⋅ e 2 π i k x d k f(x) = \int_{-\infty}^{\infty} F(k) \cdot e^{2\pi i k x} dk f(x)=F(k)e2πikxdk

其中, f ( x ) f(x) f(x) 为恢复的时域信号, F ( k ) F(k) F(k) 为频域信号。

6. MATLAB 中的 fft 和 ifft 函数

MATLAB 提供了 fft (Fast Fourier Transform) 函数和 ifft (Inverse Fast Fourier Transform) 函数,用于进行快速傅里叶变换和反傅里叶变换。

  • fft 函数将时域信号转换为频域信号,返回复数形式的频域表示.
  • ifft 函数将频域信号转换为时域信号,返回恢复的时域信号。

fft函数

MATLAB中的fft函数用于对给定的离散序列进行快速傅里叶变换,并返回一个长度为N的复数向量。当输入向量的长度不是2的幂时,会自动补零到2的幂次方,并返回长度为N=2^nextpow2(length(x))的向量。

例如,对一个长度为N的向量x进行fft变换:

y = fft(x);

将得到一个长度为N的符合频率表示的复数列,其中y(1)为直流分量(频率为0), y(2:N/2+1)为正频率分量,y(N: -1:N/2+2)为负频率分量。

ifft函数

MATLAB中的ifft函数用于对给定的频域序列进行傅里叶逆变换,并返回一个长度为N的复数向量。需要注意的是,ifft函数返回的向量不需要进行归一化,若需要将ifft函数得到的结果作为信号的时域表达式,则需要将它除以N进行归一化处理。

例如,对一个长度为N的向量y进行ifft变换:

x = ifft(y);

将得到一个长度为N的符合时域表示的复数列,其中x(1)为直流分量(时间为0), x(2:N/2+1)为正时间分量,x(N: -1:N/2+2)为负时间分量。

最后:
以上是个人的课程作业记录,欢迎大家提出改进意见。😊

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写的什么石山代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值