文档章节

图像处理技术第五次实验

天蚕宝衣
 天蚕宝衣
发布于 2017/04/19 15:42
字数 1244
阅读 10
收藏 0
点赞 0
评论 0

一. 实验目的

掌握快速傅里叶变换。

二. 实验内容

通过Matlab软件,实现8个点的快速傅里叶变换,将时域信号上的8个点,转换成相应的频域信号上的8个点。

三. 实验步骤

1.      编写fft0.m文件。

 

%%

% 设定采样频率,每秒采集100个点。

fs = 100;

% 总共采样8个点。

N = 8;

n = 0 : N - 1;

% t是一个数组,数组长度是8,数组的下标是1-8。

% t中存储的是第1个点到第8个点的采样时刻。

t = n / fs;

%{

仿真原始信号。

设定正弦信号的频率。

设定仿真原始信号的频率为10Hz。

%}

f0 = 10;

% x是一个数组,数组长度是8,数组的下标是1-8。

% 数组中存储的值是8个信号相应的幅度。

x = sin(2 * pi * f0 * t); % 生成正弦信号。

figure(1);

subplot(131);

plot(t, x);               % 做正弦信号的时域波形。

xlabel('t');

ylabel('y');

title('正弦信号y=2*pi*f0*10t的时域波形');

% 画网格。

grid;

% 原始信号绘制完毕。

 

% 进行FFT变换并做频谱图。

% y = fft(x, N);%进行fft变换

%{

将x数组中存储的采样的信号中的8个点相应的幅值传进selfFFT函数。

返回的是矩阵F的最后一列。

y是一个列向量,存放的都是复数。

%}

y = selfFFT(x); % 进行fft变换。

mag = abs(y);                             % 求幅值

f = (0 : length(y) - 1)' * fs / length(y);% 进行对应的频率转换

figure(1);

subplot(132);

plot(f, mag);% 做频谱图

axis([0, 100, 0, 80]);

xlabel('频率(Hz)');

ylabel('幅值');

title('正弦信号y=2*pi*10t幅频谱图N=8');

grid;

 

2.      编写selfFFT.m文件。

function FN = selfFFT(x)

    % 数组x的长度,即N的值,即对信号进行采样的点的个数。

    L = length(x);

    % 此时L=N。

    % ceil函数取离它最近的且大于它的整数。

    %{

    因为若要对信号进行FFT,则采样点的个数必须是2的整数次幂,

    所以此处要对采样点的个数进行处理。

    得到的N值就为处理后的采样点的个数。

    %}

    r = ceil(log2(L));

    N = 2^(r);

   

    % 若采样点的个数大于x数组中存储的值的个数,则对数组x中剩余的幅值补0。

    x = [x ; zeros(N - L : 1)];

    % 返回的X是一个填充后的矩阵,填充的值是实数。

    X = fftMatrix(N);

    % 生成一个8行,4列的全0矩阵。

    F = zeros(N, r + 1);

    %{

    一列一列地填充这个矩阵。

    数组x中存储的都是采样点的幅值。

    只填充F矩阵的第一列。

    %}

    for j = 1 : N

        F(j, 1) = x(X(j, r));

    end

    % w是信号中的采样点转换到频域后对应的纵坐标。

    w = wj(N);

    % 填充F矩阵。

    for f = 2 : r + 1

        G = 2^(r - f + 1);

        J = 2^(f - 1);

        for g = 1 : G

            for j = 1 : J / 2

                % 填复数的实部。

                % 从F矩阵的第一行第二列开始。

                F(j + J * (g - 1), f) = F(j + J * (g - 1), f - 1) + w(G * (j - 1) + 1) * F(j + 2^(f - 2) + J * (g - 1), f - 1);

            end

            for j = (J / 2 + 1) : J

                F(j + J * (g - 1), f) = F(j - J / 2 + J * (g - 1), f - 1) + w(G * (j - 1) + 1) * F(j - J / 2 + 2^(f - 2) + J * (g - 1), f - 1);

            end

        end

    end

   

    % 将F矩阵的第r+1列填充到FN,所以FN是一个列向量。

    FN = F(:, r + 1);

end

