R - 訊號處理

統計軟體 R

簡介

安裝

操作方式

變數與運算

有序數列

向量

矩陣

多維陣列

複數

因子

串列

資料框

時間數列

流程控制

輸出入

呼叫

函數

2D 繪圖

3D 繪圖

互動介面

套件列表

其他語言呼叫

R 的應用

集合

邏輯推論

模糊邏輯

機率邏輯

檢定

搜尋

優化算法

線性代數

決策樹

人工智慧

分群分類

SVM 向量機

神經網路

遺傳演算法

資料採礦

訊號處理

影像處理

語音處理

自然語言

機器學習

機器人

生物統計

數位訊號處理

方程式求解

數值分析

微積分

微分方程

線性規劃

圖形理論

統計推論

字串處理

正規表示式

視窗程式

網頁程式

文件格式

貝氏網路

訊息

機率統計書

相關網站

參考文獻

最新修改

簡體版

English

我的操作:

> install.packages('signal')
--- Please select a CRAN mirror for use in this session ---
嘗試 URL 'http://cran.csie.ntu.edu.tw/bin/windows/contrib/3.0/signal_0.7-3.zip'
Content type 'application/zip' length 255433 bytes (249 Kb)
開啟了 URL
downloaded 249 Kb

package ‘signal’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
        C:\Users\ccc\AppData\Local\Temp\RtmpEnvj2w\downloaded_packages
> bf <- butter(5, 0.2)
錯誤: 沒有這個函數 "butter"
> library('signal')
Loading required package: MASS

Attaching package: ‘signal’

The following objects are masked from ‘package:stats’:

    filter, poly

> bf <- butter(5, 0.2)
> freqz(bf$b, bf$a)
> freqz(bf)
> ch <- cheby2(5, 20, 0.2)
> freqz(ch, Fs = 100)
> zplane(ch)
> t <- seq(0, 1, by = 0.01)
> x <- sin(2*pi*t*2.3) + 0.25*rnorm(length(t))
> z <- filter(ch, x)
> plot(t, x, type = "l")
> lines(t, z, col = "red")
> grpdelay(ch, Fs = 100)
- Group delay (gd) calculated at 512 points.
- Frequencies (w) given in *Hz*. 
       gd          w
 3.162407 0.00000000
 3.162772 0.09765625
 3.163869 0.19531250
 3.165699 0.29296875
 .......  .......
警告訊息:
In grpdelay.default(filt$b, filt$a, ...) :
  grpdelay: setting group delay to 0 at singularity
>

參考操作範例

## The R implementation of these routines can be called "matlab-style",
bf <- butter(5, 0.2)
freqz(bf$b, bf$a)
## or "R-style" as:
freqz(bf)
## make a Chebyshev type II filter:
ch <- cheby2(5, 20, 0.2)
freqz(ch, Fs = 100) # frequency plot for a sample rate = 100 Hz
zplane(ch) # look at the poles and zeros
## apply the filter to a signal
t <- seq(0, 1, by = 0.01) # 1 second sample, Fs = 100 Hz
x <- sin(2*pi*t*2.3) + 0.25*rnorm(length(t)) # 2.3 Hz sinusoid+noise
z <- filter(ch, x) # apply filter
plot(t, x, type = "l")
lines(t, z, col = "red")
# look at the group delay as a function of frequency
grpdelay(ch, Fs = 100)
> library(signal)
Loading required package: MASS

Attaching package: ‘signal’

The following objects are masked from ‘package:stats’:

    filter, poly

> data(package="signal")
> ls("package:signal")
 [1] "an"            "Arma"          "as.Arma"       "as.Zpg"       
 [5] "bartlett"      "bilinear"      "blackman"      "boxcar"       
 [9] "butter"        "buttord"       "cheb1ord"      "chebwin"      
[13] "cheby1"        "cheby2"        "chirp"         "conv"         
[17] "decimate"      "ellip"         "ellipord"      "fftfilt"      
[21] "FftFilter"     "filter"        "FilterOfOrder" "filtfilt"     
[25] "fir1"          "fir2"          "flattopwin"    "freqs"        
[29] "freqs_plot"    "freqz"         "freqz_plot"    "gausswin"     
[33] "grpdelay"      "hamming"       "hanning"       "ifft"         
[37] "impz"          "interp"        "interp1"       "kaiser"       
[41] "kaiserord"     "levinson"      "Ma"            "medfilt1"     
[45] "MedianFilter"  "pchip"         "poly"          "polyval"      
[49] "remez"         "resample"      "roots"         "sftrans"      
[53] "sgolay"        "sgolayfilt"    "specgram"      "spencer"      
[57] "spencerFilter" "triang"        "unwrap"        "Zpg"          
[61] "zplane"       
> lsf.str("package:signal")
an : function (degrees)  
Arma : function (b, a)  
as.Arma : function (x, ...)  
as.Zpg : function (x, ...)  
bartlett : function (n)  
bilinear : function (Sz, ...)  
blackman : function (n)  
boxcar : function (n)  
butter : function (n, ...)  
buttord : function (Wp, Ws, Rp, Rs)  
cheb1ord : function (Wp, Ws, Rp, Rs)  
chebwin : function (n, at)  
cheby1 : function (n, ...)  
cheby2 : function (n, ...)  
chirp : function (t, f0 = 0, t1 = 1, f1 = 100, form = c("linear", "quadratic", 
    "logarithmic"), phase = 0)  
