matlab编程序:写出对x(n),y(n)分别做64点离散傅里叶变化的程序代码,谢谢!!

matlab编程序:写出对x(n),y(n)分别做64点离散傅里叶变化的程序代码,谢谢!!,第1张

你也没说Xn和Yn是什么,我就让他们各自是16点的随机序列。要改的话可以自己改。

clc;

clear;

xn=rand(1,16);

yn=rand(1,16);

x_f = fft(xn,64);

y_f = fft(yn,64);

figure(1)

subplot(2,1,1);

plot(xn)

legend('x')

subplot(2,1,2);

plot(abs(x_f));

legend('x fft')

figure(2)

subplot(2,1,1);

plot(yn)

legend('y');

subplot(2,1,2);

plot(abs(y_f));

legend('y fft')

用MATLAB 实现傅里叶变换:

用户任意输入一个函数,然后,输出函数的傅里叶变换函数,然后输出振幅频率

x=sin(2pit); %任意输入一个函数。

y=fft(x); %傅里叶变换函数。

plot(abs(y)); %振幅频率。

在图象处理的广泛应用领域中,傅立叶变换起着非常重要的作用,具体表现在包括图象分析、图象增强及图象压缩等方面。

fftshift的作用正是让正半轴部分和负半轴部分的图像分别关于各自的中心对称。因为直接用fft得出的数据与频率不是对应的,fftshift可以纠正过来。

假设f(x,y)是一个离散空间中的二维函数,则该函数的二维傅立叶变换的定义如下:

p=0,1…M-1 q=0,1…N-1 (1)

或 p=0,1…M-1 q=0,1…N-1 (2)

离散傅立叶反变换的定义如下:

m=0,1…M-1 n=0,1…N-1(3)

F(p,q)称为f(m,n)的离散傅立叶变换系数。这个式子表明,函数f(m,n)可以用无数个不同频率的复指数信号和表示,而在频率(w1,w2)处的复指数信号的幅度和相位是F(w1,w2)。

2、MATLAB提供的快速傅立叶变换函数

(1)fft2

fft2函数用于计算二维快速傅立叶变换,其语法格式为:

B = fft2(I)

B = fft2(I)返回图象I的二维fft变换矩阵,输入图象I和输出图象B大小相同。

例如,计算图象的二维傅立叶变换,并显示其幅值的结果,如图所示,其命令格式如下

load imdemos saturn2

imshow(saturn2)

B = fftshift(fft2(saturn2));

imshow(log(abs(B)),[],'notruesize')

(2)fftshift

MATLAB提供的fftshift函数用于将变换后的图象频谱中心从矩阵的原点移到矩阵的中心,其语法格式为:

B = fftshift(I)

对于矩阵I,B = fftshift(I)将I的一、三象限和二、四象限进行互换。

(2)ifft2

ifft2函数用于计算图象的二维傅立叶反变换,其语法格式为:

B = ifft2(I)

B = ifft2(A)返回图象I的二维傅立叶反变换矩阵,输入图象I和输出图象B大小相同。其语法格式含义与fft2函数的语法格式相同,可以参考fft2函数的说明。

如果信号是二维的,用上面的函数即可!直接调用。

如果信号是一维的,给你下面的例子,你应该能明白!

clear

fs=100;N=128; %采样频率和数据点数

n=0:N-1;t=n/fs; %时间序列

x=05sin(2pi15t)+2sin(2pi40t); %信号

y=fft(x,N); %对信号进行快速Fourier变换,逆变换函数为ifft

mag=abs(y); %求得Fourier变换后的振幅

f=nfs/N; %频率序列

subplot(2,2,1),plot(f,mag); %绘出随频率变化的振幅

xlabel('频率/Hz');

ylabel('振幅');title('N=128');grid on;

subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅

xlabel('频率/Hz');

ylabel('振幅');title('N=128');grid on;

%对信号采样数据为1024点的处理

fs=100;N=1024;n=0:N-1;t=n/fs;

x=05sin(2pi15t)+2sin(2pi40t); %信号

y=fft(x,N); %对信号进行快速Fourier变换

mag=abs(y); %求取Fourier变换的振幅

f=nfs/N;

subplot(2,2,3),plot(f,mag); %绘出随频率变化的振幅

xlabel('频率/Hz');

ylabel('振幅');title('N=1024');grid on;

subplot(2,2,4)

plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅

xlabel('频率/Hz');

ylabel('振幅');title('N=1024');grid on;

这个比较简单 其实就是基于matlab的语音信号滤波处理

这是我刚做的,运行是正确的!ly是语音信号的名字,截图自己运行就会有!

原语音信号程序

figure(1);

[y,fs,nbits]=wavread ('ly');

sound(y,fs,nbits); %回放语音信号

n = length (y) ; %求出语音信号的长度

Y=fft(y,n); %傅里叶变换

subplot(2,1,1);plot(y);title('原始信号波形');

subplot(2,1,2);plot(abs(Y));title('原始信号频谱')

加噪语音信号程序

figure(2);

[y,fs,nbits]=wavread ('ly');

n = length (y) ; %求出语音信号的长度

t=[0:1/8000:2 zeros(1,23520-1)]';

noise=004sin(10000pit);%sin函数产生噪声

s=y+noise; %语音信号加入噪声

sound(s);

subplot(2,1,1);plot(s);title('加噪语音信号的时域波形');

S=fft(s); %傅里叶变换

subplot(2,1,2);plot(abs(S));title('加噪语音信号的频域波形')

滤波后的信号程序

Ft=8000;

Fp=1000;

Fs=1200;

wp=2piFp/Ft;

ws=2piFs/Ft;

fp=2Fttan(wp/2);

fs=2Fstan(wp/2);

[n11,wn11]=buttord(wp,ws,1,50,'s'); %求低通滤波器的阶数和截止频率

[b11,a11]=butter(n11,wn11,'s'); %求S域的频率响应的参数

[num11,den11]=bilinear(b11,a11,05); %利用双线性变换实现频率响应S域到Z域的变换

[y,fs,nbits]=wavread ('ly');

n = length (y) ; %求出语音信号的长度

t=[0:1/8000:2 zeros(1,23520-1)]';

noise=004sin(10000pit);%sin函数产生噪声

s=y+noise; %语音信号加入噪声

z11=filter(num11,den11,s);

sound(z11);

m11=fft(z11); %求滤波后的信号

figure(3);

subplot(2,1,1);plot(z11);title('滤波后的信号波形');

subplot(2,1,2);plot(abs(m11),'r');title('滤波后信号的频谱');

以上就是关于matlab编程序:写出对x(n),y(n)分别做64点离散傅里叶变化的程序代码,谢谢!!全部的内容,包括:matlab编程序:写出对x(n),y(n)分别做64点离散傅里叶变化的程序代码,谢谢!!、用matlab编程将下列方程组进行傅里叶变换,求解。、初学者,求教在matlab中实现信号的傅里叶正,逆变换如何编程序,非常感谢!越详细越好!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10070680.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存