00001 00030 #include <itpp/signal/window.h> 00031 00032 00033 namespace itpp 00034 { 00035 00036 00037 vec hamming(int n) 00038 { 00039 vec t(n); 00040 00041 if (n == 1) 00042 t(0) = 0.08; 00043 else 00044 for (int i = 0;i < n;i++) 00045 t[i] = (0.54 - 0.46 * std::cos(2.0 * pi * i / (n - 1))); 00046 00047 return t; 00048 } 00049 00050 vec hanning(int n) 00051 { 00052 vec t(n); 00053 00054 for (int i = 0;i < n;i++) 00055 t(i) = 0.5 * (1.0 - std::cos(2.0 * pi * (i + 1) / (n + 1))); 00056 00057 return t; 00058 } 00059 00060 // matlab version 00061 vec hann(int n) 00062 { 00063 vec t(n); 00064 00065 for (int i = 0;i < n;i++) 00066 t(i) = 0.5 * (1.0 - std::cos(2.0 * pi * i / (n - 1))); 00067 00068 return t; 00069 } 00070 00071 vec blackman(int n) 00072 { 00073 vec t(n); 00074 00075 for (int i = 0;i < n;i++) 00076 t(i) = 0.42 - 0.5 * std::cos(2.0 * pi * i / (n - 1)) + 0.08 * std::cos(4.0 * pi * i / (n - 1)); 00077 00078 return t; 00079 } 00080 00081 vec triang(int n) 00082 { 00083 vec t(n); 00084 00085 if (n % 2) { // Odd 00086 for (int i = 0; i < n / 2; i++) 00087 t(i) = t(n - i - 1) = 2.0 * (i + 1) / (n + 1); 00088 t(n / 2) = 1.0; 00089 } 00090 else 00091 for (int i = 0; i < n / 2; i++) 00092 t(i) = t(n - i - 1) = (2.0 * i + 1) / n; 00093 00094 return t; 00095 } 00096 00097 vec sqrt_win(int n) 00098 { 00099 vec t(n); 00100 00101 if (n % 2) { // Odd 00102 for (int i = 0; i < n / 2; i++) 00103 t(i) = t(n - i - 1) = std::sqrt(2.0 * (i + 1) / (n + 1)); 00104 t(n / 2) = 1.0; 00105 } 00106 else 00107 for (int i = 0; i < n / 2; i++) 00108 t(i) = t(n - i - 1) = std::sqrt((2.0 * i + 1) / n); 00109 00110 return t; 00111 } 00112 00113 00114 00115 } // namespace itpp
Generated on Thu Apr 23 20:07:48 2009 for IT++ by Doxygen 1.5.8