数字信号处理 频域采样及恢复(离散频谱到连续频谱) MATLAB

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字信号处理 频域采样及恢复(离散频谱到连续频谱) MATLAB相关的知识,希望对你有一定的参考价值。

请教用MATLAB 如何把满足频域采样定理的X(K)恢复到X(ejW)  知道频域内插公式  但是不会写 请大神帮忙 最好给出源程序

参考技术A clc
clear;
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加汉宁窗结果')
参考技术B 我也在问 嘤嘤嘤

频域分析频谱泄露频率分辨率栅栏效应

一、时域加窗

现实生活中的信号大部分是连续的,通过对连续的信号进行采样得到散时间信号,但是计算机所能处理的数据都是有限长的,因而我们可以对原始序列做加窗处理使其成为有限长序列。
以矩形窗为例,其时域表达式为:
式(1)中, N = M + 1 N=M+1 N=M+1,为矩形窗的长度。

对无限长序列进行加窗处理,就是对序列在时域上乘以一个窗函数。
由卷积定理可以得到,时域的相乘等于频域的卷积。

设仿真信号的时域表达式为:
x ( t ) = A 0 ∗ c o s ( 2 π f 0 t ) + A 1 ∗ c o s ( 2 π f 1 t ) x(t)=A_{0}*cos(2πf_{0}t)+A_{1}*cos(2πf_{1}t) x(t)=A0cos(2πf0t)+A1cos(2πf1t)
x ( t ) x(t) x(t)做傅里叶变换(FT)的频域表达式为:
X ( j Ω ) = A 0 π δ ( Ω + Ω 0 ) + A 0 π δ ( Ω − Ω 0 ) + A 1 π δ ( Ω + Ω 0 ) + A 1 π δ ( Ω − Ω 0 ) X(jΩ)=A_{0}πδ(Ω+Ω_{0})+A_{0}πδ(Ω-Ω_{0})+A_{1}πδ(Ω+Ω_{0})+A_{1}πδ(Ω-Ω_{0}) X(jΩ)=A0πδ(Ω+Ω0)+A0πδ(ΩΩ0)+A1πδ(Ω+Ω0)+A1πδ(ΩΩ0)
连续信号 x ( t ) x(t) x(t)的波形及频谱如图1所示。


连续信号 x ( t ) x(t) x(t)经过采样后,得到的离散时间的表达式为:
x [ n ] = x ( t ) ∣ t = n T s x[n]=x(t)|_{t=nT_{s}} x[n]=x(t)t=nTs
离散序列 x [ n ] x[n] x[n]做离散时间傅里叶变换(DTFT)的频域表达式为:
X ( e j w ) = 1 T s ∑ k = − ∞ ∞ X ( j w T s − j k 2 π T s ) X(e^{jw})=\\frac{1}{T_{s}}\\sum_{k=-∞}^{∞}X(j\\frac{w}{T_{s}}-jk\\frac{2π}{T_{s}}) X(ejw)=Ts1k=X(jTswjkTs2π)
离散序列 x [ n ] x[n] x[n]的波形及频谱如图2所示。

矩形窗函数 w [ n ] w[n] w[n]做离散时间傅里叶变换(DTFT)的频域表达式为:
W ( e j w ) = e − j w ( N − 1 ) / 2 ∗ s i n ( w N / 2 ) s i n ( w / 2 ) W(e^{jw})=e^{-jw(N-1)/2} *\\frac{sin(wN/2)}{sin(w/2)} W(ejw)=ejw(N1)/2sin(w/2)sin(wN/2)

矩形窗函数 w [ n ] w[n] w[n]的波形及频谱如图3所示。

离散序列 x [ n ] x[n] x[n]与窗函数 w [ n ] w[n] w[n]的卷积为:
V ( e j w ) = 1 2 π ∫ − π π X ( e j θ ) W ( e j ( w − θ ) ) d θ = A 0 2 W ( e j ( w + w 0 ) ) + A 0 2 W ( e j ( w − w 0 ) ) + A 1 2 W ( e j ( w + w 0 ) ) + A 1 2 W ( e j ( w − w 0 ) ) V(e^{jw})=\\frac{1}{2π}\\int_{-π}^{π}X(e^{jθ})W(e^{j(w-θ)})dθ=\\frac{A_{0}}{2}W(e^{j(w+w_{0})})+\\frac{A_{0}}{2}W(e^{j(w-w_{0})})+\\frac{A_{1}}{2}W(e^{j(w+w_{0})})+\\frac{A_{1}}{2}W(e^{j(w-w_{0})}) V(ejw)=2π1ππX(ejθ)W(ej(wθ))dθ=2A0W(ej(w+w0))+2A0W(ej(ww0))+2A1W(ej(w+w0))+2A1W(ej(ww0))
截断后的离散序列 v [ n ] v[n] v[n]的波形及频谱如图4所示。

频谱泄露


信号的频率成分包括1MHz和1.05MHz,1MHz对应的幅值为1,但是1.05MHz的幅值减小了,且在其他频率点上都有不小的幅值。这就是出现了频谱泄露的现象。

产生频谱泄露的原因是什么?

由于计算机只能处理有限长的数据,所以需要对采集的信号进行截断,相当于对原始信号做了加窗处理。对信号加窗就是对信号在时域上乘以一个窗函数,时域的乘积对应频域的卷积,而窗函数的频域包括主瓣和旁瓣,旁瓣造成了信号频谱的泄漏。频域泄漏不可避免,只能减小。

如何抑制这一现象?

可以取更长的数据点࿰

以上是关于数字信号处理 频域采样及恢复(离散频谱到连续频谱) MATLAB的主要内容,如果未能解决你的问题,请参考以下文章

数字信号处理实验集合

动态演示频域采样与时域周期延拓现象

简述奈奎斯特时域抽样定理?

压缩感知

频域分析频谱泄露频率分辨率栅栏效应

从Matlab平台进行FFT到ARM平台C语言FFT频谱分析