conv : function (x, y)  
decimate : function (x, q, n = if (ftype == "iir") 8 else 30, ftype = "iir")  
ellip : function (n, ...)  
ellipord : function (Wp, Ws, Rp, Rs)  
fftfilt : function (b, x, n = NULL)  
FftFilter : function (b, n)  
filter : function (filt, ...)  
FilterOfOrder : function (n, Wc, type, ...)  
filtfilt : function (filt, ...)  
fir1 : function (n, w, type = c("low", "high", "stop", "pass", "DC-0", "DC-1"), 
    window = hamming(n + 1), scale = TRUE)  
fir2 : function (n, f, m, grid_n = 512, ramp_n = grid_n/20, window = hamming(n + 
    1))  
flattopwin : function (n, sym = c("symmetric", "periodic"))  
freqs : function (filt, ...)  
freqs_plot : function (w, ...)  
freqz : function (filt, ...)  
freqz_plot : function (w, ...)  
gausswin : function (n, w = 2.5)  
grpdelay : function (filt, ...)  
hamming : function (n)  
hanning : function (n)  
ifft : function (x)  
impz : function (filt, ...)  
interp : function (x, q, n = 4, Wc = 0.5)  
interp1 : function (x, y, xi, method = c("linear", "nearest", "pchip", "cubic", 
    "spline"), extrap = NA, ...)  
kaiser : function (n, beta)  
kaiserord : function (f, m, dev, Fs = 2)  
levinson : function (x, p = NULL)  
Ma : function (b)  
medfilt1 : function (x, n = 3, ...)  
MedianFilter : function (n = 3)  
pchip : function (x, y, xi = NULL)  
poly : function (x)  
polyval : function (coef, z)  
remez : function (n, f, a, w = rep(1, length(f)/2), ftype = c("bandpass", "differentiator", 
    "hilbert"), density = 16)  
resample : function (x, p, q = 1, d = 5)  
roots : function (x, method = c("polyroot", "eigen"))  
sftrans : function (Sz, ...)  
sgolay : function (p, n, m = 0, ts = 1)  
sgolayfilt : function (x, p = 3, n = p + 3 - p%%2, m = 0, ts = 1)  
specgram : function (x, n = min(256, length(x)), Fs = 2, window = hanning(n), overlap = ceiling(length(window)/2))  
spencer : function (x)  
spencerFilter : function ()  
triang : function (n)  
unwrap : function (a, tol = pi, dim = 1)  
Zpg : function (zero, pole, gain)  
zplane : function (filt, ...)  
> B1 <- c(0.2066,0.4131,0.2066)# Coefficients of numerator polynomial
> A1 <- c(1,-0.3695,0.1958)       # Coefficients of denominator polynomial
> H1z <- freqz(B1,A1,100)# Compute the transfer function
> # Filter H2(z)
> B2 <- c(0.894,-1.789,0.894)
> A2 <- c(1,-1.788,0.799)
> H2z <- freqz(B2,A2,100)
>  
> # Filter H3(z)
> B3 <- c(0.42,0,-0.42)
> A3 <- c(1,-0.443,0.159)
> H3z <- freqz(B3,A3,100)
>  
> # Filter h4(z)
> B4 <- c(0.5972,0.4425,0.5972)
> A4 <- c(1,0.4425,0.1584)
> H4z <- freqz(B4,A4,100)
> # Convenience function to draw multiple plots
> hPlot <- function(H){
+       text <- deparse(substitute(H))  # get the name of the filter for the title
+       c <- substr(text,4,4)
+       plot(H$f,abs(H$h),
+    col="red",
+                    ylim=c(0,1),
+            xlab="Normalized Frequency",
+            ylab="Magnitude",
+            main=paste("Filter H",c,"(z)",sep="")
+ )
+ }
>  
> par(mfrow=c(2,2))
> plotList <- list(H1z,H2z,H3z,H4z)
> lapply(plotList,hPlot)
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL

> #
> q()
> plot(H4z)# Look at the default plot
>

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License