傅里叶变换——Matlab实现

傅里叶变换

通过傅里叶变换,可以将混合信号解析成叠加的不同频率信号的振幅

代码见博客最后方


算法实现

  • 请编写 1024 点快速傅里叶变换的算法。自行生成一段混杂若干不同频率正弦的信号,测试所编写的快速傅里叶变换算法。

设计思路

  • 首先生成一个由多个不同频率的正弦函数叠加的信号,这里我的频率都是小于1/2pi的,因此其中必有周期2pi
  • 再在2pi周期里面等分取1024个点的值
  • 利用傅里叶变换后输出,观察每种频率信号对应的振幅

数值实验

  • 不同频率的振幅如下
    这里写图片描述

结果分析

  • 由于一开始生成的信号,其实是sin(x)跟sin(5x)叠加的信号,因此最后变换后得到的结果符合原结果

代码实现

clear;
format long;
A1 = [100,50];
A2 = [1,5];
N = 1024;
k = 5;

for n = 1:N
    x = (2*pi/N)*(n);
    y(n) = 10*sin(x) + 30*sin(5*x);
end

w = exp(1i*2*pi/N);
for m = 0:k
    c(m+1) = 0.0;

    for j = 0:N-1
        c(m+1) = c(m+1) + y(j+1)*(w^(m*j));
    end
    %c(m) = c(m)/N;
    result(m+1) = m;
end

%plot(result, c);
bar(result,c);



傅立叶变换在MATLAB中可以使用多个函数来实现。其中,fft2函数用于进行二维快速傅立叶正变换,ifft2函数用于进行二维快速傅立叶反变换。fftshift函数可以将傅立叶变换的原点移到中心,ifftshift函数则是fftshift的反变换。另外,real函数可以提取复数的实部,imag函数可以提取复数的虚部。\[1\] 下面是一个MATLAB代码的实例,展示了如何对数字图像进行傅立叶变换和反变换: ```matlab clc;clear;close all; % 读取图像 i = imread('lena.bmp'); i = rgb2gray(i); % 将真彩色图像转换为灰度图像 i = im2double(i); % 将数据类型转换为double,数值范围变为\[0,1\] % 进行快速傅立叶变换 i1 = fft2(i); % 将傅立叶变换进行象限转换,即将中心移到零点 i2 = fftshift(i1); % 求傅立叶变换结果的模,即傅立叶频谱 i3 = abs(i2); % 将傅立叶变换结果映射到较小的正数 i4 = log(i3+1); % 将变换的象限转换回去,即将中心复位 i5 = ifftshift(i2); % 进行快速傅立叶反变换 i6 = ifft2(i5); % 显示结果图像 subplot(131);imshow(i);title('原图'); subplot(132);imshow(i4,\[\]);title('傅立叶变换频谱'); subplot(133);imshow(i6);title('傅立叶逆变换图像'); ``` 另外,下面是另一个MATLAB代码的实例,展示了如何对图像进行傅立叶变换和反变换: ```matlab % 读取图像 R = imread("img/test2.png"); % 将图片变为灰度图像 I = rgb2gray(R); % 进行傅立叶变换 J = fft2(I); % 图像平移 L = fftshift(J); % 平移回来 M = ifftshift(L); % 傅立叶反变换 M = ifft2(M); % 显示结果图像 figure; subplot(121); imshow(I); title('原图'); subplot(122); imshow(uint8(M)); title('反变换'); ``` 这些代码示例演示了如何使用MATLAB实现傅立叶变换和反变换,并显示结果图像。你可以根据自己的需要进行修改和调整。 #### 引用[.reference_title] - *1* *2* [傅里叶变换的相关实验——matlab实现](https://blog.csdn.net/xcz8023/article/details/126413641)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [图像傅里叶变换MATLAB实现](https://blog.csdn.net/qq_45735233/article/details/112755443)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值