精华内容
下载资源
问答
  • (三)离散周期信号的频谱 对于一个离散时间周期信号x(n)x(n)x(n),可以通过IDFS从它的周期离散频谱X(kΩ0)X(k\Omega_0)X(kΩ0​)求得原始序列x(n)x(n)x(n),它们一一对应的关系。也就是说,用有限项的复指数...

    (三)离散周期信号的频谱

    对于一个离散时间周期信号x(n)x(n),可以通过IDFS从它的周期性离散频谱X(kΩ0)X(k\Omega_0)求得原始序列x(n)x(n),它们是一一对应的关系。也就是说,用有限项的复指数序列来表示周期序列x(n)x(n)时,不同的x(n)x(n)反映在具有不同的复振幅X(kΩ0)X(k\Omega_0),所以X(kΩ0)X(k\Omega_0)完整地描述了x(n)x(n)。由于它是数字频率的函数,所以把离散时间傅里叶级数的系数X(kΩ0)X(k\Omega_0)的表示式(3)称为周期序列在频域的分析。如果x(n)x(n)是从连续周期信号x(t)x(t)采样得来,那么x(n)x(n)的频谱X(kΩ0)X(k\Omega_0)是否等效于x(t)x(t)的频谱X(kw0)X(kw_0)

    通过以上分析,可以得出以下结论:

    1)离散时间周期信号的频谱X(kΩ0)X(k\Omega_0)是具有谐波性的周期序列,而连续时间周期信号的频谱X(kw0)X(kw_0)是具有谐波性的非周期序列。X(kΩ0)X(k\Omega_0)可以看作是X(kw0)X(kw_0)的近似式,近似程度与采样周期T的选取有关。

    2)在满足采样定理条件下,从一个连续时间、频带有限的周期信号得到的周期序列,其频谱在Ω<π|\Omega|<\pif<(fs/2)|f|<(f_s/2)范围内等于原始信号的离散频谱。因此可以利用数值计算的方法,方便地截取一个周期的样点x(n)x(n),并按式(4)准确地求出连续周期信号的各谐波分量X(kw0)X(kw_0)

    3)在不满足采样定理条件下,由于X(kΩ0)X(k\Omega_0)出现频率混叠,这时就不能用X(kΩ0)X(k\Omega_0)准确地表示X(kw0)X(kw_0)。但在误差允许的前提下,可以用一个周期的X(kΩ0)X(k\Omega_0)近似地表示X(kw0)X(kw_0),为了减小近似误差,应尽可能地提高采样频率。

    (四)混叠与泄露

    1. 混叠

    从时域采样定理知道,当采样频率ws<2wmw_s<2w_m情况下,由于出现频率混叠现象而无法恢复原信号频谱,因而人们不能从时域样点准确地重建原连续信号。同理,在频域的采样间隔w0>πtmw_0>\frac{\pi}{t_m}情况下,由于出现信号波形混叠而无法恢复原频谱所对应的信号,因而人们不能从频域样点重建原连续频谱。对于周期信号而言,混叠所造成的影响与上述的结论一样,只是这时的频谱是离散的而且具有谐波性。

    根据离散傅里叶级数是一个有限项级数这一特点,从理论上阐明了离散时间周期信号的频谱是一个周期性且只具有有限数字频率分量的离散频谱。因此对那些具有无限频谱分量的连续时间周期信号(如矩形、三角形等脉冲串),必然无法准确地从有限样点求得原始周期信号的频谱,而只能通过恰当地提高采样率,增加样点数,来减小混叠对频谱分析所造成的影响。

    1. 泄露

    离散时间周期信号除了因采样频率低于采样定理要求,使频谱分析出现混叠误差以外,还会由于截取波形的时间长度不恰当造成泄露误差。这种情况在实际中往往是由于事先不知道信号的确切周期所致。又称为频谱泄露或功率泄露。可能会导致出现频谱混叠现象。由此可见,泄露与混叠是两种不同的现象,为了减小泄露误差,x(n)x(n)必须取自一个基本周期或基本周期的整倍数为宜。若待分析的周期信号事先不知道其确切的周期,则可截取较长时间长度的样本进行分析。当然,必须在采样频率满足采样定理的条件下进行,否则混叠与泄露同时存在,给频谱分析造成更大的困难。

    展开全文
  • 2.掌握 Matlab 中一些基本函数的建立方法 3.要求掌握频率域采样会引起时域周期化的概念 4.频率域采样定理及其对频域采样点数选择的指导作用 二、实验内容 (1)实验原理与方法 时域采样定理的要点: 频域采样定理的...

    一、实验目的
    1.熟悉Matlab环境。
    2.掌握 Matlab 中一些基本函数的建立方法
    3.要求掌握频率域采样会引起时域周期化的概念
    4.频率域采样定理及其对频域采样点数选择的指导作用

    二、实验内容

    (1)实验原理与方法

    时域采样定理的要点是:
    在这里插入图片描述
    频域采样定理的要点是:
    在这里插入图片描述
    在数字信号处理的应用中,只要涉及时域或者频域采样,都必须服从这两个采样理论的要点。对比上面叙述的时域采样原理和频域采样原理,得到一个有用的结论,这两个采样理论具有对偶性:“时域采样频谱周期延拓,频域采样时域信号周期延拓”。因此放在一起进行实验。

    (2)实验内容及步骤
    1.编写程序,产生以下离散序列:
    (1) % f(n)=δ(n) (-3<n<4)

    clc
    clear
    n1=-3;n2=4;n0=0;
    n=n1:n2;
    x=[n==n0];
    stem(n,x,'filled');
    axis([n1,n2,0,1.1*max(x)]);
    xlabel('时间(n)');
    ylabel('幅度x(n)');
    title('单位脉冲序列');
    

    结果:
    在这里插入图片描述
    (2) %f(n)=u(n) (-5<n<5)

    clc
    clear
    n1=-5;n2=5;n0=0;
    n=n1:n2;
    x=[n>=n0];
    stem(n,x,'filled');
    axis([n1,n2,0,1.1*max(x)]);
    xlabel('时间(n)');
    ylabel('幅度x(n)');
    title('单位阶跃序列');
    box
    

    结果:
    在这里插入图片描述
    在这里插入图片描述

    clc
    clear
    n1=16;a=-0.1;w=1.6*pi;
    n=0:n1;
    x=exp((a+j*w)*n);
    subplot(2,2,1);
    plot(n,real(x));
    title('复指数信号的实部');
    subplot(2,2,3);
    stem(n,real(x),'filled');
    title('复指数序列的实部');
    subplot(2,2,2);
    plot(n,imag(x));
    title('复指数信号的虚部');
    subplot(2,2,4);
    stem(n,imag(x),'filled');
    title('复指数序列的虚部');
    box  %box on
    

    结果:
    在这里插入图片描述
    (4) %f(n)=3sin(nπ/4) (0<n<20); 能够算出来周期为8

    f= 1/8;
    Um=3;
    nt=2;    %显示的周期数目
    N=32; T=1/f;
    dt=T/N;  %采样间隔
    n=0:nt*N-1;
    tn=n*dt;
    x=Um*sin(2*f*pi*tn);
    subplot(2,1,1);
    plot(tn,x);
    axis([0,nt*T,1.1*min(x),1.1*max(x)]);
    ylabel('x(t)');
    subplot(2,1,2);
    stem(tn,x);
    axis([0,nt*T,1.1*min(x),1.1*max(x)]);
    ylabel('x(n)');
    box  on   %对当前图形右边及上边加边框
    

    结果:
    在这里插入图片描述
    (5) 一个连续的周期性方波信号频率为200Hz,信号幅度在-1~+1V之间,要求在图形窗口上显示其两个周期的波形。以4kHz的频率对连续信号进行采样,编写程序生成连续信号和其采样获得的离散信号波形。

    clc
    clear
    f=200;
    nt=2;   %显示周期数
    N=20;T=1/f;
    dt=T/N; %每个周期显示20个离散值,4kHz的频率
    n=0:nt*N-1;tn=n*dt;
    x=square(2*f*pi*tn,25);   %其中25为占空比
    subplot(2,1,1);
    plot(tn,x);
    axis([0,nt*T,1.1*min(x),1.1*max(x)]);
    ylabel('x(t)');
    subplot(2,1,2);
    stem(tn,x);
    axis([0,nt*T,1.1*min(x),1.1*max(x)]);
    ylabel('x(n)');
    box
    

    结果:
    在这里插入图片描述
    (6) 时域采样理论的验证程序清单

    clc
    clear
    % 时域采样理论验证程序exp1a.m
    Tp=64/1000;		%观察时间Tp=64微秒
    %产生M长采样序列x(n)
    % Fs=1000;T=1/Fs;
    % M=Tp*Fs;n=0:M-1;
    % Fs=300;T=1/Fs;
    % M=Tp*Fs;n=0:M-1;
    Fs=200;T=1/Fs;
    M=Tp*Fs;n=0:M-1;
    A=444.128;alph=pi*50*2^0.5;omega=pi*50*2^0.5;
    xnt=A*exp(-alph*n*T).*sin(omega*n*T);
    Xk=T*fft(xnt,M);  %M点FFT[xnt)]
    yn='xa(nT)';
    subplot(3,2,5);
    tstem(xnt,yn);		%调用自编绘图函数tstem绘制序列图
    box on;
    title('(c) Fs=1000Hz');
    k=0:M-1;fk=k/Tp;
    subplot(3,2,6);
    plot(fk,abs(Xk));
    title('(c) T*FT[xa(nT)],Fs=1000Hz');
    xlabel('f(Hz)');
    ylabel('幅度');
    axis([0,Fs,0,1.2*max(abs(Xk))])
    %=================================================
    function tstem(xn,yn)
    %时域序列绘图函数
    % xn:信号数据序列,yn:绘图信号的纵坐标名称(字符串)
    n=0:length(xn)-1;
    stem(n,xn,'.');
    box on
    xlabel('n');
    ylabel(yn);
    axis([0,n(end),min(xn),1.2*max(xn)])
    end
    

    结果:
    在这里插入图片描述
    如图所示可见,采样序列的频谱的确是以采样频率为周期对模拟信号频谱的周期延拓。当采样频率为1000Hz时频谱混叠很小;当采样频率为300Hz时,在折叠频率150Hz附近频谱混叠很严重;当采样频率为200Hz时,在折叠频率110Hz附近频谱混叠更很严重。

    频域采样理论的验证程序清单

    clc
    clear
    %频域采样理论验证程序exp1b.m
    M=27;N=32;n=0:M;
    %产生M长三角波序列x(n)
    xa=0:floor(M/2);  
    xb= ceil(M/2)-1:-1:0; 
    xn=[xa,xb];
    Xk=fft(xn,1024);	%1024点FFT[x(n)], 用于近似序列x(n)的TF
    X32k=fft(xn,32);    %32点FFT[x(n)]
    x32n=ifft(X32k);	%32点IFFT[X32(k)]得到x32(n)
    X16k=X32k(1:2:N);	%隔点抽取X32k得到X16(K)
    x16n=ifft(X16k,N/2);%16点IFFT[X16(k)]得到x16(n)
    subplot(3,2,2);stem(n,xn,'.');
    box on
    title('(b) 三角波序列x(n)');
    xlabel('n');
    ylabel('x(n)');
    axis([0,32,0,20])
    k=0:1023;wk=2*k/1024;	%
    subplot(3,2,1);
    plot(wk,abs(Xk));
    title('(a)FT[x(n)]');
    xlabel('\omega/\pi');
    ylabel('|X(e^j^\omega)|');
    axis([0,1,0,200])
    k=0:N/2-1;
    subplot(3,2,3);
    stem(k,abs(X16k),'.');
    box on
    title('(c) 16点频域采样');
    xlabel('k');
    ylabel('|X_1_6(k)|');
    axis([0,8,0,200])
    n1=0:N/2-1;
    subplot(3,2,4);
    stem(n1,x16n,'.');
    box on
    title('(d) 16点IDFT[X_1_6(k)]');
    xlabel('n');
    ylabel('x_1_6(n)');
    axis([0,32,0,20])
    k=0:N-1;
    subplot(3,2,5);
    stem(k,abs(X32k),'.');
    box on
    title('(e) 32点频域采样');
    xlabel('k');
    ylabel('|X_3_2(k)|');
    axis([0,16,0,200])
    n1=0:N-1;
    subplot(3,2,6);
    stem(n1,x32n,'.');box on
    title('(f) 32点IDFT[X_3_2(k)]');
    xlabel('n');
    ylabel('x_3_2(n)');
    axis([0,32,0,20])
    

    结果:
    在这里插入图片描述
    tstem 程序清单

    %=======================tstem 程序清单====================
    function tstem(xn,yn)
    %时域序列绘图函数
    % xn:信号数据序列,yn:绘图信号的纵坐标名称(字符串)
    n=0:length(xn)-1;
    stem(n,xn,'.');box on
    xlabel('n');ylabel(yn);
    axis([0,n(end),min(xn),1.2*max(xn)])
    

    三、实验总结

    实验结果说明什么?
    时域采样理论的验证结果:
    由程序运行结果图6可见,采样序列的频谱的确是以采样频率为周期对模拟信号频谱的周期延拓。当采样频率为1000Hz时频谱混叠很小;当采样频率为300Hz时,在折叠频率150Hz附近频谱混叠很严重;当采样频率为200Hz时,在折叠频率110Hz附近频谱混叠更很严重。
    频域采样理论的验证的结果:
    该图验证了频域采样理论和频域采样定理。对信号x(n)的频谱函数X(e^jω)在[0,2π]上等间隔采样N=16时, N点IDFT[]得到的序列正是原序列x(n)以16为周期进行周期延拓后的主值区序列:在这里插入图片描述
    由于N<M,所以发生了时域混叠失真,因此。与x(n)不相同,如图7(c)和(d)所示。当N=32时,如图7(c)和(d)所示,由于N>M,频域采样定理,所以不存在时域混叠失真,因此与x(n)相同。

    展开全文
  • 离散余弦变换(Discrete Cosine Transform)本质上也是离散傅里叶变换(Discrete Fourier Transform),...所以,我们在构造离散信号的周期函数的时候,要对其进行偶延拓。1. 一维离散余弦变换首先,我们回想一下,信号...

    a838e4c429ecd331db7fa4a36c361c9a.png

    离散余弦变换(Discrete Cosine Transform)本质上也是离散傅里叶变换(Discrete Fourier Transform),但是只有实数部分。有这样一个性质:如果信号

    在给定区间内满足狄利赫里条件,且为实对称函数,则可以展开成仅含有余弦项的傅里叶级数,即离散余弦变换。所以,我们在构造离散信号的周期函数的时候,要对其进行偶延拓。

    1. 一维离散余弦变换

    首先,我们回想一下,信号

    离散傅里叶变换为

    设信号长度为

    ,然后对其进行偶延拓。

    如果序列中不包含0点,即定义域为

    ,则偶延拓后其对称中心为
    点,即
    ,此时其傅里叶变换可写为

    而如果序列包含0点,即定义域为

    ,偶延拓方式为
    ,即对称中心为
    。为方便,把
    右移
    变为
    ,则
    ,且
    。此时自变量
    的定语域为
    ,则其傅里叶变换可写为

    因为计算机一般从0开始,所以DCT的标准公式为

    系数是为了单位化基底,推导过程可参考这里。将标准DCT公式展开

    其中

    是系数矩阵

    矩阵内的元素为

    。(有兴趣的同学也可以验证一下,
    是单位正交矩阵)

    逆DCT变换为

    。(与逆傅里叶变换原理完全相同,不再赘述)

    2. 二维离散余弦变换

    先给出二维DCT的公式

    将上述DCT的公式展开

    看作是原始图像,则
    为DCT的结果。

    在数字图像处理中,处理的图像基本上都为方阵,即

    ,所以二维DCT可写为

    二维逆DCT变换为

    3. 二维图像的DCT

    我们先总结一下,DCT没有虚部,本质是傅里叶变换(无损)

    图像从空间域快速(没有虚部)的变换到了频率域。好像很好用的样子~

    先来试一下效果:对Lena进行DCT与iDCT,结果如图1所示。

    # 离散余弦变换,并获取其幅频谱
    img_dct = cv2.dct(np.float32(image))
    img_dct_log = 20 * np.log(abs(img_dct))
    # 逆离散余弦变换,变换图像回至空间域
    img_back = cv2.idct(img_dct)

    a56734392012632749c1314df675a79c.png
    图1 Lena的DCT与iDCT

    从图1中可以看到,左上角亮度高,即Lena的主要能量集中在左上角;而且,从其逆变换可看出,DCT为无损变换。

    其次,为了确定哪种能量、有多少能量集中在左上角,我对图1中的DCT of Lena以128像素为步长进行了裁剪,

    # 裁剪DCT of Lena
    for i in range(image_dct_1.shape[0]):
        for j in range(image_dct_1.shape[1]):
            if i > (256+128) or j > (256+128):
                image_dct_1[i, j] = 0  # 裁剪的实质为像素置0
            if i > 256 or j > 256:
                image_dct_2[i, j] = 0  # 裁剪的实质为像素置0
            if i > 128 or j > 128:
                image_dct_3[i, j] = 0  # 裁剪的实质为像素置0

    然后再对其进行逆DCT变换,结果如图2所示。

    fa11437ce370c899081e93f9546b3b5e.png
    图2 压缩(裁剪)DCT后进行iDCT的结果

    随着压缩比例的增大,图片中的细节部分逐渐消失。在back Lena 1中还可以明显的看到sharp的边缘,而back Lena 3中,虽然主要的信息还在,但明显的高频信息丢失了。因此,DCT使图片的低频成分集中在左上角。(对,你可能猜到了,这在图像压缩领域用的很多~)

    此部分的完整代码在我的Github中

    展开全文
  • 这样,光栅的条纹函数为周期性函数,因此,在条纹编码中我们只需记录一个周期的函数值(样本数),光栅的条纹函数的样本数可得到有效的压缩。然后在解码中通过简单的复制可恢复光栅条纹函数的全部样本值。采用这种方法,...
  • 由于用傅里叶变换轮廓术进行三维面形测量时, 测得变形光场空间有限函数, 故离散傅里叶变换时先要进行周期拓展, 如果拓展周期选择不当, 拓展后条纹将不连续, 对之进行傅里叶变换会产生频谱泄漏。 文章从理论上...
  • 图像的频谱分析有助于我们理解图像的二维傅里叶变换(离散周期),并且以直观的方式来展现图像的低通或高通滤波,然而如何获得图像的频谱呢?在matlab中只要短短的几行代码,就可以利用库中的函数轻松地做到。 ...

    实现图像的二维傅里叶变换的频谱图

    图像的频谱分析有助于我们理解图像的二维傅里叶变换(离散非周期),并且以直观的方式来展现图像的低通或高通滤波,然而如何获得图像的频谱呢?在matlab中只要短短的几行代码,就可以利用库中的函数轻松地做到。

    可是,在此过程中都发生了哪些数学变换,以及得到的频谱图的含义,以及二维傅里叶变换的执行过程…都被蒙在了暗盒里。此篇文章将以应用的角度来加深对二维傅里叶变换执行过程的理解。不过,谈不上实际应用,因为普通的二维傅里叶变换实在是…太!慢!了!

    由于我只熟悉java,所以用java来写。如果你熟悉的语言不是java并不会影响你对本文的理解,我会一步步解释,保证你用C/C++也能实现它。

    1. 图像矩阵f(x,y)装入二维数组

    这个简单,在双重循环里获取图像(i,j)坐标处的像素值(这里为了减少运算量,只获取了一个颜色通道),存到二维数组中待下一步操作

    for (int i = 0;i<width;i++) {
        for(int j=0;j<height;j++){
           pixel[i][j]=image.getRGB(i,j)<<24>>24&0xff;
        }
    }
    

    2.编写二维傅里叶变换类

    F(k,l)=x=0width1y=0height1f(x,y)ei2π(kxwidth+lyheight) F(k,l)=\sum_{x=0}^{width-1}\sum_{y=0}^{height-1} f(x,y) e^{-i2\pi(\frac{kx}{width}+\frac{ly}{height})}
    由欧拉公式:
    eix=cos(x)isin(x) e^{-ix}=cos(x)-isin(x)
    得:
    F(k,l)=x=0width1y=0height1f(x,y)[cos(2π(kxwidth+lyheight))isin(2π(kxwidth+lyheight))] F(k,l)=\sum_{x=0}^{width-1}\sum_{y=0}^{height-1} f(x,y)[cos(2\pi(\frac{kx}{width}+\frac{ly}{height}))-isin(2\pi(\frac{kx}{width}+\frac{ly}{height}))]
    即最终变换出的结果应该是复数的形式(re指实部,im指虚部)
    F(k,l)=re+iim F(k,l)=re+i*im
    所以在类中定义一个求实部re的方法和求虚部im的方法

    static double doDFTre(int pixel[][],int width,int height,int u,int v){
            double sum=0;
            for(int i=0;i<width;i++){
                for(int j=0;j<height;j++){
                    sum=sum+(pixel[i][j]*pow(-1,i+j)*cos(2*PI*u*i/width+2*PI*v*j/height));
                }
            }
            return sum;
        }//Real part
        static double doDFTim(int pixel[][],int width,int height,int u,int v){
            double sum=0;
            for(int i=0;i<width;i++){
                for(int j=0;j<height;j++){
                    sum=sum+(pixel[i][j]*pow(-1,i+j)*sin(2*PI*u*i/width+2*PI*v*j/height));
                }
            }
            return sum;
        }//Imaginary part
    

    图像的频谱图中每个像素点的值表示的是以幅值的对数来刻画的(可类比地震级、亮度级)
    求幅值Am
    Am=re2+im2 Am=\sqrt{re^2+im^2}
    进行对数变换
    lg(1+Am)2 方法的返回值是lg(1+Am)^2

        static int doDFTam(int pixel[][],int width,int height,int i,int j){
            Thread thread1=new Thread(()->{
                re=doDFTre(pixel,width,height,i,j);
            });
            Thread thread2=new Thread(()->{
                im=doDFTim(pixel,width,height,i,j);
            });
            thread1.start();
            thread2.start();
            Am=sqrt(pow(re,2)+pow(im,2));
            return (int)pow(log(1+Am),2.3)
    

    在多核处理器上,为了计算更快,可以分多个线程并发计算
    这里设了两个线程,一个求实部,一个求虚部

    3.将低频部分移动到频谱图中心

    以上得出的频谱图低频部分分散在四周,高频部分在中央,为了集中低频于中央,可在步骤1中对原图f(i,j)作如下变换得到u(i,j)再对u(i,j)作二维傅里叶变换(这部分我也不理解,只是套公式)
    u(i,j)=f(ij)(1)i+j u(i,j)=f(i,j)(-1)^{i+j}

    4.运行

    可以再写一个守护线程用来计时

    5.完整的代码

    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import static java.lang.Math.*;
    
    public class Fourier2D {
        static int logam=0;
        public static void main(String[] args) {
            Thread timethread=new Thread(()->{
                int i=0;
                while(true){
                    System.out.println("Time Consumption  "+i+"  sec");
                    i=i+1;
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            });//计时器
            timethread.setDaemon(true);
            timethread.setPriority(1);
            timethread.start();
            
            try {
                BufferedImage image= ImageIO.read(new File("C:\\Users\\Unicode718A\\Desktop\\学习笔记\\IO\\in.png"));
                int width=image.getWidth();
                int height=image.getHeight();
    
                BufferedImage outimage=new BufferedImage(width,height,2);
                int pixel[][]=new int[width][height];
    
    
                for (int i = 0;i<width;i++) {
                    for(int j=0;j<height;j++){
                        pixel[i][j]=image.getRGB(i,j)<<24>>24&0xff;
                    }
                }
                for(int i=0;i<width;i++){
                    for(int j=0;j<width;j++){
                        logam=DFT.doDFTam(pixel,width,height,i,j);
                        if(logam>255){
                            logam=255;
                        }//8-bit png图片亮度等级最大只有255
                        if(logam<0){
                            logam=0;
                        }
                        outimage.setRGB(i,j,255<<24|logam<<16|logam<<8|logam);
                    }
                }
                ImageIO.write(outimage,"png",new File("C:\\Users\\Unicode718A\\Desktop\\学习笔记\\IO\\out.png"));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    class DFT{
        static double re;
        static double im;
        static double Am;
    
        static double doDFTre(int pixel[][],int width,int height,int u,int v){
            double sum=0;
            for(int i=0;i<width;i++){
                for(int j=0;j<height;j++){
                    sum=sum+(pixel[i][j]*pow(-1,i+j)*cos(2*PI*u*i/width+2*PI*v*j/height));
                }
            }
            return sum;
        }//Real part
        static double doDFTim(int pixel[][],int width,int height,int u,int v){
            double sum=0;
            for(int i=0;i<width;i++){
                for(int j=0;j<height;j++){
                    sum=sum+(pixel[i][j]*pow(-1,i+j)*sin(2*PI*u*i/width+2*PI*v*j/height));
                }
            }
            return sum;
        }//Imaginary part
        static int doDFTam(int pixel[][],int width,int height,int i,int j){
            Thread thread1=new Thread(()->{
                re=doDFTre(pixel,width,height,i,j);
            });//线程1
            Thread thread2=new Thread(()->{
                im=doDFTim(pixel,width,height,i,j);
            });//线程2
            thread1.start();
            thread2.start();
            try {
                thread1.join();
                thread2.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Am=sqrt(pow(re,2)+pow(im,2));
            return (int)pow(log(1+Am),2.3);//Log Transformation of Amplitude
        }
    }
    

    6.结果展示

    100 x 100像素原图

    对应频谱图
    在这里插入图片描述
    256 x 256像素的原图

    对应频谱图

    7.普通二维傅里叶变换运算量巨大

    在这里插入图片描述
    256 x 256 像素转换的运算时间竟然达到了10分钟,而且还是双线程并发的
    而100 x 100像素转换的时间”只要”19秒

    为什么会相差…这么巨大?

    算算处理器执行循环的总次数就大略明白了:
    100 x 100的情况:共2x100 x100 x100 x100=2 x 10^8次
    256 x 256的情况:共2x256 x256 x256 x256=8.6 x10^9此
    工作量增加了43倍,运算时间也会增加相应的倍数
    要是图像再大点,耗时更是无法想象,所以实际应用中的傅里叶变换依赖更高效的算法

    以上仅为我个人的理解,如有错误之处,还望大佬们指正。

    参考:
    1. http://fourier.eng.hmc.edu/e101/lectures/Image_processing/node6.html
    2. https://plus.maths.org/content/fourier-transforms-images
    3. 数字图像处理 冈萨雷斯 4th Edition

    展开全文
  • 离散傅里叶变换

    2020-02-08 19:44:44
    其中频谱是离散频谱。 2. 傅里叶变换 任意函数分解为连续谱正余弦函数之和,频谱连续。 3.如何解析上统一傅里叶级数与傅里叶变换。 1. 通过comb函数以及卷积运算,将一段区间上脉冲函数周期延拓,然后...
  • 周期信号傅里叶变换

    千次阅读 2019-11-17 10:53:20
    周期信号的周期趋近于无穷大,则离散的频谱变成了连续的频谱 于是函数f(x)的频谱密度表示为 对上式求极限后称之为非周期信号的傅里叶正变换: 傅里叶级数 因此非周期信号的傅里叶逆变换为: 总结:时间域的非...
  • 傅立叶变换是以时间为自变量的信号和以频率为自变量的频谱函数之间的一种变换关系。 由于自变量时间和频率可以是连续的,也可以是离散的,因此可以组成几种不同的变换对。 (1)非周期的连续时间,连续频率---...
  • 奥鹏17春16秋福师《数字信号处理》在线作业二一、单选题(共25道试题,共50分。)1.下列各种滤波器的结构中哪种不是IIR...离散周期信号的频谱周期连续函数D.离散周期信号的频谱周期连续函数正确答案:3.若两个...
  • 1、可和信号即有限序列应用的是离散时间傅里叶变换(DTFT)就是,其频谱为连续函数,可以直接应用傅里叶变换公式。 2、不可和信号通常为周期序列,对于他要先求离散傅里叶级数(DFS),这个过程也被叫做对周期...
  • 第三章 离散傅立叶变换

    千次阅读 2013-05-11 15:36:00
    2.DFT结果是离散数字频率的函数,隐含有周期性 3.其快速实现算法统称为快速傅立叶变换FFT,是数字信号处理基础   离散傅立叶变换及其FFT,主要有三个用处 1.信号频谱的数值计算 计算机只能对有限离散...
  • 二维离散傅里叶变换 matlab

    万次阅读 2018-10-17 23:21:23
    从数学意义上看,傅里叶变换试讲一个图像转换为一系列周期函数来处理。从物理效果上看,傅里叶变换从空间域转换到频率域。换句话说傅里叶变换将图像灰度分布函数转换为图像频率分布函数。实际上对图像进行二...
  • 2.1 连续时间信号和系统频域分析 序列绝对可和,一致收敛,FT存在 3、序列幅度谱与相位谱 频谱用实部和虚部表示 频谱是ω连续周期函数,周期为2π。 2.2.2 序列傅立叶变换性质 (3)对任意序列x(n) (4)对序列x...
  • fft函数matlab_fft

    2020-12-04 14:52:06
    DTFT是离散时间非周期信号的傅里叶变换,由于其频域曲线是连续周期的,计算机无法处理,所以用冲击函数对其频谱在频域进行采样,得到时域和频域都离散的信号,这类过程叫做DFT。写出DFT的公式我们可以看到,完整的求...
  • 内插函数恢复模拟信号

    千次阅读 2017-06-21 20:45:07
    在频域上看,恢复信号就是用一个理想低通滤波器与时域信号的频谱相乘,以得到频域的第一个周期,而频域的理想低通滤波器,也就是频域矩形窗,经过傅里叶逆变化后在时域无限长的内插函数,是非因果的 非因果系统:...
  • 解:因为x(t)=1连续非周期信号,其对应的频谱是非周期连续的,对于连续的信号计算机不能直接加以处理,因而,需要将其先离散化,再利用离散傅里叶变换(DFT)对其进行分析实现其近似计算。对连续时间信号x(t)可以...
  • 离散时间傅里叶变换中,频谱系数是周期函数,以2pi(注:pi指的是圆周率3.1415926)为周期。 频谱的分辨率 2pi/N. 假设采样率fs,那么,这个2pi/N与fs有什么关系?对应实际频率来讲,其频率分辨率多少赫兹...
  • 上一节对分数基音周期搜索作了文字说明, 笔者画了几幅图,对分数基音周期搜索里的升抽样进一步说明 图1: ...表示一个带限的离散时间信号的傅里叶变换...图1与图2的卷积,因为t[n]的频谱是一连串的冲激串,相当于将语音
  • 傅里叶变换

    2020-08-31 07:18:11
    1. 傅里叶变换家族 作用都将信号从时域变换到频域 非周期连续信号用傅里叶...频谱间隔Δf=1/T,1.1中的Δf为一个小量,1.2中的Δf接近0,所以1.1中的频谱离散的,1.2中的频谱为连续的 1.3 离散傅里叶变换 FT F
  • 三离散傅立叶变换DFT)----有限长序列的离散频谱表示 * 三离散傅立叶变换DFT) ----有限长序列的离散频谱表示 从...的连续周期函数尽管在理论上有重要意义但在计算机上实现有困难为此需要一种时域和频域上都是离散的傅里
  • 汉宁窗性质

    万次阅读 多人点赞 2016-05-14 14:31:21
    分析频谱是实际频谱近似。傅里叶变换是对延拓后的周期离散信号进行频谱分析。如果采样不合适,某一频率信号能量会扩散到相邻频率点上,出现频谱泄漏现象。为了减少频谱泄漏,通常在采样后对信号加窗。常见窗...
  • 用傅立叶级数的系数来表示频谱,频谱是离散周期的。 对比 离散周期信号(DFS): 道理同上,得到离散周期的频谱。 2.连续非周期信号(FT):  看作是连续周期信号,周期趋于无穷大的情况。
  • 傅里叶级数仅适用于周期信号,...傅里叶变换:非周期信号可以看作不同频率的余弦分量叠加,其中频率分量可以从0到无穷大任意频率,而不是像傅里叶级数一样由离散的谐波分量组成。 下面考虑这几个问题: l 如何由傅
  • 信号与系统学习总结 ...周期信号的频谱是离散的,只会出现在nω1的点上,这里的幅度是对应频率的分量真实的幅度值。 ②傅里叶变换 傅里叶级数限定只能是周期函数,推广到非周期信号则会产生傅里叶变换的概念。把非
  • 主要由于频域的离散化造成,可采取补零措施减小频域抽样 间距,达到FFT变换后表现最高谱线更加接近真实谱线 效果。 解决方法:补零增加点数 频谱泄漏 时域中截断导致; 解决方法:加窗降低泄露 没有...
  • 为什么只取一半为什么对称:频谱是中间对称的,和正余弦函数的性质有关为什么取一半:因为对称,所以取单边谱如果原始信号就是复数信号,则fft得到的就是单边频谱不用乘以2。1-离散时间傅里叶变换DTFTDTFT?就是对...

空空如也

空空如也

1 2 3
收藏数 60
精华内容 24
关键字:

周期函数的频谱是离散的