function X = fftMatrix(N)

    % r: 采样点的个数是2的N次幂。

    r = log2(N);

    % X为N行r列的矩阵,矩阵中的值全部填0。

    X = zeros(N, r);

    % X(:, 1)表示X的第一列所有元素所组成的一个列向量。

    X(:, 1) = 1 : N;

    % 填充X矩阵的第2到r列的值。

    for f = 2 : r

        % 分组

        G = 2^(f - 1);

        for g = 1 : G

            % 个体

            J = 2^(r - f + 1);

            % 填充某一列的第j个值。

            for j = 1 : J

                %{

                mod(x, y): 求模;

                mod(x, y) = x - y. * floor(x. / y); (floor()向左取整)

                %}

                X(j + J * (g - 1), f) = X(2 * j - mod(g, 2) + J * 2 * (floor((g - 1) / 2)), f - 1);

           end

       end

    end

end

function w = wj(N)

    %{

    生成N×1全零阵。

    生成一个N行,1列的全0列向量。

    行数N是采样点的个数。

    %}

    w = zeros(N, 1);

    %{

    对列向量w进行添值,添的值128个采样点变换到频域后的纵坐标。

    该纵坐标的值为复数。

    %}

    for j = 0 : N - 1

        w(j + 1) = cos(2 * pi * j / N) - 1i * sin(2 * pi * j / N);

        1i;

    end

    %  填充后的列向量w中的值全为复数。

end

四.实验结果

 

图4-1

时域信号上的8个点,转换到频域后,每个点对应的频率如图4-2所示,对应的振幅如图4-3所示。

 

图4-2. 列向量f中存储的8个点频率

 

图4-3. 列向量mag中存储的8个点振幅

 

图4-4. 列向量y中存储的复数

通过快速傅里叶变换,时域信号上采样的8个点,转换到了频域上,通过频谱图表现了出来。

 

© 著作权归作者所有

共有 人打赏支持
天蚕宝衣
粉丝 18
博文 236
码字总数 178069
作品 0
天津
两把王者荣耀的时间学会Python图片打码技能——「实验一小时」今晚开启!

关注「实验楼」,每天分享一个项目教程 「 实验一小时 」今晚开启,实验楼技术天团带你一小时做一个项目。 今晚 7:30 ,曾任职于腾讯、盛大等一线互联网公司的天火老师,将在B站带来免费直播...

moy37rqw1jarn33bgzk ⋅ 04/18 ⋅ 0

CVPR 2018 | 英特尔实验室让 AI 在夜间也能拍出精彩照片

雷锋网(公众号:雷锋网)按:本文为雷锋字幕组编译的技术博客,原标题 AI is Taking Low-Light Photography to the Next Level,作者为 MICHAEL ZHANG。 翻译 | 程炜 整理 | 凡江 来自伊利诺伊...

雷锋字幕组 ⋅ 05/25 ⋅ 0

如何让摄像头变成“暗夜之眼”?英特尔开发了一套基于FCN的成像系统

翻译 | 林椿眄 出品 | AI 科技大本营(公众号ID:rgznai100) 【AI科技大本营导读】手机拍照的重要性不必多说,不论是国外的苹果、三星,还是国内的华为、小米,都在提升拍照性能上下足了功夫...

dqcfkyqdxym3f8rb0 ⋅ 05/13 ⋅ 0

【图像处理】空间滤波、中值滤波(Spatial Filtering and Median Filtering)

实验要求   编写一个能够完成两幅图像之间加、减、乘、除四种算术运算的函数。另外,对于两幅图像的乘法,所编写的乘法程序还要能够完成一幅图像乘以一个常数的功能。使用图Fig1.10(4)和F...

u013165921 ⋅ 01/15 ⋅ 0

C# 图像编程 (1) 准备工作; 你好,空姐; 为空姐照片添加特效

很久之前,就想写一系列C#图像编程的文章,但始终没有下笔,其主要原因有二:(1)我的C#图像处理库 Geb.Image 库在大幅度变动中;(2)没有找到一个很好的演示工具。现在,对于第一个问题,...

最美的回忆 ⋅ 2017/01/26 ⋅ 0

基于web的android图像处理示例(Win7+Apache+PHP+Matlab+Android)

本文将介绍C/S模式的图像处理系统。C/S的框架已经在[1]中作了简单的介绍。[2]中介绍了如何搭建基于android和WAMP5的B/S模式的本机测试平台。本系统是在[4]中介绍的基础上开发的,有关图像显示...

长平狐 ⋅ 2012/10/08 ⋅ 0

