文档章节

图像处理技术第五次实验

天蚕宝衣
 天蚕宝衣
发布于 2017/04/19 15:42
字数 1244
阅读 12
收藏 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个点,转换到了频域上,通过频谱图表现了出来。

 

© 著作权归作者所有

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

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

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

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

雷锋字幕组
05/25
0
0
如何让摄像头变成“暗夜之眼”?英特尔开发了一套基于FCN的成像系统

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

dqcfkyqdxym3f8rb0
05/13
0
0
【图像处理】空间滤波、中值滤波(Spatial Filtering and Median Filtering)

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

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

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

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

没有更多内容

加载失败,请刷新页面

加载更多

centos7安装rsync及两台机器进行文件同步

centos7安装rsync及两台机器进行文件同步 2017年12月21日 11:17:46 码农下的天桥 阅读数:2210 标签: centosrsync同步 更多 个人分类: 后端 所属专栏: 研发模式及运维 版权声明:本文为博...

linjin200
21分钟前
1
0
jpg、jpeg、png... 的区别

jpg、jpeg、png... 的区别 对于做设计这一行的人来说,这几个图片格式是最常用的,也是最常见的,几乎每一天都要与他们打交道。 刚刚入门的新人通常不知道在什么地方如何使用他们或者说如何更...

DemonsI
39分钟前
5
0
白话SpringCloud | 第十章:路由网关(Zuul)进阶:过滤器、异常处理

前言 简单介绍了关于Zuul的一些简单使用以及一些路由规则的简单说明。而对于一个统一网关而言,需要处理各种各类的请求,对不同的url进行拦截,或者对调用服务的异常进行二次处理等等。今天,...

oKong
44分钟前
2
0
Character的static方法

基本类型char的包装类是Character,使用的比较多,大家是比较熟悉的。 我只是觉得里面有很多static方法,平时不怎么用,学习一下怎么实现的,或许日后就用到了。 static int compare(char x,...

woshixin
57分钟前
2
0
正则介绍_sed

10月17日任务 9.4/9.5 sed sed工具 匹配打印 -n 只打印匹配行,不然其他行也会打印出来 p 打印(配合-n使用) [root@centos7 tmp]# sed -n '/root/'p passwd root:x:0:0:root:/root:/bin/ba...

robertt15
57分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部