
f=(0:N-1)*fs/N%设置频率轴(横轴)坐标
plot(f,y)
xlim( [ 0,max(f)/2 ] )
sig为输入的一维信号,N为采样点数,fs为采样频率。
打个广告:代写matlab算法(数字滤波器,小波变换,神经网络,信号处理,PCA降维等)
首先,计算机处理的信号均为离散化的信号。对于连续模拟信号的表达式,只要给定离散的时间参数,其得到的就是离散信号
例如
sin(2*pi*100*t) 这表示频率为100Hz的正弦信号
那么,令t = 1:0.1:100
y = sin(2*pi*100*t)
得到的就是离散的正弦信号y.
clcclear
close
fs = 8000%采样频率
N = 256%采样点数
T = fs/N%频率分辨率
%deltf = fs/N = 8000/256 = 31.25
%输入信号
f1 = 1000
t = 0:1/fs:(N-1)/fs
x = 0.2*sin(2*pi*t*f1)
w = 0:fs/N:(fs-(fs/N))
%计算DFT
rol = exp(-1i*2*pi/N)%旋转因子
dft = zeros(1,N)
sum = 0
for k = 1:N
for i =0:N-1
dft(k) = dft(k) + x(i+1)*rol^(k*i)
end
end
%频域插值提高分辨率
w1 = 0:0.5*0.001*2*pi:2*pi-0.5*0.001*2*pi
dtft = zeros(1,length(w1))
asum = 0
%插值程序
for i =0:length(dtft)-1
w = 2*pi*i/length(dtft)
for k = 0:N-1
asum = dft(k+1)*fik(w,k,N)
dtft(i+1) = dtft(i+1)+asum
end
end
w2 = 0+T:0.5*fs*0.001:fs-0.5*fs*0.001+T
w3 = 0:fs/N:(fs-(fs/N))
%2000点fft
real = fft(x,2000)
w4 = 0:fs/2000:fs-4
%频域插值提高分辨率
% w1 = 0:0.5*0.001*2*pi:2*pi-0.5*0.001*2*pi
% dtft = zeros(1,length(w1))
% asum = 0
% %插值程序
% for i =0:length(dtft)-1
% w = 2*pi*i/length(dtft)
% for k = 0:N-1
% asum = dft(k+1)*fik(w,k,N)
% dtft(i+1) = dtft(i+1)+asum
% end
% end
w2 = 0+T:0.5*fs*0.001:fs-0.5*fs*0.001+T
w3 = 0:fs/N:(fs-(fs/N))
%加窗插值处理
nfft = 2000
win = hanning(length(x))
x_hannig = x.*win'
y2 = fft(x_hannig,N)
y3 = fft(x_hannig,2000)
w1 = 0:0.5*0.001*2*pi:2*pi-0.5*0.001*2*pi
dtft = zeros(1,length(w1))
asum = 0
%插值程序
for i =0:length(dtft)-1
w = 2*pi*i/length(dtft)
for k = 0:N-1
asum = y2(k+1)*fik(w,k,N)
dtft(i+1) = dtft(i+1)+asum
end
end
w5 = 0:0.5*fs*0.001:fs-0.5*fs*0.001
figure
plot(w5,abs(dtft),'o',w4,abs(y3),'g')
legend('插值图像','理想逼近图像')
xlabel('频率')
ylabel('幅值')
title('fs = 8000hz fc=1000hz加汉宁窗结果')
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)