【图像处理】彩色图像处理(Color Image Processing)

实验要求   (1.a) 编写程序实现图6.23,程序的输入为图像中指定的两个灰度级范围。程序的输出为RGB 格式图像,其中,一个灰度级范围显示为指定的彩色,其余的像素以RGB 形式显示为与输入图像...

u013165921 ⋅ 01/15 ⋅ 0

斯坦福大学开发开源照相机

斯坦福大学开发开源照相机 开源照相机 美国斯坦福大学计算机科学和电子工程学教授Marc Levoy以及他的研究生Andrew Adams一道,正在研究一项“开源照相机”计划,希望通过完全开放的照相机软件...

老枪 ⋅ 2009/09/07 ⋅ 5

Python3:图片转字符画

防伪码:没有相当程度的孤独是不可能有内心的平和。 1、环境准备 参考:https://www.shiyanlou.com/courses/370/labs/1191/document 2、原理 字符画是一系列字符的组合,可以把字符看作是比较...

达日来 ⋅ 2017/08/25 ⋅ 0

高清缩略图之GraphicsMagick

GraphicsMagick号称图像处理领域的瑞士军刀,也称命令行版的Photoshop, 短小精悍的代码却提供了一个超棒、高效的工具和库集合,来处理图像的读取、写入和操作,支持超过88中图像格式,包括重...

一剑风徽 ⋅ 2012/11/18 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

服务网关过滤器

过滤器作用 我们的微服务应用提供的接口就可以通过统一的API网关入口被客户端访问到了。但是,每个客户端用户请求微服务应用提供的接口时,它们的访问权限往往都需要有一定的限制,系统并不会...

明理萝 ⋅ 7分钟前 ⋅ 1

【2018.06.21学习笔记】【linux高级知识 14.1-14.3】

14.1 NFS介绍 14.2 NFS服务端安装配置 14.3 NFS配置选项

lgsxp ⋅ 16分钟前 ⋅ 0

Day18 vim编辑模式、命令模式与练习

编辑模式 命令模式 :nohl 不高亮显示 :x与:wq类似,如果在更改文件之后操作,两者效果一样;如果打开文件,没有任何操作; :wq会更改mtime,但是:x不会。 练习题 扩展 vim的特殊用法 ht...

杉下 ⋅ 19分钟前 ⋅ 0

Enum、EnumMap、EnumSet

1、Enum 不带参数 public enum Car { AUDI { @Override public int getPrice() { return 25000; } }, MERCEDES { ......

职业搬砖20年 ⋅ 20分钟前 ⋅ 0

Java中的锁使用与实现

1.Lock接口 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。 在Lock出现之前,java程序是靠synchronized关键字实现锁功能的,而Java SE5之后,...

ZH-JSON ⋅ 21分钟前 ⋅ 0

线程组和 ThreadLocal

前言 在上面文章中,我们从源码的角度上解析了一下线程池,并且从其 execute 方法开始把线程池中的相关执行流程过了一遍。那么接下来,我们来看一个新的关于线程的知识点:线程组。 线程组 ...

猴亮屏 ⋅ 22分钟前 ⋅ 0

相对路径和绝对路径

基本概念   文件路径就是文件在电脑中的位置,表示文件路径的方式有两种,相对路径和绝对路径。在网页设计中通过路径可以表示链接,插入图像、Flash、CSS文件的位置。   物理路径:物理路...

临江仙卜算子 ⋅ 26分钟前 ⋅ 0

消息队列属性及常见消息队列介绍

什么是消息队列? 消息队列是在消息的传输过程中保存消息的容器,用于接收消息并以文件的方式存储,一个队列的消息可以同时被多个消息消费者消费。分布式消息服务DMS则是分布式的队列系统,消...

中间件小哥 ⋅ 29分钟前 ⋅ 0

java程序员使用web3j进行以太坊开发详解

如何使用web3j为Java应用或Android App增加以太坊区块链支持,教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤器...

笔阁 ⋅ 29分钟前 ⋅ 0

vim编辑模式、vim命令模式

vim编辑模式 使用vim filename 进入的界面是一般模式,在这个模式下虽然我们能够查看,复制,剪切,粘贴,但是不能编辑新的内容,如何能直接写入东西呢?这就需要进入编辑模式了,从一般模式...

李超小牛子 ⋅ 32分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部