C語言結合gnuplot繪製窗函數

  1. 矩形窗
    w(n)={10nL10 w(n)=\begin{cases}1 \qquad 0 \le n \le L-1\\\\ 0 \qquad 其他\end{cases}
  2. 漢明窗
    w(n)={0.540.46cos[2πn/(L1)]0nL10w(n)=\begin{cases}0.54-0.46cos[2\pi n/(L-1)] \qquad 0 \le n \le L-1 \\\\ 0 \qquad 其他\end{cases}
  3. 漢寧窗
    w(n)={0.5{1cos[2πn/(L1)]}0nL10w(n)=\begin{cases}0.5\{1-cos[2\pi n/(L-1)]\} \qquad 0 \le n \le L-1 \\\\ 0 \qquad 其他\end{cases}

matlab代碼

N = 32;
nn = 0 : (N-1);
%==========矩形窗==========
subplot(3,1,1);
w = boxcar(N);
stem(nn, w);
ylabel('幅度');title('矩形窗');
axis([-5 35 0 1.5]);

%==========漢明窗==========
subplot(3,1,2);
w = hamming(N);
stem(nn, w);
ylabel('幅度');title('漢明窗');
axis([-5 35 0 1.5]);

%==========漢寧窗==========
subplot(3,1,3);
w = hanning(N);
stem(nn, w);
ylabel('幅度');title('漢寧窗');
axis([-5 35 0 1.5]);

在這裏插入圖片描述

C程序

矩形窗

#include<stdio.h>
#define N 32
int main()
{
   int nn, w = 1;
   for(nn = 0; nn < N; nn++)
   printf("%d\t%d\n", nn, w);
}

在這裏插入圖片描述

示例:給信號加矩形窗

給信號x=0.5n+10(0 <= n < 32)加矩形窗

#include<stdio.h>
#include<math.h>
#define PI 3.1416
#define N 32
int main()
{
   int nn, w = 1;
   double result;
   for(nn = -20; nn < 50; nn++)
   {
      if(nn >= 0 && nn < N)
        w = 1;
      else
        w = 0;
      result = w * (0.5*nn + 10);
      printf("%d\t%f\n", nn, result);
   }
}

在這裏插入圖片描述

漢明窗

#include<stdio.h>
#include<math.h>
#define PI 3.1416
#define N 32
int main()
{
   int nn; 
   for(nn = 0; nn < N; nn++)
   {
      double w = 0.54 - 0.46*cos(2*PI*nn/(N-1));
      printf("%d\t%f\n", nn, w);
   }
}

在這裏插入圖片描述

示例:給信號加漢明窗

給信號x=0.5n+10(0 <= n < 32)加漢明窗

#include<stdio.h>
#include<math.h>
#define PI 3.1416
#define N 32
int main()
{
   int nn;
   double w;
   double result;
   for(nn = -20; nn < 50; nn++)
   {
      if(nn >= 0 && nn < N)
        w = 0.54 - 0.46*cos(2*PI*nn/(N-1));
      else
        w = 0;
      result = w * (0.5*nn + 10);
      printf("%d\t%f\n", nn, result);
   }
}

在這裏插入圖片描述

漢寧窗

#include<stdio.h>
#include<math.h>
#define PI 3.1416
#define N 32
int main()
{
   int nn; 
   for(nn = 0; nn < N; nn++)
   {
      double w = 0.5*(1-cos(2*PI*nn/(N-1)));
      printf("%d\t%f\n", nn, w);
   }
}

在這裏插入圖片描述

示例:給信號加漢寧窗

給信號x=0.5n+10(0 <= n < 32)加漢寧窗

#include<stdio.h>
#include<math.h>
#define PI 3.1416
#define N 32
int main()
{
   int nn;
   double w;
   double result;
   for(nn = -20; nn < 50; nn++)
   {
      if(nn >= 0 && nn < N)
        w = 0.5*(1-cos(2*PI*nn/(N-1)));
      else
        w = 0;
      result = w * (0.5*nn + 10);
      printf("%d\t%f\n", nn, result);
   }
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章