原创 请教如何加窗函数,去噪?

2011-6-14 15:40 3993 9 10 分类: 测试测量
可不可以 加个窗函数去掉正弦信号随机白噪声啊???
fs=1;%设定采样频率
N=128;
n=0:N-1;
t=(0:1/fsN-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);
。。。。。。
后面的怎么写呢?望老师指点下,谢拉
------------------------------
把 你 设定的正玄波 频率以外的 频率设为零就可以了.
-------------------------------
多谢回复。
你看下 程序是这样的不?怎么去噪后,效果不好。帮忙 看下
fs=1;%设定采样频率
N=128;
n=0:N-1;
t=(0:1/fsN-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 ;
----------------------------------------
对称点搞错了,   第7点的对称点是 123点,你的对称点在122点上了,所以多了一个频率出来了.
把你的程序自己改一下,记住,matlab的下标是从1开始的
------------------------------------------
程序改了下,但是去噪后的信号,怎么有点相位失真啊??帮忙看下
fs=2;%设定采样频率
N=128;
n=0:N-1;
t=(0:1/fsN-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;
zoom.gif59843_1247495905uIii.jpg


----------------------
 
你的频率分辨率是 fs/N = 2/128 = 0.0078125Hz
而你的 f0=0.05,
理论上应该在谱线的6.4位置上..由于频率分辨率的问题,你的最大值出现在谱线7上,
而你滤波的时候把谱线6 置零了.也就是6.4谱线的位置也置零了...
所以出现了频率相位的失真.你仔细看看,应该你的结果频率也有失真的.
解决的办法有两个,我没具体实验过,
1.就是做频谱矫正,论坛有专门的主题讲这个问题,
2.就是在滤波的时候不要直接清零,做一个插值,怎么插呢?这个我正在做一些理论的论证,和准备做一些实验.

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

文章评论1条评论)

登录后参与讨论

用户377235 2013-5-18 19:21

看不了啊,怎么回事??
相关推荐阅读
xuyaosong 2012-11-28 14:24
Lesson 4 4:MATLAB - FFT and Zero Padding
http://blinkdagger.com/matlab/matlab-fft-and-zero-padding This is the fourth post in the blinkdag...
xuyaosong 2012-11-28 13:54
C语言中 多个源文件之间函数如何调用
首先要建立一个头文件,以.h保存 这样 #include typedef struct { char name[100][60]; char number[100][8]; int m...
xuyaosong 2012-11-28 13:53
小波变换尺度相关性去噪程序
所实现的相关性去噪函数为function [s1 a d] = SSNF(s, n, h, g, g1),具体的实现步骤为: 1) 调用离散二进小波分解函数对信号进行分解,得到逼近系数a 和细节...
xuyaosong 2012-11-28 13:29
功率谱密度幅值的具体含义??
http://www.chinavib.com/forum/thread-17307-1-48.html 求信号功率谱时候用下面的不同方法,功率谱密度的幅值大小相差很大! 我的问题是,计算具体...
xuyaosong 2012-01-12 18:38
声明函数指针并实现回调
程序员常常需要实现回调。本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调。注意这里针对的是普通的函数,不包括完全依赖于不同语法和语义规则的类成员函数(类成员指针将在另文中讨论)。 ...
xuyaosong 2012-01-12 18:36
如何不用访问地址的方式来编写并口程序 ★★★★★
兄弟我在精华发现了一些关于并口打印的文章,但是都是用inb outb操作的,不知道各路高人能否给小弟一个用open write ioctl read close控制的判断状态并读写的例子,尤...
我要评论
1
9
关闭 站长推荐上一条 /2 下一条