声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 6502|回复: 8

[滤波] 请教如何加窗函数,去噪?

[复制链接]
发表于 2008-12-7 17:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
可不可以 加个窗函数去掉正弦信号随机白噪声啊???
fs=1;%设定采样频率
N=128;
n=0:N-1;
t=(0:1/fs:(N-1)/fs)';
f0=0.05;%设定正弦信号频率
f=(0:N-1)*fs/N;
x0=cos(2*pi*f0*t);n=0:N-1;x=x(:);%生成正弦信号
x1=x+randn(size(t));
y=fft(x1,N);
。。。。。。
后面的怎么写呢?望老师指点下,谢拉

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2008-12-7 21:34 | 显示全部楼层
把 你 设定的正玄波 频率以外的 频率设为零就可以了.
程序偶就不帮你写了..
 楼主| 发表于 2008-12-8 10:36 | 显示全部楼层

回复 沙发 vican_lee 的帖子

你看下 程序是这样的不?怎么去噪后,效果不好。帮忙 看下
fs=1;%设定采样频率
N=128;
n=0:N-1;
t=(0:1/fs:(N-1)/fs)';
f0=0.05;      %设定正弦信号频率
f=(0:N-1)*fs/N;
x0=cos(2*pi*f0*t);n=0:N-1;x=x(:);%生成正弦信号
x1=x0+randn(size(t));
y=fft(x1,N);

fmin=0.0499999;          %最小截止频率,为0时是低通,不为0时是带通
fmax=0.0500001;         %最高截止频率
nfft=2^nextpow2(N);       %取大于并接近n的2的幂次方为FFT长度
nmin=round(fmin*nfft/fs+1); %四舍五入取整求最小截止频率对应数组元素的下标
nmax=round(fmax*nfft/fs+1); %四舍五入取整求最大截止频率对应数组元素的下标
% %滤波******************************************************
y1=fft(x1,nfft);              %fft结果存入y中
a=zeros(1,nfft);            %建立一个长度为nfft元素全为0的向量
a(nmin:nmax)=y(nmin:nmax);        %将y正频率阻带内的元素值置为0
a(nfft-nmax+1:nfft-nmin+1)=y(nfft-nmax+1:nfft-nmin+1); %将y负频率阻带内的元素值置为0
y1=ifft(a,nfft);          %逆fft
y1=(real(y1(1:N)))';       %滤波后的信号,取变换实部n个结果为滤波列向量
figure;
subplot(211);plot(t,x0);grid;
subplot(212);plot(t,y1);grid ;
发表于 2008-12-8 11:46 | 显示全部楼层
对称点搞错了,   第7点的对称点是 123点,你的对称点在122点上了,所以多了一个频率出来了.
把你的程序自己改一下,记住,matlab的下标是从1开始的
 楼主| 发表于 2008-12-8 20:04 | 显示全部楼层

回复 地板 vican_lee 的帖子

程序改了下,但是去噪后的信号,怎么有点相位失真啊??帮忙看下
fs=2;%设定采样频率
N=128;
n=0:N-1;
t=(0:1/fs:(N-1)/fs)';
f0=0.05;%设定正弦信号频率
f=(0:N/2-1)*fs/N;
x=sin(2*pi*f0*t);%生成正弦信号
noisex=x+randn(size(t));
noisey=fft(noisex,N);
figure(1);
subplot(311);stem(t,x);xlabel('t');ylabel('y');title('正弦信号y=2*pi*10t时域波形');grid;
y=fft(x,N);
y=2*abs(y)/N;
subplot(312);plot(f,y(1:N/2));grid;
fmin=0.0468;          %最小截止频率,为0时是低通,不为0时是带通
fmax=0.0469;         %最高截止频率
nfft=2^nextpow2(N);       %取大于并接近n的2的幂次方为FFT长度
nmin=round(fmin*nfft/fs+1); %四舍五入取整求最小截止频率对应数组元素的下标
nmax=round(fmax*nfft/fs+1); %四舍五入取整求最大截止频率对应数组元素的下标
% %滤波******************************************************
y=fft(noisex,nfft);              %fft结果存入y中
a=zeros(1,nfft);            %建立一个长度为nfft元素全为0的向量
a(nmin:nmax)=y(nmin:nmax);        %将y正频率阻带内的元素值置为0
a(nfft-nmax+2:nfft-nmin+2)=y(nfft-nmax+2:nfft-nmin+2); %将y负频率阻带内的元素值置为0
y1=ifft(a,nfft);          %逆fft
y1=(real(y1(1:N)))';       %滤波后的信号,取变换实部n个结果为滤波列向量
% ifaf=frft(y1,-0.913);     %原始信号去噪后的信号
subplot(313);plot(t,y1);grid on;
% subplot(312);plot(u,abs(ifaf));grid on;

[ 本帖最后由 cammer534 于 2008-12-8 20:08 编辑 ]
失真.jpg
发表于 2008-12-8 22:30 | 显示全部楼层
你的频率分辨率是 fs/N = 2/128 = 0.0078125Hz
而你的 f0=0.05,
理论上应该在谱线的6.4位置上..由于频率分辨率的问题,你的最大值出现在谱线7上,
而你滤波的时候把谱线6 置零了.也就是6.4谱线的位置也置零了...
所以出现了频率相位的失真.你仔细看看,应该你的结果频率也有失真的.
解决的办法有两个,我没具体实验过,
1.就是做频谱矫正,论坛有专门的主题讲这个问题,
2.就是在滤波的时候不要直接清零,做一个插值,怎么插呢?这个我正在做一些理论的论证,和准备做一些实验.

对了...最好把你频率矫正以后的结果放上来我看看....我只是知道问题出在哪儿.但我也没做过具体的实验..

[ 本帖最后由 vican_lee 于 2008-12-8 22:32 编辑 ]
 楼主| 发表于 2008-12-9 16:17 | 显示全部楼层

回复 6楼 vican_lee 的帖子

谢谢 您了。学到不少,我在自己看下相关问题。
发表于 2008-12-24 15:26 | 显示全部楼层

回复 6楼 vican_lee 的帖子

很厉害!很专业!
发表于 2017-1-3 09:39 | 显示全部楼层
你这个也没加窗啊  自己截断的对吗
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-4-25 23:55 , Processed in 0.094085 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表