आर

2013-02-02 32 views
5

में डिजिटल सिग्नल प्रोसेसिंग के लिए कनवॉल्यूशन मेरे पास एक साधारण डिजिटल सिस्टम है जिसमें इनपुट एक्स (एन) = यू (एन) - यू (एन -4) है। System 1आर

मैं आउटपुट वाई (एन) को 'सिग्नल' पैकेज से '() को' सिग्नल 'पैकेज या' आंकड़े 'पैकेज से convolve() फ़ंक्शन के साथ ढूंढने की कोशिश कर रहा हूं और y (n) बनाम n के लिए प्लॉट करता हूं -10 ≤ n ≤ 10

अब तक मैं निम्नलिखित कोड है:

library(signal) 

n <- c(-10:10)       # Time index 
x <- c(rep(0, 10), rep(1, 4), rep(0, 7)) # Input Signal 
h1 <- c(rep(0, 11), 0.5, rep(0, 9))  # Filter 1 
h2 <- 0.8^n        # Filter 2 
h2[0:11] <- 0       # 

system <- data.frame(n, x, h1, h2) 


y <- conv(x + conv(x, h1), h2)   # Output Signal 

system <- transform(system, y=y[1:21]) 

plot(system$n, system$y) 

मैं इस साजिश की जाँच की और यह बहुत गलत है। मुझे लगता है कि जब मैं दृढ़ता करता हूं और रूपांतरण() फ़ंक्शन का आउटपुट मूल समय सूचकांक के साथ लाइन नहीं लग रहा है, तो वैक्टरों का कुछ रीसाइक्लिंग होता है। मैं बस यह नहीं समझ सकता कि मेरे तर्क को कैसे ठीक किया जाए। मुझे एहसास है कि कन्फ (एन, एम) फ़ंक्शन लम्बाई (एम + एन) -1 का वेक्टर देता है, क्या इस वेक्टर को टाइम इंडेक्स वेक्टर से आसानी से मिलान करने का एक अच्छा तरीका है?

इसके लिए डिजिटल सिग्नल प्रोसेसिंग के साथ-साथ आर में कोडिंग के कुछ ज्ञान की आवश्यकता होगी, और अगर किसी को इस उद्देश्य के लिए आर का उपयोग करने में अनुभव होता तो यह बहुत अच्छा होगा और कुछ पॉइंटर्स दे सकता है। अग्रिम में धन्यवाद।

उत्तर

4

मैंने इसे समझ लिया .. समय सूचकांक वेक्टर के केंद्र के साथ रूपांतरण() फ़ंक्शन लाइनों के आउटपुट का केंद्र। जैसे:

library(signal) 

n <- c(-10:10)       # Time index 
x <- c(rep(0, 10), rep(1, 4), rep(0, 7)) # Input Signal, square pulse 
h1 <- c(rep(0, 11), 0.5, rep(0, 9))  # Filter 1 
h2 <- 0.8^n        # Filter 2 
h2[1:10] <- 0       # 

system <- data.frame(n, x, h1, h2) 

y <- conv(x + conv(x, h1)[11:31], h2) # Output Signal 

system <- transform(system, y=y[11:31]) 

plot(system$n, system$y) 

मैं यह पूरा करने, के रूप में मैं इस नियमित रूप से कर रही होगी एक सामान्य रूप पर काम करेंगे और इस मैन्युअल रूप से हर बार ऐसा करने के लिए नहीं करना चाहते। अगर कोई मुझे इसके लिए धड़कता है, तो कृपया साझा करें। :)

अद्यतन

रूपा() फ़ंक्शन का एक सामान्य रूप निर्मित स्वचालित रूप से इनपुट और आउटपुट वैक्टर के सूचकांकों को पंक्तिबद्ध करने के। यह पूर्ण संकल्प न मिलने की लागत पर आता है, इसलिए आपको पहले ब्याज के पूर्ण क्षेत्र को चित्रित करने के रूप में अपना इनपुट सेट करना होगा।

library(signal) # Should this be inside the func. with attach(), detach()? 

conv2 <- function(x, y){ 
    conv(x, y)[ceiling(length(x)/2):(length(x)+floor(length(x)/2))] 
} 

# so 
y <- conv2(x + conv2(x, h1), h2) 

अद्यतन 2

मैं FFT के लिए तुलना करने के लिए एक समारोह चाहते थे। मैं इस संस्करण से बिल्कुल खुश नहीं हूं, मैं sapply() का उपयोग करना चाहता था, लेकिन यह काम करता है। अभी के लिए, यह होगा .. मैं सुधार पर काम करेंगे।

conv3 <- function(x, h){ 
m <- length(x) 
n <- length(h) 
X <- c(x, rep(floor(n/2), 0, floor(n/2))) 
H <- c(h, rep(floor(m/2), 0, floor(m/2))) 
    Y <- vector() 

for(i in 1:n+m-1){ 
    Y[i] <- 0 
    for(j in 1:m){ 
     Y[i] <- ifelse(i-j+1>0, Y[i] + X[j]*H[i-j+1], 0) 
    } 
} 
Y[is.na(Y)] <- 0 
Y[ceiling(m/2):(m+floor(m/2))] 
} 

अगला, मुझे लगता है कि मुझे इसे बहुआयामी बनाने पर काम करने की आवश्यकता है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^